Skip alternative signatures in PLATFORM_TYPES mode, but use parameter names

This commit is contained in:
Andrey Breslav
2014-09-09 19:08:53 +04:00
parent 50aa918791
commit 837353d9fd
3 changed files with 25 additions and 4 deletions
@@ -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);
@@ -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<TypeParameterDescriptor> 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<ValueParameterDescriptor> updateNames(
List<ValueParameterDescriptor> originalValueParameters,
List<ValueParameterDescriptor> altValueParameters
) {
List<ValueParameterDescriptor> result = new ArrayList<ValueParameterDescriptor>(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<ValueParameterDescriptor> valueParameters,
@NotNull List<TypeParameterDescriptor> methodTypeParameters,
@@ -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.<String>emptyList(), true);
}
return new AlternativeMethodSignature(data.getReturnType(), receiverType, data.getValueParameters(), data.getTypeParameters(),
Collections.<String>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);
}