1*f1fbf3c2SXin Li package testproxy; 2*f1fbf3c2SXin Li 3*f1fbf3c2SXin Li import javassist.util.proxy.MethodHandler; 4*f1fbf3c2SXin Li import java.lang.reflect.Method; 5*f1fbf3c2SXin Li 6*f1fbf3c2SXin Li public class Target189 { 7*f1fbf3c2SXin Li public interface TestProxy { 8*f1fbf3c2SXin Li } 9*f1fbf3c2SXin Li 10*f1fbf3c2SXin Li public static class TestMethodHandler implements MethodHandler { 11*f1fbf3c2SXin Li 12*f1fbf3c2SXin Li int invoked = 0; 13*f1fbf3c2SXin Li invoke(Object self, Method thisMethod, Method proceed, Object[] args)14*f1fbf3c2SXin Li public Object invoke(Object self, Method thisMethod, Method proceed, 15*f1fbf3c2SXin Li Object[] args) throws Throwable { 16*f1fbf3c2SXin Li invoked++; 17*f1fbf3c2SXin Li return proceed.invoke(self, args); 18*f1fbf3c2SXin Li } 19*f1fbf3c2SXin Li wasInvokedOnce()20*f1fbf3c2SXin Li public boolean wasInvokedOnce() { 21*f1fbf3c2SXin Li return invoked == 1; 22*f1fbf3c2SXin Li } 23*f1fbf3c2SXin Li reset()24*f1fbf3c2SXin Li public void reset() { 25*f1fbf3c2SXin Li invoked = 0; 26*f1fbf3c2SXin Li } 27*f1fbf3c2SXin Li } 28*f1fbf3c2SXin Li 29*f1fbf3c2SXin Li public static class Issue { 30*f1fbf3c2SXin Li 31*f1fbf3c2SXin Li private Integer id; 32*f1fbf3c2SXin Li getId()33*f1fbf3c2SXin Li public Integer getId() { 34*f1fbf3c2SXin Li return id; 35*f1fbf3c2SXin Li } 36*f1fbf3c2SXin Li setId(Integer id)37*f1fbf3c2SXin Li public void setId(Integer id) { 38*f1fbf3c2SXin Li this.id = id; 39*f1fbf3c2SXin Li } 40*f1fbf3c2SXin Li } 41*f1fbf3c2SXin Li 42*f1fbf3c2SXin Li public static class PublishedIssue extends Issue { 43*f1fbf3c2SXin Li } 44*f1fbf3c2SXin Li 45*f1fbf3c2SXin Li public static abstract class Article { 46*f1fbf3c2SXin Li private Integer id; 47*f1fbf3c2SXin Li getId()48*f1fbf3c2SXin Li public Integer getId() { 49*f1fbf3c2SXin Li return id; 50*f1fbf3c2SXin Li } 51*f1fbf3c2SXin Li setId(Integer id)52*f1fbf3c2SXin Li public void setId(Integer id) { 53*f1fbf3c2SXin Li this.id = id; 54*f1fbf3c2SXin Li } 55*f1fbf3c2SXin Li getIssue()56*f1fbf3c2SXin Li public abstract Issue getIssue(); 57*f1fbf3c2SXin Li } 58*f1fbf3c2SXin Li 59*f1fbf3c2SXin Li public static class PublishedArticle extends Article { 60*f1fbf3c2SXin Li 61*f1fbf3c2SXin Li private PublishedIssue issue; 62*f1fbf3c2SXin Li 63*f1fbf3c2SXin Li @Override getIssue()64*f1fbf3c2SXin Li public PublishedIssue getIssue() { 65*f1fbf3c2SXin Li return issue; 66*f1fbf3c2SXin Li } 67*f1fbf3c2SXin Li setIssue(PublishedIssue issue)68*f1fbf3c2SXin Li public void setIssue(PublishedIssue issue) { 69*f1fbf3c2SXin Li this.issue = issue; 70*f1fbf3c2SXin Li } 71*f1fbf3c2SXin Li 72*f1fbf3c2SXin Li } 73*f1fbf3c2SXin Li 74*f1fbf3c2SXin Li } 75