Properly load objects nested into class objects from Java
This commit is contained in:
+1
-1
@@ -149,7 +149,7 @@ public final class JavaClassObjectResolver {
|
||||
classObjectDescriptor.createTypeConstructor();
|
||||
JavaClassNonStaticMembersScope classMembersScope = new JavaClassNonStaticMembersScope(classObjectDescriptor, data, semanticServices);
|
||||
WritableScopeImpl writableScope =
|
||||
new WritableScopeImpl(classMembersScope, classObjectDescriptor, RedeclarationHandler.THROW_EXCEPTION, fqName.toString());
|
||||
new WritableScopeImpl(classMembersScope, classObjectDescriptor, RedeclarationHandler.THROW_EXCEPTION, "Member lookup scope");
|
||||
writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||
classObjectDescriptor.setScopeForMemberLookup(writableScope);
|
||||
classObjectDescriptor.setScopeForConstructorResolve(classMembersScope);
|
||||
|
||||
+24
-5
@@ -20,7 +20,9 @@ import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.intellij.openapi.progress.ProgressIndicatorProvider;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
@@ -33,10 +35,7 @@ import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScopeImpl;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public abstract class JavaBaseScope extends JetScopeImpl {
|
||||
|
||||
@@ -50,6 +49,8 @@ public abstract class JavaBaseScope extends JetScopeImpl {
|
||||
private final Map<Name, Set<VariableDescriptor>> propertyDescriptors = Maps.newHashMap();
|
||||
@Nullable
|
||||
private Collection<DeclarationDescriptor> allDescriptors = null;
|
||||
@Nullable
|
||||
private Set<ClassDescriptor> objectDescriptors = null;
|
||||
@NotNull
|
||||
protected final ClassOrNamespaceDescriptor descriptor;
|
||||
|
||||
@@ -130,10 +131,19 @@ public abstract class JavaBaseScope extends JetScopeImpl {
|
||||
protected Collection<DeclarationDescriptor> computeAllDescriptors() {
|
||||
Collection<DeclarationDescriptor> result = Sets.newHashSet();
|
||||
result.addAll(computeFieldAndFunctionDescriptors());
|
||||
result.addAll(getInnerClasses());
|
||||
result.addAll(filterObjects(getInnerClasses(), false));
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Set<ClassDescriptor> getObjectDescriptors() {
|
||||
if (objectDescriptors == null) {
|
||||
objectDescriptors = new HashSet<ClassDescriptor>(filterObjects(getInnerClasses(), true));
|
||||
}
|
||||
return objectDescriptors;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected abstract Collection<ClassDescriptor> computeInnerClasses();
|
||||
|
||||
@@ -174,4 +184,13 @@ public abstract class JavaBaseScope extends JetScopeImpl {
|
||||
}
|
||||
return innerClasses;
|
||||
}
|
||||
|
||||
private static <T extends ClassDescriptor> Collection<T> filterObjects(Collection<T> classes, final boolean objects) {
|
||||
return ContainerUtil.filter(classes, new Condition<T>() {
|
||||
@Override
|
||||
public boolean value(T classDescriptor) {
|
||||
return classDescriptor.getKind().isObject() == objects;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user