Я работаю над устаревшим 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 или как бы вы это сделали?
ПРИМЕЧАНИЕ : из-за некоторых ограничений я не могу изменить родительскую реализацию.
Спасибо!