diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java index 70dd53b2527..ef2cef70364 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java @@ -550,9 +550,6 @@ public class JetTypeMapper { signatureVisitor.writeClassBound(); for (JetType jetType : typeParameterDescriptor.getUpperBounds()) { - if (jetType.equals(JetStandardClasses.getNullableAnyType())) { - continue; - } if (jetType.getConstructor().getDeclarationDescriptor() instanceof ClassDescriptor) { if (!CodegenUtil.isInterface(jetType)) { mapType(jetType, signatureVisitor); @@ -561,7 +558,10 @@ public class JetTypeMapper { } } - // "extends Object" seems to be not optional according to ClassFileFormat-Java5.pdf + // "extends Object" is optional according to ClassFileFormat-Java5.pdf + // but javac complaints to signature: + // Ljava/lang/Object; + // TODO: avoid writing java/lang/Object if interface list is not empty } signatureVisitor.writeClassBoundEnd(); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 13edfab638f..d5a4365ce9d 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -252,6 +252,23 @@ public class JavaDescriptorResolver { throw new IllegalStateException("PsiTypeParameter '" + name + "' is not found"); } + + // cache + protected ClassDescriptor javaLangObject; + + @NotNull + private ClassDescriptor getJavaLangObject() { + if (javaLangObject == null) { + javaLangObject = resolveClass("java.lang.Object"); + } + return javaLangObject; + } + + private boolean isJavaLangObject(JetType type) { + return type.getConstructor().getDeclarationDescriptor() == getJavaLangObject(); + } + + private abstract class JetSignatureTypeParameterVisitor extends JetSignatureExceptionsAdapter { private final DeclarationDescriptor containingDeclaration; @@ -272,12 +289,15 @@ public class JavaDescriptorResolver { List upperBounds = new ArrayList(); List lowerBounds = new ArrayList(); - + @Override public JetSignatureVisitor visitClassBound() { return new JetTypeJetSignatureReader(JavaDescriptorResolver.this, semanticServices.getJetSemanticServices().getStandardLibrary()) { @Override protected void done(@NotNull JetType jetType) { + if (isJavaLangObject(jetType)) { + return; + } upperBounds.add(jetType); } };