From 0453a47fa2c6069a530469b3791d26150e96a893 Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Tue, 4 Jan 2022 19:33:12 +0000 Subject: [PATCH] Report CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS for constructors. Bug: https://github.com/dart-lang/sdk/issues/48053 Change-Id: I7ff88565e72db50d3ed25f4ce2907f5ff4f3a652 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/226284 Reviewed-by: Brian Wilkerson Commit-Queue: Konstantin Shcheglov --- .../lib/src/generated/error_verifier.dart | 18 +++++++++--------- ...flicting_type_variable_and_member_test.dart | 11 +++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart index 7d363ca09dd..b23cae67fef 100644 --- a/pkg/analyzer/lib/src/generated/error_verifier.dart +++ b/pkg/analyzer/lib/src/generated/error_verifier.dart @@ -1779,23 +1779,23 @@ class ErrorVerifier extends RecursiveAstVisitor } /// Verify all conflicts between type variable and enclosing class. - /// TODO(scheglov) void _checkForConflictingClassTypeVariableErrorCodes() { - for (TypeParameterElement typeParameter - in _enclosingClass!.typeParameters) { + var enclosingClass = _enclosingClass!; + for (TypeParameterElement typeParameter in enclosingClass.typeParameters) { String name = typeParameter.name; // name is same as the name of the enclosing class - if (_enclosingClass!.name == name) { - var code = _enclosingClass!.isMixin + if (enclosingClass.name == name) { + var code = enclosingClass.isMixin ? CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MIXIN : CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS; errorReporter.reportErrorForElement(code, typeParameter, [name]); } // check members - if (_enclosingClass!.getMethod(name) != null || - _enclosingClass!.getGetter(name) != null || - _enclosingClass!.getSetter(name) != null) { - var code = _enclosingClass!.isMixin + if (enclosingClass.getNamedConstructor(name) != null || + enclosingClass.getMethod(name) != null || + enclosingClass.getGetter(name) != null || + enclosingClass.getSetter(name) != null) { + var code = enclosingClass.isMixin ? CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN : CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS; errorReporter.reportErrorForElement(code, typeParameter, [name]); diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_member_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_member_test.dart index ff439eb236f..efab14bec61 100644 --- a/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_member_test.dart +++ b/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_member_test.dart @@ -18,6 +18,17 @@ main() { @reflectiveTest class ConflictingTypeVariableAndMemberClassTest extends PubPackageResolutionTest { + test_constructor() async { + await assertErrorsInCode(r''' +class A { + A.T(); +} +''', [ + error(CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS, 8, + 1), + ]); + } + test_field() async { await assertErrorsInCode(r''' class A {