com.sun.tools.classfile.TypeAnnotation Java Examples
The following examples show how to use
com.sun.tools.classfile.TypeAnnotation.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ReferenceInfoUtil.java From TencentKona-8 with GNU General Public License v2.0 | 6 votes |
public static boolean areEquals(TypeAnnotation.Position p1, TypeAnnotation.Position p2) { if (p1 == p2) return true; if (p1 == null || p2 == null) return false; return ((p1.type == p2.type) && (p1.location.equals(p2.location)) && areEquals(p1.offset, p2.offset) && areEquals(p1.lvarOffset, p2.lvarOffset) && areEquals(p1.lvarLength, p2.lvarLength) && areEquals(p1.lvarIndex, p2.lvarIndex) && areEquals(p1.bound_index, p2.bound_index) && areEquals(p1.parameter_index, p2.parameter_index) && areEquals(p1.type_index, p2.type_index) && areEquals(p1.exception_index, p2.exception_index)); }
Example #2
Source File: TypeAnnotationPropagationTest.java From TencentKona-8 with GNU General Public License v2.0 | 6 votes |
public void run() throws Exception { ClassFile cf = getClassFile("TypeAnnotationPropagationTest$Test.class"); Method f = null; for (Method m : cf.methods) { if (m.getName(cf.constant_pool).contains("f")) { f = m; break; } } int idx = f.attributes.getIndex(cf.constant_pool, Attribute.Code); Code_attribute cattr = (Code_attribute) f.attributes.get(idx); idx = cattr.attributes.getIndex(cf.constant_pool, Attribute.RuntimeVisibleTypeAnnotations); RuntimeVisibleTypeAnnotations_attribute attr = (RuntimeVisibleTypeAnnotations_attribute) cattr.attributes.get(idx); TypeAnnotation anno = attr.annotations[0]; assertEquals(anno.position.lvarOffset, new int[] {3}, "start_pc"); assertEquals(anno.position.lvarLength, new int[] {8}, "length"); assertEquals(anno.position.lvarIndex, new int[] {1}, "index"); }
Example #3
Source File: TypeAnnotationWriter.java From openjdk-jdk8u-backup with GNU General Public License v2.0 | 6 votes |
private void check(NoteKind kind, RuntimeTypeAnnotations_attribute attr) { if (attr == null) return; for (TypeAnnotation anno: attr.annotations) { Position p = anno.position; Note note = null; if (p.offset != -1) addNote(p.offset, note = new Note(kind, anno)); if (p.lvarOffset != null) { for (int i = 0; i < p.lvarOffset.length; i++) { if (note == null) note = new Note(kind, anno); addNote(p.lvarOffset[i], note); } } } }
Example #4
Source File: TypeAnnotationWriter.java From TencentKona-8 with GNU General Public License v2.0 | 6 votes |
private void check(NoteKind kind, RuntimeTypeAnnotations_attribute attr) { if (attr == null) return; for (TypeAnnotation anno: attr.annotations) { Position p = anno.position; Note note = null; if (p.offset != -1) addNote(p.offset, note = new Note(kind, anno)); if (p.lvarOffset != null) { for (int i = 0; i < p.lvarOffset.length; i++) { if (note == null) note = new Note(kind, anno); addNote(p.lvarOffset[i], note); } } } }
Example #5
Source File: ReferenceInfoUtil.java From openjdk-jdk9 with GNU General Public License v2.0 | 6 votes |
public static boolean compare(Map<String, TypeAnnotation.Position> expectedAnnos, List<TypeAnnotation> actualAnnos, ClassFile cf) throws InvalidIndex, UnexpectedEntry { if (actualAnnos.size() != expectedAnnos.size()) { throw new ComparisionException("Wrong number of annotations", expectedAnnos, actualAnnos); } for (Map.Entry<String, TypeAnnotation.Position> e : expectedAnnos.entrySet()) { String aName = e.getKey(); TypeAnnotation.Position expected = e.getValue(); TypeAnnotation actual = findAnnotation(aName, actualAnnos, cf); if (actual == null) throw new ComparisionException("Expected annotation not found: " + aName); if (!areEquals(expected, actual.position)) { throw new ComparisionException("Unexpected position for annotation : " + aName + "\n Expected: " + expected.toString() + "\n Found: " + actual.position.toString()); } } return true; }
Example #6
Source File: TypeAnnotationPropagationTest.java From openjdk-jdk8u-backup with GNU General Public License v2.0 | 6 votes |
public void run() throws Exception { ClassFile cf = getClassFile("TypeAnnotationPropagationTest$Test.class"); Method f = null; for (Method m : cf.methods) { if (m.getName(cf.constant_pool).contains("f")) { f = m; break; } } int idx = f.attributes.getIndex(cf.constant_pool, Attribute.Code); Code_attribute cattr = (Code_attribute) f.attributes.get(idx); idx = cattr.attributes.getIndex(cf.constant_pool, Attribute.RuntimeVisibleTypeAnnotations); RuntimeVisibleTypeAnnotations_attribute attr = (RuntimeVisibleTypeAnnotations_attribute) cattr.attributes.get(idx); TypeAnnotation anno = attr.annotations[0]; assertEquals(anno.position.lvarOffset, new int[] {3}, "start_pc"); assertEquals(anno.position.lvarLength, new int[] {8}, "length"); assertEquals(anno.position.lvarIndex, new int[] {1}, "index"); }
Example #7
Source File: ReferenceInfoUtil.java From openjdk-jdk8u with GNU General Public License v2.0 | 6 votes |
public static boolean compare(Map<String, TypeAnnotation.Position> expectedAnnos, List<TypeAnnotation> actualAnnos, ClassFile cf) throws InvalidIndex, UnexpectedEntry { if (actualAnnos.size() != expectedAnnos.size()) { throw new ComparisionException("Wrong number of annotations", expectedAnnos, actualAnnos); } for (Map.Entry<String, TypeAnnotation.Position> e : expectedAnnos.entrySet()) { String aName = e.getKey(); TypeAnnotation.Position expected = e.getValue(); TypeAnnotation actual = findAnnotation(aName, actualAnnos, cf); if (actual == null) throw new ComparisionException("Expected annotation not found: " + aName); // TODO: you currently get an exception if the test case does not use all necessary // annotation attributes, e.g. forgetting the offset for a local variable. // It would be nicer to give an understandable warning instead. if (!areEquals(expected, actual.position)) { throw new ComparisionException("Unexpected position for annotation : " + aName + "\n Expected: " + expected.toString() + "\n Found: " + actual.position.toString()); } } return true; }
Example #8
Source File: ReferenceInfoUtil.java From TencentKona-8 with GNU General Public License v2.0 | 6 votes |
private static void findAnnotations(ClassFile cf, Method m, String name, List<TypeAnnotation> annos) { int index = m.attributes.getIndex(cf.constant_pool, name); if (index != -1) { Attribute attr = m.attributes.get(index); assert attr instanceof RuntimeTypeAnnotations_attribute; RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr; annos.addAll(Arrays.asList(tAttr.annotations)); } int cindex = m.attributes.getIndex(cf.constant_pool, Attribute.Code); if (cindex != -1) { Attribute cattr = m.attributes.get(cindex); assert cattr instanceof Code_attribute; Code_attribute cAttr = (Code_attribute)cattr; index = cAttr.attributes.getIndex(cf.constant_pool, name); if (index != -1) { Attribute attr = cAttr.attributes.get(index); assert attr instanceof RuntimeTypeAnnotations_attribute; RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr; annos.addAll(Arrays.asList(tAttr.annotations)); } } }
Example #9
Source File: Driver.java From openjdk-jdk8u with GNU General Public License v2.0 | 6 votes |
private Map<String, TypeAnnotation.Position> expectedOf(Method m) { TADescription ta = m.getAnnotation(TADescription.class); TADescriptions tas = m.getAnnotation(TADescriptions.class); if (ta == null && tas == null) return null; Map<String, TypeAnnotation.Position> result = new HashMap<String, TypeAnnotation.Position>(); if (ta != null) result.putAll(expectedOf(ta)); if (tas != null) { for (TADescription a : tas.value()) { result.putAll(expectedOf(a)); } } return result; }
Example #10
Source File: Driver.java From TencentKona-8 with GNU General Public License v2.0 | 6 votes |
private Map<String, TypeAnnotation.Position> expectedOf(Method m) { TADescription ta = m.getAnnotation(TADescription.class); TADescriptions tas = m.getAnnotation(TADescriptions.class); if (ta == null && tas == null) return null; Map<String, TypeAnnotation.Position> result = new HashMap<String, TypeAnnotation.Position>(); if (ta != null) result.putAll(expectedOf(ta)); if (tas != null) { for (TADescription a : tas.value()) { result.putAll(expectedOf(a)); } } return result; }
Example #11
Source File: ReferenceInfoUtil.java From openjdk-jdk8u with GNU General Public License v2.0 | 6 votes |
public static boolean areEquals(TypeAnnotation.Position p1, TypeAnnotation.Position p2) { if (p1 == p2) return true; if (p1 == null || p2 == null) return false; return ((p1.type == p2.type) && (p1.location.equals(p2.location)) && areEquals(p1.offset, p2.offset) && areEquals(p1.lvarOffset, p2.lvarOffset) && areEquals(p1.lvarLength, p2.lvarLength) && areEquals(p1.lvarIndex, p2.lvarIndex) && areEquals(p1.bound_index, p2.bound_index) && areEquals(p1.parameter_index, p2.parameter_index) && areEquals(p1.type_index, p2.type_index) && areEquals(p1.exception_index, p2.exception_index)); }
Example #12
Source File: ReferenceInfoUtil.java From openjdk-jdk8u-backup with GNU General Public License v2.0 | 6 votes |
public static boolean areEquals(TypeAnnotation.Position p1, TypeAnnotation.Position p2) { if (p1 == p2) return true; if (p1 == null || p2 == null) return false; return ((p1.type == p2.type) && (p1.location.equals(p2.location)) && areEquals(p1.offset, p2.offset) && areEquals(p1.lvarOffset, p2.lvarOffset) && areEquals(p1.lvarLength, p2.lvarLength) && areEquals(p1.lvarIndex, p2.lvarIndex) && areEquals(p1.bound_index, p2.bound_index) && areEquals(p1.parameter_index, p2.parameter_index) && areEquals(p1.type_index, p2.type_index) && areEquals(p1.exception_index, p2.exception_index)); }
Example #13
Source File: TypeAnnotationWriter.java From openjdk-jdk9 with GNU General Public License v2.0 | 6 votes |
private void check(NoteKind kind, RuntimeTypeAnnotations_attribute attr) { if (attr == null) return; for (TypeAnnotation anno: attr.annotations) { Position p = anno.position; Note note = null; if (p.offset != -1) addNote(p.offset, note = new Note(kind, anno)); if (p.lvarOffset != null) { for (int i = 0; i < p.lvarOffset.length; i++) { if (note == null) note = new Note(kind, anno); addNote(p.lvarOffset[i], note); } } } }
Example #14
Source File: TypeAnnotationPropagationTest.java From openjdk-jdk8u with GNU General Public License v2.0 | 6 votes |
public void run() throws Exception { ClassFile cf = getClassFile("TypeAnnotationPropagationTest$Test.class"); Method f = null; for (Method m : cf.methods) { if (m.getName(cf.constant_pool).contains("f")) { f = m; break; } } int idx = f.attributes.getIndex(cf.constant_pool, Attribute.Code); Code_attribute cattr = (Code_attribute) f.attributes.get(idx); idx = cattr.attributes.getIndex(cf.constant_pool, Attribute.RuntimeVisibleTypeAnnotations); RuntimeVisibleTypeAnnotations_attribute attr = (RuntimeVisibleTypeAnnotations_attribute) cattr.attributes.get(idx); TypeAnnotation anno = attr.annotations[0]; assertEquals(anno.position.lvarOffset, new int[] {3}, "start_pc"); assertEquals(anno.position.lvarLength, new int[] {8}, "length"); assertEquals(anno.position.lvarIndex, new int[] {1}, "index"); }
Example #15
Source File: ReferenceInfoUtil.java From jdk8u60 with GNU General Public License v2.0 | 6 votes |
private static void findAnnotations(ClassFile cf, Method m, String name, List<TypeAnnotation> annos) { int index = m.attributes.getIndex(cf.constant_pool, name); if (index != -1) { Attribute attr = m.attributes.get(index); assert attr instanceof RuntimeTypeAnnotations_attribute; RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr; annos.addAll(Arrays.asList(tAttr.annotations)); } int cindex = m.attributes.getIndex(cf.constant_pool, Attribute.Code); if (cindex != -1) { Attribute cattr = m.attributes.get(cindex); assert cattr instanceof Code_attribute; Code_attribute cAttr = (Code_attribute)cattr; index = cAttr.attributes.getIndex(cf.constant_pool, name); if (index != -1) { Attribute attr = cAttr.attributes.get(index); assert attr instanceof RuntimeTypeAnnotations_attribute; RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr; annos.addAll(Arrays.asList(tAttr.annotations)); } } }
Example #16
Source File: Driver.java From jdk8u60 with GNU General Public License v2.0 | 6 votes |
private Map<String, TypeAnnotation.Position> expectedOf(Method m) { TADescription ta = m.getAnnotation(TADescription.class); TADescriptions tas = m.getAnnotation(TADescriptions.class); if (ta == null && tas == null) return null; Map<String, TypeAnnotation.Position> result = new HashMap<String, TypeAnnotation.Position>(); if (ta != null) result.putAll(expectedOf(ta)); if (tas != null) { for (TADescription a : tas.value()) { result.putAll(expectedOf(a)); } } return result; }
Example #17
Source File: ReferenceInfoUtil.java From jdk8u60 with GNU General Public License v2.0 | 6 votes |
public static boolean areEquals(TypeAnnotation.Position p1, TypeAnnotation.Position p2) { if (p1 == p2) return true; if (p1 == null || p2 == null) return false; return ((p1.type == p2.type) && (p1.location.equals(p2.location)) && areEquals(p1.offset, p2.offset) && areEquals(p1.lvarOffset, p2.lvarOffset) && areEquals(p1.lvarLength, p2.lvarLength) && areEquals(p1.lvarIndex, p2.lvarIndex) && areEquals(p1.bound_index, p2.bound_index) && areEquals(p1.parameter_index, p2.parameter_index) && areEquals(p1.type_index, p2.type_index) && areEquals(p1.exception_index, p2.exception_index)); }
Example #18
Source File: ReferenceInfoUtil.java From jdk8u60 with GNU General Public License v2.0 | 6 votes |
public static boolean compare(Map<String, TypeAnnotation.Position> expectedAnnos, List<TypeAnnotation> actualAnnos, ClassFile cf) throws InvalidIndex, UnexpectedEntry { if (actualAnnos.size() != expectedAnnos.size()) { throw new ComparisionException("Wrong number of annotations", expectedAnnos, actualAnnos); } for (Map.Entry<String, TypeAnnotation.Position> e : expectedAnnos.entrySet()) { String aName = e.getKey(); TypeAnnotation.Position expected = e.getValue(); TypeAnnotation actual = findAnnotation(aName, actualAnnos, cf); if (actual == null) throw new ComparisionException("Expected annotation not found: " + aName); // TODO: you currently get an exception if the test case does not use all necessary // annotation attributes, e.g. forgetting the offset for a local variable. // It would be nicer to give an understandable warning instead. if (!areEquals(expected, actual.position)) { throw new ComparisionException("Unexpected position for annotation : " + aName + "\n Expected: " + expected.toString() + "\n Found: " + actual.position.toString()); } } return true; }
Example #19
Source File: Driver.java From jdk8u60 with GNU General Public License v2.0 | 5 votes |
protected void runDriver(Object object) throws Exception { int passed = 0, failed = 0; Class<?> clazz = object.getClass(); out.println("Tests for " + clazz.getName()); // Find methods for (Method method : clazz.getMethods()) { Map<String, TypeAnnotation.Position> expected = expectedOf(method); if (expected == null) continue; if (method.getReturnType() != String.class) throw new IllegalArgumentException("Test method needs to return a string: " + method); String testClass = testClassOf(method); for (String[] extraParams : extraParamsCombinations) { try { String compact = (String)method.invoke(object); String fullFile = wrap(compact); ClassFile cf = compileAndReturn(fullFile, testClass, extraParams); List<TypeAnnotation> actual = ReferenceInfoUtil.extendedAnnotationsOf(cf); ReferenceInfoUtil.compare(expected, actual, cf); out.println("PASSED: " + method.getName()); ++passed; } catch (Throwable e) { out.println("FAILED: " + method.getName()); out.println(" " + e.toString()); ++failed; } } } out.println(); int total = passed + failed; out.println(total + " total tests: " + passed + " PASSED, " + failed + " FAILED"); out.flush(); if (failed != 0) throw new RuntimeException(failed + " tests failed"); }
Example #20
Source File: Driver.java From openjdk-jdk8u with GNU General Public License v2.0 | 5 votes |
private Map<String, TypeAnnotation.Position> expectedOf(TADescription d) { String annoName = d.annotation(); TypeAnnotation.Position p = new TypeAnnotation.Position(); p.type = d.type(); if (d.offset() != NOT_SET) p.offset = d.offset(); if (d.lvarOffset().length != 0) p.lvarOffset = d.lvarOffset(); if (d.lvarLength().length != 0) p.lvarLength = d.lvarLength(); if (d.lvarIndex().length != 0) p.lvarIndex = d.lvarIndex(); if (d.boundIndex() != NOT_SET) p.bound_index = d.boundIndex(); if (d.paramIndex() != NOT_SET) p.parameter_index = d.paramIndex(); if (d.typeIndex() != NOT_SET) p.type_index = d.typeIndex(); if (d.exceptionIndex() != NOT_SET) p.exception_index = d.exceptionIndex(); if (d.genericLocation().length != 0) { p.location = TypeAnnotation.Position.getTypePathFromBinary(wrapIntArray(d.genericLocation())); } return Collections.singletonMap(annoName, p); }
Example #21
Source File: ClassReader.java From openjdk-jdk9 with GNU General Public License v2.0 | 5 votes |
private void parseTypeAnnotations(TypeAnnotation pa, Element p) { Element pta = new Element("RuntimeVisibleTypeAnnotation"); p.add(pta); Position pos = pa.position; parsePosition(pos, pta); parseAnnotation(pa.annotation, pta); }
Example #22
Source File: ClassReader.java From jdk8u-jdk with GNU General Public License v2.0 | 5 votes |
@Override public Element visitRuntimeVisibleTypeAnnotations(RuntimeVisibleTypeAnnotations_attribute rvta, Element p) { Element e = new Element(x.getCpString(rvta.attribute_name_index)); for (TypeAnnotation pa : rvta.annotations) { parseTypeAnnotations(pa, e); } e.sort(); p.add(e); return null; }
Example #23
Source File: ClassReader.java From jdk8u60 with GNU General Public License v2.0 | 5 votes |
@Override public Element visitRuntimeVisibleTypeAnnotations(RuntimeVisibleTypeAnnotations_attribute rvta, Element p) { Element e = new Element(x.getCpString(rvta.attribute_name_index)); for (TypeAnnotation pa : rvta.annotations) { parseTypeAnnotations(pa, e); } e.sort(); p.add(e); return null; }
Example #24
Source File: ClassReader.java From jdk8u60 with GNU General Public License v2.0 | 5 votes |
private void parseTypeAnnotations(TypeAnnotation pa, Element p) { Element pta = new Element("RuntimeVisibleTypeAnnotation"); p.add(pta); Position pos = pa.position; parsePosition(pos, pta); parseAnnotation(pa.annotation, pta); }
Example #25
Source File: Driver.java From jdk8u60 with GNU General Public License v2.0 | 5 votes |
private Map<String, TypeAnnotation.Position> expectedOf(TADescription d) { String annoName = d.annotation(); TypeAnnotation.Position p = new TypeAnnotation.Position(); p.type = d.type(); if (d.offset() != NOT_SET) p.offset = d.offset(); if (d.lvarOffset().length != 0) p.lvarOffset = d.lvarOffset(); if (d.lvarLength().length != 0) p.lvarLength = d.lvarLength(); if (d.lvarIndex().length != 0) p.lvarIndex = d.lvarIndex(); if (d.boundIndex() != NOT_SET) p.bound_index = d.boundIndex(); if (d.paramIndex() != NOT_SET) p.parameter_index = d.paramIndex(); if (d.typeIndex() != NOT_SET) p.type_index = d.typeIndex(); if (d.exceptionIndex() != NOT_SET) p.exception_index = d.exceptionIndex(); if (d.genericLocation().length != 0) { p.location = TypeAnnotation.Position.getTypePathFromBinary(wrapIntArray(d.genericLocation())); } return Collections.singletonMap(annoName, p); }
Example #26
Source File: ReferenceInfoUtil.java From openjdk-jdk9 with GNU General Public License v2.0 | 5 votes |
private static TypeAnnotation findAnnotation(String name, List<TypeAnnotation> annotations, ClassFile cf) throws InvalidIndex, UnexpectedEntry { String properName = "L" + name + ";"; for (TypeAnnotation anno : annotations) { String actualName = cf.constant_pool.getUTF8Value(anno.annotation.type_index); if (properName.equals(actualName)) return anno; } return null; }
Example #27
Source File: ReferenceInfoUtil.java From openjdk-jdk8u-backup with GNU General Public License v2.0 | 5 votes |
private static void findAnnotations(ClassFile cf, String name, List<TypeAnnotation> annos) { int index = cf.attributes.getIndex(cf.constant_pool, name); if (index != -1) { Attribute attr = cf.attributes.get(index); assert attr instanceof RuntimeTypeAnnotations_attribute; RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr; annos.addAll(Arrays.asList(tAttr.annotations)); } }
Example #28
Source File: ClassReader.java From dragonwell8_jdk with GNU General Public License v2.0 | 5 votes |
private void parseTypeAnnotations(TypeAnnotation pa, Element p) { Element pta = new Element("RuntimeVisibleTypeAnnotation"); p.add(pta); Position pos = pa.position; parsePosition(pos, pta); parseAnnotation(pa.annotation, pta); }
Example #29
Source File: ClassReader.java From openjdk-jdk8u with GNU General Public License v2.0 | 5 votes |
@Override public Element visitRuntimeVisibleTypeAnnotations(RuntimeVisibleTypeAnnotations_attribute rvta, Element p) { Element e = new Element(x.getCpString(rvta.attribute_name_index)); for (TypeAnnotation pa : rvta.annotations) { parseTypeAnnotations(pa, e); } e.sort(); p.add(e); return null; }
Example #30
Source File: ReferenceInfoUtil.java From openjdk-jdk8u-backup with GNU General Public License v2.0 | 5 votes |
private static void findAnnotations(ClassFile cf, Field m, String name, List<TypeAnnotation> annos) { int index = m.attributes.getIndex(cf.constant_pool, name); if (index != -1) { Attribute attr = m.attributes.get(index); assert attr instanceof RuntimeTypeAnnotations_attribute; RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr; annos.addAll(Arrays.asList(tAttr.annotations)); } }