From af9f3f7ff68976b7cfa0963522d67dd847a48cbc Mon Sep 17 00:00:00 2001 From: Rick Ossendrijver Date: Fri, 7 Oct 2022 22:32:00 +0200 Subject: [PATCH] Introduce `RefasterTemplateCollectionData` and other improvements --- .../plugin/BugPatternTestsExtractor.java | 9 +++---- .../picnic/errorprone/plugin/DocType.java | 11 +++++---- .../errorprone/plugin/DocgenTaskListener.java | 3 ++- .../RefasterTemplateCollectionData.java | 24 +++++++++++++++++++ 4 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 docgen/src/main/java/tech/picnic/errorprone/plugin/models/RefasterTemplateCollectionData.java diff --git a/docgen/src/main/java/tech/picnic/errorprone/plugin/BugPatternTestsExtractor.java b/docgen/src/main/java/tech/picnic/errorprone/plugin/BugPatternTestsExtractor.java index ed3f9afb..12bbe1cf 100644 --- a/docgen/src/main/java/tech/picnic/errorprone/plugin/BugPatternTestsExtractor.java +++ b/docgen/src/main/java/tech/picnic/errorprone/plugin/BugPatternTestsExtractor.java @@ -5,6 +5,7 @@ import static com.google.errorprone.matchers.Matchers.hasAnnotation; import static com.google.errorprone.matchers.Matchers.instanceMethod; import com.google.errorprone.VisitorState; +import com.google.errorprone.annotations.Var; import com.google.errorprone.matchers.Matcher; import com.google.errorprone.util.ASTHelpers; import com.sun.source.tree.ClassTree; @@ -21,7 +22,7 @@ import tech.picnic.errorprone.plugin.models.BugPatternTestData; /** XXX: Write this. */ // XXX: Take into account `expectUnchanged()`. public final class BugPatternTestsExtractor implements DocExtractor { - private static final Matcher BUG_PATTERN_TEST = + private static final Matcher JUNIT_TEST_METHOD = allOf(hasAnnotation("org.junit.jupiter.api.Test")); private static final Matcher IDENTIFICATION_SOURCE_LINES = instanceMethod() @@ -44,7 +45,7 @@ public final class BugPatternTestsExtractor implements DocExtractor BUG_PATTERN_TEST.matches(m, state)) + .filter(m -> JUNIT_TEST_METHOD.matches(m, state)) .forEach(m -> scanner.scan(m, null)); return BugPatternTestData.create( @@ -53,11 +54,11 @@ public final class BugPatternTestsExtractor implements DocExtractor { private final VisitorState state; - private final List identificationTests = new ArrayList<>(); private final List replacementTests = new ArrayList<>(); + // XXX: Using this output field is a bit hacky. Come up with a better solution. - private String output; + @Var private String output; ScanBugCheckerTestData(VisitorState state) { this.state = state; diff --git a/docgen/src/main/java/tech/picnic/errorprone/plugin/DocType.java b/docgen/src/main/java/tech/picnic/errorprone/plugin/DocType.java index 145277eb..5f1e391f 100644 --- a/docgen/src/main/java/tech/picnic/errorprone/plugin/DocType.java +++ b/docgen/src/main/java/tech/picnic/errorprone/plugin/DocType.java @@ -3,22 +3,23 @@ package tech.picnic.errorprone.plugin; public enum DocType { BUG_PATTERN("bug-pattern", new BugPatternExtractor()), BUG_PATTERN_TEST("bug-pattern-test", new BugPatternTestsExtractor()), + // REFASTER("refaster", new RefasterExtractor()), REFASTER_TEMPLATE_TEST_INPUT("refaster-test-input", new RefasterTestExtractor()), REFASTER_TEMPLATE_TEST_OUTPUT("refaster-test-output", new RefasterTestExtractor()); private final String outputFileNamePrefix; - private final DocExtractor extractor; + private final DocExtractor docExtractor; - DocType(String outputFileNamePrefix, DocExtractor extractor) { + DocType(String outputFileNamePrefix, DocExtractor docExtractor) { this.outputFileNamePrefix = outputFileNamePrefix; - this.extractor = extractor; + this.docExtractor = docExtractor; } public String getOutputFileNamePrefix() { return outputFileNamePrefix; } - public DocExtractor getExtractor() { - return extractor; + public DocExtractor getDocExtractor() { + return docExtractor; } } diff --git a/docgen/src/main/java/tech/picnic/errorprone/plugin/DocgenTaskListener.java b/docgen/src/main/java/tech/picnic/errorprone/plugin/DocgenTaskListener.java index 7cd0b78c..5182c240 100644 --- a/docgen/src/main/java/tech/picnic/errorprone/plugin/DocgenTaskListener.java +++ b/docgen/src/main/java/tech/picnic/errorprone/plugin/DocgenTaskListener.java @@ -46,6 +46,7 @@ final class DocgenTaskListener implements TaskListener { this.basePath = path.substring(path.indexOf('=') + 1) + "/docs"; this.state = VisitorState.createForUtilityPurposes(context); + // XXX: Move this somewhere else? try { Files.createDirectories(Paths.get(basePath)); } catch (IOException e) { @@ -66,7 +67,7 @@ final class DocgenTaskListener implements TaskListener { .ifPresent( docType -> writeToFile( - docType.getExtractor().extractData(tree, taskEvent, state), + docType.getDocExtractor().extractData(tree, taskEvent, state), docType.getOutputFileNamePrefix(), getSimpleClassName(sourceFile.getName()))); } diff --git a/docgen/src/main/java/tech/picnic/errorprone/plugin/models/RefasterTemplateCollectionData.java b/docgen/src/main/java/tech/picnic/errorprone/plugin/models/RefasterTemplateCollectionData.java new file mode 100644 index 00000000..1d5d82d7 --- /dev/null +++ b/docgen/src/main/java/tech/picnic/errorprone/plugin/models/RefasterTemplateCollectionData.java @@ -0,0 +1,24 @@ +package tech.picnic.errorprone.plugin.models; + +import com.google.auto.value.AutoValue; +import java.util.List; + +/** + * Object containing all data related to a Refaster template collection. This is solely used for + * serialization. + */ +@AutoValue +public abstract class RefasterTemplateCollectionData { + public static RefasterTemplateCollectionData create( + String name, String description, String link, List templates) { + return new AutoValue_RefasterTemplateCollectionData(name, description, link, templates); + } + + abstract String name(); + + abstract String description(); + + abstract String link(); + + abstract List templates(); +}