私は、多くの設計上の問題があるレガシー Java プロジェクトに取り組んでいます。その結果、コードの一部が期待どおりに動作しません。次のコードを検討してください。
public enum Parent{
PARENT1(CHILD1, CHILD2), PARENT2(CHILD3, CHILD1),
PARENT3(CHILD4, CHILD2)
private Child [] children;
Parent(Child ...children) { this.children = children; }
public Child [] getChildren() { return this.children; }
}
public enum Child{ CHILD1, CHILD2, CHILD3, CHILD4 }
上記のコードから、getChildren() が配列への参照を返すことがはっきりとわかります。したがって、次のように配列の要素を変更することができます。
Child [] childrenOfParent3 = Parent3.getChildren();
childrenOfParent3[0] = null; //badcode
コードの一部が上記のようなことを行っており、これを見つけるのに苦労しています (grep は役に立ちません)。
jvm バイトコード分析を使用してこのパターン (badcode) を見つけるのに役立つツールはありますか、それともどのようにしますか?
注: いくつかの制約により、親の実装を変更することはできません。
ありがとう!