Move caching logic from java class scope to descriptor

This commit is contained in:
Alexander Udalov
2013-08-28 21:33:29 +04:00
parent d0e4245112
commit 01e46bbd11
3 changed files with 23 additions and 35 deletions
@@ -33,8 +33,9 @@ import java.util.Collection;
*/
public class ClassDescriptorFromJvmBytecode extends MutableClassDescriptorLite {
private JetType functionTypeForSamInterface;
private JavaClassNonStaticMembersScope scopeForConstructorResolve;
private ConstructorDescriptor primaryConstructor;
private Collection<ConstructorDescriptor> constructors;
public ClassDescriptorFromJvmBytecode(
@NotNull DeclarationDescriptor containingDeclaration,
@@ -45,18 +46,31 @@ public class ClassDescriptorFromJvmBytecode extends MutableClassDescriptorLite {
super(containingDeclaration, name, kind, isInner);
}
@NotNull
@Override
public Collection<ConstructorDescriptor> getConstructors() {
assert scopeForConstructorResolve != null;
return scopeForConstructorResolve.getConstructors();
if (constructors == null) {
constructors = scopeForConstructorResolve.getConstructors();
}
return constructors;
}
@Nullable
@Override
public ConstructorDescriptor getUnsubstitutedPrimaryConstructor() {
return scopeForConstructorResolve.getPrimaryConstructor();
if (primaryConstructor == null) {
for (ConstructorDescriptor constructor : getConstructors()) {
if (constructor.isPrimary()) {
if (primaryConstructor != null) {
throw new IllegalStateException(
"Class has more than one primary constructor: " + primaryConstructor + "\n" + constructor);
}
primaryConstructor = constructor;
}
}
}
return primaryConstructor;
}
public void setScopeForConstructorResolve(@NotNull JavaClassNonStaticMembersScope scopeForConstructorResolve) {
@@ -17,7 +17,6 @@
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.resolver.JavaMemberResolver;
@@ -32,8 +31,6 @@ import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope {
private Collection<ConstructorDescriptor> constructors = null;
private ConstructorDescriptor primaryConstructor = null;
@NotNull
private final ClassDescriptor descriptor;
@NotNull
@@ -52,33 +49,9 @@ public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope
this.staticMembersOfPsiClass = staticMembersOfClass;
}
@NotNull
public Collection<ConstructorDescriptor> getConstructors() {
initConstructorsIfNeeded();
return constructors;
}
@Nullable
public ConstructorDescriptor getPrimaryConstructor() {
initConstructorsIfNeeded();
return primaryConstructor;
}
private void initConstructorsIfNeeded() {
if (constructors == null) {
constructors = memberResolver.resolveConstructors(javaClass, 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;
}
}
}
return memberResolver.resolveConstructors(javaClass, descriptor);
}
@NotNull