Add deepestGeneric Method to types and check whether Field declaration has generic more than two times nested
This commit is contained in:
parent
bf2505685f
commit
f63a8bcd4e
@ -71,6 +71,15 @@ public interface VariableTree extends StatementTree {
|
||||
*/
|
||||
Tree getType();
|
||||
|
||||
/**
|
||||
* 0 - no generic
|
||||
* 1 - is a generic
|
||||
* 2 - contains a generic
|
||||
* 3 - contains a generic like List<List<X>>
|
||||
* @return
|
||||
*/
|
||||
int deepestGeneric();
|
||||
|
||||
/**
|
||||
* Returns the initializer for the variable, or {@code null} if none.
|
||||
* @return the initializer
|
||||
|
@ -12,6 +12,7 @@ public class WildcardFinderPlugin extends TreeScanner<Void, Void> implements Plu
|
||||
private final Consumer<String> logger;
|
||||
|
||||
public WildcardFinderPlugin(Consumer<String> logger){
|
||||
|
||||
this.logger = logger;
|
||||
}
|
||||
@Override
|
||||
@ -38,6 +39,21 @@ public class WildcardFinderPlugin extends TreeScanner<Void, Void> implements Plu
|
||||
javacTask.addTaskListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visitClass(ClassTree node, Void unused) {
|
||||
node.getMembers().forEach(typeDecl -> {
|
||||
if (typeDecl instanceof VariableTree) {
|
||||
logger.accept(preText + "Field Type: " + ((VariableTree) typeDecl).getType().toString());
|
||||
logger.accept(preText + "deepestGeneric: " + ((VariableTree) typeDecl).deepestGeneric());
|
||||
if( ((VariableTree) typeDecl).deepestGeneric() >= 3){
|
||||
logger.accept(preText + "Field not Wildcard compatible");
|
||||
}
|
||||
//logger.accept("deepestGeneric: " + ((VariableTree)((VariableTree) typeDecl).getType()).deepestGeneric());
|
||||
}
|
||||
});
|
||||
return super.visitClass(node, unused);
|
||||
}
|
||||
|
||||
String currentSource = "";
|
||||
String currentClassContent = "";
|
||||
@Override
|
||||
|
@ -82,6 +82,9 @@ import static com.sun.tools.javac.code.TypeTag.*;
|
||||
*/
|
||||
public abstract class Type extends AnnoConstruct implements TypeMirror, PoolConstant {
|
||||
|
||||
public int deepestGeneric(){
|
||||
return 0;
|
||||
}
|
||||
/**
|
||||
* Type metadata, Should be {@code null} for the default value.
|
||||
*
|
||||
@ -898,6 +901,11 @@ public abstract class Type extends AnnoConstruct implements TypeMirror, PoolCons
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deepestGeneric() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeTag getTag() {
|
||||
return WILDCARD;
|
||||
@ -1031,6 +1039,12 @@ public abstract class Type extends AnnoConstruct implements TypeMirror, PoolCons
|
||||
this.interfaces_field = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deepestGeneric() {
|
||||
int deepest = typarams_field.stream().mapToInt(t -> t.deepestGeneric()).max().orElse(0);
|
||||
return deepest>0?1 + deepest:0;
|
||||
}
|
||||
|
||||
public int poolTag() {
|
||||
return ClassFile.CONSTANT_Class;
|
||||
}
|
||||
@ -1354,6 +1368,11 @@ public abstract class Type extends AnnoConstruct implements TypeMirror, PoolCons
|
||||
this(that.elemtype, that.tsym, that.getMetadata());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deepestGeneric() {
|
||||
return elemtype.deepestGeneric();
|
||||
}
|
||||
|
||||
public int poolTag() {
|
||||
return ClassFile.CONSTANT_Class;
|
||||
}
|
||||
@ -1699,6 +1718,11 @@ public abstract class Type extends AnnoConstruct implements TypeMirror, PoolCons
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deepestGeneric() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeTag getTag() {
|
||||
return TYPEVAR;
|
||||
|
@ -1076,6 +1076,9 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
|
||||
public JCExpression getNameExpression() { return nameexpr; }
|
||||
@DefinedBy(Api.COMPILER_TREE)
|
||||
public JCTree getType() { return vartype; }
|
||||
public int deepestGeneric(){
|
||||
return type.deepestGeneric();
|
||||
}
|
||||
@DefinedBy(Api.COMPILER_TREE)
|
||||
public JCExpression getInitializer() {
|
||||
return init;
|
||||
|
Loading…
Reference in New Issue
Block a user