Refactor NamedMembers: encapsulate fields

Also some stylistic changes
This commit is contained in:
Pavel V. Talanov
2012-10-06 18:19:40 +04:00
parent 4c8849c6f9
commit aa4665bfba
3 changed files with 53 additions and 28 deletions
@@ -79,15 +79,11 @@ public final class JavaDescriptorPropertiesResolver {
) { ) {
JavaDescriptorResolver.getResolverScopeData(scopeData); JavaDescriptorResolver.getResolverScopeData(scopeData);
if (namedMembers.propertyDescriptors != null) { if (namedMembers.getPropertyDescriptors() != null) {
return; return;
} }
if (namedMembers.propertyAccessors == null) { Map<String, GroupingValue> map = collectGroupingValuesFromAccessors(namedMembers.getPropertyAccessors());
namedMembers.propertyAccessors = Collections.emptyList();
}
Map<String, GroupingValue> map = collectGroupingValuesFromAccessors(namedMembers.propertyAccessors);
Set<PropertyDescriptor> propertiesFromCurrent = new HashSet<PropertyDescriptor>(1); Set<PropertyDescriptor> propertiesFromCurrent = new HashSet<PropertyDescriptor>(1);
@@ -263,7 +259,7 @@ public final class JavaDescriptorPropertiesResolver {
OverrideResolver.resolveUnknownVisibilities(properties, trace); OverrideResolver.resolveUnknownVisibilities(properties, trace);
properties.addAll(propertiesFromCurrent); properties.addAll(propertiesFromCurrent);
namedMembers.propertyDescriptors = Sets.<VariableDescriptor>newHashSet(properties); namedMembers.setPropertyDescriptors(Sets.<VariableDescriptor>newHashSet(properties));
} }
private List<TypeParameterDescriptor> resolvePropertyTypeParameters( private List<TypeParameterDescriptor> resolvePropertyTypeParameters(
@@ -941,7 +941,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
javaDescriptorPropertiesResolver.resolveNamedGroupProperties(scopeData.getClassOrNamespaceDescriptor(), scopeData, namedMembers, fieldName, javaDescriptorPropertiesResolver.resolveNamedGroupProperties(scopeData.getClassOrNamespaceDescriptor(), scopeData, namedMembers, fieldName,
"class or namespace " + qualifiedName); "class or namespace " + qualifiedName);
return namedMembers.propertyDescriptors; return namedMembers.getPropertyDescriptors();
} }
@NotNull @NotNull
@@ -960,7 +960,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
javaDescriptorPropertiesResolver.resolveNamedGroupProperties( javaDescriptorPropertiesResolver.resolveNamedGroupProperties(
scopeData.getClassOrNamespaceDescriptor(), scopeData, namedMembers, propertyName, scopeData.getClassOrNamespaceDescriptor(), scopeData, namedMembers, propertyName,
"class or namespace " + psiClass.getQualifiedName()); "class or namespace " + psiClass.getQualifiedName());
descriptors.addAll(namedMembers.propertyDescriptors); descriptors.addAll(namedMembers.getPropertyDescriptors());
} }
return descriptors; return descriptors;
@@ -970,14 +970,14 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
@NotNull ClassOrNamespaceDescriptor owner, PsiClass psiClass, @NotNull ClassOrNamespaceDescriptor owner, PsiClass psiClass,
NamedMembers namedMembers, Name methodName, ResolverScopeData scopeData NamedMembers namedMembers, Name methodName, ResolverScopeData scopeData
) { ) {
if (namedMembers.functionDescriptors != null) { if (namedMembers.getFunctionDescriptors() != null) {
return; return;
} }
final Set<FunctionDescriptor> functions = new HashSet<FunctionDescriptor>(); final Set<FunctionDescriptor> functions = new HashSet<FunctionDescriptor>();
Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet(); Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet();
for (PsiMethodWrapper method : namedMembers.methods) { for (PsiMethodWrapper method : namedMembers.getMethods()) {
SimpleFunctionDescriptor function = resolveMethodToFunctionDescriptor(psiClass, method, scopeData); SimpleFunctionDescriptor function = resolveMethodToFunctionDescriptor(psiClass, method, scopeData);
if (function != null) { if (function != null) {
functionsFromCurrent.add(function); functionsFromCurrent.add(function);
@@ -1014,7 +1014,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
} }
} }
namedMembers.functionDescriptors = functions; namedMembers.setFunctionDescriptors(functions);
} }
private static Set<SimpleFunctionDescriptor> getFunctionsFromSupertypes(ResolverScopeData scopeData, Name methodName) { private static Set<SimpleFunctionDescriptor> getFunctionsFromSupertypes(ResolverScopeData scopeData, Name methodName) {
@@ -1041,11 +1041,11 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
Map<Name, NamedMembers> namedMembersMap = scopeData.getNamedMembersMap(); Map<Name, NamedMembers> namedMembersMap = scopeData.getNamedMembersMap();
NamedMembers namedMembers = namedMembersMap.get(methodName); NamedMembers namedMembers = namedMembersMap.get(methodName);
if (namedMembers != null && namedMembers.methods != null) { if (namedMembers != null) {
resolveNamedGroupFunctions(scopeData.getClassOrNamespaceDescriptor(), scopeData.getPsiClass(), namedMembers, methodName, scopeData); resolveNamedGroupFunctions(scopeData.getClassOrNamespaceDescriptor(), scopeData.getPsiClass(), namedMembers, methodName, scopeData);
return namedMembers.functionDescriptors; return namedMembers.getFunctionDescriptors();
} }
else { else {
return Collections.emptySet(); return Collections.emptySet();
@@ -1408,7 +1408,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
NamedMembers namedMembers = entry.getValue(); NamedMembers namedMembers = entry.getValue();
resolveNamedGroupFunctions(scopeData.getClassOrNamespaceDescriptor(), scopeData.getPsiClass(), resolveNamedGroupFunctions(scopeData.getClassOrNamespaceDescriptor(), scopeData.getPsiClass(),
namedMembers, methodName, scopeData); namedMembers, methodName, scopeData);
functions.addAll(namedMembers.functionDescriptors); functions.addAll(namedMembers.getFunctionDescriptors());
} }
return functions; return functions;
@@ -16,36 +16,65 @@
package org.jetbrains.jet.lang.resolve.java; package org.jetbrains.jet.lang.resolve.java;
import com.google.common.collect.Lists;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor; import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper; import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
/** /**
* @author Stepan Koltsov * @author Stepan Koltsov
*/ */
class NamedMembers { public class NamedMembers {
List<PsiMethodWrapper> methods = new ArrayList<PsiMethodWrapper>(0);
@Nullable @NotNull
List<PropertyAccessorData> propertyAccessors; private final List<PsiMethodWrapper> methods = Lists.newArrayList();
@NotNull
private final List<PropertyAccessorData> propertyAccessors = Lists.newArrayList();
private Set<VariableDescriptor> propertyDescriptors;
Set<VariableDescriptor> propertyDescriptors;
/** Including from supertypes */ /** Including from supertypes */
Set<FunctionDescriptor> functionDescriptors; private Set<FunctionDescriptor> functionDescriptors;
void addMethod(PsiMethodWrapper method) { void addMethod(@NotNull PsiMethodWrapper method) {
methods.add(method); methods.add(method);
} }
void addPropertyAccessor(PropertyAccessorData propertyAccessorData) { void addPropertyAccessor(@NotNull PropertyAccessorData propertyAccessorData) {
if (propertyAccessors == null) {
propertyAccessors = new ArrayList<PropertyAccessorData>();
}
propertyAccessors.add(propertyAccessorData); propertyAccessors.add(propertyAccessorData);
} }
@NotNull
public List<PsiMethodWrapper> getMethods() {
return methods;
}
@NotNull
public List<PropertyAccessorData> getPropertyAccessors() {
return propertyAccessors;
}
@Nullable
public Set<VariableDescriptor> getPropertyDescriptors() {
return propertyDescriptors;
}
public void setPropertyDescriptors(@NotNull Set<VariableDescriptor> propertyDescriptors) {
this.propertyDescriptors = propertyDescriptors;
}
@Nullable
public Set<FunctionDescriptor> getFunctionDescriptors() {
return functionDescriptors;
}
public void setFunctionDescriptors(@NotNull Set<FunctionDescriptor> functionDescriptors) {
this.functionDescriptors = functionDescriptors;
}
} }