diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagation.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagation.java index c6abb7a3f8e..96567b9b6bc 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagation.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagation.java @@ -40,11 +40,10 @@ import java.util.*; public class SignaturesPropagation { public static JetType modifyReturnTypeAccordingToSuperMethods( @NotNull JetType autoType, // type built by JavaTypeTransformer - @NotNull PsiMethodWrapper method, - @NotNull BindingTrace trace, + @NotNull List superFunctions, @NotNull Function1 reportError ) { - List typesFromSuperMethods = ContainerUtil.map(getSuperFunctionsForMethod(method, trace), + List typesFromSuperMethods = ContainerUtil.map(superFunctions, new Function() { @Override public JetType fun(FunctionDescriptor superFunction) { 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 dd9c4d4ecb5..3e56699bcc3 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 @@ -142,7 +142,9 @@ public final class JavaFunctionResolver { final List signatureErrors = Lists.newArrayList(); - returnType = SignaturesPropagation.modifyReturnTypeAccordingToSuperMethods(returnType, method, trace, new Function1() { + List superFunctions = SignaturesPropagation.getSuperFunctionsForMethod(method, trace); + + returnType = SignaturesPropagation.modifyReturnTypeAccordingToSuperMethods(returnType, superFunctions, new Function1() { @Override public Void invoke(String error) { signatureErrors.add(error); @@ -186,7 +188,7 @@ public final class JavaFunctionResolver { } if (signatureErrors.isEmpty()) { - checkFunctionsOverrideCorrectly(method, functionDescriptorImpl); + checkFunctionsOverrideCorrectly(method, superFunctions, functionDescriptorImpl); } else { trace.record(BindingContext.LOAD_FROM_JAVA_SIGNATURE_ERRORS, functionDescriptorImpl, signatureErrors); @@ -195,8 +197,11 @@ public final class JavaFunctionResolver { return functionDescriptorImpl; } - private void checkFunctionsOverrideCorrectly(PsiMethodWrapper method, FunctionDescriptor functionDescriptor) { - List superFunctions = SignaturesPropagation.getSuperFunctionsForMethod(method, trace); + private static void checkFunctionsOverrideCorrectly( + PsiMethodWrapper method, + List superFunctions, + FunctionDescriptor functionDescriptor + ) { for (FunctionDescriptor superFunction : superFunctions) { TypeSubstitutor substitutor = SubstitutionUtils.buildDeepSubstitutor( ((ClassDescriptor) functionDescriptor.getContainingDeclaration()).getDefaultType());