Fix SourceElement for classes loaded in decompiler

This commit is contained in:
Alexander Udalov
2016-04-06 17:49:44 +03:00
parent 88106bb13b
commit 8ee278d02f
5 changed files with 8 additions and 4 deletions
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.builtins
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.serialization.ClassData
import org.jetbrains.kotlin.serialization.ClassDataWithSource
@@ -36,6 +37,6 @@ class BuiltInsClassDataFinder(
override fun findClassData(classId: ClassId): ClassDataWithSource? {
val classProto = classIdToProto[classId] ?: return null
return ClassDataWithSource(ClassData(nameResolver, classProto))
return ClassDataWithSource(ClassData(nameResolver, classProto), SourceElement.NO_SOURCE)
}
}
@@ -26,7 +26,7 @@ data class ClassData(
data class ClassDataWithSource(
val classData: ClassData,
val sourceElement: SourceElement = SourceElement.NO_SOURCE
val sourceElement: SourceElement
)
data class PackageData(
@@ -53,4 +53,6 @@ sealed class ProtoContainer(
}
abstract fun debugFqName(): FqName
override fun toString() = "${javaClass.simpleName}: ${debugFqName()}"
}
@@ -131,7 +131,7 @@ class DirectoryBasedDataFinder(
return null
}
return ClassDataWithSource(JvmProtoBufUtil.readClassDataFrom(data, strings))
return ClassDataWithSource(JvmProtoBufUtil.readClassDataFrom(data, strings), KotlinJvmBinarySourceElement(binaryClass))
}
}
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.serialization.js
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.serialization.ClassData
import org.jetbrains.kotlin.serialization.ClassDataWithSource
@@ -31,6 +32,6 @@ class KotlinJavascriptClassDataFinder(
override fun findClassData(classId: ClassId): ClassDataWithSource? {
val stream = loadResource(KotlinJavascriptSerializedResourcePaths.getClassMetadataPath(classId)) ?: return null
val classProto = ProtoBuf.Class.parseFrom(stream, JsSerializerProtocol.extensionRegistry)
return ClassDataWithSource(ClassData(nameResolver, classProto))
return ClassDataWithSource(ClassData(nameResolver, classProto), SourceElement.NO_SOURCE)
}
}