Add JavaValueParameter.isVararg()

This commit is contained in:
Alexander Udalov
2013-08-02 21:39:17 +04:00
parent be5ba7fa0d
commit 4e1fb7e0eb
3 changed files with 20 additions and 19 deletions
@@ -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;
}
}
@@ -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);
@@ -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();
}
}