De-duplicate some bound check code.
Change-Id: I75cb1b31f8b47525ee18c8d01a3fe534512ad579
Reviewed-on: https://dart-review.googlesource.com/c/85293
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index 3b3b732..f59a18c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -326,7 +326,7 @@
}
}
- library.reportTypeArgumentIssues(message, charOffset, typeParameter);
+ library.reportTypeArgumentIssue(message, charOffset, typeParameter);
}
}
}
@@ -361,7 +361,7 @@
argument, getGenericTypeName(issue.enclosingType));
}
- library.reportTypeArgumentIssues(
+ library.reportTypeArgumentIssue(
message, parameter.fileOffset, typeParameter);
}
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index 8b26a37..d322972 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -1372,7 +1372,41 @@
addToExportScope(name, member);
}
- void reportTypeArgumentIssues(
+ void reportTypeArgumentIssues(List<TypeArgumentIssue> issues, int offset,
+ {bool inferred, String targetName}) {
+ for (TypeArgumentIssue issue in issues) {
+ DartType argument = issue.argument;
+ TypeParameter typeParameter = issue.typeParameter;
+
+ Message message;
+ bool issueInferred = inferred ?? inferredTypes.contains(argument);
+ if (argument is FunctionType && argument.typeParameters.length > 0) {
+ if (issueInferred) {
+ message = templateGenericFunctionTypeInferredAsActualTypeArgument
+ .withArguments(argument);
+ } else {
+ message = messageGenericFunctionTypeUsedAsActualTypeArgument;
+ }
+ typeParameter = null;
+ } else {
+ String enclosingName = issue.enclosingType == null
+ ? targetName
+ : getGenericTypeName(issue.enclosingType);
+ assert(enclosingName != null);
+ if (issueInferred) {
+ message = templateIncorrectTypeArgumentInferred.withArguments(
+ argument, enclosingName);
+ } else {
+ message = templateIncorrectTypeArgument.withArguments(
+ argument, enclosingName);
+ }
+ }
+
+ reportTypeArgumentIssue(message, offset, typeParameter);
+ }
+ }
+
+ void reportTypeArgumentIssue(
Message message, int fileOffset, TypeParameter typeParameter) {
List<LocatedMessage> context;
if (typeParameter != null && typeParameter.fileOffset != -1) {
@@ -1388,37 +1422,8 @@
void checkBoundsInField(Field field, TypeEnvironment typeEnvironment) {
if (loader.target.legacyMode) return;
- List<TypeArgumentIssue> issues = findTypeArgumentIssues(
- field.type, typeEnvironment,
+ checkBoundsInType(field.type, typeEnvironment, field.fileOffset,
allowSuperBounded: true);
- if (issues != null) {
- for (TypeArgumentIssue issue in issues) {
- DartType argument = issue.argument;
- TypeParameter typeParameter = issue.typeParameter;
-
- Message message;
- bool inferred = inferredTypes.contains(argument);
- if (argument is FunctionType && argument.typeParameters.length > 0) {
- if (inferred) {
- message = templateGenericFunctionTypeInferredAsActualTypeArgument
- .withArguments(argument);
- } else {
- message = messageGenericFunctionTypeUsedAsActualTypeArgument;
- }
- typeParameter = null;
- } else {
- if (inferred) {
- message = templateIncorrectTypeArgumentInferred.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- } else {
- message = templateIncorrectTypeArgument.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- }
- }
-
- reportTypeArgumentIssues(message, field.fileOffset, typeParameter);
- }
- }
}
void checkBoundsInFunctionNodeParts(
@@ -1430,116 +1435,21 @@
if (loader.target.legacyMode) return;
if (typeParameters != null) {
for (TypeParameter parameter in typeParameters) {
- List<TypeArgumentIssue> issues = findTypeArgumentIssues(
- parameter.bound, typeEnvironment,
+ checkBoundsInType(
+ parameter.bound, typeEnvironment, parameter.fileOffset,
allowSuperBounded: false);
- if (issues != null) {
- int offset = parameter.fileOffset;
- for (TypeArgumentIssue issue in issues) {
- DartType argument = issue.argument;
- TypeParameter typeParameter = issue.typeParameter;
-
- Message message;
- bool inferred = inferredTypes.contains(argument);
- if (argument is FunctionType &&
- argument.typeParameters.length > 0) {
- if (inferred) {
- message =
- templateGenericFunctionTypeInferredAsActualTypeArgument
- .withArguments(argument);
- } else {
- message = messageGenericFunctionTypeUsedAsActualTypeArgument;
- }
- typeParameter = null;
- } else {
- if (inferred) {
- message = templateIncorrectTypeArgumentInferred.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- } else {
- message = templateIncorrectTypeArgument.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- }
- }
-
- reportTypeArgumentIssues(message, offset, typeParameter);
- }
- }
}
}
if (positionalParameters != null) {
for (VariableDeclaration formal in positionalParameters) {
- List<TypeArgumentIssue> issues = findTypeArgumentIssues(
- formal.type, typeEnvironment,
+ checkBoundsInType(formal.type, typeEnvironment, formal.fileOffset,
allowSuperBounded: true);
- if (issues != null) {
- int offset = formal.fileOffset;
- for (TypeArgumentIssue issue in issues) {
- DartType argument = issue.argument;
- TypeParameter typeParameter = issue.typeParameter;
-
- Message message;
- bool inferred = inferredTypes.contains(argument);
- if (argument is FunctionType &&
- argument.typeParameters.length > 0) {
- if (inferred) {
- message =
- templateGenericFunctionTypeInferredAsActualTypeArgument
- .withArguments(argument);
- } else {
- message = messageGenericFunctionTypeUsedAsActualTypeArgument;
- }
- typeParameter = null;
- } else {
- if (inferred) {
- message = templateIncorrectTypeArgumentInferred.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- } else {
- message = templateIncorrectTypeArgument.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- }
- }
-
- reportTypeArgumentIssues(message, offset, typeParameter);
- }
- }
}
}
if (namedParameters != null) {
for (VariableDeclaration named in namedParameters) {
- List<TypeArgumentIssue> issues = findTypeArgumentIssues(
- named.type, typeEnvironment,
+ checkBoundsInType(named.type, typeEnvironment, named.fileOffset,
allowSuperBounded: true);
- if (issues != null) {
- int offset = named.fileOffset;
- for (TypeArgumentIssue issue in issues) {
- DartType argument = issue.argument;
- TypeParameter typeParameter = issue.typeParameter;
-
- Message message;
- bool inferred = inferredTypes.contains(argument);
- if (argument is FunctionType &&
- argument.typeParameters.length > 0) {
- if (inferred) {
- message =
- templateGenericFunctionTypeInferredAsActualTypeArgument
- .withArguments(argument);
- } else {
- message = messageGenericFunctionTypeUsedAsActualTypeArgument;
- }
- typeParameter = null;
- } else {
- if (inferred) {
- message = templateIncorrectTypeArgumentInferred.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- } else {
- message = templateIncorrectTypeArgument.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- }
- }
-
- reportTypeArgumentIssues(message, offset, typeParameter);
- }
- }
}
}
if (returnType != null) {
@@ -1564,7 +1474,7 @@
argument, getGenericTypeName(issue.enclosingType));
}
- reportTypeArgumentIssues(message, offset, typeParameter);
+ reportTypeArgumentIssue(message, offset, typeParameter);
}
}
}
@@ -1599,37 +1509,13 @@
void checkBoundsInType(
DartType type, TypeEnvironment typeEnvironment, int offset,
- {bool inferred = false, bool allowSuperBounded = true}) {
+ {bool inferred, bool allowSuperBounded = true}) {
if (loader.target.legacyMode) return;
List<TypeArgumentIssue> issues = findTypeArgumentIssues(
type, typeEnvironment,
allowSuperBounded: allowSuperBounded);
if (issues != null) {
- for (TypeArgumentIssue issue in issues) {
- DartType argument = issue.argument;
- TypeParameter typeParameter = issue.typeParameter;
-
- Message message;
- if (argument is FunctionType && argument.typeParameters.length > 0) {
- if (inferred) {
- message = templateGenericFunctionTypeInferredAsActualTypeArgument
- .withArguments(argument);
- } else {
- message = messageGenericFunctionTypeUsedAsActualTypeArgument;
- }
- typeParameter = null;
- } else {
- if (inferred) {
- message = templateIncorrectTypeArgumentInferred.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- } else {
- message = templateIncorrectTypeArgument.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- }
- }
-
- reportTypeArgumentIssues(message, offset, typeParameter);
- }
+ reportTypeArgumentIssues(issues, offset, inferred: inferred);
}
}
@@ -1638,36 +1524,8 @@
{bool inferred = false}) {
if (loader.target.legacyMode) return;
if (node.type == null) return;
- List<TypeArgumentIssue> issues = findTypeArgumentIssues(
- node.type, typeEnvironment,
- allowSuperBounded: true);
- if (issues != null) {
- for (TypeArgumentIssue issue in issues) {
- DartType argument = issue.argument;
- TypeParameter typeParameter = issue.typeParameter;
-
- Message message;
- if (argument is FunctionType && argument.typeParameters.length > 0) {
- if (inferred) {
- message = templateGenericFunctionTypeInferredAsActualTypeArgument
- .withArguments(argument);
- } else {
- message = messageGenericFunctionTypeUsedAsActualTypeArgument;
- }
- typeParameter = null;
- } else {
- if (inferred) {
- message = templateIncorrectTypeArgumentInferred.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- } else {
- message = templateIncorrectTypeArgument.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- }
- }
-
- reportTypeArgumentIssues(message, node.fileOffset, typeParameter);
- }
- }
+ checkBoundsInType(node.type, typeEnvironment, node.fileOffset,
+ inferred: inferred, allowSuperBounded: true);
}
void checkBoundsInConstructorInvocation(
@@ -1678,36 +1536,8 @@
Constructor constructor = node.target;
Class klass = constructor.enclosingClass;
DartType constructedType = new InterfaceType(klass, node.arguments.types);
- List<TypeArgumentIssue> issues = findTypeArgumentIssues(
- constructedType, typeEnvironment,
- allowSuperBounded: false);
- if (issues != null) {
- for (TypeArgumentIssue issue in issues) {
- DartType argument = issue.argument;
- TypeParameter typeParameter = issue.typeParameter;
-
- Message message;
- if (argument is FunctionType && argument.typeParameters.length > 0) {
- if (inferred) {
- message = templateGenericFunctionTypeInferredAsActualTypeArgument
- .withArguments(argument);
- } else {
- message = messageGenericFunctionTypeUsedAsActualTypeArgument;
- }
- typeParameter = null;
- } else {
- if (inferred) {
- message = templateIncorrectTypeArgumentInferred.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- } else {
- message = templateIncorrectTypeArgument.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- }
- }
-
- reportTypeArgumentIssues(message, node.fileOffset, typeParameter);
- }
- }
+ checkBoundsInType(constructedType, typeEnvironment, node.fileOffset,
+ inferred: inferred, allowSuperBounded: false);
}
void checkBoundsInFactoryInvocation(
@@ -1719,36 +1549,8 @@
assert(factory.isFactory);
Class klass = factory.enclosingClass;
DartType constructedType = new InterfaceType(klass, node.arguments.types);
- List<TypeArgumentIssue> issues = findTypeArgumentIssues(
- constructedType, typeEnvironment,
- allowSuperBounded: false);
- if (issues != null) {
- for (TypeArgumentIssue issue in issues) {
- DartType argument = issue.argument;
- TypeParameter typeParameter = issue.typeParameter;
-
- Message message;
- if (argument is FunctionType && argument.typeParameters.length > 0) {
- if (inferred) {
- message = templateGenericFunctionTypeInferredAsActualTypeArgument
- .withArguments(argument);
- } else {
- message = messageGenericFunctionTypeUsedAsActualTypeArgument;
- }
- typeParameter = null;
- } else {
- if (inferred) {
- message = templateIncorrectTypeArgumentInferred.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- } else {
- message = templateIncorrectTypeArgument.withArguments(
- argument, getGenericTypeName(issue.enclosingType));
- }
- }
-
- reportTypeArgumentIssues(message, node.fileOffset, typeParameter);
- }
- }
+ checkBoundsInType(constructedType, typeEnvironment, node.fileOffset,
+ inferred: inferred, allowSuperBounded: false);
}
void checkBoundsInStaticInvocation(
@@ -1770,34 +1572,8 @@
} else {
targetName = "${klass.name}.${node.target.name.name}";
}
- for (TypeArgumentIssue issue in issues) {
- DartType argument = issue.argument;
- TypeParameter typeParameter = issue.typeParameter;
- String enclosingName = issue.enclosingType == null
- ? targetName
- : getGenericTypeName(issue.enclosingType);
-
- Message message;
- if (argument is FunctionType) {
- if (inferred) {
- message = templateGenericFunctionTypeInferredAsActualTypeArgument
- .withArguments(argument);
- } else {
- message = messageGenericFunctionTypeUsedAsActualTypeArgument;
- }
- typeParameter = null;
- } else {
- if (inferred) {
- message = templateIncorrectTypeArgumentInferred.withArguments(
- argument, enclosingName);
- } else {
- message = templateIncorrectTypeArgument.withArguments(
- argument, enclosingName);
- }
- }
-
- reportTypeArgumentIssues(message, node.fileOffset, typeParameter);
- }
+ reportTypeArgumentIssues(issues, node.fileOffset,
+ inferred: inferred, targetName: targetName);
}
}
@@ -1857,34 +1633,8 @@
targetName += ">";
}
targetName += ".${name.name}";
- for (TypeArgumentIssue issue in issues) {
- DartType argument = issue.argument;
- TypeParameter typeParameter = issue.typeParameter;
- String enclosingName = issue.enclosingType == null
- ? targetName
- : getGenericTypeName(issue.enclosingType);
-
- Message message;
- if (argument is FunctionType && argument.typeParameters.length > 0) {
- if (inferred) {
- message = templateGenericFunctionTypeInferredAsActualTypeArgument
- .withArguments(argument);
- } else {
- message = messageGenericFunctionTypeUsedAsActualTypeArgument;
- }
- typeParameter = null;
- } else {
- if (inferred) {
- message = templateIncorrectTypeArgumentInferred.withArguments(
- argument, enclosingName);
- } else {
- message = templateIncorrectTypeArgument.withArguments(
- argument, enclosingName);
- }
- }
-
- reportTypeArgumentIssues(message, offset, typeParameter);
- }
+ reportTypeArgumentIssues(issues, offset,
+ inferred: inferred, targetName: targetName);
}
}