From 7c354ba17df085eed5c8fdb13f8c6aa71ef317c5 Mon Sep 17 00:00:00 2001 From: Jonah Jeleniewski Date: Tue, 18 Mar 2025 09:50:06 +1100 Subject: [PATCH] Exclude types annotated with attributes in `UnusedType` --- CHANGELOG.md | 4 ++++ .../integradev/delphi/checks/UnusedTypeCheck.java | 4 ++++ .../delphi/checks/UnusedTypeCheckTest.java | 13 +++++++++++++ 3 files changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b2ecd603..71ee0fe8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Exclude types annotated with attributes in `UnusedType`. + ### Fixed - Exceptions from empty structures (e.g., `if`) in `LoopExecutingAtMostOnce` and `RedundantJump`. diff --git a/delphi-checks/src/main/java/au/com/integradev/delphi/checks/UnusedTypeCheck.java b/delphi-checks/src/main/java/au/com/integradev/delphi/checks/UnusedTypeCheck.java index 929b5ec36..67129db69 100644 --- a/delphi-checks/src/main/java/au/com/integradev/delphi/checks/UnusedTypeCheck.java +++ b/delphi-checks/src/main/java/au/com/integradev/delphi/checks/UnusedTypeCheck.java @@ -69,6 +69,10 @@ private boolean isViolation(TypeDeclarationNode node) { return false; } + if (node.getAttributeList() != null) { + return false; + } + return node.getTypeNameNode().getUsages().stream() .allMatch(occurrence -> isWithinType(occurrence, type)); } diff --git a/delphi-checks/src/test/java/au/com/integradev/delphi/checks/UnusedTypeCheckTest.java b/delphi-checks/src/test/java/au/com/integradev/delphi/checks/UnusedTypeCheckTest.java index ac9ae5e4f..ac965bc81 100644 --- a/delphi-checks/src/test/java/au/com/integradev/delphi/checks/UnusedTypeCheckTest.java +++ b/delphi-checks/src/test/java/au/com/integradev/delphi/checks/UnusedTypeCheckTest.java @@ -199,4 +199,17 @@ void testUnusedImplementationTypeWithExcludeApiShouldAddIssue() { .appendImpl("end;")) .verifyIssues(); } + + @Test + void testUnusedTypeWithAttributeShouldNotAddIssue() { + CheckVerifier.newVerifier() + .withCheck(new UnusedTypeCheck()) + .onFile( + new DelphiTestUnitBuilder() + .appendDecl("type") + .appendDecl(" [Bar]") + .appendDecl(" TFoo = class") + .appendDecl(" end;")) + .verifyNoIssues(); + } }