getDeclaredCallableMembers() added to ClassDescriptorWithResolutionScopes
This commit is contained in:
+25
-9
@@ -51,7 +51,8 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
|
|||||||
private final MemoizedFunctionToNotNull<Name, Set<FunctionDescriptor>> functionDescriptors;
|
private final MemoizedFunctionToNotNull<Name, Set<FunctionDescriptor>> functionDescriptors;
|
||||||
private final MemoizedFunctionToNotNull<Name, Set<VariableDescriptor>> propertyDescriptors;
|
private final MemoizedFunctionToNotNull<Name, Set<VariableDescriptor>> propertyDescriptors;
|
||||||
|
|
||||||
private final NotNullLazyValue<Collection<DeclarationDescriptor>> allDescriptors;
|
private final NotNullLazyValue<Collection<DeclarationDescriptor>> descriptorsFromDeclaredElements;
|
||||||
|
private final NotNullLazyValue<Collection<DeclarationDescriptor>> extraDescriptors;
|
||||||
|
|
||||||
protected AbstractLazyMemberScope(
|
protected AbstractLazyMemberScope(
|
||||||
@NotNull ResolveSession resolveSession,
|
@NotNull ResolveSession resolveSession,
|
||||||
@@ -83,10 +84,16 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.allDescriptors = storageManager.createLazyValue(new Function0<Collection<DeclarationDescriptor>>() {
|
this.descriptorsFromDeclaredElements = storageManager.createLazyValue(new Function0<Collection<DeclarationDescriptor>>() {
|
||||||
@Override
|
@Override
|
||||||
public Collection<DeclarationDescriptor> invoke() {
|
public Collection<DeclarationDescriptor> invoke() {
|
||||||
return computeAllDescriptors();
|
return computeDescriptorsFromDeclaredElements();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.extraDescriptors = storageManager.createLazyValue(new Function0<Collection<DeclarationDescriptor>>() {
|
||||||
|
@Override
|
||||||
|
public Collection<DeclarationDescriptor> invoke() {
|
||||||
|
return computeExtraDescriptors();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -199,13 +206,21 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public Collection<DeclarationDescriptor> getAllDescriptors() {
|
public Collection<DeclarationDescriptor> getAllDescriptors() {
|
||||||
return allDescriptors.invoke();
|
Collection<DeclarationDescriptor> result = new LinkedHashSet<DeclarationDescriptor>(getDescriptorsFromDeclaredElements());
|
||||||
|
result.addAll(extraDescriptors.invoke());
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private Collection<DeclarationDescriptor> computeAllDescriptors() {
|
/*package*/ Collection<DeclarationDescriptor> getDescriptorsFromDeclaredElements() {
|
||||||
Collection<DeclarationDescriptor> result = new LinkedHashSet<DeclarationDescriptor>();
|
return descriptorsFromDeclaredElements.invoke();
|
||||||
for (JetDeclaration declaration : declarationProvider.getAllDeclarations()) {
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private Collection<DeclarationDescriptor> computeDescriptorsFromDeclaredElements() {
|
||||||
|
List<JetDeclaration> declarations = declarationProvider.getAllDeclarations();
|
||||||
|
ArrayList<DeclarationDescriptor> result = new ArrayList<DeclarationDescriptor>(declarations.size());
|
||||||
|
for (JetDeclaration declaration : declarations) {
|
||||||
if (declaration instanceof JetClassOrObject) {
|
if (declaration instanceof JetClassOrObject) {
|
||||||
JetClassOrObject classOrObject = (JetClassOrObject) declaration;
|
JetClassOrObject classOrObject = (JetClassOrObject) declaration;
|
||||||
result.addAll(classDescriptors.invoke(safeNameForLazyResolve(classOrObject.getNameAsName())));
|
result.addAll(classDescriptors.invoke(safeNameForLazyResolve(classOrObject.getNameAsName())));
|
||||||
@@ -230,11 +245,12 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
|
|||||||
throw new IllegalArgumentException("Unsupported declaration kind: " + declaration);
|
throw new IllegalArgumentException("Unsupported declaration kind: " + declaration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
addExtraDescriptors(result);
|
result.trimToSize();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void addExtraDescriptors(@NotNull Collection<DeclarationDescriptor> result);
|
@NotNull
|
||||||
|
protected abstract Collection<DeclarationDescriptor> computeExtraDescriptors();
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+17
-1
@@ -23,6 +23,7 @@ import com.intellij.psi.PsiElement;
|
|||||||
import jet.Function0;
|
import jet.Function0;
|
||||||
import jet.Function1;
|
import jet.Function1;
|
||||||
import jet.Unit;
|
import jet.Unit;
|
||||||
|
import kotlin.KotlinPackage;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
@@ -31,7 +32,6 @@ import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorBase;
|
|||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptorWithResolutionScopes;
|
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil;
|
import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.LazyEntity;
|
import org.jetbrains.jet.lang.resolve.lazy.LazyEntity;
|
||||||
@@ -209,6 +209,22 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti
|
|||||||
return scopeForPropertyInitializerResolution.invoke();
|
return scopeForPropertyInitializerResolution.invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Collection<CallableMemberDescriptor> getDeclaredCallableMembers() {
|
||||||
|
//noinspection unchecked
|
||||||
|
return (Collection) KotlinPackage.filter(
|
||||||
|
unsubstitutedMemberScope.getDescriptorsFromDeclaredElements(),
|
||||||
|
new Function1<DeclarationDescriptor, Boolean>() {
|
||||||
|
@Override
|
||||||
|
public Boolean invoke(DeclarationDescriptor descriptor) {
|
||||||
|
return descriptor instanceof CallableMemberDescriptor
|
||||||
|
&& ((CallableMemberDescriptor) descriptor).getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private JetScope computeScopeForPropertyInitializerResolution() {
|
private JetScope computeScopeForPropertyInitializerResolution() {
|
||||||
ConstructorDescriptor primaryConstructor = getUnsubstitutedPrimaryConstructor();
|
ConstructorDescriptor primaryConstructor = getUnsubstitutedPrimaryConstructor();
|
||||||
|
|||||||
+7
-5
@@ -36,10 +36,7 @@ import org.jetbrains.jet.lang.types.JetType;
|
|||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
import org.jetbrains.jet.storage.NullableLazyValue;
|
import org.jetbrains.jet.storage.NullableLazyValue;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor.Kind.DELEGATION;
|
import static org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor.Kind.DELEGATION;
|
||||||
import static org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE;
|
import static org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE;
|
||||||
@@ -290,7 +287,9 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope<LazyClassDescr
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void addExtraDescriptors(@NotNull Collection<DeclarationDescriptor> result) {
|
@NotNull
|
||||||
|
protected Collection<DeclarationDescriptor> computeExtraDescriptors() {
|
||||||
|
ArrayList<DeclarationDescriptor> result = new ArrayList<DeclarationDescriptor>();
|
||||||
for (JetType supertype : thisDescriptor.getTypeConstructor().getSupertypes()) {
|
for (JetType supertype : thisDescriptor.getTypeConstructor().getSupertypes()) {
|
||||||
for (DeclarationDescriptor descriptor : supertype.getMemberScope().getAllDescriptors()) {
|
for (DeclarationDescriptor descriptor : supertype.getMemberScope().getAllDescriptors()) {
|
||||||
if (descriptor instanceof FunctionDescriptor) {
|
if (descriptor instanceof FunctionDescriptor) {
|
||||||
@@ -307,6 +306,9 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope<LazyClassDescr
|
|||||||
result.addAll(getFunctions(DescriptorFactory.VALUE_OF_METHOD_NAME));
|
result.addAll(getFunctions(DescriptorFactory.VALUE_OF_METHOD_NAME));
|
||||||
|
|
||||||
addDataClassMethods(result);
|
addDataClassMethods(result);
|
||||||
|
|
||||||
|
result.trimToSize();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addDataClassMethods(@NotNull Collection<DeclarationDescriptor> result) {
|
private void addDataClassMethods(@NotNull Collection<DeclarationDescriptor> result) {
|
||||||
|
|||||||
+4
-1
@@ -28,6 +28,7 @@ import org.jetbrains.jet.lang.resolve.name.Name;
|
|||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class LazyPackageMemberScope extends AbstractLazyMemberScope<PackageFragmentDescriptor, PackageMemberDeclarationProvider> {
|
public class LazyPackageMemberScope extends AbstractLazyMemberScope<PackageFragmentDescriptor, PackageMemberDeclarationProvider> {
|
||||||
@@ -72,8 +73,10 @@ public class LazyPackageMemberScope extends AbstractLazyMemberScope<PackageFragm
|
|||||||
// No extra properties
|
// No extra properties
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected void addExtraDescriptors(@NotNull Collection<DeclarationDescriptor> result) {
|
protected Collection<DeclarationDescriptor> computeExtraDescriptors() {
|
||||||
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+7
@@ -17,8 +17,11 @@
|
|||||||
package org.jetbrains.jet.lang.descriptors;
|
package org.jetbrains.jet.lang.descriptors;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.ReadOnly;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
public interface ClassDescriptorWithResolutionScopes extends ClassDescriptor {
|
public interface ClassDescriptorWithResolutionScopes extends ClassDescriptor {
|
||||||
@NotNull
|
@NotNull
|
||||||
JetScope getScopeForClassHeaderResolution();
|
JetScope getScopeForClassHeaderResolution();
|
||||||
@@ -28,4 +31,8 @@ public interface ClassDescriptorWithResolutionScopes extends ClassDescriptor {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
JetScope getScopeForInitializerResolution();
|
JetScope getScopeForInitializerResolution();
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@ReadOnly
|
||||||
|
Collection<CallableMemberDescriptor> getDeclaredCallableMembers();
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -107,6 +107,7 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite implement
|
|||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public Set<CallableMemberDescriptor> getDeclaredCallableMembers() {
|
public Set<CallableMemberDescriptor> getDeclaredCallableMembers() {
|
||||||
return declaredCallableMembers;
|
return declaredCallableMembers;
|
||||||
|
|||||||
Reference in New Issue
Block a user