From dbba6c614b37dcfd6a585fbcf439e51f6b18d976 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 3 Oct 2013 19:56:43 +0400 Subject: [PATCH] Rename JvmClassName.getFqName() and add a warning All usages of this method as of right now seem wrong, as they don't work in the case of classes which contain dollars in their names -- dollars get replaced to dots --- .../jet/asJava/KotlinLightClassForExplicitDeclaration.java | 3 ++- .../org/jetbrains/jet/lang/resolve/java/JvmClassName.java | 5 ++++- .../resolve/kotlin/AnnotationDescriptorDeserializer.java | 3 ++- .../jet/plugin/libraries/DecompiledDataFactory.java | 2 +- .../jet/plugin/libraries/JetSourceNavigationHelper.java | 2 +- .../jet/plugin/vfilefinder/KotlinClassFileIndex.java | 2 +- 6 files changed, 11 insertions(+), 6 deletions(-) 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 9fac5ce2157..5d5660034d0 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 @@ -69,7 +69,8 @@ public class KotlinLightClassForExplicitDeclaration extends AbstractLightClass i String jvmInternalName = PsiCodegenPredictor.getPredefinedJvmInternalName(classOrObject); if (jvmInternalName == null) return null; - return new KotlinLightClassForExplicitDeclaration(manager, JvmClassName.byInternalName(jvmInternalName).getFqName(), classOrObject); + FqName fqName = JvmClassName.byInternalName(jvmInternalName).getFqNameForClassNameWithoutDollars(); + return new KotlinLightClassForExplicitDeclaration(manager, fqName, classOrObject); } private final FqName classFqName; // FqName of (possibly inner) class diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java index ff244492b0f..ffd932acfb9 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java @@ -77,8 +77,11 @@ public class JvmClassName { this.internalName = internalName; } + /** + * WARNING: internal name cannot be converted to FQ name for a class which contains dollars in the name + */ @NotNull - public FqName getFqName() { + public FqName getFqNameForClassNameWithoutDollars() { if (fqName == null) { fqName = new FqName(internalNameToFqName(internalName)); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java index 8c3c96c4c4c..e31fae6488f 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java @@ -210,7 +210,8 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer @NotNull private ClassDescriptor resolveClass(@NotNull JvmClassName className) { - ClassDescriptor annotationClass = javaClassResolver.resolveClass(className.getFqName(), IGNORE_KOTLIN_SOURCES); + ClassDescriptor annotationClass = javaClassResolver.resolveClass(className.getFqNameForClassNameWithoutDollars(), + IGNORE_KOTLIN_SOURCES); return annotationClass != null ? annotationClass : ErrorUtils.getErrorClass(); } diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java index 9d2f2a7134f..b34f54da51c 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java @@ -66,7 +66,7 @@ public final class DecompiledDataFactory { this.javaDescriptorResolver = injector.getJavaDescriptorResolver(); VirtualFileKotlinClass kotlinClass = new VirtualFileKotlinClass(classFile); - this.classFqName = kotlinClass.getClassName().getFqName(); + this.classFqName = kotlinClass.getClassName().getFqNameForClassNameWithoutDollars(); KotlinClassFileHeader header = KotlinClassFileHeader.readKotlinHeaderFromClassFile(kotlinClass); assert header instanceof SerializedDataHeader : "Decompiled data factory shouldn't be called on an unsupported file: " + classFile; diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java b/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java index 2775e1b591b..a10095ee7c5 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/JetSourceNavigationHelper.java @@ -370,7 +370,7 @@ public class JetSourceNavigationHelper { if (internalName == null) { return null; } - String fqName = JvmClassName.byInternalName(internalName).getFqName().asString(); + String fqName = JvmClassName.byInternalName(internalName).getFqNameForClassNameWithoutDollars().asString(); JetFile file = (JetFile) classOrObject.getContainingFile(); diff --git a/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java b/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java index 849b9d48195..920dd163a62 100644 --- a/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java +++ b/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java @@ -78,7 +78,7 @@ public final class KotlinClassFileIndex extends ScalarIndexExtension { VirtualFileKotlinClass kotlinClass = new VirtualFileKotlinClass(inputData.getFile()); KotlinClassFileHeader header = KotlinClassFileHeader.readKotlinHeaderFromClassFile(kotlinClass); if (header != null && !(header instanceof IncompatibleAnnotationHeader)) { - return Collections.singletonMap(kotlinClass.getClassName().getFqName(), null); + return Collections.singletonMap(kotlinClass.getClassName().getFqNameForClassNameWithoutDollars(), null); } } catch (Throwable e) {