From 9b4ad1466ac2a82a4794670d9c0ba521a1ea43df Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 29 Oct 2015 09:02:09 +0300 Subject: [PATCH] Minor. Extract 'getAllUpperBounds' --- .../LazyTypeParameterDescriptor.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java index c17df1ea455..c95d2a5bc87 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java @@ -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 resolveUpperBounds() { List upperBounds = new ArrayList(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 upperBounds) { + private Collection getAllUpperBounds() { + return CollectionsKt.plus( + typeParameter.getExtendsBound() != null + ? Collections.singletonList(typeParameter.getExtendsBound()) + : Collections.emptyList(), + getUpperBoundsFromWhereClause() + ); + } + + private Collection getUpperBoundsFromWhereClause() { + Collection result = new ArrayList(); + 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