aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/checker_framework_javacutil/java/org/checkerframework/javacutil/TypeAnnotationUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/checker_framework_javacutil/java/org/checkerframework/javacutil/TypeAnnotationUtils.java')
-rw-r--r--third_party/checker_framework_javacutil/java/org/checkerframework/javacutil/TypeAnnotationUtils.java543
1 files changed, 163 insertions, 380 deletions
diff --git a/third_party/checker_framework_javacutil/java/org/checkerframework/javacutil/TypeAnnotationUtils.java b/third_party/checker_framework_javacutil/java/org/checkerframework/javacutil/TypeAnnotationUtils.java
index c166e43f47..b925f91b04 100644
--- a/third_party/checker_framework_javacutil/java/org/checkerframework/javacutil/TypeAnnotationUtils.java
+++ b/third_party/checker_framework_javacutil/java/org/checkerframework/javacutil/TypeAnnotationUtils.java
@@ -1,11 +1,20 @@
package org.checkerframework.javacutil;
-import java.lang.reflect.InvocationTargetException;
+import com.sun.tools.javac.code.Attribute;
+import com.sun.tools.javac.code.Attribute.TypeCompound;
+import com.sun.tools.javac.code.Symbol;
+import com.sun.tools.javac.code.TargetType;
+import com.sun.tools.javac.code.Type;
+import com.sun.tools.javac.code.TypeAnnotationPosition;
+import com.sun.tools.javac.processing.JavacProcessingEnvironment;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.List;
+import com.sun.tools.javac.util.Name;
+import com.sun.tools.javac.util.Pair;
+import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Map;
-
import javax.annotation.processing.ProcessingEnvironment;
-import javax.lang.model.SourceVersion;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.AnnotationValueVisitor;
@@ -18,18 +27,6 @@ import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
-import com.sun.tools.javac.code.Attribute;
-import com.sun.tools.javac.code.Attribute.TypeCompound;
-import com.sun.tools.javac.code.Symbol;
-import com.sun.tools.javac.code.TargetType;
-import com.sun.tools.javac.code.Type;
-import com.sun.tools.javac.code.TypeAnnotationPosition;
-import com.sun.tools.javac.processing.JavacProcessingEnvironment;
-import com.sun.tools.javac.tree.JCTree.JCLambda;
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.Pair;
-
/**
* A collection of helper methods related to type annotation handling.
*
@@ -38,111 +35,117 @@ import com.sun.tools.javac.util.Pair;
public class TypeAnnotationUtils {
// Class cannot be instantiated.
- private TypeAnnotationUtils() { throw new AssertionError("Class TypeAnnotationUtils cannot be instantiated."); }
+ private TypeAnnotationUtils() {
+ throw new AssertionError("Class TypeAnnotationUtils cannot be instantiated.");
+ }
/**
* Check whether a TypeCompound is contained in a list of TypeCompounds.
*
- * @param list The input list of TypeCompounds.
- * @param tc The TypeCompound to find.
- * @return true, iff a TypeCompound equal to tc is contained in list.
+ * @param list the input list of TypeCompounds
+ * @param tc the TypeCompound to find
+ * @return true, iff a TypeCompound equal to tc is contained in list
*/
- public static boolean isTypeCompoundContained(Types types, List<TypeCompound> list, TypeCompound tc) {
+ public static boolean isTypeCompoundContained(
+ Types types, List<TypeCompound> list, TypeCompound tc) {
for (Attribute.TypeCompound rawat : list) {
- if (rawat.type.tsym.name.contentEquals(tc.type.tsym.name) &&
+ if (contentEquals(rawat.type.tsym.name, tc.type.tsym.name)
// TODO: in previous line, it would be nicer to use reference equality:
// rawat.type == tc.type &&
// or at least "isSameType":
// types.isSameType(rawat.type, tc.type) &&
// but each fails in some cases.
- rawat.values.equals(tc.values) &&
- isSameTAPosition(rawat.position, tc.position)) {
+ && rawat.values.equals(tc.values)
+ && isSameTAPositionExceptTreePos(rawat.position, tc.position)) {
return true;
}
}
return false;
}
+ private static boolean contentEquals(Name n1, Name n2) {
+ // Views of underlying bytes, not copies as with Name#contentEquals
+ ByteBuffer b1 = ByteBuffer.wrap(n1.getByteArray(), n1.getByteOffset(), n1.getByteLength());
+ ByteBuffer b2 = ByteBuffer.wrap(n2.getByteArray(), n2.getByteOffset(), n2.getByteLength());
+
+ return b1.equals(b2);
+ }
+
/**
* Compare two TypeAnnotationPositions for equality.
*
- * @param p1 The first position.
- * @param p2 The second position.
- * @return true, iff the two positions are equal.
+ * @param p1 the first position
+ * @param p2 the second position
+ * @return true, iff the two positions are equal
*/
- public static boolean isSameTAPosition(TypeAnnotationPosition p1,
- TypeAnnotationPosition p2) {
- if (p1.isValidOffset == p2.isValidOffset &&
- p1.bound_index == p2.bound_index &&
- p1.exception_index == p2.exception_index &&
- p1.location.equals(p2.location) &&
- Arrays.equals(p1.lvarIndex, p2.lvarIndex) &&
- Arrays.equals(p1.lvarLength, p2.lvarLength) &&
- Arrays.equals(p1.lvarOffset, p2.lvarOffset) &&
- p1.offset == p2.offset &&
- p1.onLambda == p2.onLambda &&
- p1.parameter_index == p2.parameter_index &&
- p1.pos == p2.pos &&
- p1.type == p2.type &&
- p1.type_index == p2.type_index) {
- return true;
- }
- return false;
+ public static boolean isSameTAPosition(TypeAnnotationPosition p1, TypeAnnotationPosition p2) {
+ return isSameTAPositionExceptTreePos(p1, p2) && p1.pos == p2.pos;
+ }
+
+ public static boolean isSameTAPositionExceptTreePos(
+ TypeAnnotationPosition p1, TypeAnnotationPosition p2) {
+ return p1.isValidOffset == p2.isValidOffset
+ && p1.bound_index == p2.bound_index
+ && p1.exception_index == p2.exception_index
+ && p1.location.equals(p2.location)
+ && Arrays.equals(p1.lvarIndex, p2.lvarIndex)
+ && Arrays.equals(p1.lvarLength, p2.lvarLength)
+ && Arrays.equals(p1.lvarOffset, p2.lvarOffset)
+ && p1.offset == p2.offset
+ && p1.onLambda == p2.onLambda
+ && p1.parameter_index == p2.parameter_index
+ && p1.type == p2.type
+ && p1.type_index == p2.type_index;
}
/**
- * Returns a newly created Attribute.Compound corresponding to an
- * argument AnnotationMirror.
+ * Returns a newly created Attribute.Compound corresponding to an argument AnnotationMirror.
*
- * @param am an AnnotationMirror, which may be part of an AST or an internally
- * created subclass.
- * @return a new Attribute.Compound corresponding to the AnnotationMirror
+ * @param am an AnnotationMirror, which may be part of an AST or an internally created subclass
+ * @return a new Attribute.Compound corresponding to the AnnotationMirror
*/
- public static Attribute.Compound createCompoundFromAnnotationMirror(ProcessingEnvironment env,
- AnnotationMirror am) {
+ public static Attribute.Compound createCompoundFromAnnotationMirror(
+ ProcessingEnvironment env, AnnotationMirror am) {
// Create a new Attribute to match the AnnotationMirror.
List<Pair<Symbol.MethodSymbol, Attribute>> values = List.nil();
for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry :
- am.getElementValues().entrySet()) {
- Attribute attribute = attributeFromAnnotationValue(env, entry.getKey(), entry.getValue());
- values = values.append(new Pair<>((Symbol.MethodSymbol)entry.getKey(),
- attribute));
+ am.getElementValues().entrySet()) {
+ Attribute attribute =
+ attributeFromAnnotationValue(env, entry.getKey(), entry.getValue());
+ values = values.append(new Pair<>((Symbol.MethodSymbol) entry.getKey(), attribute));
}
- return new Attribute.Compound((Type.ClassType)am.getAnnotationType(), values);
+ return new Attribute.Compound((Type.ClassType) am.getAnnotationType(), values);
}
/**
- * Returns a newly created Attribute.TypeCompound corresponding to an
- * argument AnnotationMirror.
+ * Returns a newly created Attribute.TypeCompound corresponding to an argument AnnotationMirror.
*
- * @param am an AnnotationMirror, which may be part of an AST or an internally
- * created subclass.
- * @param tapos the type annotation position to use.
- * @return a new Attribute.TypeCompound corresponding to the AnnotationMirror
+ * @param am an AnnotationMirror, which may be part of an AST or an internally created subclass
+ * @param tapos the type annotation position to use
+ * @return a new Attribute.TypeCompound corresponding to the AnnotationMirror
*/
- public static Attribute.TypeCompound createTypeCompoundFromAnnotationMirror(ProcessingEnvironment env,
- AnnotationMirror am, TypeAnnotationPosition tapos) {
+ public static Attribute.TypeCompound createTypeCompoundFromAnnotationMirror(
+ ProcessingEnvironment env, AnnotationMirror am, TypeAnnotationPosition tapos) {
// Create a new Attribute to match the AnnotationMirror.
List<Pair<Symbol.MethodSymbol, Attribute>> values = List.nil();
for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry :
- am.getElementValues().entrySet()) {
- Attribute attribute = attributeFromAnnotationValue(env, entry.getKey(), entry.getValue());
- values = values.append(new Pair<>((Symbol.MethodSymbol)entry.getKey(),
- attribute));
+ am.getElementValues().entrySet()) {
+ Attribute attribute =
+ attributeFromAnnotationValue(env, entry.getKey(), entry.getValue());
+ values = values.append(new Pair<>((Symbol.MethodSymbol) entry.getKey(), attribute));
}
- return new Attribute.TypeCompound((Type.ClassType)am.getAnnotationType(), values, tapos);
+ return new Attribute.TypeCompound((Type.ClassType) am.getAnnotationType(), values, tapos);
}
/**
- * Returns a newly created Attribute corresponding to an argument
- * AnnotationValue.
+ * Returns a newly created Attribute corresponding to an argument AnnotationValue.
*
- * @param meth the ExecutableElement that is assigned the value, needed for empty arrays.
- * @param av an AnnotationValue, which may be part of an AST or an internally
- * created subclass.
- * @return a new Attribute corresponding to the AnnotationValue
+ * @param meth the ExecutableElement that is assigned the value, needed for empty arrays
+ * @param av an AnnotationValue, which may be part of an AST or an internally created subclass
+ * @return a new Attribute corresponding to the AnnotationValue
*/
- public static Attribute attributeFromAnnotationValue(ProcessingEnvironment env, ExecutableElement meth, AnnotationValue av) {
+ public static Attribute attributeFromAnnotationValue(
+ ProcessingEnvironment env, ExecutableElement meth, AnnotationValue av) {
return av.accept(new AttributeCreator(env, meth), null);
}
@@ -156,7 +159,7 @@ public class TypeAnnotationUtils {
public AttributeCreator(ProcessingEnvironment env, ExecutableElement meth) {
this.processingEnv = env;
- Context context = ((JavacProcessingEnvironment)env).getContext();
+ Context context = ((JavacProcessingEnvironment) env).getContext();
this.elements = env.getElementUtils();
this.modelTypes = env.getTypeUtils();
this.javacTypes = com.sun.tools.javac.code.Types.instance(context);
@@ -183,55 +186,55 @@ public class TypeAnnotationUtils {
@Override
public Attribute visitByte(byte b, Void p) {
TypeMirror byteType = modelTypes.getPrimitiveType(TypeKind.BYTE);
- return new Attribute.Constant((Type)byteType, b);
+ return new Attribute.Constant((Type) byteType, b);
}
@Override
public Attribute visitChar(char c, Void p) {
TypeMirror charType = modelTypes.getPrimitiveType(TypeKind.CHAR);
- return new Attribute.Constant((Type)charType, c);
+ return new Attribute.Constant((Type) charType, c);
}
@Override
public Attribute visitDouble(double d, Void p) {
TypeMirror doubleType = modelTypes.getPrimitiveType(TypeKind.DOUBLE);
- return new Attribute.Constant((Type)doubleType, d);
+ return new Attribute.Constant((Type) doubleType, d);
}
@Override
public Attribute visitFloat(float f, Void p) {
TypeMirror floatType = modelTypes.getPrimitiveType(TypeKind.FLOAT);
- return new Attribute.Constant((Type)floatType, f);
+ return new Attribute.Constant((Type) floatType, f);
}
@Override
public Attribute visitInt(int i, Void p) {
TypeMirror intType = modelTypes.getPrimitiveType(TypeKind.INT);
- return new Attribute.Constant((Type)intType, i);
+ return new Attribute.Constant((Type) intType, i);
}
@Override
public Attribute visitLong(long i, Void p) {
TypeMirror longType = modelTypes.getPrimitiveType(TypeKind.LONG);
- return new Attribute.Constant((Type)longType, i);
+ return new Attribute.Constant((Type) longType, i);
}
@Override
public Attribute visitShort(short s, Void p) {
TypeMirror shortType = modelTypes.getPrimitiveType(TypeKind.SHORT);
- return new Attribute.Constant((Type)shortType, s);
+ return new Attribute.Constant((Type) shortType, s);
}
@Override
public Attribute visitString(String s, Void p) {
TypeMirror stringType = elements.getTypeElement("java.lang.String").asType();
- return new Attribute.Constant((Type)stringType, s);
+ return new Attribute.Constant((Type) stringType, s);
}
@Override
public Attribute visitType(TypeMirror t, Void p) {
if (t instanceof Type) {
- return new Attribute.Class(javacTypes, (Type)t);
+ return new Attribute.Class(javacTypes, (Type) t);
}
assert false : "Unexpected type of TypeMirror: " + t.getClass();
@@ -264,7 +267,7 @@ public class TypeAnnotationUtils {
valAttrs = valAttrs.append(av.accept(this, p));
}
ArrayType arrayType = modelTypes.getArrayType(valAttrs.get(0).type);
- return new Attribute.Array((Type)arrayType, valAttrs);
+ return new Attribute.Array((Type) arrayType, valAttrs);
} else {
return new Attribute.Array((Type) meth.getReturnType(), List.<Attribute>nil());
}
@@ -277,338 +280,118 @@ public class TypeAnnotationUtils {
}
}
- /**
- * An interface to abstract a Java 8 and a Java 9 version of how
- * to get a RET reference.
- * These methods must then be implemented using reflection in order to
- * compile in either setting.
- * Note that we cannot use lambda for this as long as we want to
- * support Java 7.
- */
- interface Call8or9<RET> {
- RET call8() throws Throwable;
- RET call9() throws Throwable;
- }
-
- /**
- * Use the SourceVersion to decide whether to call the Java 8 or Java 9 version.
- * Catch all exceptions and abort if one occurs - the reflection code should
- * never break once fully debugged.
- *
- * @param ver The SourceVersion to decide what API to use.
- * @param tc The TAPCall abstraction to encapsulate two methods.
- * @return The created TypeAnnotationPosition.
- */
- private static <RET> RET call8or9(Call8or9<RET> tc) {
- try {
- boolean hasNine;
- try {
- hasNine = SourceVersion.valueOf("RELEASE_9") != null;
- } catch(IllegalArgumentException iae) {
- hasNine = false;
- }
- if (hasNine) {
- return tc.call9();
- } else {
- boolean hasEight;
- try {
- hasEight = SourceVersion.valueOf("RELEASE_8") != null;
- } catch(IllegalArgumentException iae) {
- hasEight = false;
- }
- if (hasEight) {
- return tc.call8();
- } else {
- assert false : "Checker Framework needs a Java 8 or 9 javac.";
- return null;
- }
- }
- } catch (Throwable t) {
- assert false : "Checker Framework internal error: " + t;
- t.printStackTrace();
- return null;
- }
- }
-
public static TypeAnnotationPosition unknownTAPosition() {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException {
- return TypeAnnotationPosition.class.newInstance();
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getField("unknown")
- .get(null);
- }
- }
- );
+ return new TypeAnnotationPosition();
}
public static TypeAnnotationPosition methodReturnTAPosition(final int pos) {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- TypeAnnotationPosition tapos = TypeAnnotationPosition.class.newInstance();
- TypeAnnotationPosition.class.getField("type").set(tapos, TargetType.METHOD_RETURN);
- TypeAnnotationPosition.class.getField("pos").set(tapos, pos);
- return tapos;
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getMethod("methodReturn", int.class)
- .invoke(null, pos);
- }
- }
- );
+ TypeAnnotationPosition tapos = new TypeAnnotationPosition();
+ tapos.type = TargetType.METHOD_RETURN;
+ tapos.pos = pos;
+ return tapos;
}
public static TypeAnnotationPosition methodReceiverTAPosition(final int pos) {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- TypeAnnotationPosition tapos = TypeAnnotationPosition.class.newInstance();
- TypeAnnotationPosition.class.getField("type").set(tapos, TargetType.METHOD_RECEIVER);
- TypeAnnotationPosition.class.getField("pos").set(tapos, pos);
- return tapos;
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getMethod("methodReceiver", int.class)
- .invoke(null, pos);
- }
- }
- );
+ TypeAnnotationPosition tapos = new TypeAnnotationPosition();
+ tapos.type = TargetType.METHOD_RECEIVER;
+ tapos.pos = pos;
+ return tapos;
}
public static TypeAnnotationPosition methodParameterTAPosition(final int pidx, final int pos) {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- TypeAnnotationPosition tapos = TypeAnnotationPosition.class.newInstance();
- TypeAnnotationPosition.class.getField("type").set(tapos, TargetType.METHOD_FORMAL_PARAMETER);
- TypeAnnotationPosition.class.getField("parameter_index").set(tapos, pidx);
- TypeAnnotationPosition.class.getField("pos").set(tapos, pos);
- return tapos;
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getMethod("methodParameter", int.class, int.class)
- .invoke(null, pidx, pos);
- }
- }
- );
+ TypeAnnotationPosition tapos = new TypeAnnotationPosition();
+ tapos.type = TargetType.METHOD_FORMAL_PARAMETER;
+ tapos.parameter_index = pidx;
+ tapos.pos = pos;
+ return tapos;
}
public static TypeAnnotationPosition methodThrowsTAPosition(final int tidx, final int pos) {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- TypeAnnotationPosition tapos = TypeAnnotationPosition.class.newInstance();
- TypeAnnotationPosition.class.getField("type").set(tapos, TargetType.THROWS);
- TypeAnnotationPosition.class.getField("type_index").set(tapos, tidx);
- TypeAnnotationPosition.class.getField("pos").set(tapos, pos);
- return tapos;
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, NoSuchFieldException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getMethod("methodThrows", List.class, JCLambda.class, int.class, int.class)
- .invoke(null, TypeAnnotationPosition.class.getField("emptyPath").get(null), null, tidx, pos);
- }
- }
- );
+ TypeAnnotationPosition tapos = new TypeAnnotationPosition();
+ tapos.type = TargetType.THROWS;
+ tapos.type_index = tidx;
+ tapos.pos = pos;
+ return tapos;
}
public static TypeAnnotationPosition fieldTAPosition(final int pos) {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- TypeAnnotationPosition tapos = TypeAnnotationPosition.class.newInstance();
- TypeAnnotationPosition.class.getField("type").set(tapos, TargetType.FIELD);
- TypeAnnotationPosition.class.getField("pos").set(tapos, pos);
- return tapos;
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getMethod("field", int.class)
- .invoke(null, pos);
- }
- }
- );
+ TypeAnnotationPosition tapos = new TypeAnnotationPosition();
+ tapos.type = TargetType.FIELD;
+ tapos.pos = pos;
+ return tapos;
}
public static TypeAnnotationPosition classExtendsTAPosition(final int implidx, final int pos) {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- TypeAnnotationPosition tapos = TypeAnnotationPosition.class.newInstance();
- TypeAnnotationPosition.class.getField("type").set(tapos, TargetType.CLASS_EXTENDS);
- TypeAnnotationPosition.class.getField("type_index").set(tapos, implidx);
- TypeAnnotationPosition.class.getField("pos").set(tapos, pos);
- return tapos;
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getMethod("classExtends", int.class, int.class)
- .invoke(null, implidx, pos);
- }
- }
- );
+ TypeAnnotationPosition tapos = new TypeAnnotationPosition();
+ tapos.type = TargetType.CLASS_EXTENDS;
+ tapos.type_index = implidx;
+ tapos.pos = pos;
+ return tapos;
}
public static TypeAnnotationPosition typeParameterTAPosition(final int tpidx, final int pos) {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- TypeAnnotationPosition tapos = TypeAnnotationPosition.class.newInstance();
- TypeAnnotationPosition.class.getField("type").set(tapos, TargetType.CLASS_TYPE_PARAMETER);
- TypeAnnotationPosition.class.getField("parameter_index").set(tapos, tpidx);
- TypeAnnotationPosition.class.getField("pos").set(tapos, pos);
- return tapos;
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, NoSuchFieldException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getMethod("typeParameter", List.class, JCLambda.class, int.class, int.class)
- .invoke(null, TypeAnnotationPosition.class.getField("emptyPath").get(null), null, tpidx, pos);
- }
- }
- );
+ TypeAnnotationPosition tapos = new TypeAnnotationPosition();
+ tapos.type = TargetType.CLASS_TYPE_PARAMETER;
+ tapos.parameter_index = tpidx;
+ tapos.pos = pos;
+ return tapos;
}
- public static TypeAnnotationPosition methodTypeParameterTAPosition(final int tpidx, final int pos) {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- TypeAnnotationPosition tapos = TypeAnnotationPosition.class.newInstance();
- TypeAnnotationPosition.class.getField("type").set(tapos, TargetType.METHOD_TYPE_PARAMETER);
- TypeAnnotationPosition.class.getField("parameter_index").set(tapos, tpidx);
- TypeAnnotationPosition.class.getField("pos").set(tapos, pos);
- return tapos;
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, NoSuchFieldException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getMethod("methodTypeParameter", List.class, JCLambda.class, int.class, int.class)
- .invoke(null, TypeAnnotationPosition.class.getField("emptyPath").get(null), null, tpidx, pos);
- }
- }
- );
+ public static TypeAnnotationPosition methodTypeParameterTAPosition(
+ final int tpidx, final int pos) {
+ TypeAnnotationPosition tapos = new TypeAnnotationPosition();
+ tapos.type = TargetType.METHOD_TYPE_PARAMETER;
+ tapos.parameter_index = tpidx;
+ tapos.pos = pos;
+ return tapos;
}
- public static TypeAnnotationPosition typeParameterBoundTAPosition(final int tpidx, final int bndidx, final int pos) {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- TypeAnnotationPosition tapos = TypeAnnotationPosition.class.newInstance();
- TypeAnnotationPosition.class.getField("type").set(tapos, TargetType.CLASS_TYPE_PARAMETER_BOUND);
- TypeAnnotationPosition.class.getField("parameter_index").set(tapos, tpidx);
- TypeAnnotationPosition.class.getField("bound_index").set(tapos, bndidx);
- TypeAnnotationPosition.class.getField("pos").set(tapos, pos);
- return tapos;
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, NoSuchFieldException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getMethod("typeParameterBound", List.class, JCLambda.class, int.class, int.class, int.class)
- .invoke(null, TypeAnnotationPosition.class.getField("emptyPath").get(null), null, tpidx, bndidx, pos);
- }
- }
- );
+ public static TypeAnnotationPosition typeParameterBoundTAPosition(
+ final int tpidx, final int bndidx, final int pos) {
+ TypeAnnotationPosition tapos = new TypeAnnotationPosition();
+ tapos.type = TargetType.CLASS_TYPE_PARAMETER_BOUND;
+ tapos.parameter_index = tpidx;
+ tapos.bound_index = bndidx;
+ tapos.pos = pos;
+ return tapos;
}
- public static TypeAnnotationPosition methodTypeParameterBoundTAPosition(final int tpidx, final int bndidx, final int pos) {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- TypeAnnotationPosition tapos = TypeAnnotationPosition.class.newInstance();
- TypeAnnotationPosition.class.getField("type").set(tapos, TargetType.METHOD_TYPE_PARAMETER_BOUND);
- TypeAnnotationPosition.class.getField("parameter_index").set(tapos, tpidx);
- TypeAnnotationPosition.class.getField("bound_index").set(tapos, bndidx);
- TypeAnnotationPosition.class.getField("pos").set(tapos, pos);
- return tapos;
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, NoSuchFieldException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getMethod("methodTypeParameterBound", List.class, JCLambda.class, int.class, int.class, int.class)
- .invoke(null, TypeAnnotationPosition.class.getField("emptyPath").get(null), null, tpidx, bndidx, pos);
- }
- }
- );
+ public static TypeAnnotationPosition methodTypeParameterBoundTAPosition(
+ final int tpidx, final int bndidx, final int pos) {
+ TypeAnnotationPosition tapos = new TypeAnnotationPosition();
+ tapos.type = TargetType.METHOD_TYPE_PARAMETER_BOUND;
+ tapos.parameter_index = tpidx;
+ tapos.bound_index = bndidx;
+ tapos.pos = pos;
+ return tapos;
}
public static TypeAnnotationPosition copyTAPosition(final TypeAnnotationPosition tapos) {
- return call8or9(
- new Call8or9<TypeAnnotationPosition>() {
- @Override
- public TypeAnnotationPosition call8() throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- return copyTAPosition8(tapos);
- }
- @Override
- public TypeAnnotationPosition call9() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, InvocationTargetException, NoSuchMethodException {
- return (TypeAnnotationPosition) TypeAnnotationPosition.class
- .getMethod("copy", TypeAnnotationPosition.class)
- .invoke(null, tapos);
- }
- }
- );
- }
-
- private static TypeAnnotationPosition copyTAPosition8(TypeAnnotationPosition tapos) throws InstantiationException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException {
- TypeAnnotationPosition res = TypeAnnotationPosition.class.newInstance();
+ TypeAnnotationPosition res = new TypeAnnotationPosition();
res.isValidOffset = tapos.isValidOffset;
- TypeAnnotationPosition.class.getField("bound_index").set(res, tapos.bound_index);
+ res.bound_index = tapos.bound_index;
res.exception_index = tapos.exception_index;
res.location = List.from(tapos.location);
- if (tapos.lvarIndex != null)
+ if (tapos.lvarIndex != null) {
res.lvarIndex = Arrays.copyOf(tapos.lvarIndex, tapos.lvarIndex.length);
- if (tapos.lvarLength != null)
+ }
+ if (tapos.lvarLength != null) {
res.lvarLength = Arrays.copyOf(tapos.lvarLength, tapos.lvarLength.length);
- if (tapos.lvarOffset != null)
+ }
+ if (tapos.lvarOffset != null) {
res.lvarOffset = Arrays.copyOf(tapos.lvarOffset, tapos.lvarOffset.length);
+ }
res.offset = tapos.offset;
- TypeAnnotationPosition.class.getField("onLambda").set(res, tapos.onLambda);
- TypeAnnotationPosition.class.getField("parameter_index").set(res, tapos.parameter_index);
- TypeAnnotationPosition.class.getField("pos").set(res, tapos.pos);
- TypeAnnotationPosition.class.getField("type").set(res, tapos.type);
- TypeAnnotationPosition.class.getField("type_index").set(res, tapos.type_index);
+ res.onLambda = tapos.onLambda;
+ res.parameter_index = tapos.parameter_index;
+ res.pos = tapos.pos;
+ res.type = tapos.type;
+ res.type_index = tapos.type_index;
return res;
}
- public static Type unannotatedType(final Type in) {
- return call8or9(
- new Call8or9<Type>() {
- @Override
- public Type call8() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
- return (Type) Type.class
- .getMethod("unannotatedType")
- .invoke(in);
- }
- @Override
- public Type call9() {
- return in;
- }
- }
- );
+ public static Type unannotatedType(final TypeMirror in) {
+ final Type impl = (Type) in;
+ return impl.unannotatedType();
}
-
-} \ No newline at end of file
+}