diff --git a/CHANGELOG.md b/CHANGELOG.md index d66a1c1f87..61f63e7221 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ ## Unreleased * feat: support excludes for a separate anti-pattern. -* fix: prefer-extracting-callbacks in nested widgets +* fix: prefer-extracting-callbacks in nested widgets. +* fix: correctly handle method invocations on getters and method of for `check-unused-l10n` command. ## 4.9.0 diff --git a/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart b/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart index aac2d78412..bf4229baba 100644 --- a/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart +++ b/lib/src/analyzers/unused_l10n_analyzer/unused_l10n_visitor.dart @@ -37,6 +37,8 @@ class UnusedL10nVisitor extends RecursiveAstVisitor { if (_matchIdentifier(classTarget)) { _addMemberInvocation(classTarget as SimpleIdentifier, name); } + } else if (_matchStaticGetter(target)) { + _addMemberInvocation((target as PrefixedIdentifier).prefix, name); } } @@ -76,6 +78,12 @@ class UnusedL10nVisitor extends RecursiveAstVisitor { final classTarget = (target as PrefixedIdentifier).identifier; _addMemberInvocationOnAccessor(classTarget, name); + } else if (_matchMethodOf(target)) { + final classTarget = (target as MethodInvocation).target; + + if (_matchIdentifier(classTarget)) { + _addMemberInvocation(classTarget as SimpleIdentifier, name); + } } else if (_matchStaticGetter(target)) { _addMemberInvocation((target as PrefixedIdentifier).prefix, name); } diff --git a/test/resources/unused_l10n_analyzer/test_i18n.dart b/test/resources/unused_l10n_analyzer/test_i18n.dart index 2fb361d483..4076e7fb44 100644 --- a/test/resources/unused_l10n_analyzer/test_i18n.dart +++ b/test/resources/unused_l10n_analyzer/test_i18n.dart @@ -12,6 +12,8 @@ class TestI18n { String get regularGetter => 'regular getter'; // LINT + String get anotherRegularGetter => 'another regular getter'; + final String regularField = 'regular field'; TestI18n.of(String value) { @@ -31,8 +33,12 @@ class S { String regularMethod(String value) => value; + String anotherRegularMethod(String value) => value; + String get regularGetter => 'regular getter'; + String get anotherRegularGetter => 'another regular getter'; + final String regularField = 'regular field'; // LINT // ignore: prefer_constructors_over_static_methods diff --git a/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart b/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart index b35c5e3a36..fe2682f897 100644 --- a/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart +++ b/test/resources/unused_l10n_analyzer/unused_l10n_analyzer_example.dart @@ -9,6 +9,8 @@ void main() { TestI18n.of('').regularField.trim(); + TestI18n.of('').anotherRegularGetter; + final wrapper = L10nWrapper(); wrapper.l10n.regularField.trim(); @@ -23,6 +25,8 @@ class SomeClass { void method() { S.of('').regularMethod(''); + S.of('').anotherRegularGetter; S.current.regularGetter; + S.current.anotherRegularMethod(''); } } diff --git a/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart b/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart index 4e488e179e..3dbf2d75eb 100644 --- a/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart +++ b/test/src/analyzers/unused_l10n_analyzer/unused_l10n_analyzer_test.dart @@ -35,6 +35,8 @@ void main() { final report = result.single; expect(report.className, 'TestI18n'); + expect(report.issues.length, 3); + final firstIssue = report.issues.first; expect(firstIssue.memberName, 'getter'); expect(firstIssue.location.line, 4); @@ -69,19 +71,21 @@ void main() { final report = result.single; expect(report.className, 'S'); + expect(report.issues.length, 4); + final firstIssue = report.issues.first; expect(firstIssue.memberName, 'field'); - expect(firstIssue.location.line, 23); + expect(firstIssue.location.line, 25); expect(firstIssue.location.column, 3); final secondIssue = report.issues.elementAt(1); expect(secondIssue.memberName, 'regularField'); - expect(secondIssue.location.line, 36); + expect(secondIssue.location.line, 42); expect(secondIssue.location.column, 3); final thirdIssue = report.issues.elementAt(2); expect(thirdIssue.memberName, 'method(String value)'); - expect(thirdIssue.location.line, 27); + expect(thirdIssue.location.line, 29); expect(thirdIssue.location.column, 3); final forthIssue = report.issues.elementAt(3); @@ -89,7 +93,7 @@ void main() { forthIssue.memberName, 'secondMethod(String value, num number)', ); - expect(forthIssue.location.line, 29); + expect(forthIssue.location.line, 31); expect(forthIssue.location.column, 3); });