Adrninistrator / java-callgraph2

Programs for producing static call graphs for Java programs.
Apache License 2.0
184 stars 66 forks source link

接口Interface1,及其抽象实现类Abstract1,及其子类ChildImpl1,某个类中引入了接口Interface1并调用其方法的情况,调用关系缺失 #9

Open abcolorful opened 1 year ago

abcolorful commented 1 year ago

@Service public class StateManager { @Resource(name = "stateProcessor") private StateProcessor processor; public void setState(StateContext context, OrderStateEnum targetState) { switch (targetState) { case UNPAID: processor.onUnpaid(context); } } }

public class StateProcessorProxy implements StateProcessor { @Override public void onUnpaid(StateContext context) throws BizException { StateProcessor processor = findProcessor(order); processor.onUnpaid(context); }

private StateProcessor findProcessor(GrabOrderVO order) {
       return processorTable.get(ProcessorEnum.GRAB_PROC.name());

} }

<bean id="stateProcessor" class="com.xxx.StateProcessorProxy">
    <property name="processorTable">
        <map>
            <entry key="GRAB_PROC" value-ref="grabStateProcessor"/>
        </map>
    </property>
</bean>

public class GrabProcessor extends AbstractStateProcessor { @Override public void onUnpaid(StateContext context) { } }

public abstract class AbstractStateProcessor implements StateProcessor { } GrabProcessor 继承 AbstractStateProcessor 实现 StateProcessor StateProcessorProxy 实现 StateProcessor 入口:StateManager,setState方法,case UNPAID:分支 预期调用链路: 1、StateManager-----setState方法--onUnpaid分支 2、StateProcessorProxy----onUnpaid方法 3、GrabProcessor----onUnpaid方法 实际调用链路: 1、StateManager-----setState方法--onUnpaid分支 2、StateProcessor----onUnpaid方法 3、StateProcessorProxy----onUnpaid方法 4、StateProcessor----onUnpaid方法