From 837353d9fd1a2535805e9fd0467b3ba1a2cf9236 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 9 Sep 2014 19:08:53 +0400 Subject: [PATCH] Skip alternative signatures in PLATFORM_TYPES mode, but use parameter names --- .../AlternativeFieldSignatureData.java | 3 +-- .../AlternativeMethodSignatureData.java | 16 ++++++++++++++-- .../TraceBasedExternalSignatureResolver.java | 10 ++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeFieldSignatureData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeFieldSignatureData.java index 7600c46d659..a0f07a43f97 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeFieldSignatureData.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeFieldSignatureData.java @@ -22,7 +22,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor; import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl; import org.jetbrains.jet.lang.psi.JetProperty; -import org.jetbrains.jet.lang.resolve.java.JavaPackage; import org.jetbrains.jet.lang.resolve.java.resolver.ExternalAnnotationResolver; import org.jetbrains.jet.lang.resolve.java.structure.JavaField; import org.jetbrains.jet.lang.types.JetType; @@ -41,7 +40,7 @@ public class AlternativeFieldSignatureData extends ElementAlternativeSignatureDa @NotNull Project project, boolean isVar ) { - String signature = JavaPackage.getPLATFORM_TYPES() ? null : SignaturesUtil.getKotlinSignature(externalAnnotationResolver, field); + String signature = SignaturesUtil.getKotlinSignature(externalAnnotationResolver, field); if (signature == null) { setAnnotated(false); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeMethodSignatureData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeMethodSignatureData.java index c3eeef5652e..f16546bcbf6 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeMethodSignatureData.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeMethodSignatureData.java @@ -28,7 +28,6 @@ import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl; import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl; import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.lang.resolve.java.JavaPackage; import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils; import org.jetbrains.jet.lang.resolve.java.resolver.ExternalAnnotationResolver; import org.jetbrains.jet.lang.resolve.java.structure.JavaMember; @@ -65,7 +64,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD @NotNull List methodTypeParameters, boolean hasSuperMethods ) { - String signature = JavaPackage.getPLATFORM_TYPES() ? null : SignaturesUtil.getKotlinSignature(externalAnnotationResolver, methodOrConstructor); + String signature = SignaturesUtil.getKotlinSignature(externalAnnotationResolver, methodOrConstructor); if (signature == null) { setAnnotated(false); @@ -102,6 +101,19 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD } } + public static List updateNames( + List originalValueParameters, + List altValueParameters + ) { + List result = new ArrayList(originalValueParameters.size()); + for (int i = 0; i < originalValueParameters.size(); i++) { + ValueParameterDescriptor originalValueParameter = originalValueParameters.get(i); + ValueParameterDescriptor altValueParameter = altValueParameters.get(i); + result.add(originalValueParameter.copy(originalValueParameter.getContainingDeclaration(), altValueParameter.getName())); + } + return result; + } + private void checkParameterAndReturnTypesForOverridingMethods( @NotNull List valueParameters, @NotNull List methodTypeParameters, diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedExternalSignatureResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedExternalSignatureResolver.java index 55f6c95bd8d..a8af95bcd54 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedExternalSignatureResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedExternalSignatureResolver.java @@ -25,6 +25,7 @@ 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.java.JavaBindingContext; +import org.jetbrains.jet.lang.resolve.java.JavaPackage; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeFieldSignatureData; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData; @@ -94,6 +95,12 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes returnType, typeParameters, hasSuperMethods); if (data.isAnnotated() && !data.hasErrors()) { + if (JavaPackage.getPLATFORM_TYPES()) { + // We only take parameter names from the @KotlinSignature + return new AlternativeMethodSignature(returnType, receiverType, + AlternativeMethodSignatureData.updateNames(valueParameters, data.getValueParameters()), + typeParameters, Collections.emptyList(), true); + } return new AlternativeMethodSignature(data.getReturnType(), receiverType, data.getValueParameters(), data.getTypeParameters(), Collections.emptyList(), true); } @@ -113,6 +120,9 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes new AlternativeFieldSignatureData(externalAnnotationResolver, field, returnType, project, isVar); if (data.isAnnotated() && !data.hasErrors()) { + if (JavaPackage.getPLATFORM_TYPES()) { + return new AlternativeFieldSignature(returnType, null); + } return new AlternativeFieldSignature(data.getReturnType(), null); }