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
|
||||
* (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 {
|
||||
@@ -39,7 +39,8 @@ class IncrementalResultsConsumerImpl : IncrementalResultsConsumer {
|
||||
val packageParts: Map<File, TranslationResultValue>
|
||||
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>>
|
||||
get() {
|
||||
val result = HashMap<File, Map<String, Long>>(_inlineFuncs.size)
|
||||
@@ -47,8 +48,8 @@ class IncrementalResultsConsumerImpl : IncrementalResultsConsumer {
|
||||
for ((file, inlineFnsFromFile) in _inlineFuncs) {
|
||||
val functionsHashes = HashMap<String, Long>(inlineFnsFromFile.size)
|
||||
|
||||
for ((fqName, expression) in inlineFnsFromFile) {
|
||||
functionsHashes[fqName] = expression.toString().toByteArray().md5()
|
||||
for ((fqName, fn) in inlineFnsFromFile) {
|
||||
functionsHashes[fqName] = "(${fn.line}:${fn.column})${fn.expression}".toByteArray().md5()
|
||||
}
|
||||
|
||||
result[file] = functionsHashes
|
||||
@@ -65,9 +66,9 @@ class IncrementalResultsConsumerImpl : IncrementalResultsConsumer {
|
||||
_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() }
|
||||
mapForSource[fqName] = inlineFunction
|
||||
mapForSource[fqName] = FunctionWithSourceInfo(inlineFunction, line, column)
|
||||
}
|
||||
|
||||
private fun ByteArray.md5(): Long {
|
||||
|
||||
+10
-1
@@ -120,7 +120,16 @@ fun TranslationContext.wrapWithInlineMetadata(
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user