mirror of
https://github.com/jlengrand/error-prone-support.git
synced 2026-03-10 08:11:25 +00:00
Support extracting Refaster Test Data
This commit is contained in:
@@ -3,22 +3,22 @@ package tech.picnic.errorprone.plugin;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.errorprone.BugPattern;
|
||||
import com.google.errorprone.VisitorState;
|
||||
import com.google.errorprone.util.ASTHelpers;
|
||||
import com.sun.source.tree.ClassTree;
|
||||
import com.sun.source.tree.VariableTree;
|
||||
import com.sun.source.util.TaskEvent;
|
||||
import com.sun.source.util.TaskEvent.Kind;
|
||||
import com.sun.source.util.TaskListener;
|
||||
import com.sun.tools.javac.api.JavacTrees;
|
||||
import com.sun.tools.javac.main.JavaCompiler;
|
||||
import com.sun.tools.javac.util.Context;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import tech.picnic.errorprone.plugin.objects.BugPatternData;
|
||||
import tech.picnic.errorprone.plugin.objects.BugPatternTestData;
|
||||
import tech.picnic.errorprone.plugin.objects.RefasterTemplateTestData;
|
||||
|
||||
/** XXX: Write this. */
|
||||
final class DocgenTaskListener implements TaskListener {
|
||||
@@ -42,28 +42,32 @@ final class DocgenTaskListener implements TaskListener {
|
||||
@Override
|
||||
@SuppressWarnings("SystemOut")
|
||||
public void finished(TaskEvent taskEvent) {
|
||||
if (taskEvent.getKind() != Kind.ANALYZE || JavaCompiler.instance(context).errorCount() > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
ClassTree tree = JavacTrees.instance(context).getTree(taskEvent.getTypeElement());
|
||||
if (tree == null || (!isBugPattern(tree) && !isBugPatternTest(tree))) {
|
||||
if (tree == null
|
||||
|| taskEvent.getSourceFile() == null
|
||||
// XXX: Extract to method: `shouldGenerateDocs` or something like that. Return an enum that
|
||||
// shows which type, or could be `NONE`.
|
||||
|| (!isBugPattern(tree)
|
||||
&& !isBugPatternTest(tree)
|
||||
&& !taskEvent.getSourceFile().getName().contains("TestOutput")
|
||||
&& !taskEvent.getSourceFile().getName().contains("TestInput"))) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isBugPatternTest(tree)) {
|
||||
BugPatternTestData testData =
|
||||
new BugPatternTestsExtractor().extractData(tree, taskEvent, state);
|
||||
System.out.println(testData);
|
||||
writeToFile(testData, "bug-pattern-test-data.jsonl");
|
||||
} else if(isBugPattern(tree)) {
|
||||
|
||||
} else if (isBugPattern(tree)) {
|
||||
BugPatternData data = new BugPatternExtractor().extractData(tree, taskEvent, state);
|
||||
|
||||
System.out.println("Analysing: " + taskEvent.getTypeElement().getSimpleName());
|
||||
writeToFile(data, "bug-pattern-data.jsonl");
|
||||
} else {
|
||||
ImmutableList<RefasterTemplateTestData> refasterTemplateTestData =
|
||||
new RefasterTestExtractor().extractData(tree, taskEvent, state);
|
||||
System.out.println("~~~~~~~~~!!!!~~~~~~~NOW ANALYSING: " + tree.getSimpleName().toString());
|
||||
refasterTemplateTestData.forEach(d -> writeToFile(d, "refaster-test-data.jsonl"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package tech.picnic.errorprone.plugin;
|
||||
|
||||
import static com.google.common.collect.ImmutableList.toImmutableList;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.errorprone.VisitorState;
|
||||
import com.sun.source.tree.ClassTree;
|
||||
import com.sun.source.tree.MethodTree;
|
||||
import com.sun.source.util.TaskEvent;
|
||||
import tech.picnic.errorprone.plugin.objects.RefasterTemplateTestData;
|
||||
|
||||
public class RefasterTestExtractor
|
||||
implements DocExtractor<ImmutableList<RefasterTemplateTestData>> {
|
||||
@Override
|
||||
public ImmutableList<RefasterTemplateTestData> extractData(
|
||||
ClassTree tree, TaskEvent taskEvent, VisitorState state) {
|
||||
|
||||
String templateCollectionName = tree.getSimpleName().toString().replace("Test", "");
|
||||
|
||||
return tree.getMembers().stream()
|
||||
.filter(MethodTree.class::isInstance)
|
||||
.map(MethodTree.class::cast)
|
||||
.filter(m -> m.getName().toString().startsWith("test"))
|
||||
.map(
|
||||
m ->
|
||||
RefasterTemplateTestData.create(
|
||||
templateCollectionName,
|
||||
m.getName().toString().replace("test", ""),
|
||||
m.toString()))
|
||||
.collect(toImmutableList());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package tech.picnic.errorprone.plugin.objects;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.google.auto.value.AutoValue;
|
||||
|
||||
@AutoValue
|
||||
public abstract class RefasterTemplateTestData {
|
||||
public static RefasterTemplateTestData create(
|
||||
String templateCollection, String templateName, String templateTestContent) {
|
||||
return new AutoValue_RefasterTemplateTestData(
|
||||
templateCollection, templateName, templateTestContent);
|
||||
}
|
||||
|
||||
@JsonProperty
|
||||
abstract String templateCollection();
|
||||
|
||||
@JsonProperty
|
||||
abstract String templateName();
|
||||
|
||||
@JsonProperty
|
||||
abstract String templateTestContent();
|
||||
}
|
||||
@@ -247,6 +247,7 @@
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>build-helper-maven-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>add-test-source</id>
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.google.common.collect.Sets;
|
||||
import com.google.errorprone.BugCheckerRefactoringTestHelper;
|
||||
import com.google.errorprone.BugPattern;
|
||||
import com.google.errorprone.ErrorProneFlags;
|
||||
import com.google.errorprone.FileObjects;
|
||||
import com.google.errorprone.SubContext;
|
||||
import com.google.errorprone.VisitorState;
|
||||
import com.google.errorprone.bugpatterns.BugChecker;
|
||||
@@ -38,6 +39,7 @@ import com.sun.source.util.TreeScanner;
|
||||
import com.sun.tools.javac.tree.EndPosTable;
|
||||
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
||||
import com.sun.tools.javac.util.Position;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -45,6 +47,7 @@ import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.tools.JavaFileObject;
|
||||
import tech.picnic.errorprone.refaster.runner.CodeTransformers;
|
||||
import tech.picnic.errorprone.refaster.runner.Refaster;
|
||||
|
||||
@@ -124,10 +127,23 @@ public final class RefasterTemplateCollection extends BugChecker
|
||||
public static void validate(Class<?> clazz) {
|
||||
String className = clazz.getSimpleName();
|
||||
|
||||
JavaFileObject inputFile =
|
||||
FileObjects.forResource(clazz, "input/" + className + "TestInput.java");
|
||||
JavaFileObject outputFile =
|
||||
FileObjects.forResource(clazz, "output/" + className + "TestOutput.java");
|
||||
|
||||
String inputContent, outputContent;
|
||||
try {
|
||||
inputContent = inputFile.getCharContent(true).toString();
|
||||
outputContent = outputFile.getCharContent(true).toString();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
BugCheckerRefactoringTestHelper.newInstance(RefasterTemplateCollection.class, clazz)
|
||||
.setArgs(ImmutableList.of("-XepOpt:" + TEMPLATE_COLLECTION_FLAG + '=' + className))
|
||||
.addInput(className + "TestInput.java")
|
||||
.addOutput(className + "TestOutput.java")
|
||||
.addInputLines(inputFile.getName(), inputContent.replace(".input", ""))
|
||||
.addOutputLines(outputFile.getName(), outputContent.replace(".output", ""))
|
||||
.doTest(TEXT_MATCH);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user