From 260e746f8fcef6f5998ec1386f796c8fccc23176 Mon Sep 17 00:00:00 2001 From: Jonah Jeleniewski Date: Mon, 2 Dec 2024 12:47:32 +1100 Subject: [PATCH] Expose URI of the analyzed file through `DelphiCheckContext::getUri` --- CHANGELOG.md | 4 ++++ .../checks/verifier/DelphiCheckContextTester.java | 6 ++++++ .../delphi/check/DelphiCheckContextImpl.java | 6 ++++++ .../communitydelphi/api/check/DelphiCheckContext.java | 11 +++++++++++ 4 files changed, 27 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 514b2f0b0..7d630c663 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] +### Added + +- **API:** `DelphiCheckContext::getUri` method. + ### Fixed - Parsing errors on semicolon-delimited generic type parameters in routine implementation headers. diff --git a/delphi-checks-testkit/src/main/java/au/com/integradev/delphi/checks/verifier/DelphiCheckContextTester.java b/delphi-checks-testkit/src/main/java/au/com/integradev/delphi/checks/verifier/DelphiCheckContextTester.java index fa37fa612..5d9b61ff6 100644 --- a/delphi-checks-testkit/src/main/java/au/com/integradev/delphi/checks/verifier/DelphiCheckContextTester.java +++ b/delphi-checks-testkit/src/main/java/au/com/integradev/delphi/checks/verifier/DelphiCheckContextTester.java @@ -22,6 +22,7 @@ import au.com.integradev.delphi.file.DelphiFile.DelphiInputFile; import au.com.integradev.delphi.preprocessor.CompilerSwitchRegistry; import au.com.integradev.delphi.reporting.DelphiIssueBuilderImpl; +import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -58,6 +59,11 @@ public DelphiCheckContextTester( this.checkRegistrar = checkRegistrar; } + @Override + public URI getUri() { + return delphiFile.getInputFile().uri(); + } + @Override public DelphiAst getAst() { return delphiFile.getAst(); diff --git a/delphi-frontend/src/main/java/au/com/integradev/delphi/check/DelphiCheckContextImpl.java b/delphi-frontend/src/main/java/au/com/integradev/delphi/check/DelphiCheckContextImpl.java index bb14262e9..1941b495a 100644 --- a/delphi-frontend/src/main/java/au/com/integradev/delphi/check/DelphiCheckContextImpl.java +++ b/delphi-frontend/src/main/java/au/com/integradev/delphi/check/DelphiCheckContextImpl.java @@ -21,6 +21,7 @@ import au.com.integradev.delphi.file.DelphiFile.DelphiInputFile; import au.com.integradev.delphi.preprocessor.CompilerSwitchRegistry; import au.com.integradev.delphi.reporting.DelphiIssueBuilderImpl; +import java.net.URI; import java.util.List; import org.sonar.api.batch.sensor.SensorContext; import org.sonar.plugins.communitydelphi.api.ast.DelphiAst; @@ -51,6 +52,11 @@ public DelphiCheckContextImpl( this.checkRegistrar = checkRegistrar; } + @Override + public URI getUri() { + return delphiFile.getInputFile().uri(); + } + @Override public DelphiAst getAst() { return delphiFile.getAst(); diff --git a/delphi-frontend/src/main/java/org/sonar/plugins/communitydelphi/api/check/DelphiCheckContext.java b/delphi-frontend/src/main/java/org/sonar/plugins/communitydelphi/api/check/DelphiCheckContext.java index 81a543331..a98f3f801 100644 --- a/delphi-frontend/src/main/java/org/sonar/plugins/communitydelphi/api/check/DelphiCheckContext.java +++ b/delphi-frontend/src/main/java/org/sonar/plugins/communitydelphi/api/check/DelphiCheckContext.java @@ -19,8 +19,10 @@ package org.sonar.plugins.communitydelphi.api.check; import au.com.integradev.delphi.preprocessor.CompilerSwitchRegistry; +import java.net.URI; import java.util.List; import java.util.Objects; +import org.sonar.api.batch.fs.InputFile; import org.sonar.plugins.communitydelphi.api.ast.DelphiAst; import org.sonar.plugins.communitydelphi.api.ast.DelphiNode; import org.sonar.plugins.communitydelphi.api.directive.CompilerDirectiveParser; @@ -30,6 +32,15 @@ /** Context injected in check classes and used to report issues. */ public interface DelphiCheckContext { + /** + * Identifier of the file. The only guarantee is that it is unique in the project. You should not + * assume it is a file:// URI. + * + * @return identifier of the file + * @see InputFile#uri() + */ + URI getUri(); + /** * Returns the parsed ast of the current file. *