diff --git a/pkg/linter/lib/src/rules/unreachable_from_main.dart b/pkg/linter/lib/src/rules/unreachable_from_main.dart index 5ba6e90fe5b..28e01013229 100644 --- a/pkg/linter/lib/src/rules/unreachable_from_main.dart +++ b/pkg/linter/lib/src/rules/unreachable_from_main.dart @@ -705,8 +705,11 @@ extension on Declaration { return self.namePart.typeName.lexeme; case ConstructorDeclaration(): var name = self.name?.lexeme ?? 'new'; - // TODO(scheglov): support primary constructors - return '${self.typeName!.name}.$name'; + var typeName = + self.typeName ?? + self.declaredFragment?.element.enclosingElement.name ?? + 'unknown'; + return '$typeName.$name'; case EnumConstantDeclaration(): return self.name.lexeme; case EnumDeclaration(): diff --git a/pkg/linter/test/rules/unreachable_from_main_test.dart b/pkg/linter/test/rules/unreachable_from_main_test.dart index 0ba8973619b..5037fb0850f 100644 --- a/pkg/linter/test/rules/unreachable_from_main_test.dart +++ b/pkg/linter/test/rules/unreachable_from_main_test.dart @@ -624,6 +624,19 @@ void main() {} ]); } + test_constructor_named_new() async { + // https://github.com/dart-lang/sdk/issues/63425 + await assertDiagnosticsFromMarkdown(r''' +void main() { + C; +} + +class C { + new [!named!](); +} +'''); + } + test_constructor_named_onEnum() async { await assertNoDiagnostics(r''' void main() {