Compare commits
2 Commits
2d7b87edd7
...
3fe35f6476
Author | SHA1 | Date | |
---|---|---|---|
|
3fe35f6476 | ||
|
fa1d70f954 |
@ -201,7 +201,7 @@ public class BasicJavacTask extends JavacTask {
|
||||
PlatformDescription platformProvider = context.get(PlatformDescription.class);
|
||||
|
||||
//ANDI: Init our own plugin to count CC's
|
||||
initPlugin(new WildcardFinderPlugin());
|
||||
initPlugin(new WildcardFinderPlugin((s -> Log.instance(context).printRawLines(s))));
|
||||
if (platformProvider != null) {
|
||||
for (PluginInfo<Plugin> pluginDesc : platformProvider.getPlugins()) {
|
||||
java.util.List<String> options =
|
||||
|
@ -1,12 +1,20 @@
|
||||
package com.sun.tools.javac.api;
|
||||
|
||||
import com.sun.source.tree.CompilationUnitTree;
|
||||
import com.sun.source.tree.MemberSelectTree;
|
||||
import com.sun.source.tree.MethodInvocationTree;
|
||||
import com.sun.source.util.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class WildcardFinderPlugin extends TreeScanner<Void, Void> implements Plugin, TaskListener {
|
||||
|
||||
private final Consumer<String> logger;
|
||||
|
||||
public WildcardFinderPlugin(Consumer<String> logger){
|
||||
this.logger = logger;
|
||||
}
|
||||
@Override
|
||||
public void started(TaskEvent e) {
|
||||
TaskListener.super.started(e);
|
||||
@ -55,10 +63,51 @@ public class WildcardFinderPlugin extends TreeScanner<Void, Void> implements Plu
|
||||
return count;
|
||||
}
|
||||
public static final String preText = "[ANDI] ";
|
||||
|
||||
@Override
|
||||
public Void visitMemberSelect(MemberSelectTree node, Void unused) {
|
||||
try {
|
||||
var type_field = node.getClass().getField("type");
|
||||
var pos_field = node.getClass().getField("pos");
|
||||
type_field.setAccessible(true);
|
||||
pos_field.setAccessible(true);
|
||||
String typeText = type_field.get(node).toString();
|
||||
int methodPos = pos_field.getInt(node);
|
||||
if(typeText.contains("capture#")){ //we found a capture conversion
|
||||
//System.out.println(node.getClass().getMethod("getStartPosition").invoke(node));
|
||||
logger.accept(preText + "Field-CC: " + typeText + " in " + currentSource + " " + lineOfPosition(currentClassContent,methodPos));
|
||||
var expr = node.getExpression();
|
||||
var expr_type_field = node.getClass().getField("type");
|
||||
expr_type_field.setAccessible(true);
|
||||
String exprTypeText = expr_type_field.get(expr).toString();
|
||||
if(exprTypeText.contains("capture") || exprTypeText.contains("?")){
|
||||
logger.accept(preText + "Field-CC!: " + typeText + " in " + currentSource + " " + lineOfPosition(currentClassContent,methodPos));
|
||||
}
|
||||
}else{
|
||||
logger.accept(preText + "normal field access");
|
||||
}
|
||||
} catch (Throwable e){
|
||||
//System.out.println("Error in method invocation: " + e.getMessage()+
|
||||
// " in "+currentSource);i
|
||||
}
|
||||
return super.visitMemberSelect(node, unused);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visitMethodInvocation(MethodInvocationTree node, Void unused) {
|
||||
var args = node.getArguments();
|
||||
String methString = "";
|
||||
try{
|
||||
var meth_field = node.getClass().getField("meth");
|
||||
meth_field.setAccessible(true);
|
||||
var meth = meth_field.get(node);
|
||||
var sym_field = meth.getClass().getField("sym");
|
||||
sym_field.setAccessible(true);
|
||||
methString = sym_field.get(meth).toString();
|
||||
//System.out.println(methString);
|
||||
}catch (Throwable e){}
|
||||
try {
|
||||
int argumentNumber = 0;
|
||||
for(var arg : args){
|
||||
var type_field = arg.getClass().getField("type");
|
||||
var pos_field = arg.getClass().getField("pos");
|
||||
@ -66,12 +115,15 @@ public class WildcardFinderPlugin extends TreeScanner<Void, Void> implements Plu
|
||||
pos_field.setAccessible(true);
|
||||
String typeText = type_field.get(arg).toString();
|
||||
int methodPos = pos_field.getInt(node);
|
||||
if(typeText.contains("capture#")){ //we found a capture conversion
|
||||
if(typeText.contains("capture#") && methString.startsWith("<")){ //we found a capture conversion
|
||||
//System.out.println(node.getClass().getMethod("getStartPosition").invoke(node));
|
||||
System.out.println(preText + "CC: " + typeText + " in " + currentSource + " " + lineOfPosition(currentClassContent,methodPos));
|
||||
logger.accept(preText + "CC!: "+ "Arg#"+argumentNumber + ": " + typeText + " in " + currentSource + " " + lineOfPosition(currentClassContent,methodPos) + " of method " + methString);
|
||||
}else if(typeText.contains("capture#")) {
|
||||
logger.accept(preText + "CC: "+ "Arg#"+argumentNumber + ": " + typeText + " in " + currentSource + " " + lineOfPosition(currentClassContent,methodPos) + " of method " + methString);
|
||||
}else{
|
||||
System.out.println(preText + "normal Method call");
|
||||
logger.accept(preText + "normal Method call");
|
||||
}
|
||||
argumentNumber++;
|
||||
}
|
||||
} catch (NoSuchFieldException e) {
|
||||
//System.out.println("Argument has no 'type' field");
|
||||
|
Loading…
Reference in New Issue
Block a user