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;
 }