Я хочу проверить бинарную совместимость между двумя JAR-файлами.
Следуя предложениям в этом ответе, я использовал jboss tattletale, но он может найти только отсутствующие классы.
Как я могу найти отсутствующие методы? Это вообще возможно?
E.g.
Класс «зависит от» Фу зависит от Бара (как и многие другие работники среднего класса)
import org.overlyusedclassnames.Bar
public class Foo{
public void someMethod(){
Bar tender = new Bar();
tender.getJohnnyRedLabel();
tender.getJohnnyBlueLabel(); //this method is new in the Bar class
}
}
Класс "Время компиляции"
package org.overlyusedclassnames;
/**
* @Since 1992
* Changes: added blue and gold Johnny Walker labels
*/
public class Bar {
public Drink getJohnnyRedLabel(){
return new JohnyWalkerFactory.get(RedLabel.class);
}
public Drink getJohnnyBlackLabel(){
return new JohnyWalkerFactory.get(BlackLabel.class);
}
public Drink getJohnnyGoldLabel(){
return new JohnyWalkerFactory.get(GoldLabel.class);
}
public Drink getJohnnyBlueLabel(){
return new JohnyWalkerFactory.get(BlueLabel.class);
}
}
Теперь представьте, что old jar jar случайно заменяет скомпилированную шкалу времени:
Класс "Время выполнения"
package org.overlyusedclassnames;
/**
* @Since 1909
* Changes: added red and black Johnny Walker labels
*/
public class Bar {
public Drink getJohnnyRedLabel(){
return new JohnyWalkerFactory.get(RedLabel.class);
}
public Drink getJohnnyBlackLabel(){
return new JohnyWalkerFactory.get(BlackLabel.class);
}
}
Есть ли способ определить отсутствующий метод, не запуская его и не получая NoSuchMethodError
?
Отказ от ответственности: это серьезная перефразировка моего собственного связанный вопрос, который нельзя удалить. Я решил задать новый вопрос, потому что перефразирование сделает текущие 2 ответа совершенно не связанными с темой.