Minor. Extracted method.
This commit is contained in:
+31
-24
@@ -99,7 +99,7 @@ public class TypeTransformingVisitor extends JetVisitor<JetType, Void> {
|
|||||||
String shortName = type.getReferenceExpression().getReferencedName();
|
String shortName = type.getReferenceExpression().getReferencedName();
|
||||||
String longName = (qualifier == null ? "" : qualifier.getText() + ".") + shortName;
|
String longName = (qualifier == null ? "" : qualifier.getText() + ".") + shortName;
|
||||||
|
|
||||||
if (KotlinBuiltIns.getInstance().UNIT_ALIAS.getName().equals(longName)) {
|
if (KotlinBuiltIns.UNIT_ALIAS.getName().equals(longName)) {
|
||||||
return visitCommonType(KotlinBuiltIns.getInstance().getTuple(0), type);
|
return visitCommonType(KotlinBuiltIns.getInstance().getTuple(0), type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,25 +142,47 @@ public class TypeTransformingVisitor extends JetVisitor<JetType, Void> {
|
|||||||
|
|
||||||
List<TypeProjection> altArguments = new ArrayList<TypeProjection>();
|
List<TypeProjection> altArguments = new ArrayList<TypeProjection>();
|
||||||
for (int i = 0, size = arguments.size(); i < size; i++) {
|
for (int i = 0, size = arguments.size(); i < size; i++) {
|
||||||
JetTypeReference typeReference = type.getTypeArgumentsAsTypes().get(i);
|
altArguments.add(getAltArgument(type, typeConstructor, i, arguments.get(i)));
|
||||||
|
}
|
||||||
|
|
||||||
|
JetScope memberScope;
|
||||||
|
if (typeConstructorClassifier instanceof TypeParameterDescriptor) {
|
||||||
|
memberScope = ((TypeParameterDescriptor) typeConstructorClassifier).getUpperBoundsAsType().getMemberScope();
|
||||||
|
}
|
||||||
|
else if (typeConstructorClassifier instanceof ClassDescriptor) {
|
||||||
|
memberScope = ((ClassDescriptor) typeConstructorClassifier).getMemberScope(altArguments);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new AssertionError("Unexpected class of type constructor classifier "
|
||||||
|
+ (typeConstructorClassifier == null ? "null" : typeConstructorClassifier.getClass().getName()));
|
||||||
|
}
|
||||||
|
return new JetTypeImpl(originalType.getAnnotations(), typeConstructor, false,
|
||||||
|
altArguments, memberScope);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private TypeProjection getAltArgument(
|
||||||
|
@NotNull JetTypeElement type,
|
||||||
|
@NotNull TypeConstructor typeConstructor,
|
||||||
|
int i,
|
||||||
|
@NotNull TypeProjection originalArgument
|
||||||
|
) {
|
||||||
|
JetTypeReference typeReference = type.getTypeArgumentsAsTypes().get(i); // process both function type and user type
|
||||||
|
|
||||||
if (typeReference == null) {
|
if (typeReference == null) {
|
||||||
// star projection
|
// star projection
|
||||||
assert type instanceof JetUserType
|
assert type instanceof JetUserType
|
||||||
&& ((JetUserType) type).getTypeArguments().get(i).getProjectionKind() == JetProjectionKind.STAR;
|
&& ((JetUserType) type).getTypeArguments().get(i).getProjectionKind() == JetProjectionKind.STAR;
|
||||||
|
|
||||||
altArguments.add(arguments.get(i));
|
return originalArgument;
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JetTypeElement argumentAlternativeTypeElement = typeReference.getTypeElement();
|
JetTypeElement argumentAlternativeTypeElement = typeReference.getTypeElement();
|
||||||
assert argumentAlternativeTypeElement != null;
|
assert argumentAlternativeTypeElement != null;
|
||||||
|
|
||||||
TypeParameterDescriptor parameter = typeConstructor.getParameters().get(i);
|
TypeParameterDescriptor parameter = typeConstructor.getParameters().get(i);
|
||||||
TypeProjection argument = arguments.get(i);
|
JetType alternativeArgumentType = computeType(argumentAlternativeTypeElement, originalArgument.getType(), originalToAltTypeParameters, TYPE_ARGUMENT);
|
||||||
JetType alternativeArgumentType = computeType(argumentAlternativeTypeElement, argument.getType(), originalToAltTypeParameters, TYPE_ARGUMENT);
|
Variance projectionKind = originalArgument.getProjectionKind();
|
||||||
Variance projectionKind = argument.getProjectionKind();
|
|
||||||
Variance altProjectionKind;
|
Variance altProjectionKind;
|
||||||
if (type instanceof JetUserType) {
|
if (type instanceof JetUserType) {
|
||||||
JetTypeProjection typeProjection = ((JetUserType) type).getTypeArguments().get(i);
|
JetTypeProjection typeProjection = ((JetUserType) type).getTypeArguments().get(i);
|
||||||
@@ -199,22 +221,7 @@ public class TypeTransformingVisitor extends JetVisitor<JetType, Void> {
|
|||||||
else {
|
else {
|
||||||
altProjectionKind = projectionKind;
|
altProjectionKind = projectionKind;
|
||||||
}
|
}
|
||||||
altArguments.add(new TypeProjection(altProjectionKind, alternativeArgumentType));
|
return new TypeProjection(altProjectionKind, alternativeArgumentType);
|
||||||
}
|
|
||||||
|
|
||||||
JetScope memberScope;
|
|
||||||
if (typeConstructorClassifier instanceof TypeParameterDescriptor) {
|
|
||||||
memberScope = ((TypeParameterDescriptor) typeConstructorClassifier).getUpperBoundsAsType().getMemberScope();
|
|
||||||
}
|
|
||||||
else if (typeConstructorClassifier instanceof ClassDescriptor) {
|
|
||||||
memberScope = ((ClassDescriptor) typeConstructorClassifier).getMemberScope(altArguments);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new AssertionError("Unexpected class of type constructor classifier "
|
|
||||||
+ (typeConstructorClassifier == null ? "null" : typeConstructorClassifier.getClass().getName()));
|
|
||||||
}
|
|
||||||
return new JetTypeImpl(originalType.getAnnotations(), typeConstructor, false,
|
|
||||||
altArguments, memberScope);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
Reference in New Issue
Block a user