Rename UpperBoundCheckerTask -> UpperBoundCheckRequest

This commit is contained in:
Alexander Udalov
2015-11-30 22:56:35 +03:00
parent 2dce7ad1e2
commit fa77808319
2 changed files with 22 additions and 19 deletions
@@ -157,25 +157,25 @@ class DeclarationsChecker(
if (classOrObject !is KtClass) return if (classOrObject !is KtClass) return
val tasks = ArrayList<DescriptorResolver.UpperBoundCheckerTask>() val upperBoundCheckRequests = ArrayList<DescriptorResolver.UpperBoundCheckRequest>()
for (typeParameter in classOrObject.typeParameters) { for (typeParameter in classOrObject.typeParameters) {
val typeReference = typeParameter.extendsBound ?: continue val typeReference = typeParameter.extendsBound ?: continue
val type = typeReference.type() ?: continue val type = typeReference.type() ?: continue
tasks.add(DescriptorResolver.UpperBoundCheckerTask(typeParameter.nameAsName, typeReference, type)) upperBoundCheckRequests.add(DescriptorResolver.UpperBoundCheckRequest(typeParameter.nameAsName, typeReference, type))
} }
for (constraint in classOrObject.typeConstraints) { for (constraint in classOrObject.typeConstraints) {
val typeReference = constraint.boundTypeReference ?: continue val typeReference = constraint.boundTypeReference ?: continue
val type = typeReference.type() ?: continue val type = typeReference.type() ?: continue
val name = constraint.subjectTypeParameterName?.getReferencedNameAsName() ?: continue val name = constraint.subjectTypeParameterName?.getReferencedNameAsName() ?: continue
tasks.add(DescriptorResolver.UpperBoundCheckerTask(name, typeReference, type)) upperBoundCheckRequests.add(DescriptorResolver.UpperBoundCheckRequest(name, typeReference, type))
} }
DescriptorResolver.checkUpperBoundTypes(trace, tasks) DescriptorResolver.checkUpperBoundTypes(trace, upperBoundCheckRequests)
for (task in tasks) { for (request in upperBoundCheckRequests) {
DescriptorResolver.checkBounds(task.upperBound, task.upperBoundType, trace) DescriptorResolver.checkBounds(request.upperBound, request.upperBoundType, trace)
} }
} }
@@ -47,7 +47,10 @@ import org.jetbrains.kotlin.resolve.constants.ConstantValue;
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator; import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator;
import org.jetbrains.kotlin.resolve.dataClassUtils.DataClassUtilsKt; import org.jetbrains.kotlin.resolve.dataClassUtils.DataClassUtilsKt;
import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil; import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil;
import org.jetbrains.kotlin.resolve.scopes.*; import org.jetbrains.kotlin.resolve.scopes.JetScopeUtils;
import org.jetbrains.kotlin.resolve.scopes.LexicalScope;
import org.jetbrains.kotlin.resolve.scopes.LexicalScopeKind;
import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope;
import org.jetbrains.kotlin.resolve.scopes.utils.ScopeUtilsKt; import org.jetbrains.kotlin.resolve.scopes.utils.ScopeUtilsKt;
import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt; import org.jetbrains.kotlin.resolve.source.KotlinSourceElementKt;
import org.jetbrains.kotlin.storage.StorageManager; import org.jetbrains.kotlin.storage.StorageManager;
@@ -458,12 +461,12 @@ public class DescriptorResolver {
return constructorDescriptor; return constructorDescriptor;
} }
static final class UpperBoundCheckerTask { static final class UpperBoundCheckRequest {
public final Name typeParameterName; public final Name typeParameterName;
public final KtTypeReference upperBound; public final KtTypeReference upperBound;
public final KotlinType upperBoundType; public final KotlinType upperBoundType;
UpperBoundCheckerTask(Name typeParameterName, KtTypeReference upperBound, KotlinType upperBoundType) { UpperBoundCheckRequest(Name typeParameterName, KtTypeReference upperBound, KotlinType upperBoundType) {
this.typeParameterName = typeParameterName; this.typeParameterName = typeParameterName;
this.upperBound = upperBound; this.upperBound = upperBound;
this.upperBoundType = upperBoundType; this.upperBoundType = upperBoundType;
@@ -477,7 +480,7 @@ public class DescriptorResolver {
List<TypeParameterDescriptorImpl> parameters, List<TypeParameterDescriptorImpl> parameters,
BindingTrace trace BindingTrace trace
) { ) {
List<UpperBoundCheckerTask> deferredUpperBoundCheckerTasks = Lists.newArrayList(); List<UpperBoundCheckRequest> upperBoundCheckRequests = Lists.newArrayList();
List<KtTypeParameter> typeParameters = declaration.getTypeParameters(); List<KtTypeParameter> typeParameters = declaration.getTypeParameters();
Map<Name, TypeParameterDescriptorImpl> parameterByName = Maps.newHashMap(); Map<Name, TypeParameterDescriptorImpl> parameterByName = Maps.newHashMap();
@@ -491,7 +494,7 @@ public class DescriptorResolver {
if (extendsBound != null) { if (extendsBound != null) {
KotlinType type = typeResolver.resolveType(scope, extendsBound, trace, false); KotlinType type = typeResolver.resolveType(scope, extendsBound, trace, false);
typeParameterDescriptor.addUpperBound(type); typeParameterDescriptor.addUpperBound(type);
deferredUpperBoundCheckerTasks.add(new UpperBoundCheckerTask(ktTypeParameter.getNameAsName(), extendsBound, type)); upperBoundCheckRequests.add(new UpperBoundCheckRequest(ktTypeParameter.getNameAsName(), extendsBound, type));
} }
} }
for (KtTypeConstraint constraint : declaration.getTypeConstraints()) { for (KtTypeConstraint constraint : declaration.getTypeConstraints()) {
@@ -505,7 +508,7 @@ public class DescriptorResolver {
KotlinType bound = null; KotlinType bound = null;
if (boundTypeReference != null) { if (boundTypeReference != null) {
bound = typeResolver.resolveType(scope, boundTypeReference, trace, false); bound = typeResolver.resolveType(scope, boundTypeReference, trace, false);
deferredUpperBoundCheckerTasks.add(new UpperBoundCheckerTask(referencedName, boundTypeReference, bound)); upperBoundCheckRequests.add(new UpperBoundCheckRequest(referencedName, boundTypeReference, bound));
} }
if (typeParameterDescriptor != null) { if (typeParameterDescriptor != null) {
@@ -526,21 +529,21 @@ public class DescriptorResolver {
} }
if (!(declaration instanceof KtClass)) { if (!(declaration instanceof KtClass)) {
checkUpperBoundTypes(trace, deferredUpperBoundCheckerTasks); checkUpperBoundTypes(trace, upperBoundCheckRequests);
checkNamesInConstraints(declaration, descriptor, scope, trace); checkNamesInConstraints(declaration, descriptor, scope, trace);
} }
} }
public static void checkUpperBoundTypes(@NotNull BindingTrace trace, @NotNull List<UpperBoundCheckerTask> tasks) { public static void checkUpperBoundTypes(@NotNull BindingTrace trace, @NotNull List<UpperBoundCheckRequest> requests) {
if (tasks.isEmpty()) return; if (requests.isEmpty()) return;
Set<Name> classBoundEncountered = new HashSet<Name>(); Set<Name> classBoundEncountered = new HashSet<Name>();
Set<Pair<Name, TypeConstructor>> allBounds = new HashSet<Pair<Name, TypeConstructor>>(); Set<Pair<Name, TypeConstructor>> allBounds = new HashSet<Pair<Name, TypeConstructor>>();
for (UpperBoundCheckerTask checkerTask : tasks) { for (UpperBoundCheckRequest request : requests) {
Name typeParameterName = checkerTask.typeParameterName; Name typeParameterName = request.typeParameterName;
KotlinType upperBound = checkerTask.upperBoundType; KotlinType upperBound = request.upperBoundType;
KtTypeReference upperBoundElement = checkerTask.upperBound; KtTypeReference upperBoundElement = request.upperBound;
if (!upperBound.isError()) { if (!upperBound.isError()) {
if (!allBounds.add(new Pair<Name, TypeConstructor>(typeParameterName, upperBound.getConstructor()))) { if (!allBounds.add(new Pair<Name, TypeConstructor>(typeParameterName, upperBound.getConstructor()))) {