From a390908592cae1bc8e0ed9ad800c7b1e02927e7f Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 7 Jun 2012 13:35:53 +0400 Subject: [PATCH] No constructor for traits and such --- .../resolve/lazy/LazyClassMemberScope.java | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java index d80e42face7..a44ab8ef067 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java @@ -36,6 +36,7 @@ import org.jetbrains.jet.util.lazy.LazyValue; import java.util.Collection; import java.util.Collections; +import java.util.EnumSet; import java.util.Set; /** @@ -130,25 +131,29 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope getConstructors() { - return Collections.singleton(getPrimaryConstructor()); + ConstructorDescriptor constructor = getPrimaryConstructor(); + return constructor == null ? Collections.emptySet() : Collections.singleton(constructor); } @Nullable public ConstructorDescriptor getPrimaryConstructor() { if (!primaryConstructorResolved) { - JetClassOrObject classOrObject = declarationProvider.getOwnerClassOrObject(); - if (classOrObject instanceof JetClass) { - JetClass jetClass = (JetClass) classOrObject; - ConstructorDescriptorImpl descriptor = resolveSession.getInjector().getDescriptorResolver() - .resolvePrimaryConstructorDescriptor(thisDescriptor.getScopeForClassHeaderResolution(), thisDescriptor, jetClass, - resolveSession.getTrace()); - primaryConstructor = descriptor; - ((ConstructorDescriptorImpl) primaryConstructor).setReturnType(DeferredType.create(resolveSession.getTrace(), new LazyValue() { - @Override - protected JetType compute() { - return thisDescriptor.getDefaultType(); - } - })); + if (EnumSet.of(ClassKind.CLASS, ClassKind.ANNOTATION_CLASS).contains(thisDescriptor.getKind())) { + JetClassOrObject classOrObject = declarationProvider.getOwnerClassOrObject(); + if (classOrObject instanceof JetClass) { + JetClass jetClass = (JetClass) classOrObject; + ConstructorDescriptorImpl descriptor = resolveSession.getInjector().getDescriptorResolver() + .resolvePrimaryConstructorDescriptor(thisDescriptor.getScopeForClassHeaderResolution(), thisDescriptor, + jetClass, + resolveSession.getTrace()); + primaryConstructor = descriptor; + descriptor.setReturnType(DeferredType.create(resolveSession.getTrace(), new LazyValue() { + @Override + protected JetType compute() { + return thisDescriptor.getDefaultType(); + } + })); + } } primaryConstructorResolved = true; }