Skip to content

Commit 8f9e7da

Browse files
rsalvadorError Prone Team
authored and
Error Prone Team
committed
Make patching API public
to be used by bazel’s error prone plugin: bazelbuild/bazel#21640 Fixes #4318 COPYBARA_INTEGRATE_REVIEW=#4318 from rsalvador:make-patching-api-public 905d626 PiperOrigin-RevId: 652555417
1 parent 2b306b6 commit 8f9e7da

File tree

3 files changed

+77
-79
lines changed

3 files changed

+77
-79
lines changed

check_api/src/main/java/com/google/errorprone/BaseErrorProneJavaCompiler.java

Lines changed: 4 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,15 @@
1919
import static com.google.common.base.StandardSystemProperty.JAVA_SPECIFICATION_VERSION;
2020

2121
import com.google.common.collect.ImmutableList;
22-
import com.google.common.collect.ImmutableSet;
23-
import com.google.errorprone.RefactoringCollection.RefactoringResult;
24-
import com.google.errorprone.scanner.ErrorProneScannerTransformer;
2522
import com.google.errorprone.scanner.ScannerSupplier;
2623
import com.sun.source.util.JavacTask;
27-
import com.sun.source.util.TaskEvent;
28-
import com.sun.source.util.TaskEvent.Kind;
29-
import com.sun.source.util.TaskListener;
3024
import com.sun.tools.javac.api.BasicJavacTask;
3125
import com.sun.tools.javac.api.JavacTool;
3226
import com.sun.tools.javac.util.Context;
3327
import com.sun.tools.javac.util.JavacMessages;
34-
import com.sun.tools.javac.util.Log;
35-
import com.sun.tools.javac.util.Log.WriterKind;
3628
import com.sun.tools.javac.util.Options;
3729
import java.io.InputStream;
3830
import java.io.OutputStream;
39-
import java.io.PrintWriter;
4031
import java.io.Writer;
4132
import java.nio.charset.Charset;
4233
import java.util.EnumSet;
@@ -94,9 +85,11 @@ static void addTaskListener(
9485
setupMessageBundle(context);
9586
RefactoringCollection[] refactoringCollection = {null};
9687
javacTask.addTaskListener(
97-
createAnalyzer(scannerSupplier, errorProneOptions, context, refactoringCollection));
88+
ErrorProneAnalyzer.createAnalyzer(
89+
scannerSupplier, errorProneOptions, context, refactoringCollection));
9890
if (refactoringCollection[0] != null) {
99-
javacTask.addTaskListener(new RefactoringTask(context, refactoringCollection[0]));
91+
javacTask.addTaskListener(
92+
new ErrorProneAnalyzer.RefactoringTask(context, refactoringCollection[0]));
10093
}
10194
}
10295

@@ -206,71 +199,4 @@ public static void setupMessageBundle(Context context) {
206199
ResourceBundle bundle = ResourceBundle.getBundle("com.google.errorprone.errors");
207200
JavacMessages.instance(context).add(l -> bundle);
208201
}
209-
210-
static ErrorProneAnalyzer createAnalyzer(
211-
ScannerSupplier scannerSupplier,
212-
ErrorProneOptions epOptions,
213-
Context context,
214-
RefactoringCollection[] refactoringCollection) {
215-
if (!epOptions.patchingOptions().doRefactor()) {
216-
return ErrorProneAnalyzer.createByScanningForPlugins(scannerSupplier, epOptions, context);
217-
}
218-
refactoringCollection[0] = RefactoringCollection.refactor(epOptions.patchingOptions(), context);
219-
220-
// Refaster refactorer or using builtin checks
221-
CodeTransformer codeTransformer =
222-
epOptions
223-
.patchingOptions()
224-
.customRefactorer()
225-
.or(
226-
() -> {
227-
ScannerSupplier toUse = ErrorPronePlugins.loadPlugins(scannerSupplier, context);
228-
ImmutableSet<String> namedCheckers = epOptions.patchingOptions().namedCheckers();
229-
if (!namedCheckers.isEmpty()) {
230-
toUse = toUse.filter(bci -> namedCheckers.contains(bci.canonicalName()));
231-
} else {
232-
toUse = toUse.applyOverrides(epOptions);
233-
}
234-
return ErrorProneScannerTransformer.create(toUse.get());
235-
})
236-
.get();
237-
238-
return ErrorProneAnalyzer.createWithCustomDescriptionListener(
239-
codeTransformer, epOptions, context, refactoringCollection[0]);
240-
}
241-
242-
static class RefactoringTask implements TaskListener {
243-
244-
private final Context context;
245-
private final RefactoringCollection refactoringCollection;
246-
247-
public RefactoringTask(Context context, RefactoringCollection refactoringCollection) {
248-
this.context = context;
249-
this.refactoringCollection = refactoringCollection;
250-
}
251-
252-
@Override
253-
public void started(TaskEvent event) {}
254-
255-
@Override
256-
public void finished(TaskEvent event) {
257-
if (event.getKind() != Kind.GENERATE) {
258-
return;
259-
}
260-
RefactoringResult refactoringResult;
261-
try {
262-
refactoringResult = refactoringCollection.applyChanges(event.getSourceFile().toUri());
263-
} catch (Exception e) {
264-
PrintWriter out = Log.instance(context).getWriter(WriterKind.ERROR);
265-
out.println(e.getMessage());
266-
out.flush();
267-
return;
268-
}
269-
if (refactoringResult.type() == RefactoringCollection.RefactoringResultType.CHANGED) {
270-
PrintWriter out = Log.instance(context).getWriter(WriterKind.NOTICE);
271-
out.println(refactoringResult.message());
272-
out.flush();
273-
}
274-
}
275-
}
276202
}

check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222

2323
import com.google.common.base.Supplier;
2424
import com.google.common.base.Suppliers;
25+
import com.google.common.collect.ImmutableSet;
2526
import com.google.errorprone.BugPattern.SeverityLevel;
27+
import com.google.errorprone.RefactoringCollection.RefactoringResult;
2628
import com.google.errorprone.scanner.ErrorProneScannerTransformer;
2729
import com.google.errorprone.scanner.ScannerSupplier;
2830
import com.google.errorprone.util.ASTHelpers;
@@ -39,7 +41,9 @@
3941
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
4042
import com.sun.tools.javac.util.Context;
4143
import com.sun.tools.javac.util.Log;
44+
import com.sun.tools.javac.util.Log.WriterKind;
4245
import com.sun.tools.javac.util.PropagatedException;
46+
import java.io.PrintWriter;
4347
import java.util.HashSet;
4448
import java.util.Set;
4549
import java.util.regex.Pattern;
@@ -57,6 +61,74 @@ public class ErrorProneAnalyzer implements TaskListener {
5761
private final Context context;
5862
private final DescriptionListener.Factory descriptionListenerFactory;
5963

64+
public static ErrorProneAnalyzer createAnalyzer(
65+
ScannerSupplier scannerSupplier,
66+
ErrorProneOptions epOptions,
67+
Context context,
68+
RefactoringCollection[] refactoringCollection) {
69+
if (!epOptions.patchingOptions().doRefactor()) {
70+
return createByScanningForPlugins(scannerSupplier, epOptions, context);
71+
}
72+
refactoringCollection[0] = RefactoringCollection.refactor(epOptions.patchingOptions(), context);
73+
74+
// Refaster refactorer or using builtin checks
75+
CodeTransformer codeTransformer =
76+
epOptions
77+
.patchingOptions()
78+
.customRefactorer()
79+
.or(
80+
() -> {
81+
ScannerSupplier toUse = ErrorPronePlugins.loadPlugins(scannerSupplier, context);
82+
ImmutableSet<String> namedCheckers = epOptions.patchingOptions().namedCheckers();
83+
if (!namedCheckers.isEmpty()) {
84+
toUse = toUse.filter(bci -> namedCheckers.contains(bci.canonicalName()));
85+
} else {
86+
toUse = toUse.applyOverrides(epOptions);
87+
}
88+
return ErrorProneScannerTransformer.create(toUse.get());
89+
})
90+
.get();
91+
92+
return createWithCustomDescriptionListener(
93+
codeTransformer, epOptions, context, refactoringCollection[0]);
94+
}
95+
96+
/** A {@link TaskListener} that performs refactorings. */
97+
public static class RefactoringTask implements TaskListener {
98+
99+
private final Context context;
100+
private final RefactoringCollection refactoringCollection;
101+
102+
public RefactoringTask(Context context, RefactoringCollection refactoringCollection) {
103+
this.context = context;
104+
this.refactoringCollection = refactoringCollection;
105+
}
106+
107+
@Override
108+
public void started(TaskEvent event) {}
109+
110+
@Override
111+
public void finished(TaskEvent event) {
112+
if (event.getKind() != Kind.GENERATE) {
113+
return;
114+
}
115+
RefactoringResult refactoringResult;
116+
try {
117+
refactoringResult = refactoringCollection.applyChanges(event.getSourceFile().toUri());
118+
} catch (Exception e) {
119+
PrintWriter out = Log.instance(context).getWriter(WriterKind.ERROR);
120+
out.println(e.getMessage());
121+
out.flush();
122+
return;
123+
}
124+
if (refactoringResult.type() == RefactoringCollection.RefactoringResultType.CHANGED) {
125+
PrintWriter out = Log.instance(context).getWriter(WriterKind.NOTICE);
126+
out.println(refactoringResult.message());
127+
out.flush();
128+
}
129+
}
130+
}
131+
60132
public static ErrorProneAnalyzer createByScanningForPlugins(
61133
ScannerSupplier scannerSupplier, ErrorProneOptions errorProneOptions, Context context) {
62134
return new ErrorProneAnalyzer(

check_api/src/main/java/com/google/errorprone/RefactoringCollection.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
import java.util.logging.Logger;
5151

5252
/** A container of fixes that have been collected during a single compilation phase. */
53-
class RefactoringCollection implements DescriptionListener.Factory {
53+
public class RefactoringCollection implements DescriptionListener.Factory {
5454

5555
private static final Logger logger = Logger.getLogger(RefactoringCollection.class.getName());
5656

0 commit comments

Comments
 (0)