- call multifile class members (compiling against binaries)
- inline multifile class members
This commit is contained in:
+17
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaPackage
|
||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
|
||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils
|
||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
@@ -58,6 +59,22 @@ public class LazyJavaPackageScope(
|
||||
}.filterNotNull()
|
||||
}
|
||||
|
||||
private val partToFacade = c.storageManager.createLazyValue {
|
||||
val result = hashMapOf<String, String>()
|
||||
for (kotlinClass in kotlinBinaryClasses()) {
|
||||
val header = kotlinClass.classHeader
|
||||
if (header.kind == KotlinClassHeader.Kind.MULTIFILE_CLASS_PART) {
|
||||
val partName = kotlinClass.classId.shortClassName.asString()
|
||||
val facadeName = header.multifileClassName ?: ""
|
||||
result[partName] = facadeName
|
||||
}
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
public fun getFacadeSimpleNameForPartSimpleName(partName: String): String? =
|
||||
partToFacade()[partName]
|
||||
|
||||
private val deserializedPackageScope = c.storageManager.createLazyValue {
|
||||
if (kotlinBinaryClasses().isEmpty())
|
||||
JetScope.Empty
|
||||
|
||||
+3
-3
@@ -69,7 +69,7 @@ public final class DeserializedDescriptorResolver {
|
||||
|
||||
@Nullable
|
||||
public JetScope createKotlinPackagePartScope(@NotNull PackageFragmentDescriptor descriptor, @NotNull KotlinJvmBinaryClass kotlinClass) {
|
||||
String[] data = readData(kotlinClass, KotlinClassHeader.Kind.FILE_FACADE);
|
||||
String[] data = readData(kotlinClass, null);
|
||||
if (data != null) {
|
||||
//all classes are included in java scope
|
||||
PackageData packageData = JvmProtoBufUtil.readPackageDataFrom(data);
|
||||
@@ -102,12 +102,12 @@ public final class DeserializedDescriptorResolver {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String[] readData(@NotNull KotlinJvmBinaryClass kotlinClass, @NotNull KotlinClassHeader.Kind expectedKind) {
|
||||
public String[] readData(@NotNull KotlinJvmBinaryClass kotlinClass, @Nullable KotlinClassHeader.Kind expectedKind) {
|
||||
KotlinClassHeader header = kotlinClass.getClassHeader();
|
||||
if (!header.getIsCompatibleAbiVersion()) {
|
||||
errorReporter.reportIncompatibleAbiVersion(kotlinClass.getClassId(), kotlinClass.getLocation(), header.getVersion());
|
||||
}
|
||||
else if (header.getKind() == expectedKind) {
|
||||
else if (expectedKind == null || header.getKind() == expectedKind) {
|
||||
return header.getAnnotationData();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user