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