Minor. Extract 'getAllUpperBounds'

This commit is contained in:
Denis Zharkov
2015-10-29 09:02:09 +03:00
parent 18097c0ab7
commit 9b4ad1466a
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.resolve.lazy.descriptors;
import kotlin.CollectionsKt;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.impl.AbstractLazyTypeParameterDescriptor;
import org.jetbrains.kotlin.lexer.KtTokens;
@@ -28,6 +29,8 @@ import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt;
import org.jetbrains.kotlin.types.KotlinType;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescriptor implements LazyEntity {
@@ -60,16 +63,10 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
protected List<KotlinType> resolveUpperBounds() {
List<KotlinType> upperBounds = new ArrayList<KotlinType>(1);
KtTypeReference extendsBound = typeParameter.getExtendsBound();
if (extendsBound != null) {
KotlinType boundType = c.getDescriptorResolver().resolveTypeParameterExtendsBound(
this, extendsBound, getContainingDeclaration().getScopeForClassHeaderResolution(), c.getTrace()
);
upperBounds.add(boundType);
for (KtTypeReference typeReference : getAllUpperBounds()) {
upperBounds.add(resolveBoundType(typeReference));
}
resolveUpperBoundsFromWhereClause(upperBounds);
if (upperBounds.isEmpty()) {
upperBounds.add(c.getModuleDescriptor().getBuiltIns().getDefaultBound());
}
@@ -77,7 +74,18 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
return upperBounds;
}
private void resolveUpperBoundsFromWhereClause(@NotNull List<KotlinType> upperBounds) {
private Collection<KtTypeReference> getAllUpperBounds() {
return CollectionsKt.plus(
typeParameter.getExtendsBound() != null
? Collections.singletonList(typeParameter.getExtendsBound())
: Collections.<KtTypeReference>emptyList(),
getUpperBoundsFromWhereClause()
);
}
private Collection<KtTypeReference> getUpperBoundsFromWhereClause() {
Collection<KtTypeReference> result = new ArrayList<KtTypeReference>();
KtClassOrObject classOrObject = KtStubbedPsiUtil.getPsiOrStubParent(typeParameter, KtClassOrObject.class, true);
if (classOrObject instanceof KtClass) {
for (KtTypeConstraint typeConstraint : classOrObject.getTypeConstraints()) {
@@ -88,12 +96,14 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
KtTypeReference boundTypeReference = typeConstraint.getBoundTypeReference();
if (boundTypeReference != null) {
upperBounds.add(resolveBoundType(boundTypeReference));
result.add(boundTypeReference);
}
}
}
}
}
return result;
}
@NotNull