Add JavaValueParameter.isVararg()
This commit is contained in:
+8
-9
@@ -142,10 +142,8 @@ class PropagationHeuristics {
|
|||||||
|
|
||||||
Collection<JavaValueParameter> valueParameters = initialMethod.getValueParameters();
|
Collection<JavaValueParameter> valueParameters = initialMethod.getValueParameters();
|
||||||
initialParametersErasure = Lists.newArrayListWithExpectedSize(valueParameters.size());
|
initialParametersErasure = Lists.newArrayListWithExpectedSize(valueParameters.size());
|
||||||
for (Iterator<JavaValueParameter> iterator = valueParameters.iterator(); iterator.hasNext(); ) {
|
for (JavaValueParameter parameter : valueParameters) {
|
||||||
JavaType type = iterator.next().getType();
|
initialParametersErasure.add(erasure(varargToArray(parameter.getType(), parameter.isVararg())));
|
||||||
boolean isVararg = initialMethod.isVararg() && !iterator.hasNext();
|
|
||||||
initialParametersErasure.add(erasure(varargToArray(type, isVararg)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,13 +197,14 @@ class PropagationHeuristics {
|
|||||||
Iterator<JavaValueParameter> superIterator = fromSuperParameters.iterator();
|
Iterator<JavaValueParameter> superIterator = fromSuperParameters.iterator();
|
||||||
while (originalIterator.hasNext()) {
|
while (originalIterator.hasNext()) {
|
||||||
JavaType originalType = originalIterator.next();
|
JavaType originalType = originalIterator.next();
|
||||||
JavaType typeFromSuper = superIterator.next().getType();
|
JavaValueParameter parameterFromSuper = superIterator.next();
|
||||||
|
|
||||||
boolean isVarargType = methodFromSuper.isVararg() && !superIterator.hasNext();
|
JavaType typeFromSuper = erasure(varargToArray(
|
||||||
|
supertypeSubstitutor.substitute(parameterFromSuper.getType()),
|
||||||
|
parameterFromSuper.isVararg()
|
||||||
|
));
|
||||||
|
|
||||||
JavaType typeFromSuperErased = erasure(varargToArray(supertypeSubstitutor.substitute(typeFromSuper), isVarargType));
|
if (!originalType.equals(typeFromSuper)) {
|
||||||
|
|
||||||
if (!originalType.equals(typeFromSuperErased)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-10
@@ -33,7 +33,10 @@ import org.jetbrains.jet.lang.types.TypeUtils;
|
|||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public final class JavaValueParameterResolver {
|
public final class JavaValueParameterResolver {
|
||||||
private JavaTypeTransformer typeTransformer;
|
private JavaTypeTransformer typeTransformer;
|
||||||
@@ -43,8 +46,7 @@ public final class JavaValueParameterResolver {
|
|||||||
@NotNull DeclarationDescriptor containingDeclaration,
|
@NotNull DeclarationDescriptor containingDeclaration,
|
||||||
int i,
|
int i,
|
||||||
@NotNull JavaValueParameter parameter,
|
@NotNull JavaValueParameter parameter,
|
||||||
@NotNull TypeVariableResolver typeVariableResolver,
|
@NotNull TypeVariableResolver typeVariableResolver
|
||||||
boolean isVararg
|
|
||||||
) {
|
) {
|
||||||
TypeUsage typeUsage = JavaAnnotationResolver.hasMutableAnnotation(parameter)
|
TypeUsage typeUsage = JavaAnnotationResolver.hasMutableAnnotation(parameter)
|
||||||
? TypeUsage.MEMBER_SIGNATURE_COVARIANT
|
? TypeUsage.MEMBER_SIGNATURE_COVARIANT
|
||||||
@@ -54,7 +56,7 @@ public final class JavaValueParameterResolver {
|
|||||||
|
|
||||||
JetType varargElementType;
|
JetType varargElementType;
|
||||||
JetType outType;
|
JetType outType;
|
||||||
if (isVararg) {
|
if (parameter.isVararg()) {
|
||||||
// TODO: test this code
|
// TODO: test this code
|
||||||
assert parameterType instanceof JavaArrayType : "Vararg parameter should be an array: " + parameterType;
|
assert parameterType instanceof JavaArrayType : "Vararg parameter should be an array: " + parameterType;
|
||||||
JetType arrayType = typeTransformer.transformVarargType(((JavaArrayType) parameterType), typeUsage, typeVariableResolver);
|
JetType arrayType = typeTransformer.transformVarargType(((JavaArrayType) parameterType), typeUsage, typeVariableResolver);
|
||||||
@@ -103,12 +105,8 @@ public final class JavaValueParameterResolver {
|
|||||||
Collection<JavaValueParameter> parameters = method.getValueParameters();
|
Collection<JavaValueParameter> parameters = method.getValueParameters();
|
||||||
List<ValueParameterDescriptor> result = new ArrayList<ValueParameterDescriptor>(parameters.size());
|
List<ValueParameterDescriptor> result = new ArrayList<ValueParameterDescriptor>(parameters.size());
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (Iterator<JavaValueParameter> iterator = parameters.iterator(); iterator.hasNext(); ) {
|
for (JavaValueParameter parameter : parameters) {
|
||||||
JavaValueParameter parameter = iterator.next();
|
result.add(resolveValueParameter(container, index, parameter, typeVariableResolver));
|
||||||
|
|
||||||
boolean isVararg = method.isVararg() && !iterator.hasNext();
|
|
||||||
ValueParameterDescriptor descriptor = resolveValueParameter(container, index, parameter, typeVariableResolver, isVararg);
|
|
||||||
result.add(descriptor);
|
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
return new ValueParameters(null, result);
|
return new ValueParameters(null, result);
|
||||||
|
|||||||
+4
@@ -57,4 +57,8 @@ public class JavaValueParameter extends JavaElementImpl implements JavaAnnotatio
|
|||||||
public JavaType getType() {
|
public JavaType getType() {
|
||||||
return JavaType.create(getPsi().getType());
|
return JavaType.create(getPsi().getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isVararg() {
|
||||||
|
return getPsi().isVarArgs();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user