AnnotationProxyMaker workaround cleanup

This commit is contained in:
Anuken
2021-07-14 19:52:43 -04:00
parent a559c3581e
commit a9f9ddcacf
3 changed files with 12 additions and 41 deletions

View File

@@ -7,6 +7,7 @@ import com.sun.tools.javac.code.Attribute.Enum;
import com.sun.tools.javac.code.Attribute.Error; import com.sun.tools.javac.code.Attribute.Error;
import com.sun.tools.javac.code.Attribute.Visitor; import com.sun.tools.javac.code.Attribute.Visitor;
import com.sun.tools.javac.code.Attribute.*; import com.sun.tools.javac.code.Attribute.*;
import com.sun.tools.javac.code.Scope.*;
import com.sun.tools.javac.code.Type; import com.sun.tools.javac.code.Type;
import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.code.Type.ArrayType; import com.sun.tools.javac.code.Type.ArrayType;
@@ -64,36 +65,13 @@ public class AnnotationProxyMaker{
LinkedHashMap map = new LinkedHashMap(); LinkedHashMap map = new LinkedHashMap();
ClassSymbol cl = (ClassSymbol)this.anno.type.tsym; ClassSymbol cl = (ClassSymbol)this.anno.type.tsym;
//try to use Java 8 API for this if possible for(Symbol s : cl.members().getSymbols(LookupKind.NON_RECURSIVE)){
try{ if(s.getKind() == ElementKind.METHOD){
Class entryClass = Class.forName("com.sun.tools.javac.code.Scope$Entry"); MethodSymbol var4 = (MethodSymbol)s;
Object members = cl.members(); Attribute var5 = var4.getDefaultValue();
Field field = members.getClass().getField("elems"); if(var5 != null){
Object elems = field.get(members); map.put(var4, var5);
Field siblingField = entryClass.getField("sibling");
Field symField = entryClass.getField("sym");
for(Object currEntry = elems; currEntry != null; currEntry = siblingField.get(currEntry)){
handleSymbol((Symbol)symField.get(currEntry), map);
}
}catch(Throwable e){
//otherwise try other API
try{
Class lookupClass = Class.forName("com.sun.tools.javac.code.Scope$LookupKind");
Field nonRecField = lookupClass.getField("NON_RECURSIVE");
Object nonRec = nonRecField.get(null);
Scope scope = cl.members();
Method getSyms = scope.getClass().getMethod("getSymbols", lookupClass);
Iterable<Symbol> it = (Iterable<Symbol>)getSyms.invoke(scope, nonRec);
Iterator<Symbol> i = it.iterator();
while(i.hasNext()){
handleSymbol(i.next(), map);
} }
}catch(Throwable death){
//I tried
throw new RuntimeException(death);
} }
} }
@@ -104,17 +82,6 @@ public class AnnotationProxyMaker{
return map; return map;
} }
private void handleSymbol(Symbol sym, LinkedHashMap map){
if(sym.getKind() == ElementKind.METHOD){
MethodSymbol var4 = (MethodSymbol)sym;
Attribute var5 = var4.getDefaultValue();
if(var5 != null){
map.put(var4, var5);
}
}
}
private Object generateValue(MethodSymbol var1, Attribute var2){ private Object generateValue(MethodSymbol var1, Attribute var2){
AnnotationProxyMaker.ValueVisitor var3 = new AnnotationProxyMaker.ValueVisitor(var1); AnnotationProxyMaker.ValueVisitor var3 = new AnnotationProxyMaker.ValueVisitor(var1);
return var3.getValue(var2); return var3.getValue(var2);

View File

@@ -12,6 +12,10 @@ import java.lang.Class;
import java.lang.annotation.*; import java.lang.annotation.*;
import java.lang.reflect.*; import java.lang.reflect.*;
/**
* Wrapper over Element with added utility functions.
* I would have preferred to use extension methods for this, but Java doesn't have any.
* */
public class Selement<T extends Element>{ public class Selement<T extends Element>{
public final T e; public final T e;

View File

@@ -598,7 +598,7 @@ public class Generators{
}); });
} }
/** Generates a scorch pixmap based on parameters. Thread safe, unless multiple scorch generators are running in parallel. */ /** Generates a scorch pixmap based on parameters. Thread safe. */
public static class ScorchGenerator{ public static class ScorchGenerator{
public int size = 80, seed = 0, color = Color.whiteRgba; public int size = 80, seed = 0, color = Color.whiteRgba;
public double scale = 18, pow = 2, octaves = 4, pers = 0.4, add = 2, nscl = 4.5f; public double scale = 18, pow = 2, octaves = 4, pers = 0.4, add = 2, nscl = 4.5f;