Я пытаюсь разработать приложение, используя javassist, который должен подсчитывать количество операций записи и чтения в поле объекта.Однако, когда поле записывается в конструктор, оно не должно учитываться, только чтение.Моя проблема в том, что если у меня есть конструктор, который получает объект того же типа, что и параметр, и поле этого объекта затрагивается, я хочу считать эту запись.Однако я не знаю, как узнать, какому экземпляру объекта в javassist принадлежит это поле.Например, взяв этот конструктор в качестве примера:
Person(Person p) {
this.firstname = p.firstname;
p.surname = "";
this.surname = p.surname;
}
Я хочу посчитать первую и третью строки как чтения, так как чтение допустимо в конструкторе.Но единственная запись, которую я хочу сосчитать, находится во второй строке, так как это запись в поле другого экземпляра объекта.
В данный момент я ищу документацию на javassist и не могу найтиспособ найти во время выполнения, к какому экземпляру относится поле.Пока что у меня есть:
for (CtConstructor ctConstructor : ctClass.getDeclaredConstructors()) {
ctConstructor.instrument(new ExprEditor() {
public void edit(FieldAccess fa) throws CannotCompileException {
replaceFieldAccess(fa, fieldAccess -> fieldAccess.isStatic() || (fieldAccess.getClassName().equals(className) && fieldAccess.isWriter()));
}
});
}
И моя проблема во втором условии предиката в лямбда-функции.
Вывод, который я ищу: Всего прочтений: 2 Всего записей: 1 , но я либо не получаю записи, либо 3 записи, и обе опции неверны в моей проблеме.