From db2ad06e9cea85f2dd8725a63dc6457c1040ebce Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 4 Jun 2014 17:44:47 +0400 Subject: [PATCH] Ability to generate light classes when a type parameter appears in supertypes --- .../codegen/ImplementationBodyCodegen.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 4a3c0ac56e3..3fed56ef240 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -347,13 +347,15 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { for (JetDelegationSpecifier specifier : myClass.getDelegationSpecifiers()) { JetType superType = bindingContext.get(BindingContext.TYPE, specifier.getTypeReference()); assert superType != null : "No supertype for class: " + myClass.getText(); - ClassDescriptor superClassDescriptor = (ClassDescriptor) superType.getConstructor().getDeclarationDescriptor(); - if (isInterface(superClassDescriptor)) { - interfaceSupertypes.add(superType); + ClassifierDescriptor classifierDescriptor = superType.getConstructor().getDeclarationDescriptor(); + if (classifierDescriptor instanceof ClassDescriptor) { + ClassDescriptor superClassDescriptor = (ClassDescriptor) classifierDescriptor; + if (isInterface(superClassDescriptor)) { + interfaceSupertypes.add(superType); - assert superClassDescriptor != null : "should be already checked by isInterface()"; - if (JvmAbi.K_OBJECT.equalsTo(DescriptorUtils.getFqName(superClassDescriptor))) { - explicitKObject = true; + if (JvmAbi.K_OBJECT.equalsTo(DescriptorUtils.getFqName(superClassDescriptor))) { + explicitKObject = true; + } } } } @@ -400,8 +402,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { assert superType != null : String.format("No type recorded for \n---\n%s\n---\n", JetPsiUtil.getElementTextWithContext(specifier)); - ClassDescriptor superClassDescriptor = (ClassDescriptor) superType.getConstructor().getDeclarationDescriptor(); - assert superClassDescriptor != null; + ClassifierDescriptor classifierDescriptor = superType.getConstructor().getDeclarationDescriptor(); + if (!(classifierDescriptor instanceof ClassDescriptor)) continue; + + ClassDescriptor superClassDescriptor = (ClassDescriptor) classifierDescriptor; if (!isInterface(superClassDescriptor)) { superClassType = superType; superClassAsmType = typeMapper.mapClass(superClassDescriptor);