public void testRemoveAnnotatino() throws Exception { CtClass cc = sloader.get("test5.RemoveAnnotation"); AnnotationsAttribute aa = (AnnotationsAttribute) cc.getClassFile().getAttribute(AnnotationsAttribute.invisibleTag); assertTrue(aa.removeAnnotation("test5.RemoveAnno1")); AttributeInfo ai = cc.getClassFile().removeAttribute(AnnotationsAttribute.invisibleTag); assertEquals(ai.getName(), AnnotationsAttribute.invisibleTag); CtMethod foo = cc.getDeclaredMethod("foo"); AnnotationsAttribute aa2 = (AnnotationsAttribute) foo.getMethodInfo().getAttribute(AnnotationsAttribute.invisibleTag); assertTrue(aa2.removeAnnotation("test5.RemoveAnno1")); CtMethod bar = cc.getDeclaredMethod("bar"); AnnotationsAttribute aa3 = (AnnotationsAttribute) bar.getMethodInfo().getAttribute(AnnotationsAttribute.invisibleTag); assertFalse(aa3.removeAnnotation("test5.RemoveAnno1")); assertTrue(aa3.removeAnnotation("test5.RemoveAnno2")); AttributeInfo ai2 = bar.getMethodInfo().removeAttribute(AnnotationsAttribute.invisibleTag); assertEquals(ai2.getName(), AnnotationsAttribute.invisibleTag); CtMethod run = cc.getDeclaredMethod("run"); AttributeInfo ai3 = run.getMethodInfo().removeAttribute(AnnotationsAttribute.invisibleTag); assertNull(ai3); CtField baz = cc.getDeclaredField("baz"); AttributeInfo ai4 = baz.getFieldInfo().removeAttribute(AnnotationsAttribute.invisibleTag); assertEquals(ai4.getName(), AnnotationsAttribute.invisibleTag); cc.writeFile(); Object obj = make(cc.getName()); assertEquals(3, invoke(obj, "run")); }
private static SerialVersionUidResult computeSerialVersionUid( JarArchiveComparatorOptions options, Optional<CtClass> ctClassOptional, JarArchiveComparator jarArchiveComparator) { SerialVersionUidResult result = new SerialVersionUidResult(); if (ctClassOptional.isPresent()) { CtClass ctClass = ctClassOptional.get(); if (isCtClassSerializable(options, ctClass, jarArchiveComparator)) { result.serializable = true; try { CtField declaredField = ctClass.getDeclaredField(SERIAL_VERSION_UID); Object constantValue = declaredField.getConstantValue(); if (constantValue instanceof Long) { result.serialVersionUid = Optional.of((Long) constantValue); } } catch (Exception e) { try { SerialVersionUID.setSerialVersionUID(ctClass); CtField declaredField = ctClass.getDeclaredField(SERIAL_VERSION_UID); Object constantValue = declaredField.getConstantValue(); if (constantValue instanceof Long) { result.serialVersionUidDefault = Optional.of((Long) constantValue); } ctClass.removeField(declaredField); } catch (Exception ignored) { } } if (!result.serialVersionUidDefault.isPresent()) { try { CtField declaredFieldOriginal = ctClass.getDeclaredField(SERIAL_VERSION_UID); ctClass.removeField(declaredFieldOriginal); SerialVersionUID.setSerialVersionUID(ctClass); CtField declaredField = ctClass.getDeclaredField(SERIAL_VERSION_UID); Object constantValue = declaredField.getConstantValue(); if (constantValue instanceof Long) { result.serialVersionUidDefault = Optional.of((Long) constantValue); } ctClass.removeField(declaredField); ctClass.addField(declaredFieldOriginal); } catch (Exception ignored) { } } } } return result; }