Changed API of SignaturesPropagationData.

This commit is contained in:
Evgeny Gerashchenko
2012-11-26 20:43:53 +04:00
parent 914db59ea0
commit e761d69e9c
2 changed files with 51 additions and 18 deletions
@@ -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<String> signatureErrors = Lists.newArrayList();
private final List<FunctionDescriptor> 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<String, Void> reportError = new Function1<String, Void>() {
@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<String> getSignatureErrors() {
return signatureErrors;
}
public List<FunctionDescriptor> getSuperFunctions() {
return superFunctions;
}
private static JetType modifyReturnTypeAccordingToSuperMethods(
@NotNull JetType autoType, // type built by JavaTypeTransformer
@NotNull List<FunctionDescriptor> superFunctions,
@NotNull Function1<String, Void> 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<FunctionDescriptor> superFunctions,
@NotNull Function1<String, Void> reportError
@@ -96,7 +137,7 @@ public class SignaturesPropagationData {
return new JavaDescriptorResolver.ValueParameterDescriptors(parameters.getReceiverType(), resultParameters);
}
public static List<FunctionDescriptor> getSuperFunctionsForMethod(
private static List<FunctionDescriptor> 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;
@@ -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<String> signatureErrors = Lists.newArrayList();
List<FunctionDescriptor> superFunctions = SignaturesPropagationData.getSuperFunctionsForMethod(method, trace);
SignaturesPropagationData signaturesPropagationData =
new SignaturesPropagationData(returnType, valueParameterDescriptors, method, trace);
List<FunctionDescriptor> superFunctions = signaturesPropagationData.getSuperFunctions();
Function1<String, Void> reportError = new Function1<String, Void>() {
@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 =