Recompile inline function usages in JS when offset is changed
Otherwise source maps would differ after rebuild
This commit is contained in:
+7
-6
@@ -28,7 +28,7 @@ interface IncrementalResultsConsumer {
|
|||||||
* but [Any] is used to avoid classloader conflicts in tests where the compiler is isolated
|
* but [Any] is used to avoid classloader conflicts in tests where the compiler is isolated
|
||||||
* (such as [JsProtoComparisonTestGenerated])
|
* (such as [JsProtoComparisonTestGenerated])
|
||||||
*/
|
*/
|
||||||
fun processInlineFunction(sourceFile: File, fqName: String, inlineFunction: Any)
|
fun processInlineFunction(sourceFile: File, fqName: String, inlineFunction: Any, line: Int, column: Int)
|
||||||
}
|
}
|
||||||
|
|
||||||
class IncrementalResultsConsumerImpl : IncrementalResultsConsumer {
|
class IncrementalResultsConsumerImpl : IncrementalResultsConsumer {
|
||||||
@@ -39,7 +39,8 @@ class IncrementalResultsConsumerImpl : IncrementalResultsConsumer {
|
|||||||
val packageParts: Map<File, TranslationResultValue>
|
val packageParts: Map<File, TranslationResultValue>
|
||||||
get() = _packageParts
|
get() = _packageParts
|
||||||
|
|
||||||
private val _inlineFuncs = hashMapOf<File, MutableMap<String, Any>>()
|
private class FunctionWithSourceInfo(val expression: Any, val line: Int, val column: Int)
|
||||||
|
private val _inlineFuncs = hashMapOf<File, MutableMap<String, FunctionWithSourceInfo>>()
|
||||||
val inlineFunctions: Map<File, Map<String, Long>>
|
val inlineFunctions: Map<File, Map<String, Long>>
|
||||||
get() {
|
get() {
|
||||||
val result = HashMap<File, Map<String, Long>>(_inlineFuncs.size)
|
val result = HashMap<File, Map<String, Long>>(_inlineFuncs.size)
|
||||||
@@ -47,8 +48,8 @@ class IncrementalResultsConsumerImpl : IncrementalResultsConsumer {
|
|||||||
for ((file, inlineFnsFromFile) in _inlineFuncs) {
|
for ((file, inlineFnsFromFile) in _inlineFuncs) {
|
||||||
val functionsHashes = HashMap<String, Long>(inlineFnsFromFile.size)
|
val functionsHashes = HashMap<String, Long>(inlineFnsFromFile.size)
|
||||||
|
|
||||||
for ((fqName, expression) in inlineFnsFromFile) {
|
for ((fqName, fn) in inlineFnsFromFile) {
|
||||||
functionsHashes[fqName] = expression.toString().toByteArray().md5()
|
functionsHashes[fqName] = "(${fn.line}:${fn.column})${fn.expression}".toByteArray().md5()
|
||||||
}
|
}
|
||||||
|
|
||||||
result[file] = functionsHashes
|
result[file] = functionsHashes
|
||||||
@@ -65,9 +66,9 @@ class IncrementalResultsConsumerImpl : IncrementalResultsConsumer {
|
|||||||
_packageParts.put(sourceFile, TranslationResultValue(packagePartMetadata, binaryAst))
|
_packageParts.put(sourceFile, TranslationResultValue(packagePartMetadata, binaryAst))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processInlineFunction(sourceFile: File, fqName: String, inlineFunction: Any) {
|
override fun processInlineFunction(sourceFile: File, fqName: String, inlineFunction: Any, line: Int, column: Int) {
|
||||||
val mapForSource = _inlineFuncs.getOrPut(sourceFile) { hashMapOf() }
|
val mapForSource = _inlineFuncs.getOrPut(sourceFile) { hashMapOf() }
|
||||||
mapForSource[fqName] = inlineFunction
|
mapForSource[fqName] = FunctionWithSourceInfo(inlineFunction, line, column)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ByteArray.md5(): Long {
|
private fun ByteArray.md5(): Long {
|
||||||
|
|||||||
+10
-1
@@ -120,7 +120,16 @@ fun TranslationContext.wrapWithInlineMetadata(
|
|||||||
else -> descriptor.fqNameSafe.asString()
|
else -> descriptor.fqNameSafe.asString()
|
||||||
}
|
}
|
||||||
|
|
||||||
processInlineFunction(file, fqName, functionWithMetadata)
|
val offset = sourceInfo?.node?.startOffset
|
||||||
|
val document = psiFile.viewProvider.document
|
||||||
|
var sourceLine = -1
|
||||||
|
var sourceColumn = -1
|
||||||
|
if (offset != null && document != null) {
|
||||||
|
sourceLine = document.getLineNumber(offset)
|
||||||
|
sourceColumn = offset - document.getLineStartOffset(sourceLine)
|
||||||
|
}
|
||||||
|
|
||||||
|
processInlineFunction(file, fqName, functionWithMetadata, sourceLine, sourceColumn)
|
||||||
}
|
}
|
||||||
|
|
||||||
functionWithMetadata
|
functionWithMetadata
|
||||||
|
|||||||
Reference in New Issue
Block a user