package jdepend.util.todolist; import java.util.ArrayList; import java.util.List; import jdepend.framework.exception.JDependException; import jdepend.framework.log.LogUtil; import jdepend.model.Relation; public class MoveJavaClassTODOIdentifyer implements TODOIdentifyer { private static final Float MoveJavaClassTODOItemOrder = 10000F; private static final Float MoveRelationTODOItemOrder = 50F; @Override public List<TODOItem> identify(TODOIdentifyInfo info) throws TODOListException { List<TODOItem> list = new ArrayList<TODOItem>(); Float attentionLevel = null; MoveRelationTODOItem item = null; TODORelationData cycleDepend = null; Relation relation; for (TODORelationData relationData : info.getRelationDatas()) { relation = relationData.getRelation(); try { if (relation.isAttention()) { if (relation.getAttentionType().equals(Relation.MutualDependAttentionType)) { attentionLevel = relation.getAttentionLevel(); // 寻找循环依赖中“细”的那条依赖关系 if (attentionLevel - relation.getAttentionWeight(Relation.MutualDependAttentionType) > 0.8) { item = new MoveRelationForMutualDependTODOItem(relationData); if (item.isMove()) { relationData.setTodo(true); item.setOrder(MoveJavaClassTODOItemOrder + attentionLevel); list.add(item); } } } else if (relation.getAttentionType().equals(Relation.CycleDependAttentionType)) { // 记录循环依赖链上关系最弱的 if (cycleDepend == null || cycleDepend.getRelation().getIntensity() > relation.getIntensity()) { cycleDepend = relationData; } } else if (relation.getAttentionType() == Relation.ComponentLayerAttentionType) { item = new MoveRelationForChangeDirTODOItem(relationData); if (item.isMove()) { relationData.setTodo(true); item.setOrder(MoveJavaClassTODOItemOrder + relation.getAttentionLevel()); list.add(item); } } else if (relation.getAttentionType() == Relation.SDPAttentionType) { attentionLevel = relation.getAttentionLevel(); if (attentionLevel - relation.getAttentionWeight(Relation.SDPAttentionType) > 0.4) { item = new MoveRelationForChangeDirTODOItem(relationData); if (item.isMove()) { relationData.setTodo(true); item.setOrder(MoveJavaClassTODOItemOrder + attentionLevel); list.add(item); } } } } else { item = new MoveRelationForReduceCouplingTODOItem(relationData); if (item.isMove()) { relationData.setTodo(true); Float order = MoveRelationTODOItemOrder; if (!item.isChangeDir()) { order = order + 10F; } item.setOrder(order); list.add(item); } } } catch (JDependException e) { LogUtil.getInstance(TODOListIdentifyerFacade.class).systemError(e.getMessage()); e.printStackTrace(); } } // 处理循环依赖链 if (cycleDepend != null && !cycleDepend.isTodo()) { try { item = new MoveRelationForChangeDirTODOItem(cycleDepend); if (item.isMove()) { cycleDepend.setTodo(true); item.setOrder(MoveJavaClassTODOItemOrder); list.add(item); } } catch (JDependException e) { LogUtil.getInstance(TODOListIdentifyerFacade.class).systemError(e.getMessage()); e.printStackTrace(); } } return list; } }