Minor. Unified code.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
+14
-6
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user