No constructor for traits and such

This commit is contained in:
Andrey Breslav
2012-06-07 13:35:53 +04:00
parent 8ee4c05be6
commit a390908592
@@ -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<LazyClassDescr
@NotNull
public Set<ConstructorDescriptor> getConstructors() {
return Collections.singleton(getPrimaryConstructor());
ConstructorDescriptor constructor = getPrimaryConstructor();
return constructor == null ? Collections.<ConstructorDescriptor>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<JetType>() {
@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<JetType>() {
@Override
protected JetType compute() {
return thisDescriptor.getDefaultType();
}
}));
}
}
primaryConstructorResolved = true;
}