Create PropagatedMethodSignature nested class

Should be an abstraction over SignaturesPropagationData
This commit is contained in:
Alexander Udalov
2013-08-08 18:34:04 +04:00
parent 1cc4b42756
commit 16d63f6109
2 changed files with 43 additions and 22 deletions
@@ -18,10 +18,7 @@ package org.jetbrains.jet.lang.resolve.java.resolver;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.java.JavaBindingContext; import org.jetbrains.jet.lang.resolve.java.JavaBindingContext;
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeFieldSignatureData; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeFieldSignatureData;
@@ -44,15 +41,15 @@ public class ExternalSignatureResolver {
} }
private abstract static class MemberSignature { private abstract static class MemberSignature {
private final String signatureError; private final List<String> signatureErrors;
protected MemberSignature(@Nullable String signatureError) { protected MemberSignature(@NotNull List<String> signatureErrors) {
this.signatureError = signatureError; this.signatureErrors = signatureErrors;
} }
@NotNull @NotNull
public List<String> getErrors() { public List<String> getErrors() {
return signatureError == null ? Collections.<String>emptyList() : Collections.singletonList(signatureError); return signatureErrors;
} }
} }
@@ -67,9 +64,9 @@ public class ExternalSignatureResolver {
@Nullable JetType receiverType, @Nullable JetType receiverType,
@NotNull List<ValueParameterDescriptor> valueParameters, @NotNull List<ValueParameterDescriptor> valueParameters,
@NotNull List<TypeParameterDescriptor> typeParameters, @NotNull List<TypeParameterDescriptor> typeParameters,
@Nullable String signatureError @NotNull List<String> signatureErrors
) { ) {
super(signatureError); super(signatureErrors);
this.returnType = returnType; this.returnType = returnType;
this.receiverType = receiverType; this.receiverType = receiverType;
this.valueParameters = valueParameters; this.valueParameters = valueParameters;
@@ -101,7 +98,7 @@ public class ExternalSignatureResolver {
private final JetType returnType; private final JetType returnType;
public AlternativeFieldSignature(@NotNull JetType returnType, @Nullable String signatureError) { public AlternativeFieldSignature(@NotNull JetType returnType, @Nullable String signatureError) {
super(signatureError); super(signatureError == null ? Collections.<String>emptyList() : Collections.singletonList(signatureError));
this.returnType = returnType; this.returnType = returnType;
} }
@@ -111,8 +108,29 @@ public class ExternalSignatureResolver {
} }
} }
public static class PropagatedMethodSignature extends AlternativeMethodSignature {
private final List<FunctionDescriptor> superMethods;
public PropagatedMethodSignature(
@Nullable JetType returnType,
@Nullable JetType receiverType,
@NotNull List<ValueParameterDescriptor> valueParameters,
@NotNull List<TypeParameterDescriptor> typeParameters,
@NotNull List<String> signatureErrors,
@NotNull List<FunctionDescriptor> superMethods
) {
super(returnType, receiverType, valueParameters, typeParameters, signatureErrors);
this.superMethods = superMethods;
}
@NotNull
public List<FunctionDescriptor> getSuperMethods() {
return superMethods;
}
}
@NotNull @NotNull
public SignaturesPropagationData resolvePropagatedSignature( public PropagatedMethodSignature resolvePropagatedSignature(
@NotNull JavaMethod method, @NotNull JavaMethod method,
@NotNull ClassDescriptor owner, @NotNull ClassDescriptor owner,
@NotNull JetType returnType, @NotNull JetType returnType,
@@ -120,7 +138,11 @@ public class ExternalSignatureResolver {
@NotNull List<ValueParameterDescriptor> valueParameters, @NotNull List<ValueParameterDescriptor> valueParameters,
@NotNull List<TypeParameterDescriptor> typeParameters @NotNull List<TypeParameterDescriptor> typeParameters
) { ) {
return new SignaturesPropagationData(owner, returnType, receiverType, valueParameters, typeParameters, method, trace); SignaturesPropagationData data =
new SignaturesPropagationData(owner, returnType, receiverType, valueParameters, typeParameters, method, trace);
return new PropagatedMethodSignature(data.getModifiedReturnType(), data.getModifiedReceiverType(),
data.getModifiedValueParameters(), data.getModifiedTypeParameters(), data.getSignatureErrors(),
data.getSuperFunctions());
} }
@SuppressWarnings("MethodMayBeStatic") @SuppressWarnings("MethodMayBeStatic")
@@ -138,10 +160,10 @@ public class ExternalSignatureResolver {
if (data.isAnnotated() && !data.hasErrors()) { if (data.isAnnotated() && !data.hasErrors()) {
return new AlternativeMethodSignature(data.getReturnType(), receiverType, data.getValueParameters(), data.getTypeParameters(), return new AlternativeMethodSignature(data.getReturnType(), receiverType, data.getValueParameters(), data.getTypeParameters(),
null); Collections.<String>emptyList());
} }
String error = data.hasErrors() ? data.getError() : null; List<String> error = data.hasErrors() ? Collections.singletonList(data.getError()) : Collections.<String>emptyList();
return new AlternativeMethodSignature(returnType, receiverType, valueParameters, typeParameters, error); return new AlternativeMethodSignature(returnType, receiverType, valueParameters, typeParameters, error);
} }
@@ -36,7 +36,6 @@ import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmByte
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaMethodDescriptor; import org.jetbrains.jet.lang.resolve.java.descriptor.JavaMethodDescriptor;
import org.jetbrains.jet.lang.resolve.java.descriptor.SamAdapterDescriptor; import org.jetbrains.jet.lang.resolve.java.descriptor.SamAdapterDescriptor;
import org.jetbrains.jet.lang.resolve.java.descriptor.SamConstructorDescriptor; import org.jetbrains.jet.lang.resolve.java.descriptor.SamConstructorDescriptor;
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData;
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesUtil; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesUtil;
import org.jetbrains.jet.lang.resolve.java.scope.NamedMembers; import org.jetbrains.jet.lang.resolve.java.scope.NamedMembers;
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod; import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
@@ -148,18 +147,18 @@ public final class JavaFunctionResolver {
signatureErrors = effectiveSignature.getErrors(); signatureErrors = effectiveSignature.getErrors();
} }
else if (ownerDescriptor instanceof ClassDescriptor) { else if (ownerDescriptor instanceof ClassDescriptor) {
SignaturesPropagationData propagated = externalSignatureResolver ExternalSignatureResolver.PropagatedMethodSignature propagated = externalSignatureResolver
.resolvePropagatedSignature(method, (ClassDescriptor) ownerDescriptor, returnType, null, valueParameters, .resolvePropagatedSignature(method, (ClassDescriptor) ownerDescriptor, returnType, null, valueParameters,
methodTypeParameters); methodTypeParameters);
superFunctions = propagated.getSuperFunctions(); superFunctions = propagated.getSuperMethods();
effectiveSignature = externalSignatureResolver effectiveSignature = externalSignatureResolver
.resolveAlternativeMethodSignature(method, !superFunctions.isEmpty(), propagated.getModifiedReturnType(), .resolveAlternativeMethodSignature(method, !superFunctions.isEmpty(), propagated.getReturnType(),
propagated.getModifiedReceiverType(), propagated.getModifiedValueParameters(), propagated.getReceiverType(), propagated.getValueParameters(),
propagated.getModifiedTypeParameters()); propagated.getTypeParameters());
signatureErrors = new ArrayList<String>(propagated.getSignatureErrors()); signatureErrors = new ArrayList<String>(propagated.getErrors());
signatureErrors.addAll(effectiveSignature.getErrors()); signatureErrors.addAll(effectiveSignature.getErrors());
} }
else { else {