diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java index cfc510b16c4..0d5d18e91f7 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java @@ -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(); - } } diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java index 799b46c63ee..7b0feafea82 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java @@ -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 KotlinJavaFileStubProvideremptyMap() + javaFileStub, extraDiagnostics, FqName.ROOT, classOrObject, + null, Collections.emptyMap() ); } - String jvmInternalName = CodegenBinding.getJvmInternalName(bindingContext, classDescriptor); + FqName fqName = predictClassFqName(bindingContext, classDescriptor); Collection allInnerClasses = CodegenBinding.getAllInnerClasses(bindingContext, classDescriptor); Map innerClassesMap = ContainerUtil.newHashMap(); @@ -171,7 +173,7 @@ public class KotlinJavaFileStubProvider getFiles() { diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java index 02d7896cb07..7bbd1002e26 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java @@ -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 diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassStubWithData.kt b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassStubWithData.kt index e6f22850bbf..5a451d92126 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassStubWithData.kt +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassStubWithData.kt @@ -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