Store FqName in LightClassDataForKotlinClass rather than a String
It was also mistakenly named "jvmInternalName" while in fact it was holding the result of Type#getClassName() which is not an internal name
This commit is contained in:
@@ -384,9 +384,4 @@ public class CodegenBinding {
|
||||
|
||||
return allInnerClasses;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String getJvmInternalName(@NotNull BindingContext bindingContext, @NotNull ClassDescriptor classDescriptor) {
|
||||
return getAsmType(bindingContext, classDescriptor).getClassName();
|
||||
}
|
||||
}
|
||||
|
||||
+14
-5
@@ -54,7 +54,9 @@ import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
|
||||
import org.jetbrains.jet.lang.resolve.Diagnostics;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.org.objectweb.asm.Type;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
@@ -157,12 +159,12 @@ public class KotlinJavaFileStubProvider<T extends WithFileStubAndExtraDiagnostic
|
||||
ClassDescriptor classDescriptor = bindingContext.get(BindingContext.CLASS, classOrObject);
|
||||
if (classDescriptor == null) {
|
||||
return new OutermostKotlinClassLightClassData(
|
||||
javaFileStub, extraDiagnostics,
|
||||
"", classOrObject, null, Collections.<JetClassOrObject, InnerKotlinClassLightClassData>emptyMap()
|
||||
javaFileStub, extraDiagnostics, FqName.ROOT, classOrObject,
|
||||
null, Collections.<JetClassOrObject, InnerKotlinClassLightClassData>emptyMap()
|
||||
);
|
||||
}
|
||||
|
||||
String jvmInternalName = CodegenBinding.getJvmInternalName(bindingContext, classDescriptor);
|
||||
FqName fqName = predictClassFqName(bindingContext, classDescriptor);
|
||||
Collection<ClassDescriptor> allInnerClasses = CodegenBinding.getAllInnerClasses(bindingContext, classDescriptor);
|
||||
|
||||
Map<JetClassOrObject, InnerKotlinClassLightClassData> innerClassesMap = ContainerUtil.newHashMap();
|
||||
@@ -171,7 +173,7 @@ public class KotlinJavaFileStubProvider<T extends WithFileStubAndExtraDiagnostic
|
||||
if (innerClass == null) continue;
|
||||
|
||||
InnerKotlinClassLightClassData innerLightClassData = new InnerKotlinClassLightClassData(
|
||||
CodegenBinding.getJvmInternalName(bindingContext, innerClassDescriptor),
|
||||
predictClassFqName(bindingContext, innerClassDescriptor),
|
||||
innerClass,
|
||||
innerClassDescriptor
|
||||
);
|
||||
@@ -182,13 +184,20 @@ public class KotlinJavaFileStubProvider<T extends WithFileStubAndExtraDiagnostic
|
||||
return new OutermostKotlinClassLightClassData(
|
||||
javaFileStub,
|
||||
extraDiagnostics,
|
||||
jvmInternalName,
|
||||
fqName,
|
||||
classOrObject,
|
||||
classDescriptor,
|
||||
innerClassesMap
|
||||
);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private FqName predictClassFqName(BindingContext bindingContext, ClassDescriptor classDescriptor) {
|
||||
Type asmType = CodegenBinding.getAsmType(bindingContext, classDescriptor);
|
||||
//noinspection ConstantConditions
|
||||
return JvmClassName.byInternalName(asmType.getClassName().replace('.', '/')).getFqNameForClassNameWithoutDollars();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<JetFile> getFiles() {
|
||||
|
||||
+7
-7
@@ -70,10 +70,8 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
||||
return null;
|
||||
}
|
||||
|
||||
String jvmInternalName = getJvmInternalName(classOrObject);
|
||||
if (jvmInternalName == null) return null;
|
||||
|
||||
FqName fqName = JvmClassName.byInternalName(jvmInternalName).getFqNameForClassNameWithoutDollars();
|
||||
FqName fqName = predictFqName(classOrObject);
|
||||
if (fqName == null) return null;
|
||||
|
||||
if (classOrObject instanceof JetObjectDeclaration && ((JetObjectDeclaration) classOrObject).isObjectLiteral()) {
|
||||
return new KotlinLightClassForAnonymousDeclaration(manager, fqName, classOrObject);
|
||||
@@ -81,12 +79,14 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
||||
return new KotlinLightClassForExplicitDeclaration(manager, fqName, classOrObject);
|
||||
}
|
||||
|
||||
private static String getJvmInternalName(JetClassOrObject classOrObject) {
|
||||
@Nullable
|
||||
private static FqName predictFqName(@NotNull JetClassOrObject classOrObject) {
|
||||
if (classOrObject.isLocal()) {
|
||||
LightClassDataForKotlinClass data = getLightClassDataExactly(classOrObject);
|
||||
return data != null ? data.getJvmInternalName() : "";
|
||||
return data == null ? null : data.getJvmQualifiedName();
|
||||
}
|
||||
return PsiCodegenPredictor.getPredefinedJvmInternalName(classOrObject);
|
||||
String internalName = PsiCodegenPredictor.getPredefinedJvmInternalName(classOrObject);
|
||||
return internalName == null ? null : JvmClassName.byInternalName(internalName).getFqNameForClassNameWithoutDollars();
|
||||
}
|
||||
|
||||
private final FqName classFqName; // FqName of (possibly inner) class
|
||||
|
||||
@@ -19,8 +19,8 @@ package org.jetbrains.jet.asJava
|
||||
import com.intellij.psi.impl.java.stubs.PsiJavaFileStub
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
|
||||
import org.jetbrains.jet.lang.psi.JetClassOrObject
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext
|
||||
import org.jetbrains.jet.lang.resolve.Diagnostics
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
||||
|
||||
trait LightClassData
|
||||
|
||||
@@ -32,7 +32,7 @@ trait WithFileStubAndExtraDiagnostics {
|
||||
trait LightClassDataForKotlinClass: LightClassData {
|
||||
val classOrObject: JetClassOrObject
|
||||
val descriptor: ClassDescriptor?
|
||||
val jvmInternalName: String
|
||||
val jvmQualifiedName: FqName
|
||||
}
|
||||
|
||||
data class KotlinPackageLightClassData(
|
||||
@@ -41,7 +41,7 @@ data class KotlinPackageLightClassData(
|
||||
): LightClassData, WithFileStubAndExtraDiagnostics
|
||||
|
||||
data class InnerKotlinClassLightClassData(
|
||||
override val jvmInternalName: String,
|
||||
override val jvmQualifiedName: FqName,
|
||||
override val classOrObject: JetClassOrObject,
|
||||
override val descriptor: ClassDescriptor?
|
||||
): LightClassDataForKotlinClass
|
||||
@@ -49,7 +49,7 @@ data class InnerKotlinClassLightClassData(
|
||||
data class OutermostKotlinClassLightClassData(
|
||||
override val javaFileStub: PsiJavaFileStub,
|
||||
override val extraDiagnostics: Diagnostics,
|
||||
override val jvmInternalName: String,
|
||||
override val jvmQualifiedName: FqName,
|
||||
override val classOrObject: JetClassOrObject,
|
||||
override val descriptor: ClassDescriptor?,
|
||||
val allInnerClasses: Map<JetClassOrObject, InnerKotlinClassLightClassData>
|
||||
|
||||
Reference in New Issue
Block a user