| Index: pkg/analyzer/lib/src/generated/error_verifier.dart
|
| diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
|
| index 2b8d90492de54a499480e95d0e835d5c9125879e..346da5a6c23f5e2fcfded2096a5c41cfc90fb89c 100644
|
| --- a/pkg/analyzer/lib/src/generated/error_verifier.dart
|
| +++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
|
| @@ -492,6 +492,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> {
|
| _checkForFinalNotInitializedInClass(node);
|
| _checkForDuplicateDefinitionInheritance();
|
| _checkForConflictingInstanceMethodSetter(node);
|
| + _checkForBadFunctionUse(node);
|
| return super.visitClassDeclaration(node);
|
| } finally {
|
| _isInNativeClass = false;
|
| @@ -2943,6 +2944,40 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> {
|
| }
|
|
|
| /**
|
| + * Verifies that the class is not named `Function` and that it doesn't
|
| + * extends/implements/mixes in `Function`.
|
| + */
|
| + void _checkForBadFunctionUse(ClassDeclaration node) {
|
| + ExtendsClause extendsClause = node.extendsClause;
|
| + ImplementsClause implementsClause = node.implementsClause;
|
| + WithClause withClause = node.withClause;
|
| +
|
| + if (node.name.name == "Function") {
|
| + _errorReporter.reportErrorForNode(
|
| + HintCode.DEPRECATED_FUNCTION_CLASS_DECLARATION, node.name);
|
| + }
|
| +
|
| + if (extendsClause != null) {
|
| + InterfaceType superclassType = _enclosingClass.supertype;
|
| + ClassElement superclassElement = superclassType?.element;
|
| + if (superclassElement != null && superclassElement.name == "Function") {
|
| + _errorReporter.reportErrorForNode(
|
| + HintCode.DEPRECATED_EXTENDS_FUNCTION, extendsClause.superclass);
|
| + }
|
| + }
|
| +
|
| + if (withClause != null) {
|
| + for (TypeName type in withClause.mixinTypes) {
|
| + Element mixinElement = type.name.staticElement;
|
| + if (mixinElement != null && mixinElement.name == "Function") {
|
| + _errorReporter.reportErrorForNode(
|
| + HintCode.DEPRECATED_MIXIN_FUNCTION, type);
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + /**
|
| * Verify that the enclosing class does not have an instance member with the
|
| * same name as the given static [method] declaration.
|
| *
|
|
|