Passing super functions instead of method and trace to modifyReturnTypeAccordingToSuperMethods.

This commit is contained in:
Evgeny Gerashchenko
2012-11-21 19:00:41 +04:00
parent 5b6828a7ce
commit 6530d48785
2 changed files with 11 additions and 7 deletions
@@ -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<FunctionDescriptor> superFunctions,
@NotNull Function1<String, Void> reportError
) {
List<JetType> typesFromSuperMethods = ContainerUtil.map(getSuperFunctionsForMethod(method, trace),
List<JetType> typesFromSuperMethods = ContainerUtil.map(superFunctions,
new Function<FunctionDescriptor, JetType>() {
@Override
public JetType fun(FunctionDescriptor superFunction) {
@@ -142,7 +142,9 @@ public final class JavaFunctionResolver {
final List<String> signatureErrors = Lists.newArrayList();
returnType = SignaturesPropagation.modifyReturnTypeAccordingToSuperMethods(returnType, method, trace, new Function1<String, Void>() {
List<FunctionDescriptor> superFunctions = SignaturesPropagation.getSuperFunctionsForMethod(method, trace);
returnType = SignaturesPropagation.modifyReturnTypeAccordingToSuperMethods(returnType, superFunctions, new Function1<String, Void>() {
@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<FunctionDescriptor> superFunctions = SignaturesPropagation.getSuperFunctionsForMethod(method, trace);
private static void checkFunctionsOverrideCorrectly(
PsiMethodWrapper method,
List<FunctionDescriptor> superFunctions,
FunctionDescriptor functionDescriptor
) {
for (FunctionDescriptor superFunction : superFunctions) {
TypeSubstitutor substitutor = SubstitutionUtils.buildDeepSubstitutor(
((ClassDescriptor) functionDescriptor.getContainingDeclaration()).getDefaultType());