Move CodegenBinding#computeAsmType() to JetTypeMapper, make private
This commit is contained in:
@@ -28,10 +28,8 @@ import org.jetbrains.jet.lang.psi.*;
|
|||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
|
||||||
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;
|
||||||
import org.jetbrains.jet.lang.resolve.name.SpecialNames;
|
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
@@ -292,47 +290,6 @@ public class CodegenBinding {
|
|||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static Type computeAsmType(@NotNull BindingContext bindingContext, @NotNull ClassDescriptor klass) {
|
|
||||||
Type alreadyComputedType = bindingContext.get(ASM_TYPE, klass);
|
|
||||||
if (alreadyComputedType != null) {
|
|
||||||
return alreadyComputedType;
|
|
||||||
}
|
|
||||||
|
|
||||||
Type asmType = Type.getObjectType(computeAsmTypeImpl(bindingContext, klass));
|
|
||||||
assert PsiCodegenPredictor.checkPredictedNameFromPsi(klass, asmType);
|
|
||||||
return asmType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private static String computeAsmTypeImpl(@NotNull BindingContext bindingContext, @NotNull ClassDescriptor klass) {
|
|
||||||
DeclarationDescriptor container = klass.getContainingDeclaration();
|
|
||||||
|
|
||||||
Name name = SpecialNames.safeIdentifier(klass.getName());
|
|
||||||
if (container instanceof PackageFragmentDescriptor) {
|
|
||||||
String shortName = name.getIdentifier();
|
|
||||||
FqName fqName = ((PackageFragmentDescriptor) container).getFqName();
|
|
||||||
return fqName.isRoot() ? shortName : fqName.asString().replace('.', '/') + '/' + shortName;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (container instanceof ScriptDescriptor) {
|
|
||||||
Type scriptType = asmTypeForScriptDescriptor(bindingContext, (ScriptDescriptor) container);
|
|
||||||
return scriptType.getInternalName() + "$" + name.getIdentifier();
|
|
||||||
}
|
|
||||||
|
|
||||||
assert container instanceof ClassDescriptor : "Unexpected container: " + container + " for " + klass;
|
|
||||||
|
|
||||||
String containerInternalName = computeAsmTypeImpl(bindingContext, (ClassDescriptor) container);
|
|
||||||
switch (klass.getKind()) {
|
|
||||||
case ENUM_ENTRY:
|
|
||||||
return containerInternalName;
|
|
||||||
case CLASS_OBJECT:
|
|
||||||
return containerInternalName + JvmAbi.CLASS_OBJECT_SUFFIX;
|
|
||||||
default:
|
|
||||||
return containerInternalName + "$" + name.getIdentifier();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static ResolvedCall<ConstructorDescriptor> findSuperCall(
|
private static ResolvedCall<ConstructorDescriptor> findSuperCall(
|
||||||
@NotNull BindingContext bindingContext,
|
@NotNull BindingContext bindingContext,
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.jet.codegen.*;
|
import org.jetbrains.jet.codegen.*;
|
||||||
import org.jetbrains.jet.codegen.binding.CalculatedClosure;
|
import org.jetbrains.jet.codegen.binding.CalculatedClosure;
|
||||||
import org.jetbrains.jet.codegen.binding.CodegenBinding;
|
import org.jetbrains.jet.codegen.binding.CodegenBinding;
|
||||||
|
import org.jetbrains.jet.codegen.binding.PsiCodegenPredictor;
|
||||||
import org.jetbrains.jet.codegen.context.CodegenContext;
|
import org.jetbrains.jet.codegen.context.CodegenContext;
|
||||||
import org.jetbrains.jet.codegen.signature.BothSignatureWriter;
|
import org.jetbrains.jet.codegen.signature.BothSignatureWriter;
|
||||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedCallableMemberDescriptor;
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedCallableMemberDescriptor;
|
||||||
@@ -48,6 +49,7 @@ import org.jetbrains.jet.lang.resolve.java.mapping.KotlinToJavaTypesMap;
|
|||||||
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
||||||
|
import org.jetbrains.jet.lang.resolve.name.SpecialNames;
|
||||||
import org.jetbrains.jet.lang.types.*;
|
import org.jetbrains.jet.lang.types.*;
|
||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
import org.jetbrains.org.objectweb.asm.Type;
|
import org.jetbrains.org.objectweb.asm.Type;
|
||||||
@@ -277,7 +279,7 @@ public class JetTypeMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (descriptor instanceof ClassDescriptor) {
|
if (descriptor instanceof ClassDescriptor) {
|
||||||
Type asmType = computeAsmType(bindingContext, (ClassDescriptor) descriptor.getOriginal());
|
Type asmType = computeAsmType((ClassDescriptor) descriptor.getOriginal());
|
||||||
writeGenericType(signatureVisitor, asmType, jetType, howThisTypeIsUsed, projectionsAllowed);
|
writeGenericType(signatureVisitor, asmType, jetType, howThisTypeIsUsed, projectionsAllowed);
|
||||||
return asmType;
|
return asmType;
|
||||||
}
|
}
|
||||||
@@ -294,6 +296,45 @@ public class JetTypeMapper {
|
|||||||
throw new UnsupportedOperationException("Unknown type " + jetType);
|
throw new UnsupportedOperationException("Unknown type " + jetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private Type computeAsmType(@NotNull ClassDescriptor klass) {
|
||||||
|
Type alreadyComputedType = bindingContext.get(ASM_TYPE, klass);
|
||||||
|
if (alreadyComputedType != null) {
|
||||||
|
return alreadyComputedType;
|
||||||
|
}
|
||||||
|
|
||||||
|
Type asmType = Type.getObjectType(computeAsmTypeImpl(klass));
|
||||||
|
assert PsiCodegenPredictor.checkPredictedNameFromPsi(klass, asmType);
|
||||||
|
return asmType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private String computeAsmTypeImpl(@NotNull ClassDescriptor klass) {
|
||||||
|
DeclarationDescriptor container = klass.getContainingDeclaration();
|
||||||
|
|
||||||
|
String name = SpecialNames.safeIdentifier(klass.getName()).getIdentifier();
|
||||||
|
if (container instanceof PackageFragmentDescriptor) {
|
||||||
|
FqName fqName = ((PackageFragmentDescriptor) container).getFqName();
|
||||||
|
return fqName.isRoot() ? name : fqName.asString().replace('.', '/') + '/' + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (container instanceof ScriptDescriptor) {
|
||||||
|
return asmTypeForScriptDescriptor(bindingContext, (ScriptDescriptor) container).getInternalName() + "$" + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert container instanceof ClassDescriptor : "Unexpected container: " + container + " for " + klass;
|
||||||
|
|
||||||
|
String containerInternalName = computeAsmTypeImpl((ClassDescriptor) container);
|
||||||
|
switch (klass.getKind()) {
|
||||||
|
case ENUM_ENTRY:
|
||||||
|
return containerInternalName;
|
||||||
|
case CLASS_OBJECT:
|
||||||
|
return containerInternalName + JvmAbi.CLASS_OBJECT_SUFFIX;
|
||||||
|
default:
|
||||||
|
return containerInternalName + "$" + name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Type mapTraitImpl(@NotNull ClassDescriptor descriptor) {
|
public Type mapTraitImpl(@NotNull ClassDescriptor descriptor) {
|
||||||
return Type.getObjectType(mapType(descriptor).getInternalName() + JvmAbi.TRAIT_IMPL_SUFFIX);
|
return Type.getObjectType(mapType(descriptor).getInternalName() + JvmAbi.TRAIT_IMPL_SUFFIX);
|
||||||
|
|||||||
Reference in New Issue
Block a user