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