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.CodegenContext;
|
||||||
import org.jetbrains.jet.codegen.context.FieldOwnerContext;
|
import org.jetbrains.jet.codegen.context.FieldOwnerContext;
|
||||||
import org.jetbrains.jet.codegen.context.MethodContext;
|
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.context.PackageContext;
|
||||||
|
import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
|
||||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||||
|
import org.jetbrains.jet.codegen.state.GenerationStateAware;
|
||||||
import org.jetbrains.jet.config.IncrementalCompilation;
|
import org.jetbrains.jet.config.IncrementalCompilation;
|
||||||
import org.jetbrains.jet.descriptors.serialization.*;
|
import org.jetbrains.jet.descriptors.serialization.*;
|
||||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedCallableMemberDescriptor;
|
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.CallableMemberDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
|
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.diagnostics.DiagnosticUtils;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
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.JvmAnnotationNames;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||||
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaPackageFragmentScope;
|
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.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
|
|
||||||
@@ -381,11 +378,7 @@ public class PackageCodegen extends GenerationStateAware {
|
|||||||
String srcName = facadeFqName.shortName().asString() + "-" + replaceSpecialSymbols(fileName) + "-" + Integer.toHexString(
|
String srcName = facadeFqName.shortName().asString() + "-" + replaceSpecialSymbols(fileName) + "-" + Integer.toHexString(
|
||||||
CodegenUtil.getPathHashCode(file));
|
CodegenUtil.getPathHashCode(file));
|
||||||
|
|
||||||
return getPackagePartType(facadeFqName, Name.identifier(srcName));
|
return asmTypeByFqNameWithoutInnerClasses(facadeFqName.parent().child(Name.identifier(srcName)));
|
||||||
}
|
|
||||||
|
|
||||||
public static Type getPackagePartType(FqName facadeFqName, Name packagePartName) {
|
|
||||||
return asmTypeByFqNameWithoutInnerClasses(facadeFqName.parent().child(packagePartName));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -400,15 +393,9 @@ public class PackageCodegen extends GenerationStateAware {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static String getPackagePartInternalName(@NotNull DeserializedCallableMemberDescriptor deserializedCallable) {
|
public static String getPackagePartInternalName(@NotNull DeserializedCallableMemberDescriptor callable) {
|
||||||
DeclarationDescriptor parent = deserializedCallable.getContainingDeclaration();
|
FqName packageFqName = ((PackageFragmentDescriptor) callable.getContainingDeclaration()).getFqName();
|
||||||
assert parent instanceof PackageFragmentDescriptor : "parent should be package, but was: " + parent;
|
FqName packagePartFqName = packageFqName.child(BaseDescriptorDeserializer.getPackagePartClassName(callable));
|
||||||
|
|
||||||
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);
|
|
||||||
return JvmClassName.byFqNameWithoutInnerClasses(packagePartFqName).getInternalName();
|
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.JavaProtoBuf;
|
||||||
import org.jetbrains.jet.descriptors.serialization.NameResolver;
|
import org.jetbrains.jet.descriptors.serialization.NameResolver;
|
||||||
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
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.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassOrPackageFragmentDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassOrPackageFragmentDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
|
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
|
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.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolver;
|
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolver;
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ public abstract class BaseDescriptorDeserializer {
|
|||||||
@NotNull AnnotatedCallableKind kind
|
@NotNull AnnotatedCallableKind kind
|
||||||
) {
|
) {
|
||||||
if (container instanceof PackageFragmentDescriptor) {
|
if (container instanceof PackageFragmentDescriptor) {
|
||||||
return loadPackageFragmentClassFqName((PackageFragmentDescriptor) container, proto, nameResolver);
|
return getPackagePartClassFqNameSafe((PackageFragmentDescriptor) container, proto, nameResolver);
|
||||||
}
|
}
|
||||||
else if (isClassObject(container) && isStaticFieldInOuter(proto)) {
|
else if (isClassObject(container) && isStaticFieldInOuter(proto)) {
|
||||||
// Backing fields of properties of a class object are generated in the outer class
|
// Backing fields of properties of a class object are generated in the outer class
|
||||||
@@ -124,19 +124,27 @@ public abstract class BaseDescriptorDeserializer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private KotlinJvmBinaryClass loadPackageFragmentClassFqName(
|
private KotlinJvmBinaryClass getPackagePartClassFqNameSafe(
|
||||||
@NotNull PackageFragmentDescriptor container,
|
@NotNull PackageFragmentDescriptor container,
|
||||||
@NotNull ProtoBuf.Callable proto,
|
@NotNull ProtoBuf.Callable proto,
|
||||||
@NotNull NameResolver nameResolver
|
@NotNull NameResolver nameResolver
|
||||||
) {
|
) {
|
||||||
if (proto.hasExtension(JavaProtoBuf.implClassName)) {
|
if (proto.hasExtension(JavaProtoBuf.implClassName)) {
|
||||||
Name name = nameResolver.getName(proto.getExtension(JavaProtoBuf.implClassName));
|
return kotlinClassFinder.findKotlinClass(container.getFqName().child(getPackagePartClassName(proto, nameResolver)));
|
||||||
FqName fqName = PackageClassUtils.getPackageClassFqName(container.getFqName()).parent().child(name);
|
|
||||||
return kotlinClassFinder.findKotlinClass(fqName);
|
|
||||||
}
|
}
|
||||||
return null;
|
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) {
|
private static boolean isStaticFieldInOuter(@NotNull ProtoBuf.Callable proto) {
|
||||||
if (!proto.hasExtension(JavaProtoBuf.propertySignature)) return false;
|
if (!proto.hasExtension(JavaProtoBuf.propertySignature)) return false;
|
||||||
JavaProtoBuf.JavaPropertySignature propertySignature = proto.getExtension(JavaProtoBuf.propertySignature);
|
JavaProtoBuf.JavaPropertySignature propertySignature = proto.getExtension(JavaProtoBuf.propertySignature);
|
||||||
|
|||||||
Reference in New Issue
Block a user