From d64cfa04e9c101245eca5ab9d44f5d9391a120fc Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 27 Nov 2013 15:34:58 +0400 Subject: [PATCH] Simplified method. --- .../jet/codegen/binding/CodegenBinding.java | 71 ++++++------------- .../jet/codegen/state/JetTypeMapper.java | 2 +- 2 files changed, 23 insertions(+), 50 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java index 51c9a90c3fb..8719eeac9b0 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java @@ -50,7 +50,7 @@ public class CodegenBinding { public static final WritableSlice CLASS_FOR_SCRIPT = Slices.createSimpleSlice(); - public static final WritableSlice ASM_TYPE = Slices.createSimpleSlice(); + public static final WritableSlice ASM_TYPE = Slices.createSimpleSlice(); public static final WritableSlice ENUM_ENTRY_CLASS_NEED_SUBCLASS = Slices.createSimpleSetSlice(); @@ -288,73 +288,46 @@ public class CodegenBinding { return false; } - // TODO 2 accept ClassDescriptor and simplify @NotNull - public static Type getAsmType(@NotNull BindingTrace bindingTrace, @NotNull DeclarationDescriptor descriptor) { - descriptor = descriptor.getOriginal(); - Type alreadyComputedType = bindingTrace.getBindingContext().get(ASM_TYPE, descriptor); + public static Type getAsmType(@NotNull BindingTrace bindingTrace, @NotNull ClassDescriptor klass) { + klass = (ClassDescriptor) klass.getOriginal(); + Type alreadyComputedType = bindingTrace.getBindingContext().get(ASM_TYPE, klass); if (alreadyComputedType != null) { return alreadyComputedType; } - Type asmType = Type.getObjectType(getAsmTypeImpl(bindingTrace, descriptor)); + Type asmType = Type.getObjectType(getAsmTypeImpl(bindingTrace, klass)); - assert PsiCodegenPredictor.checkPredictedNameFromPsi(bindingTrace, descriptor, asmType); - bindingTrace.record(ASM_TYPE, descriptor, asmType); + assert PsiCodegenPredictor.checkPredictedNameFromPsi(bindingTrace, klass, asmType); + bindingTrace.record(ASM_TYPE, klass, asmType); return asmType; } - // TODO 2 accept ClassDescriptor and simplify @NotNull - private static String getAsmTypeImpl(@NotNull BindingTrace bindingTrace, @NotNull DeclarationDescriptor descriptor) { - if (descriptor instanceof PackageFragmentDescriptor) { - throw new IllegalStateException("package is unexpected: " + descriptor); - } - - if (descriptor instanceof FunctionDescriptor) { - throw new IllegalStateException("requested fq name for function: " + descriptor); - } - - if (descriptor instanceof ModuleDescriptor) { - throw new IllegalStateException("module is unexpected: " + descriptor); - } - - DeclarationDescriptor container = descriptor.getContainingDeclaration(); - if (container == null) { - throw new IllegalStateException("descriptor has no container: " + descriptor); - } - - if (container instanceof ScriptDescriptor) { - return descriptor.getName().getIdentifier(); - } - + private static String getAsmTypeImpl(@NotNull BindingTrace bindingTrace, @NotNull ClassDescriptor klass) { + DeclarationDescriptor container = klass.getContainingDeclaration(); if (container instanceof PackageFragmentDescriptor) { - String shortName = descriptor.getName().getIdentifier(); + String shortName = klass.getName().getIdentifier(); FqName fqName = ((PackageFragmentDescriptor) container).getFqName(); return fqName.isRoot() ? shortName : fqName.asString().replace('.', '/') + '/' + shortName; } - if (descriptor instanceof ClassDescriptor) { - assert container instanceof ClassDescriptor : "Unexpected container: " + container + " for " + descriptor; + assert container instanceof ClassDescriptor : "Unexpected container: " + container + " for " + klass; - String containerInternalName = getAsmType(bindingTrace, container).getInternalName(); - ClassDescriptor klass = (ClassDescriptor) descriptor; - if (klass.getKind() == ClassKind.OBJECT || klass.getKind() == ClassKind.CLASS_OBJECT) { - if (isEnumClass(container)) { - return containerInternalName; - } - else if (klass.getKind() == ClassKind.OBJECT) { - return containerInternalName + "$" + klass.getName(); - } - else { - return containerInternalName + JvmAbi.CLASS_OBJECT_SUFFIX; - } + String containerInternalName = getAsmType(bindingTrace, (ClassDescriptor) container).getInternalName(); + if (klass.getKind() == ClassKind.OBJECT || klass.getKind() == ClassKind.CLASS_OBJECT) { + if (isEnumClass(container)) { + return containerInternalName; + } + else if (klass.getKind() == ClassKind.OBJECT) { + return containerInternalName + "$" + klass.getName(); + } + else { + return containerInternalName + JvmAbi.CLASS_OBJECT_SUFFIX; } - return containerInternalName + "$" + descriptor.getName().getIdentifier(); } - - throw new IllegalStateException("neither top-level nor nested class: " + descriptor); + return containerInternalName + "$" + klass.getName().getIdentifier(); } public static boolean isVarCapturedInClosure(BindingContext bindingContext, DeclarationDescriptor descriptor) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java index 62f2592b3e0..fe0db1edcdb 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java @@ -297,7 +297,7 @@ public class JetTypeMapper extends BindingTraceAware { } if (descriptor instanceof ClassDescriptor) { - Type asmType = getAsmType(bindingTrace, descriptor); + Type asmType = getAsmType(bindingTrace, (ClassDescriptor) descriptor); writeGenericType(signatureVisitor, asmType, jetType, howThisTypeIsUsed, projectionsAllowed); return asmType; }