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
val tasks = ArrayList<DescriptorResolver.UpperBoundCheckerTask>()
val upperBoundCheckRequests = ArrayList<DescriptorResolver.UpperBoundCheckRequest>()
for (typeParameter in classOrObject.typeParameters) {
val typeReference = typeParameter.extendsBound ?: 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) {
val typeReference = constraint.boundTypeReference ?: continue
val type = typeReference.type() ?: 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) {
DescriptorResolver.checkBounds(task.upperBound, task.upperBoundType, trace)
for (request in upperBoundCheckRequests) {
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.dataClassUtils.DataClassUtilsKt;
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.source.KotlinSourceElementKt;
import org.jetbrains.kotlin.storage.StorageManager;
@@ -458,12 +461,12 @@ public class DescriptorResolver {
return constructorDescriptor;
}
static final class UpperBoundCheckerTask {
static final class UpperBoundCheckRequest {
public final Name typeParameterName;
public final KtTypeReference upperBound;
public final KotlinType upperBoundType;
UpperBoundCheckerTask(Name typeParameterName, KtTypeReference upperBound, KotlinType upperBoundType) {
UpperBoundCheckRequest(Name typeParameterName, KtTypeReference upperBound, KotlinType upperBoundType) {
this.typeParameterName = typeParameterName;
this.upperBound = upperBound;
this.upperBoundType = upperBoundType;
@@ -477,7 +480,7 @@ public class DescriptorResolver {
List<TypeParameterDescriptorImpl> parameters,
BindingTrace trace
) {
List<UpperBoundCheckerTask> deferredUpperBoundCheckerTasks = Lists.newArrayList();
List<UpperBoundCheckRequest> upperBoundCheckRequests = Lists.newArrayList();
List<KtTypeParameter> typeParameters = declaration.getTypeParameters();
Map<Name, TypeParameterDescriptorImpl> parameterByName = Maps.newHashMap();
@@ -491,7 +494,7 @@ public class DescriptorResolver {
if (extendsBound != null) {
KotlinType type = typeResolver.resolveType(scope, extendsBound, trace, false);
typeParameterDescriptor.addUpperBound(type);
deferredUpperBoundCheckerTasks.add(new UpperBoundCheckerTask(ktTypeParameter.getNameAsName(), extendsBound, type));
upperBoundCheckRequests.add(new UpperBoundCheckRequest(ktTypeParameter.getNameAsName(), extendsBound, type));
}
}
for (KtTypeConstraint constraint : declaration.getTypeConstraints()) {
@@ -505,7 +508,7 @@ public class DescriptorResolver {
KotlinType bound = null;
if (boundTypeReference != null) {
bound = typeResolver.resolveType(scope, boundTypeReference, trace, false);
deferredUpperBoundCheckerTasks.add(new UpperBoundCheckerTask(referencedName, boundTypeReference, bound));
upperBoundCheckRequests.add(new UpperBoundCheckRequest(referencedName, boundTypeReference, bound));
}
if (typeParameterDescriptor != null) {
@@ -526,21 +529,21 @@ public class DescriptorResolver {
}
if (!(declaration instanceof KtClass)) {
checkUpperBoundTypes(trace, deferredUpperBoundCheckerTasks);
checkUpperBoundTypes(trace, upperBoundCheckRequests);
checkNamesInConstraints(declaration, descriptor, scope, trace);
}
}
public static void checkUpperBoundTypes(@NotNull BindingTrace trace, @NotNull List<UpperBoundCheckerTask> tasks) {
if (tasks.isEmpty()) return;
public static void checkUpperBoundTypes(@NotNull BindingTrace trace, @NotNull List<UpperBoundCheckRequest> requests) {
if (requests.isEmpty()) return;
Set<Name> classBoundEncountered = new HashSet<Name>();
Set<Pair<Name, TypeConstructor>> allBounds = new HashSet<Pair<Name, TypeConstructor>>();
for (UpperBoundCheckerTask checkerTask : tasks) {
Name typeParameterName = checkerTask.typeParameterName;
KotlinType upperBound = checkerTask.upperBoundType;
KtTypeReference upperBoundElement = checkerTask.upperBound;
for (UpperBoundCheckRequest request : requests) {
Name typeParameterName = request.typeParameterName;
KotlinType upperBound = request.upperBoundType;
KtTypeReference upperBoundElement = request.upperBound;
if (!upperBound.isError()) {
if (!allBounds.add(new Pair<Name, TypeConstructor>(typeParameterName, upperBound.getConstructor()))) {