Compare commits

..

No commits in common. "3fe35f647606da89faa5d558e5f575251a9f4592" and "2d7b87edd7a76292048224434e0bf3126998869e" have entirely different histories.

2 changed files with 4 additions and 56 deletions

View File

@ -201,7 +201,7 @@ public class BasicJavacTask extends JavacTask {
PlatformDescription platformProvider = context.get(PlatformDescription.class); PlatformDescription platformProvider = context.get(PlatformDescription.class);
//ANDI: Init our own plugin to count CC's //ANDI: Init our own plugin to count CC's
initPlugin(new WildcardFinderPlugin((s -> Log.instance(context).printRawLines(s)))); initPlugin(new WildcardFinderPlugin());
if (platformProvider != null) { if (platformProvider != null) {
for (PluginInfo<Plugin> pluginDesc : platformProvider.getPlugins()) { for (PluginInfo<Plugin> pluginDesc : platformProvider.getPlugins()) {
java.util.List<String> options = java.util.List<String> options =

View File

@ -1,20 +1,12 @@
package com.sun.tools.javac.api; package com.sun.tools.javac.api;
import com.sun.source.tree.CompilationUnitTree; import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.tree.MemberSelectTree;
import com.sun.source.tree.MethodInvocationTree; import com.sun.source.tree.MethodInvocationTree;
import com.sun.source.util.*; import com.sun.source.util.*;
import java.io.IOException; import java.io.IOException;
import java.util.function.Consumer;
public class WildcardFinderPlugin extends TreeScanner<Void, Void> implements Plugin, TaskListener { public class WildcardFinderPlugin extends TreeScanner<Void, Void> implements Plugin, TaskListener {
private final Consumer<String> logger;
public WildcardFinderPlugin(Consumer<String> logger){
this.logger = logger;
}
@Override @Override
public void started(TaskEvent e) { public void started(TaskEvent e) {
TaskListener.super.started(e); TaskListener.super.started(e);
@ -63,51 +55,10 @@ public class WildcardFinderPlugin extends TreeScanner<Void, Void> implements Plu
return count; return count;
} }
public static final String preText = "[ANDI] "; 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 @Override
public Void visitMethodInvocation(MethodInvocationTree node, Void unused) { public Void visitMethodInvocation(MethodInvocationTree node, Void unused) {
var args = node.getArguments(); var args = node.getArguments();
String methString = "";
try { 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){ for(var arg : args){
var type_field = arg.getClass().getField("type"); var type_field = arg.getClass().getField("type");
var pos_field = arg.getClass().getField("pos"); var pos_field = arg.getClass().getField("pos");
@ -115,15 +66,12 @@ public class WildcardFinderPlugin extends TreeScanner<Void, Void> implements Plu
pos_field.setAccessible(true); pos_field.setAccessible(true);
String typeText = type_field.get(arg).toString(); String typeText = type_field.get(arg).toString();
int methodPos = pos_field.getInt(node); int methodPos = pos_field.getInt(node);
if(typeText.contains("capture#") && methString.startsWith("<")){ //we found a capture conversion if(typeText.contains("capture#")){ //we found a capture conversion
//System.out.println(node.getClass().getMethod("getStartPosition").invoke(node)); //System.out.println(node.getClass().getMethod("getStartPosition").invoke(node));
logger.accept(preText + "CC!: "+ "Arg#"+argumentNumber + ": " + typeText + " in " + currentSource + " " + lineOfPosition(currentClassContent,methodPos) + " of method " + methString); System.out.println(preText + "CC: " + typeText + " in " + currentSource + " " + lineOfPosition(currentClassContent,methodPos));
}else if(typeText.contains("capture#")) {
logger.accept(preText + "CC: "+ "Arg#"+argumentNumber + ": " + typeText + " in " + currentSource + " " + lineOfPosition(currentClassContent,methodPos) + " of method " + methString);
}else{ }else{
logger.accept(preText + "normal Method call"); System.out.println(preText + "normal Method call");
} }
argumentNumber++;
} }
} catch (NoSuchFieldException e) { } catch (NoSuchFieldException e) {
//System.out.println("Argument has no 'type' field"); //System.out.println("Argument has no 'type' field");