Pulled getUnsubstitutedPrimaryConstructor method to ClassDescriptor.

Removed ClassDescriptorFromSource. Implemented method in inheritors.
This commit is contained in:
Evgeny Gerashchenko
2012-12-18 15:49:50 +04:00
parent 5e5cd86194
commit 9c15a04291
10 changed files with 50 additions and 39 deletions
@@ -17,6 +17,7 @@
package org.jetbrains.jet.lang.resolve.java.descriptor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.ClassKind;
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
@@ -50,6 +51,12 @@ public class ClassDescriptorFromJvmBytecode extends MutableClassDescriptorLite {
return scopeForConstructorResolve.getConstructors();
}
@Nullable
@Override
public ConstructorDescriptor getUnsubstitutedPrimaryConstructor() {
return scopeForConstructorResolve.getPrimaryConstructor();
}
public void setScopeForConstructorResolve(@NotNull JavaClassNonStaticMembersScope scopeForConstructorResolve) {
this.scopeForConstructorResolve = scopeForConstructorResolve;
}
@@ -17,6 +17,7 @@
package org.jetbrains.jet.lang.resolve.java.scope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
@@ -27,6 +28,7 @@ import java.util.Collection;
public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope {
private Collection<ConstructorDescriptor> constructors = null;
private ConstructorDescriptor primaryConstructor = null;
@NotNull
private final ClassDescriptor descriptor;
@@ -42,9 +44,29 @@ public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope
@NotNull
public Collection<ConstructorDescriptor> getConstructors() {
if (constructors == null) {
this.constructors = getResolver().resolveConstructors(declarationProvider, descriptor);
}
initConstructorsIfNeeded();
return constructors;
}
@Nullable
public ConstructorDescriptor getPrimaryConstructor() {
initConstructorsIfNeeded();
return primaryConstructor;
}
private void initConstructorsIfNeeded() {
if (constructors == null) {
constructors = getResolver().resolveConstructors(declarationProvider, descriptor);
for (ConstructorDescriptor constructor : constructors) {
if (constructor.isPrimary()) {
if (primaryConstructor != null) {
throw new IllegalStateException(
"Class has more than one primary constructor: " + primaryConstructor + "\n" + constructor);
}
primaryConstructor = constructor;
}
}
}
}
}