No constructor for traits and such
This commit is contained in:
+19
-14
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user