More direct resolving function group from Java.

This commit is contained in:
Evgeny Gerashchenko
2013-06-21 15:51:51 +04:00
parent b4ce39aeb1
commit caf25ad4eb
@@ -267,7 +267,6 @@ public final class JavaFunctionResolver {
@NotNull ClassOrNamespaceDescriptor owner, @NotNull PsiClass psiClass, @NotNull ClassOrNamespaceDescriptor owner, @NotNull PsiClass psiClass,
NamedMembers namedMembers, Name methodName, PsiDeclarationProvider scopeData NamedMembers namedMembers, Name methodName, PsiDeclarationProvider scopeData
) { ) {
final Set<FunctionDescriptor> functions = new HashSet<FunctionDescriptor>();
Set<SimpleFunctionDescriptor> functionsFromSupertypes = null; Set<SimpleFunctionDescriptor> functionsFromSupertypes = null;
if (owner instanceof ClassDescriptor) { if (owner instanceof ClassDescriptor) {
@@ -290,6 +289,8 @@ public final class JavaFunctionResolver {
ContainerUtil.addIfNotNull(functionsFromCurrent, resolveSamConstructor((NamespaceDescriptor) owner, namedMembers)); ContainerUtil.addIfNotNull(functionsFromCurrent, resolveSamConstructor((NamespaceDescriptor) owner, namedMembers));
} }
final Set<FunctionDescriptor> fakeOverrides = new HashSet<FunctionDescriptor>();
if (owner instanceof ClassDescriptor) { if (owner instanceof ClassDescriptor) {
ClassDescriptor classDescriptor = (ClassDescriptor) owner; ClassDescriptor classDescriptor = (ClassDescriptor) owner;
@@ -297,7 +298,7 @@ public final class JavaFunctionResolver {
new OverrideResolver.DescriptorSink() { new OverrideResolver.DescriptorSink() {
@Override @Override
public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) { public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) {
functions.add((FunctionDescriptor) fakeOverride); fakeOverrides.add((FunctionDescriptor) fakeOverride);
} }
@Override @Override
@@ -310,16 +311,19 @@ public final class JavaFunctionResolver {
}); });
} }
OverrideResolver.resolveUnknownVisibilities(functions, trace); OverrideResolver.resolveUnknownVisibilities(fakeOverrides, trace);
functions.addAll(functionsFromCurrent);
Set<FunctionDescriptor> functions = Sets.newHashSet(fakeOverrides);
if (isEnumClassObject(owner)) { if (isEnumClassObject(owner)) {
for (FunctionDescriptor functionDescriptor : Lists.newArrayList(functions)) { for (FunctionDescriptor functionDescriptor : functionsFromCurrent) {
if (isEnumValueOfMethod(functionDescriptor) || isEnumValuesMethod(functionDescriptor)) { if (!(isEnumValueOfMethod(functionDescriptor) || isEnumValuesMethod(functionDescriptor))) {
functions.remove(functionDescriptor); functions.add(functionDescriptor);
} }
} }
} }
else {
functions.addAll(functionsFromCurrent);
}
return functions; return functions;
} }