From 16d63f6109c07238ecd9cb902c83c2f81b30138c Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 8 Aug 2013 18:34:04 +0400 Subject: [PATCH] Create PropagatedMethodSignature nested class Should be an abstraction over SignaturesPropagationData --- .../resolver/ExternalSignatureResolver.java | 52 +++++++++++++------ .../java/resolver/JavaFunctionResolver.java | 13 +++-- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ExternalSignatureResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ExternalSignatureResolver.java index 872f36d247e..8f7ef582aae 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ExternalSignatureResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ExternalSignatureResolver.java @@ -18,10 +18,7 @@ package org.jetbrains.jet.lang.resolve.java.resolver; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; -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.descriptors.*; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.java.JavaBindingContext; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeFieldSignatureData; @@ -44,15 +41,15 @@ public class ExternalSignatureResolver { } private abstract static class MemberSignature { - private final String signatureError; + private final List signatureErrors; - protected MemberSignature(@Nullable String signatureError) { - this.signatureError = signatureError; + protected MemberSignature(@NotNull List signatureErrors) { + this.signatureErrors = signatureErrors; } @NotNull public List getErrors() { - return signatureError == null ? Collections.emptyList() : Collections.singletonList(signatureError); + return signatureErrors; } } @@ -67,9 +64,9 @@ public class ExternalSignatureResolver { @Nullable JetType receiverType, @NotNull List valueParameters, @NotNull List typeParameters, - @Nullable String signatureError + @NotNull List signatureErrors ) { - super(signatureError); + super(signatureErrors); this.returnType = returnType; this.receiverType = receiverType; this.valueParameters = valueParameters; @@ -101,7 +98,7 @@ public class ExternalSignatureResolver { private final JetType returnType; public AlternativeFieldSignature(@NotNull JetType returnType, @Nullable String signatureError) { - super(signatureError); + super(signatureError == null ? Collections.emptyList() : Collections.singletonList(signatureError)); this.returnType = returnType; } @@ -111,8 +108,29 @@ public class ExternalSignatureResolver { } } + public static class PropagatedMethodSignature extends AlternativeMethodSignature { + private final List superMethods; + + public PropagatedMethodSignature( + @Nullable JetType returnType, + @Nullable JetType receiverType, + @NotNull List valueParameters, + @NotNull List typeParameters, + @NotNull List signatureErrors, + @NotNull List superMethods + ) { + super(returnType, receiverType, valueParameters, typeParameters, signatureErrors); + this.superMethods = superMethods; + } + + @NotNull + public List getSuperMethods() { + return superMethods; + } + } + @NotNull - public SignaturesPropagationData resolvePropagatedSignature( + public PropagatedMethodSignature resolvePropagatedSignature( @NotNull JavaMethod method, @NotNull ClassDescriptor owner, @NotNull JetType returnType, @@ -120,7 +138,11 @@ public class ExternalSignatureResolver { @NotNull List valueParameters, @NotNull List 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") @@ -138,10 +160,10 @@ public class ExternalSignatureResolver { if (data.isAnnotated() && !data.hasErrors()) { return new AlternativeMethodSignature(data.getReturnType(), receiverType, data.getValueParameters(), data.getTypeParameters(), - null); + Collections.emptyList()); } - String error = data.hasErrors() ? data.getError() : null; + List error = data.hasErrors() ? Collections.singletonList(data.getError()) : Collections.emptyList(); return new AlternativeMethodSignature(returnType, receiverType, valueParameters, typeParameters, error); } 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 7b0567092a6..6efd83484cf 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 @@ -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.SamAdapterDescriptor; 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.scope.NamedMembers; import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod; @@ -148,18 +147,18 @@ public final class JavaFunctionResolver { signatureErrors = effectiveSignature.getErrors(); } else if (ownerDescriptor instanceof ClassDescriptor) { - SignaturesPropagationData propagated = externalSignatureResolver + ExternalSignatureResolver.PropagatedMethodSignature propagated = externalSignatureResolver .resolvePropagatedSignature(method, (ClassDescriptor) ownerDescriptor, returnType, null, valueParameters, methodTypeParameters); - superFunctions = propagated.getSuperFunctions(); + superFunctions = propagated.getSuperMethods(); effectiveSignature = externalSignatureResolver - .resolveAlternativeMethodSignature(method, !superFunctions.isEmpty(), propagated.getModifiedReturnType(), - propagated.getModifiedReceiverType(), propagated.getModifiedValueParameters(), - propagated.getModifiedTypeParameters()); + .resolveAlternativeMethodSignature(method, !superFunctions.isEmpty(), propagated.getReturnType(), + propagated.getReceiverType(), propagated.getValueParameters(), + propagated.getTypeParameters()); - signatureErrors = new ArrayList(propagated.getSignatureErrors()); + signatureErrors = new ArrayList(propagated.getErrors()); signatureErrors.addAll(effectiveSignature.getErrors()); } else {