diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java index 8372ed45dc2..da206954492 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java @@ -267,7 +267,6 @@ public final class JavaFunctionResolver { @NotNull ClassOrNamespaceDescriptor owner, @NotNull PsiClass psiClass, NamedMembers namedMembers, Name methodName, PsiDeclarationProvider scopeData ) { - final Set functions = new HashSet(); Set functionsFromSupertypes = null; if (owner instanceof ClassDescriptor) { @@ -290,6 +289,8 @@ public final class JavaFunctionResolver { ContainerUtil.addIfNotNull(functionsFromCurrent, resolveSamConstructor((NamespaceDescriptor) owner, namedMembers)); } + + final Set fakeOverrides = new HashSet(); if (owner instanceof ClassDescriptor) { ClassDescriptor classDescriptor = (ClassDescriptor) owner; @@ -297,7 +298,7 @@ public final class JavaFunctionResolver { new OverrideResolver.DescriptorSink() { @Override public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) { - functions.add((FunctionDescriptor) fakeOverride); + fakeOverrides.add((FunctionDescriptor) fakeOverride); } @Override @@ -310,16 +311,19 @@ public final class JavaFunctionResolver { }); } - OverrideResolver.resolveUnknownVisibilities(functions, trace); - functions.addAll(functionsFromCurrent); + OverrideResolver.resolveUnknownVisibilities(fakeOverrides, trace); + Set functions = Sets.newHashSet(fakeOverrides); if (isEnumClassObject(owner)) { - for (FunctionDescriptor functionDescriptor : Lists.newArrayList(functions)) { - if (isEnumValueOfMethod(functionDescriptor) || isEnumValuesMethod(functionDescriptor)) { - functions.remove(functionDescriptor); + for (FunctionDescriptor functionDescriptor : functionsFromCurrent) { + if (!(isEnumValueOfMethod(functionDescriptor) || isEnumValuesMethod(functionDescriptor))) { + functions.add(functionDescriptor); } } } + else { + functions.addAll(functionsFromCurrent); + } return functions; }