From 6725b4f1b0ccddf43aa7df65846adbee1a4719ee Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 21 Mar 2014 18:41:35 +0400 Subject: [PATCH] Minor. Unified code. --- .../jetbrains/jet/codegen/PackageCodegen.java | 29 +++++-------------- .../kotlin/BaseDescriptorDeserializer.java | 20 +++++++++---- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java index 428147ecdd6..278e84abde2 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java @@ -34,9 +34,10 @@ import org.jetbrains.asm4.Type; import org.jetbrains.jet.codegen.context.CodegenContext; import org.jetbrains.jet.codegen.context.FieldOwnerContext; import org.jetbrains.jet.codegen.context.MethodContext; -import org.jetbrains.jet.codegen.signature.JvmMethodSignature; import org.jetbrains.jet.codegen.context.PackageContext; +import org.jetbrains.jet.codegen.signature.JvmMethodSignature; import org.jetbrains.jet.codegen.state.GenerationState; +import org.jetbrains.jet.codegen.state.GenerationStateAware; import org.jetbrains.jet.config.IncrementalCompilation; import org.jetbrains.jet.descriptors.serialization.*; import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedCallableMemberDescriptor; @@ -45,11 +46,6 @@ import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedSimpl import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; -import org.jetbrains.jet.codegen.state.GenerationStateAware; -import org.jetbrains.jet.descriptors.serialization.BitEncoding; -import org.jetbrains.jet.descriptors.serialization.DescriptorSerializer; -import org.jetbrains.jet.descriptors.serialization.PackageData; -import org.jetbrains.jet.descriptors.serialization.ProtoBuf; import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; @@ -58,6 +54,7 @@ import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames; import org.jetbrains.jet.lang.resolve.java.JvmClassName; import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaPackageFragmentScope; +import org.jetbrains.jet.lang.resolve.kotlin.BaseDescriptorDeserializer; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; @@ -294,7 +291,7 @@ public class PackageCodegen extends GenerationStateAware { new PackagePartCodegen(builder, file, packagePartType, packagePartContext, state).generate(); FieldOwnerContext packageFacade = CodegenContext.STATIC.intoPackageFacade(packagePartType, packageFragment); - + final MemberCodegen memberCodegen = getMemberCodegen(packageFacade); for (final JetDeclaration declaration : file.getDeclarations()) { @@ -381,11 +378,7 @@ public class PackageCodegen extends GenerationStateAware { String srcName = facadeFqName.shortName().asString() + "-" + replaceSpecialSymbols(fileName) + "-" + Integer.toHexString( CodegenUtil.getPathHashCode(file)); - return getPackagePartType(facadeFqName, Name.identifier(srcName)); - } - - public static Type getPackagePartType(FqName facadeFqName, Name packagePartName) { - return asmTypeByFqNameWithoutInnerClasses(facadeFqName.parent().child(packagePartName)); + return asmTypeByFqNameWithoutInnerClasses(facadeFqName.parent().child(Name.identifier(srcName))); } @NotNull @@ -400,15 +393,9 @@ public class PackageCodegen extends GenerationStateAware { } @NotNull - public static String getPackagePartInternalName(@NotNull DeserializedCallableMemberDescriptor deserializedCallable) { - DeclarationDescriptor parent = deserializedCallable.getContainingDeclaration(); - assert parent instanceof PackageFragmentDescriptor : "parent should be package, but was: " + parent; - - assert deserializedCallable.getProto().hasExtension(JavaProtoBuf.implClassName) - : "implClassName extension is absent for " + deserializedCallable; - Name shortName = deserializedCallable.getNameResolver() - .getName(deserializedCallable.getProto().getExtension(JavaProtoBuf.implClassName)); - FqName packagePartFqName = ((PackageFragmentDescriptor) parent).getFqName().child(shortName); + public static String getPackagePartInternalName(@NotNull DeserializedCallableMemberDescriptor callable) { + FqName packageFqName = ((PackageFragmentDescriptor) callable.getContainingDeclaration()).getFqName(); + FqName packagePartFqName = packageFqName.child(BaseDescriptorDeserializer.getPackagePartClassName(callable)); return JvmClassName.byFqNameWithoutInnerClasses(packagePartFqName).getInternalName(); } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/BaseDescriptorDeserializer.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/BaseDescriptorDeserializer.java index b01268122f6..2bd12420109 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/BaseDescriptorDeserializer.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/BaseDescriptorDeserializer.java @@ -21,13 +21,13 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.descriptors.serialization.JavaProtoBuf; import org.jetbrains.jet.descriptors.serialization.NameResolver; import org.jetbrains.jet.descriptors.serialization.ProtoBuf; +import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedCallableMemberDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassOrPackageFragmentDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter; -import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolver; @@ -103,7 +103,7 @@ public abstract class BaseDescriptorDeserializer { @NotNull AnnotatedCallableKind kind ) { if (container instanceof PackageFragmentDescriptor) { - return loadPackageFragmentClassFqName((PackageFragmentDescriptor) container, proto, nameResolver); + return getPackagePartClassFqNameSafe((PackageFragmentDescriptor) container, proto, nameResolver); } else if (isClassObject(container) && isStaticFieldInOuter(proto)) { // Backing fields of properties of a class object are generated in the outer class @@ -124,19 +124,27 @@ public abstract class BaseDescriptorDeserializer { } @Nullable - private KotlinJvmBinaryClass loadPackageFragmentClassFqName( + private KotlinJvmBinaryClass getPackagePartClassFqNameSafe( @NotNull PackageFragmentDescriptor container, @NotNull ProtoBuf.Callable proto, @NotNull NameResolver nameResolver ) { if (proto.hasExtension(JavaProtoBuf.implClassName)) { - Name name = nameResolver.getName(proto.getExtension(JavaProtoBuf.implClassName)); - FqName fqName = PackageClassUtils.getPackageClassFqName(container.getFqName()).parent().child(name); - return kotlinClassFinder.findKotlinClass(fqName); + return kotlinClassFinder.findKotlinClass(container.getFqName().child(getPackagePartClassName(proto, nameResolver))); } return null; } + @NotNull + public static Name getPackagePartClassName(@NotNull DeserializedCallableMemberDescriptor deserializedCallableMember) { + return getPackagePartClassName(deserializedCallableMember.getProto(), deserializedCallableMember.getNameResolver()); + } + + @NotNull + private static Name getPackagePartClassName(@NotNull ProtoBuf.Callable proto, @NotNull NameResolver nameResolver) { + return nameResolver.getName(proto.getExtension(JavaProtoBuf.implClassName)); + } + private static boolean isStaticFieldInOuter(@NotNull ProtoBuf.Callable proto) { if (!proto.hasExtension(JavaProtoBuf.propertySignature)) return false; JavaProtoBuf.JavaPropertySignature propertySignature = proto.getExtension(JavaProtoBuf.propertySignature);