ロード中にいくつかの注釈をクラスに追加しようとしています。
そのために、ロード時にクラスバイトコードを取得して変更できるJavaエージェントトランスフォーマーを作成しました。次のコードを実行すると、クラスに新しい注釈が表示されますが、以前の注釈とフィールド/メソッドはすべて削除されます。
CtClass ctClass = classPool.makeClass(new java.io.ByteArrayInputStream(classFileBuffer));
ClassFile classFile = clazz.getClassFile();
ConstPool constPool = classFile.getConstPool();
AnnotationsAttribute attr= new AnnotationsAttribute(constPool, AnnotationsAttribute.visibleTag);
javassist.bytecode.annotation.Annotation annotation = new javassist.bytecode.annotation.Annotation(type, constPool);
attr.setAnnotation(annotation);
classFile.addAttribute(attr);
classFileBuffer = ctClass.toBytecode();
classFileBuffer は、クラスローダーに返されるバイト配列です。以前のクラスの注釈とコードが削除された理由を知っている人がいれば、非常に役に立ちます。
ありがとう、
アヴナー