Delete PsiDeclarationProvider
And its two subclasses. Replace it by package-local MembersProvider, which is used only in java scopes, and two factory methods (for package & for class)
This commit is contained in:
committed by
Pavel V. Talanov
parent
e2d6234c9c
commit
86013aacde
+8
-17
@@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.*;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
@@ -210,12 +210,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<VariableDescriptor> resolveFieldGroupByName(
|
||||
@NotNull Name name,
|
||||
@NotNull PsiDeclarationProvider provider,
|
||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
||||
) {
|
||||
return propertiesResolver.resolveFieldGroupByName(name, provider, ownerDescriptor);
|
||||
public Set<VariableDescriptor> resolveFieldGroup(@NotNull NamedMembers members, @NotNull ClassOrNamespaceDescriptor ownerDescriptor) {
|
||||
return propertiesResolver.resolveFieldGroup(members, ownerDescriptor);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -245,21 +241,16 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
|
||||
@NotNull
|
||||
public Set<FunctionDescriptor> resolveFunctionGroupForClass(
|
||||
@NotNull Name methodName,
|
||||
@NotNull PsiDeclarationProvider provider,
|
||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor,
|
||||
@NotNull NamedMembers members,
|
||||
@NotNull ClassOrNamespaceDescriptor owner,
|
||||
@NotNull PsiClass psiClass
|
||||
) {
|
||||
return functionResolver.resolveFunctionGroupForClass(methodName, provider, ownerDescriptor, psiClass);
|
||||
return functionResolver.resolveFunctionGroupForClass(members, owner, psiClass);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<FunctionDescriptor> resolveFunctionGroupForPackage(
|
||||
@NotNull Name methodName,
|
||||
@NotNull PsiDeclarationProvider provider,
|
||||
@NotNull NamespaceDescriptor ownerDescriptor
|
||||
) {
|
||||
return functionResolver.resolveFunctionGroupForPackage(methodName, provider, ownerDescriptor);
|
||||
public Set<FunctionDescriptor> resolveFunctionGroupForPackage(@NotNull NamedMembers members, @NotNull NamespaceDescriptor owner) {
|
||||
return functionResolver.resolveFunctionGroupForPackage(members, owner);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
-40
@@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.lang.resolve.java.provider;
|
||||
|
||||
import com.intellij.psi.PsiClass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||
|
||||
public final class ClassPsiDeclarationProvider extends PsiDeclarationProvider {
|
||||
@NotNull
|
||||
private final PsiClass psiClass;
|
||||
|
||||
private final boolean staticMembers;
|
||||
|
||||
public ClassPsiDeclarationProvider(@NotNull PsiClass psiClass, boolean staticMembers, @NotNull PsiClassFinder psiClassFinder) {
|
||||
super(psiClassFinder);
|
||||
this.staticMembers = staticMembers;
|
||||
this.psiClass = psiClass;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
protected MembersCache buildMembersCache() {
|
||||
return MembersCache.buildMembersByNameCache(psiClassFinder, psiClass, null, staticMembers);
|
||||
}
|
||||
}
|
||||
-37
@@ -1,37 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.lang.resolve.java.provider;
|
||||
|
||||
import com.intellij.psi.PsiPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||
|
||||
public final class PackagePsiDeclarationProvider extends PsiDeclarationProvider {
|
||||
@NotNull
|
||||
private final PsiPackage psiPackage;
|
||||
|
||||
public PackagePsiDeclarationProvider(@NotNull PsiPackage psiPackage, @NotNull PsiClassFinder psiClassFinder) {
|
||||
super(psiClassFinder);
|
||||
this.psiPackage = psiPackage;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected MembersCache buildMembersCache() {
|
||||
return MembersCache.buildMembersByNameCache(psiClassFinder, null, psiPackage, true);
|
||||
}
|
||||
}
|
||||
-42
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.lang.resolve.java.provider;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||
|
||||
public abstract class PsiDeclarationProvider {
|
||||
@NotNull
|
||||
protected final PsiClassFinder psiClassFinder;
|
||||
|
||||
private MembersCache membersCache;
|
||||
|
||||
protected PsiDeclarationProvider(@NotNull PsiClassFinder psiClassFinder) {
|
||||
this.psiClassFinder = psiClassFinder;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public MembersCache getMembersCache() {
|
||||
if (membersCache == null) {
|
||||
membersCache = buildMembersCache();
|
||||
}
|
||||
return membersCache;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected abstract MembersCache buildMembersCache();
|
||||
}
|
||||
+9
-29
@@ -35,7 +35,6 @@ import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmByte
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
@@ -244,10 +243,12 @@ public final class JavaFunctionResolver {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private Set<FunctionDescriptor> resolveNamedGroupFunctions(
|
||||
@NotNull ClassOrNamespaceDescriptor owner, @NotNull PsiClass psiClass,
|
||||
NamedMembers namedMembers, Name methodName
|
||||
public Set<FunctionDescriptor> resolveFunctionGroupForClass(
|
||||
@NotNull NamedMembers namedMembers,
|
||||
@NotNull ClassOrNamespaceDescriptor owner,
|
||||
@NotNull PsiClass psiClass
|
||||
) {
|
||||
Name methodName = namedMembers.getName();
|
||||
|
||||
Set<SimpleFunctionDescriptor> functionsFromSupertypes = null;
|
||||
if (owner instanceof ClassDescriptor) {
|
||||
@@ -368,31 +369,10 @@ public final class JavaFunctionResolver {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<FunctionDescriptor> resolveFunctionGroupForClass(
|
||||
@NotNull Name methodName,
|
||||
@NotNull PsiDeclarationProvider provider,
|
||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor,
|
||||
@NotNull PsiClass psiClass
|
||||
) {
|
||||
NamedMembers namedMembers = provider.getMembersCache().get(methodName);
|
||||
if (namedMembers == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
return resolveNamedGroupFunctions(ownerDescriptor, psiClass, namedMembers, methodName);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<FunctionDescriptor> resolveFunctionGroupForPackage(
|
||||
@NotNull Name functionName,
|
||||
@NotNull PsiDeclarationProvider provider,
|
||||
@NotNull NamespaceDescriptor ownerDescriptor
|
||||
) {
|
||||
NamedMembers namedMembers = provider.getMembersCache().get(functionName);
|
||||
if (namedMembers != null) {
|
||||
SimpleFunctionDescriptor samConstructor = resolveSamConstructor(ownerDescriptor, namedMembers);
|
||||
if (samConstructor != null) {
|
||||
return Collections.<FunctionDescriptor>singleton(samConstructor);
|
||||
}
|
||||
public Set<FunctionDescriptor> resolveFunctionGroupForPackage(@NotNull NamedMembers members, @NotNull NamespaceDescriptor owner) {
|
||||
SimpleFunctionDescriptor samConstructor = resolveSamConstructor(owner, members);
|
||||
if (samConstructor != null) {
|
||||
return Collections.<FunctionDescriptor>singleton(samConstructor);
|
||||
}
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
+5
-23
@@ -31,7 +31,6 @@ import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||
import org.jetbrains.jet.lang.resolve.java.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeFieldSignatureData;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiFieldWrapper;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
@@ -68,35 +67,18 @@ public final class JavaPropertyResolver {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<VariableDescriptor> resolveFieldGroupByName(
|
||||
@NotNull Name fieldName,
|
||||
@NotNull PsiDeclarationProvider provider,
|
||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
||||
) {
|
||||
NamedMembers namedMembers = provider.getMembersCache().get(fieldName);
|
||||
if (namedMembers == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
public Set<VariableDescriptor> resolveFieldGroup(@NotNull NamedMembers members, @NotNull ClassOrNamespaceDescriptor ownerDescriptor) {
|
||||
Name propertyName = members.getName();
|
||||
|
||||
return resolveNamedGroupProperties(ownerDescriptor, namedMembers, fieldName,
|
||||
"class or namespace " + DescriptorUtils.getFQName(ownerDescriptor));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private Set<VariableDescriptor> resolveNamedGroupProperties(
|
||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor,
|
||||
@NotNull NamedMembers namedMembers,
|
||||
@NotNull Name propertyName,
|
||||
@NotNull String context
|
||||
) {
|
||||
List<PsiFieldWrapper> fields = namedMembers.getFields();
|
||||
List<PsiFieldWrapper> fields = members.getFields();
|
||||
|
||||
Set<PropertyDescriptor> propertiesFromCurrent = new HashSet<PropertyDescriptor>(1);
|
||||
assert fields.size() <= 1;
|
||||
if (fields.size() == 1) {
|
||||
PsiFieldWrapper field = fields.iterator().next();
|
||||
if (DescriptorResolverUtils.isCorrectOwnerForEnumMember(ownerDescriptor, field.getPsiField())) {
|
||||
propertiesFromCurrent.add(resolveProperty(ownerDescriptor, propertyName, context, field));
|
||||
propertiesFromCurrent.add(resolveProperty(ownerDescriptor, propertyName,
|
||||
"class or namespace " + DescriptorUtils.getFQName(ownerDescriptor), field));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+9
-6
@@ -28,7 +28,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||
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;
|
||||
|
||||
@@ -38,7 +37,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
|
||||
@NotNull
|
||||
protected final JavaDescriptorResolver javaDescriptorResolver;
|
||||
@NotNull
|
||||
protected final PsiDeclarationProvider declarationProvider;
|
||||
protected final MembersProvider membersProvider;
|
||||
@NotNull
|
||||
private final Map<Name, Set<FunctionDescriptor>> functionDescriptors = Maps.newHashMap();
|
||||
@NotNull
|
||||
@@ -56,10 +55,10 @@ public abstract class JavaBaseScope extends JetScopeImpl {
|
||||
protected JavaBaseScope(
|
||||
@NotNull ClassOrNamespaceDescriptor descriptor,
|
||||
@NotNull JavaDescriptorResolver javaDescriptorResolver,
|
||||
@NotNull PsiDeclarationProvider declarationProvider
|
||||
@NotNull MembersProvider membersProvider
|
||||
) {
|
||||
this.javaDescriptorResolver = javaDescriptorResolver;
|
||||
this.declarationProvider = declarationProvider;
|
||||
this.membersProvider = membersProvider;
|
||||
this.descriptor = descriptor;
|
||||
}
|
||||
|
||||
@@ -86,7 +85,11 @@ public abstract class JavaBaseScope extends JetScopeImpl {
|
||||
|
||||
@NotNull
|
||||
private Set<VariableDescriptor> computePropertyDescriptors(@NotNull Name name) {
|
||||
return javaDescriptorResolver.resolveFieldGroupByName(name, declarationProvider, descriptor);
|
||||
NamedMembers members = membersProvider.get(name);
|
||||
if (members == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
return javaDescriptorResolver.resolveFieldGroup(members, descriptor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -146,7 +149,7 @@ public abstract class JavaBaseScope extends JetScopeImpl {
|
||||
@NotNull
|
||||
private Collection<DeclarationDescriptor> computeFieldAndFunctionDescriptors() {
|
||||
Collection<DeclarationDescriptor> result = Lists.newArrayList();
|
||||
for (NamedMembers members : declarationProvider.getMembersCache().allMembers()) {
|
||||
for (NamedMembers members : membersProvider.allMembers()) {
|
||||
Name name = members.getName();
|
||||
ProgressIndicatorProvider.checkCanceled();
|
||||
result.addAll(getFunctions(name));
|
||||
|
||||
+9
-11
@@ -20,18 +20,13 @@ import com.intellij.psi.PsiClass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||
import org.jetbrains.jet.lang.resolve.name.LabelName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public abstract class JavaClassMembersScope extends JavaBaseScope {
|
||||
@NotNull
|
||||
protected final ClassPsiDeclarationProvider declarationProvider;
|
||||
@NotNull
|
||||
protected final PsiClass psiClass;
|
||||
|
||||
@@ -40,11 +35,10 @@ public abstract class JavaClassMembersScope extends JavaBaseScope {
|
||||
protected JavaClassMembersScope(
|
||||
@NotNull ClassOrNamespaceDescriptor descriptor,
|
||||
@NotNull PsiClass psiClass,
|
||||
@NotNull ClassPsiDeclarationProvider declarationProvider,
|
||||
@NotNull MembersProvider membersProvider,
|
||||
@NotNull JavaDescriptorResolver javaDescriptorResolver
|
||||
) {
|
||||
super(descriptor, javaDescriptorResolver, declarationProvider);
|
||||
this.declarationProvider = declarationProvider;
|
||||
super(descriptor, javaDescriptorResolver, membersProvider);
|
||||
this.psiClass = psiClass;
|
||||
}
|
||||
|
||||
@@ -64,7 +58,11 @@ public abstract class JavaClassMembersScope extends JavaBaseScope {
|
||||
@NotNull
|
||||
@Override
|
||||
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
|
||||
return javaDescriptorResolver.resolveFunctionGroupForClass(name, declarationProvider, descriptor, psiClass);
|
||||
NamedMembers members = membersProvider.get(name);
|
||||
if (members == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
return javaDescriptorResolver.resolveFunctionGroupForClass(members, descriptor, psiClass);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+1
-5
@@ -23,7 +23,6 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
@@ -45,10 +44,7 @@ public final class JavaClassNonStaticMembersScope extends JavaClassMembersScope
|
||||
@NotNull PsiClassFinder psiClassFinder,
|
||||
@NotNull JavaDescriptorResolver javaDescriptorResolver
|
||||
) {
|
||||
super(descriptor,
|
||||
psiClass,
|
||||
new ClassPsiDeclarationProvider(psiClass, staticMembersOfPsiClass, psiClassFinder),
|
||||
javaDescriptorResolver);
|
||||
super(descriptor, psiClass, MembersProvider.forClass(psiClassFinder, psiClass, staticMembersOfPsiClass), javaDescriptorResolver);
|
||||
this.descriptor = descriptor;
|
||||
this.psiClass = psiClass;
|
||||
this.staticMembersOfPsiClass = staticMembersOfPsiClass;
|
||||
|
||||
+1
-2
@@ -25,7 +25,6 @@ import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
|
||||
@@ -45,7 +44,7 @@ public final class JavaClassStaticMembersScope extends JavaClassMembersScope {
|
||||
@NotNull PsiClassFinder psiClassFinder,
|
||||
@NotNull JavaDescriptorResolver javaDescriptorResolver
|
||||
) {
|
||||
super(descriptor, psiClass, new ClassPsiDeclarationProvider(psiClass, true, psiClassFinder), javaDescriptorResolver);
|
||||
super(descriptor, psiClass, MembersProvider.forClass(psiClassFinder, psiClass, true), javaDescriptorResolver);
|
||||
this.packageFQN = packageFQN;
|
||||
this.psiClass = psiClass;
|
||||
}
|
||||
|
||||
+7
-3
@@ -24,7 +24,7 @@ import com.intellij.psi.PsiPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.PackagePsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
|
||||
@@ -47,7 +47,7 @@ public final class JavaPackageScope extends JavaBaseScope {
|
||||
@NotNull JavaDescriptorResolver javaDescriptorResolver,
|
||||
@NotNull PsiClassFinder psiClassFinder
|
||||
) {
|
||||
super(descriptor, javaDescriptorResolver, new PackagePsiDeclarationProvider(psiPackage, psiClassFinder));
|
||||
super(descriptor, javaDescriptorResolver, MembersProvider.forPackage(psiClassFinder, psiPackage));
|
||||
this.psiPackage = psiPackage;
|
||||
this.packageFQN = packageFQN;
|
||||
this.psiClassFinder = psiClassFinder;
|
||||
@@ -134,7 +134,11 @@ public final class JavaPackageScope extends JavaBaseScope {
|
||||
@Override
|
||||
@NotNull
|
||||
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
|
||||
return javaDescriptorResolver.resolveFunctionGroupForPackage(name, declarationProvider, (NamespaceDescriptor) descriptor);
|
||||
NamedMembers members = membersProvider.get(name);
|
||||
if (members == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
return javaDescriptorResolver.resolveFunctionGroupForPackage(members, (NamespaceDescriptor) descriptor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.lang.resolve.java.scope;
|
||||
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.MembersCache;
|
||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/* package */ class MembersProvider {
|
||||
@NotNull
|
||||
private final PsiClassFinder psiClassFinder;
|
||||
@Nullable
|
||||
private final PsiClass psiClass;
|
||||
@Nullable
|
||||
private final PsiPackage psiPackage;
|
||||
private final boolean staticMembers;
|
||||
|
||||
private MembersProvider(
|
||||
@NotNull PsiClassFinder psiClassFinder,
|
||||
@Nullable PsiClass psiClass,
|
||||
@Nullable PsiPackage psiPackage,
|
||||
boolean staticMembers
|
||||
) {
|
||||
this.psiClassFinder = psiClassFinder;
|
||||
this.psiClass = psiClass;
|
||||
this.psiPackage = psiPackage;
|
||||
this.staticMembers = staticMembers;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static MembersProvider forPackage(@NotNull PsiClassFinder psiClassFinder, @NotNull PsiPackage psiPackage) {
|
||||
return new MembersProvider(psiClassFinder, null, psiPackage, true);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static MembersProvider forClass(@NotNull PsiClassFinder psiClassFinder, @NotNull PsiClass psiClass, boolean staticMembers) {
|
||||
return new MembersProvider(psiClassFinder, psiClass, null, staticMembers);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public NamedMembers get(@NotNull Name name) {
|
||||
return getMembersCache().get(name);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Collection<NamedMembers> allMembers() {
|
||||
return getMembersCache().allMembers();
|
||||
}
|
||||
|
||||
private MembersCache membersCache;
|
||||
@NotNull
|
||||
private MembersCache getMembersCache() {
|
||||
if (membersCache == null) {
|
||||
membersCache = MembersCache.buildMembersByNameCache(psiClassFinder, psiClass, psiPackage, staticMembers);
|
||||
}
|
||||
return membersCache;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user