From e761d69e9c53ef0e2f9abb490586ac6b2da4a3a0 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 26 Nov 2012 20:43:53 +0400 Subject: [PATCH] Changed API of SignaturesPropagationData. --- .../SignaturesPropagationData.java | 50 ++++++++++++++++--- .../java/resolver/JavaFunctionResolver.java | 19 +++---- 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java index 11a360428c7..fab907314fc 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java @@ -40,7 +40,48 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import java.util.*; public class SignaturesPropagationData { - public static JetType modifyReturnTypeAccordingToSuperMethods( + private final JavaDescriptorResolver.ValueParameterDescriptors modifiedValueParameters; + private final JetType modifiedReturnType; + + private final List signatureErrors = Lists.newArrayList(); + private final List superFunctions; + + public SignaturesPropagationData( + @NotNull JetType autoReturnType, // type built by JavaTypeTransformer from Java signature and @NotNull annotations + @NotNull JavaDescriptorResolver.ValueParameterDescriptors autoValueParameters, // descriptors built by parameters resolver + @NotNull PsiMethodWrapper method, + @NotNull BindingTrace trace + ) { + Function1 reportError = new Function1() { + @Override + public Void invoke(String error) { + signatureErrors.add(error); + return null; + } + }; + superFunctions = getSuperFunctionsForMethod(method, trace); + + modifiedReturnType = modifyReturnTypeAccordingToSuperMethods(autoReturnType, superFunctions, reportError); + modifiedValueParameters = modifyValueParametersAccordingToSuperMethods(autoValueParameters, superFunctions, reportError); + } + + public JavaDescriptorResolver.ValueParameterDescriptors getModifiedValueParameters() { + return modifiedValueParameters; + } + + public JetType getModifiedReturnType() { + return modifiedReturnType; + } + + public List getSignatureErrors() { + return signatureErrors; + } + + public List getSuperFunctions() { + return superFunctions; + } + + private static JetType modifyReturnTypeAccordingToSuperMethods( @NotNull JetType autoType, // type built by JavaTypeTransformer @NotNull List superFunctions, @NotNull Function1 reportError @@ -56,7 +97,7 @@ public class SignaturesPropagationData { return modifyTypeAccordingToSuperMethods(autoType, typesFromSuperMethods, true, reportError); } - public static JavaDescriptorResolver.ValueParameterDescriptors modifyValueParametersAccordingToSuperMethods( + private static JavaDescriptorResolver.ValueParameterDescriptors modifyValueParametersAccordingToSuperMethods( @NotNull JavaDescriptorResolver.ValueParameterDescriptors parameters, // descriptors built by parameters resolver @NotNull List superFunctions, @NotNull Function1 reportError @@ -96,7 +137,7 @@ public class SignaturesPropagationData { return new JavaDescriptorResolver.ValueParameterDescriptors(parameters.getReceiverType(), resultParameters); } - public static List getSuperFunctionsForMethod( + private static List getSuperFunctionsForMethod( @NotNull PsiMethodWrapper method, @NotNull BindingTrace trace ) { @@ -439,9 +480,6 @@ public class SignaturesPropagationData { return classifier; } - private SignaturesPropagationData() { - } - private static class VarargCheckResult { public final JetType parameterType; public final boolean isVararg; 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 e50cb0376a8..e983a00e191 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 @@ -22,7 +22,6 @@ import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiType; import com.intellij.psi.util.PsiFormatUtil; -import jet.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; @@ -142,18 +141,14 @@ public final class JavaFunctionResolver { final List signatureErrors = Lists.newArrayList(); - List superFunctions = SignaturesPropagationData.getSuperFunctionsForMethod(method, trace); + SignaturesPropagationData signaturesPropagationData = + new SignaturesPropagationData(returnType, valueParameterDescriptors, method, trace); + List superFunctions = signaturesPropagationData.getSuperFunctions(); - Function1 reportError = new Function1() { - @Override - public Void invoke(String error) { - signatureErrors.add(error); - return null; - } - }; - returnType = SignaturesPropagationData.modifyReturnTypeAccordingToSuperMethods(returnType, superFunctions, reportError); - valueParameterDescriptors = SignaturesPropagationData - .modifyValueParametersAccordingToSuperMethods(valueParameterDescriptors, superFunctions, reportError); + returnType = signaturesPropagationData.getModifiedReturnType(); + valueParameterDescriptors = signaturesPropagationData.getModifiedValueParameters(); + + signatureErrors.addAll(signaturesPropagationData.getSignatureErrors()); // TODO consider better place for this check AlternativeMethodSignatureData alternativeMethodSignatureData =