From e8d4aae48b5c9b958125382819f0ce30d149a533 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 3 Oct 2013 19:47:25 +0400 Subject: [PATCH] Minimize usages of JvmClassName.getFqName() --- .../jet/codegen/binding/PsiCodegenPredictor.java | 16 ++++++++-------- .../messages/AnalyzerWithCompilerReport.java | 3 +-- compiler/testData/cli/wrongAbiVersion.out | 2 +- .../MissingEnumReferencedInAnnotation.txt | 2 +- .../kotlin/AnnotationDescriptorDeserializer.java | 16 ++++++++-------- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java index b91bcc78fd4..13a995b6fa0 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java @@ -86,6 +86,13 @@ public final class PsiCodegenPredictor { if (packageName == null) { return null; } + + if (declaration instanceof JetNamedFunction) { + JvmClassName packageClass = JvmClassName.byFqNameWithoutInnerClasses(getPackageClassFqName(new FqName(packageName))); + Name name = ((JetNamedFunction) declaration).getNameAsName(); + return name == null ? null : packageClass.getInternalName() + "$" + name.asString(); + } + parentInternalName = JvmClassName.byFqNameWithoutInnerClasses(packageName).getInternalName(); } @@ -101,19 +108,12 @@ public final class PsiCodegenPredictor { return null; } - JetNamedDeclaration namedDeclaration = (JetNamedDeclaration) declaration; - Name name = namedDeclaration.getNameAsName(); + Name name = ((JetNamedDeclaration) declaration).getNameAsName(); if (name == null) { return null; } if (declaration instanceof JetNamedFunction) { - if (parentDeclaration == null) { - FqName fqName = JvmClassName.byInternalName(parentInternalName).getFqName(); - JvmClassName packageClass = JvmClassName.byFqNameWithoutInnerClasses(getPackageClassFqName(fqName)); - return packageClass.getInternalName() + "$" + name.asString(); - } - if (!(parentDeclaration instanceof JetClass || parentDeclaration instanceof JetObjectDeclaration)) { // Can't generate predefined name for internal functions return null; diff --git a/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java b/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java index a2089bbe908..e2b39276a52 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java @@ -143,10 +143,9 @@ public final class AnalyzerWithCompilerReport { Collection errorClasses = bindingContext.getKeys(TraceBasedErrorReporter.ABI_VERSION_ERRORS); for (VirtualFileKotlinClass kotlinClass : errorClasses) { Integer abiVersion = bindingContext.get(TraceBasedErrorReporter.ABI_VERSION_ERRORS, kotlinClass); - String fqName = kotlinClass.getClassName().getFqName().asString(); String path = toSystemDependentName(kotlinClass.getFile().getPath()); messageCollectorWrapper.report(CompilerMessageSeverity.ERROR, - "Class '" + fqName + + "Class '" + kotlinClass.getClassName() + "' was compiled with an incompatible version of Kotlin. " + "Its ABI version is " + abiVersion + ", expected ABI version is " + JvmAbi.VERSION, CompilerMessageLocation.create(path, 0, 0)); diff --git a/compiler/testData/cli/wrongAbiVersion.out b/compiler/testData/cli/wrongAbiVersion.out index 18b68d92a0f..0c624de9d2f 100644 --- a/compiler/testData/cli/wrongAbiVersion.out +++ b/compiler/testData/cli/wrongAbiVersion.out @@ -1,5 +1,5 @@ WARNING: $TESTDATA_DIR$/wrongAbiVersion.kt: (3, 9) Parameter 'x' is never used ERROR: $TESTDATA_DIR$/wrongAbiVersion.kt: (4, 3) Unresolved reference: bar -ERROR: $TESTDATA_DIR$/wrongAbiVersionLib/wrong/WrongPackage.class: (0, 0) Class 'wrong.WrongPackage' was compiled with an incompatible version of Kotlin. Its ABI version is -1, expected ABI version is 9 +ERROR: $TESTDATA_DIR$/wrongAbiVersionLib/wrong/WrongPackage.class: (0, 0) Class 'wrong/WrongPackage' was compiled with an incompatible version of Kotlin. Its ABI version is -1, expected ABI version is 9 ERROR: $TESTDATA_DIR$/wrongAbiVersionLib/ClassWithWrongAbiVersion.class: (0, 0) Class 'ClassWithWrongAbiVersion' was compiled with an incompatible version of Kotlin. Its ABI version is -1, expected ABI version is 9 COMPILATION_ERROR diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/missingEnumReferencedInAnnotation/MissingEnumReferencedInAnnotation.txt b/compiler/testData/compileKotlinAgainstCustomBinaries/missingEnumReferencedInAnnotation/MissingEnumReferencedInAnnotation.txt index bac7cc02590..3d477a5308a 100644 --- a/compiler/testData/compileKotlinAgainstCustomBinaries/missingEnumReferencedInAnnotation/MissingEnumReferencedInAnnotation.txt +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/missingEnumReferencedInAnnotation/MissingEnumReferencedInAnnotation.txt @@ -5,7 +5,7 @@ internal final annotation class Anno : jet.Annotation { internal final val e: [ERROR : test.E] } -test.Anno(e = Unresolved enum entry: test.E.ENTRY: [ERROR : Unresolved enum entry: test.E.ENTRY]) internal open class Class { +test.Anno(e = Unresolved enum entry: test/E.ENTRY: [ERROR : Unresolved enum entry: test/E.ENTRY]) internal open class Class { public constructor Class() } 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 14a7af24cdd..8c3c96c4c4c 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 @@ -36,12 +36,12 @@ import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils; import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationArgumentResolver; import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver; -import org.jetbrains.jet.storage.LockBasedStorageManager; -import org.jetbrains.jet.storage.MemoizedFunctionToNotNull; -import org.jetbrains.jet.storage.StorageManager; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.ErrorUtils; +import org.jetbrains.jet.storage.LockBasedStorageManager; +import org.jetbrains.jet.storage.MemoizedFunctionToNotNull; +import org.jetbrains.jet.storage.StorageManager; import javax.inject.Inject; import java.io.IOException; @@ -151,7 +151,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer ) { if (ignoreAnnotation(className)) return null; - final ClassDescriptor annotationClass = resolveAnnotationClass(className); + final ClassDescriptor annotationClass = resolveClass(className); final AnnotationDescriptor annotation = new AnnotationDescriptor(); annotation.setAnnotationType(annotationClass.getDefaultType()); @@ -178,8 +178,8 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer @NotNull private CompileTimeConstant enumEntryValue(@NotNull JvmClassName enumClassName, @NotNull Name name) { - ClassDescriptor enumClass = javaClassResolver.resolveClass(enumClassName.getFqName(), IGNORE_KOTLIN_SOURCES); - if (enumClass != null && enumClass.getKind() == ClassKind.ENUM_CLASS) { + ClassDescriptor enumClass = resolveClass(enumClassName); + if (enumClass.getKind() == ClassKind.ENUM_CLASS) { ClassDescriptor classObject = enumClass.getClassObjectDescriptor(); if (classObject != null) { Collection properties = classObject.getDefaultType().getMemberScope().getProperties(name); @@ -191,7 +191,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer } } } - return ErrorValue.create("Unresolved enum entry: " + enumClassName.getFqName() + "." + name); + return ErrorValue.create("Unresolved enum entry: " + enumClassName.getInternalName() + "." + name); } @Override @@ -209,7 +209,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer } @NotNull - private ClassDescriptor resolveAnnotationClass(@NotNull JvmClassName className) { + private ClassDescriptor resolveClass(@NotNull JvmClassName className) { ClassDescriptor annotationClass = javaClassResolver.resolveClass(className.getFqName(), IGNORE_KOTLIN_SOURCES); return annotationClass != null ? annotationClass : ErrorUtils.getErrorClass(); }