Refactor: introduce ClassPsiDeclarationProvider and PsiDeclarationProvider interfaces, use them in JavaFunctionResolver and JavaPropertyResolver
This commit is contained in:
+26
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2010-2012 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.data;
|
||||
|
||||
import com.intellij.psi.PsiClass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public interface ClassPsiDeclarationProvider extends PsiDeclarationProvider {
|
||||
|
||||
@NotNull
|
||||
PsiClass getPsiClass();
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2010-2012 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.data;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.java.MembersCache;
|
||||
|
||||
public interface PsiDeclarationProvider {
|
||||
|
||||
@NotNull
|
||||
MembersCache getMembersCache();
|
||||
|
||||
@NotNull
|
||||
Origin getOrigin();
|
||||
|
||||
//TODO: remove this method
|
||||
boolean isEmpty();
|
||||
}
|
||||
+10
-3
@@ -30,11 +30,10 @@ import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import static org.jetbrains.jet.lang.resolve.java.data.Origin.JAVA;
|
||||
import static org.jetbrains.jet.lang.resolve.java.data.Origin.KOTLIN;
|
||||
|
||||
public abstract class ResolverScopeData {
|
||||
public abstract class ResolverScopeData implements ClassPsiDeclarationProvider {
|
||||
|
||||
private MembersCache membersCache = null;
|
||||
|
||||
@Nullable
|
||||
private final PsiClass psiClass;
|
||||
|
||||
@Nullable
|
||||
@@ -84,6 +83,7 @@ public abstract class ResolverScopeData {
|
||||
return psiClass;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
@NotNull
|
||||
public MembersCache getMembersCache() {
|
||||
if (membersCache == null) {
|
||||
@@ -92,16 +92,23 @@ public abstract class ResolverScopeData {
|
||||
return membersCache;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
@NotNull
|
||||
public PsiClass getPsiClass() {
|
||||
return psiClass;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return psiClass == null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PsiPackage getPsiPackage() {
|
||||
return psiPackage;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Origin getOrigin() {
|
||||
return origin;
|
||||
|
||||
+6
-7
@@ -26,7 +26,8 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.data.ResolverScopeData;
|
||||
import org.jetbrains.jet.lang.resolve.java.data.ClassPsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.data.PsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
||||
import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||
@@ -84,7 +85,7 @@ public final class JavaFunctionResolver {
|
||||
@Nullable
|
||||
private SimpleFunctionDescriptor resolveMethodToFunctionDescriptor(
|
||||
@NotNull final PsiClass psiClass, final PsiMethodWrapper method,
|
||||
@NotNull ResolverScopeData scopeData, @NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
||||
@NotNull PsiDeclarationProvider scopeData, @NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
||||
) {
|
||||
PsiType returnPsiType = method.getReturnType();
|
||||
if (returnPsiType == null) {
|
||||
@@ -174,7 +175,7 @@ public final class JavaFunctionResolver {
|
||||
@NotNull
|
||||
private Set<FunctionDescriptor> resolveNamedGroupFunctions(
|
||||
@NotNull ClassOrNamespaceDescriptor owner, @NotNull PsiClass psiClass,
|
||||
NamedMembers namedMembers, Name methodName, ResolverScopeData scopeData
|
||||
NamedMembers namedMembers, Name methodName, PsiDeclarationProvider scopeData
|
||||
) {
|
||||
final Set<FunctionDescriptor> functions = new HashSet<FunctionDescriptor>();
|
||||
|
||||
@@ -225,17 +226,15 @@ public final class JavaFunctionResolver {
|
||||
@NotNull
|
||||
public Set<FunctionDescriptor> resolveFunctionGroup(
|
||||
@NotNull Name methodName,
|
||||
@NotNull ResolverScopeData scopeData,
|
||||
@NotNull ClassPsiDeclarationProvider scopeData,
|
||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
||||
) {
|
||||
MembersCache namedMembersMap = scopeData.getMembersCache();
|
||||
|
||||
NamedMembers namedMembers = namedMembersMap.get(methodName);
|
||||
NamedMembers namedMembers = scopeData.getMembersCache().get(methodName);
|
||||
if (namedMembers == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
PsiClass psiClass = scopeData.getPsiClass();
|
||||
assert psiClass != null;
|
||||
return resolveNamedGroupFunctions(ownerDescriptor, psiClass, namedMembers, methodName, scopeData);
|
||||
}
|
||||
|
||||
|
||||
+13
-7
@@ -27,6 +27,7 @@ import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.OverrideResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.data.PsiDeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.java.data.ResolverScopeData;
|
||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeFieldSignatureData;
|
||||
import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils;
|
||||
@@ -85,7 +86,7 @@ public final class JavaPropertyResolver {
|
||||
@NotNull
|
||||
public Set<VariableDescriptor> resolveFieldGroupByName(
|
||||
@NotNull Name fieldName,
|
||||
@NotNull ResolverScopeData scopeData,
|
||||
@NotNull PsiDeclarationProvider scopeData,
|
||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor
|
||||
) {
|
||||
NamedMembers namedMembers = scopeData.getMembersCache().get(fieldName);
|
||||
@@ -100,7 +101,7 @@ public final class JavaPropertyResolver {
|
||||
@NotNull
|
||||
private Set<VariableDescriptor> resolveNamedGroupProperties(
|
||||
@NotNull ClassOrNamespaceDescriptor ownerDescriptor,
|
||||
@NotNull ResolverScopeData scopeData,
|
||||
@NotNull PsiDeclarationProvider scopeData,
|
||||
@NotNull NamedMembers namedMembers,
|
||||
@NotNull Name propertyName,
|
||||
@NotNull String context
|
||||
@@ -167,7 +168,7 @@ public final class JavaPropertyResolver {
|
||||
@NotNull
|
||||
private PropertyDescriptor resolveProperty(
|
||||
@NotNull ClassOrNamespaceDescriptor owner,
|
||||
@NotNull ResolverScopeData scopeData,
|
||||
@NotNull PsiDeclarationProvider scopeData,
|
||||
@NotNull Name propertyName,
|
||||
@NotNull String context,
|
||||
@NotNull PropertyPsiData psiData
|
||||
@@ -420,7 +421,7 @@ public final class JavaPropertyResolver {
|
||||
return regularPropertiesCount;
|
||||
}
|
||||
|
||||
private static boolean isPropertyFinal(ResolverScopeData scopeData, PropertyPsiData psiData) {
|
||||
private static boolean isPropertyFinal(PsiDeclarationProvider scopeData, PropertyPsiData psiData) {
|
||||
if (scopeData.getOrigin() == JAVA) {
|
||||
return true;
|
||||
}
|
||||
@@ -443,11 +444,16 @@ public final class JavaPropertyResolver {
|
||||
@NotNull
|
||||
private ClassOrNamespaceDescriptor getRealOwner(
|
||||
@NotNull ClassOrNamespaceDescriptor owner,
|
||||
@NotNull ResolverScopeData scopeData,
|
||||
@NotNull PsiDeclarationProvider scopeData,
|
||||
boolean isStatic
|
||||
) {
|
||||
PsiClass psiClass = scopeData.getPsiClass();
|
||||
if (psiClass == null || !psiClass.isEnum() || !isStatic) {
|
||||
//TODO: hack!
|
||||
ResolverScopeData resolverScopeData = (ResolverScopeData) scopeData;
|
||||
if (resolverScopeData.isEmpty()) {
|
||||
return owner;
|
||||
}
|
||||
PsiClass psiClass = resolverScopeData.getPsiClass();
|
||||
if (!psiClass.isEnum() || !isStatic) {
|
||||
return owner;
|
||||
}
|
||||
final String qualifiedName = psiClass.getQualifiedName();
|
||||
|
||||
+2
-2
@@ -132,8 +132,8 @@ public abstract class JavaBaseScope extends JetScopeImpl {
|
||||
@NotNull
|
||||
private Collection<DeclarationDescriptor> computeAllDescriptors() {
|
||||
Collection<DeclarationDescriptor> result = Sets.newHashSet();
|
||||
PsiClass psiClass = resolverScopeData.getPsiClass();
|
||||
if (psiClass != null) {
|
||||
if (!resolverScopeData.isEmpty()) {
|
||||
PsiClass psiClass = resolverScopeData.getPsiClass();
|
||||
computeFieldAndFunctionDescriptors(result);
|
||||
computeInnerClasses(psiClass, result);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user