diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java index b07992344d9..d352202a0a0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java @@ -44,8 +44,6 @@ public interface ClassDescriptor extends ClassifierDescriptor, MemberDescriptor, @Nullable ConstructorDescriptor getUnsubstitutedPrimaryConstructor(); - boolean hasConstructors(); - @Override @NotNull DeclarationDescriptor getContainingDeclaration(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorBase.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorBase.java index bf985286ec6..452741f6f92 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorBase.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorBase.java @@ -29,6 +29,9 @@ import java.util.Map; */ public abstract class ClassDescriptorBase implements ClassDescriptor { + protected TypeConstructor typeConstructor; + protected JetType defaultType; + protected abstract JetScope getScopeForMemberLookup(); @NotNull @@ -55,4 +58,29 @@ public abstract class ClassDescriptorBase implements ClassDescriptor { } return new LazySubstitutingClassDescriptor(this, substitutor); } + + @NotNull + @Override + public TypeConstructor getTypeConstructor() { + return typeConstructor; + } + + @NotNull + @Override + public JetType getDefaultType() { + if (defaultType == null) { + defaultType = TypeUtils.makeUnsubstitutedType(this, getScopeForMemberLookup()); + } + return defaultType; + } + + @Override + public void acceptVoid(DeclarationDescriptorVisitor visitor) { + visitor.visitClassDescriptor(this, null); + } + + @Override + public R accept(DeclarationDescriptorVisitor visitor, D data) { + return visitor.visitClassDescriptor(this, data); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorImpl.java index 3058e1fe40d..b3a0d6974ee 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorImpl.java @@ -152,11 +152,6 @@ public class ClassDescriptorImpl extends DeclarationDescriptorImpl implements Cl return primaryConstructor; } - @Override - public boolean hasConstructors() { - return !constructors.isEmpty(); - } - @Override @NotNull public Modality getModality() { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java index 9f63cbb20ef..c59f3cebe01 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java @@ -126,11 +126,6 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { return original.getUnsubstitutedPrimaryConstructor(); } - @Override - public boolean hasConstructors() { - return original.hasConstructors(); - } - @Override public List getAnnotations() { return original.getAnnotations(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java index ed6c38c85b2..741f3826b78 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java @@ -46,14 +46,11 @@ public class MutableClassDescriptorLite extends ClassDescriptorBase private List typeParameters; private Collection supertypes = Lists.newArrayList(); - private TypeConstructor typeConstructor; - private Modality modality; private Visibility visibility; private MutableClassDescriptorLite classObjectDescriptor; private JetType classObjectType; - private JetType defaultType; private final ClassKind kind; private JetScope scopeForMemberLookup; @@ -116,12 +113,6 @@ public class MutableClassDescriptorLite extends ClassDescriptorBase } } - @NotNull - @Override - public TypeConstructor getTypeConstructor() { - return typeConstructor; - } - public void setScopeForMemberLookup(JetScope scopeForMemberLookup) { this.scopeForMemberLookup = scopeForMemberLookup; this.innerClassesScope = new InnerClassesScopeWrapper(scopeForMemberLookup); @@ -132,7 +123,7 @@ public class MutableClassDescriptorLite extends ClassDescriptorBase this.typeConstructor = new TypeConstructorImpl( this, Collections.emptyList(), // TODO : pass annotations from the class? - !modality.isOverridable(), + !getModality().isOverridable(), getName().getName(), typeParameters, supertypes); @@ -172,11 +163,6 @@ public class MutableClassDescriptorLite extends ClassDescriptorBase } - @Override - public boolean hasConstructors() { - return !constructors.isEmpty(); - } - @NotNull @Override public ClassKind getKind() { @@ -232,15 +218,6 @@ public class MutableClassDescriptorLite extends ClassDescriptorBase } } - @NotNull - @Override - public JetType getDefaultType() { - if (defaultType == null) { - defaultType = TypeUtils.makeUnsubstitutedType(this, scopeForMemberLookup); - } - return defaultType; - } - @Override @Nullable public MutableClassDescriptorLite getClassObjectDescriptor() { @@ -299,16 +276,6 @@ public class MutableClassDescriptorLite extends ClassDescriptorBase } } - @Override - public R accept(DeclarationDescriptorVisitor visitor, D data) { - return visitor.visitClassDescriptor(this, data); - } - - @Override - public void acceptVoid(DeclarationDescriptorVisitor visitor) { - visitor.visitClassDescriptor(this, null); - } - @Override public List getAnnotations() { return annotations; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java index ee0056116dd..9474a665c33 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -211,7 +211,7 @@ public class BodyResolver { if (supertype == null) return; ClassDescriptor classDescriptor = TypeUtils.getClassDescriptor(supertype); if (classDescriptor == null) return; - if (descriptor.getKind() != ClassKind.TRAIT && classDescriptor.hasConstructors() && + if (descriptor.getKind() != ClassKind.TRAIT && !classDescriptor.getConstructors().isEmpty() && !ErrorUtils.isError(classDescriptor.getTypeConstructor()) && classDescriptor.getKind() != ClassKind.TRAIT) { boolean hasConstructorWithoutParams = false; for (ConstructorDescriptor constructor : classDescriptor.getConstructors()) {