1 32 33 package com.jeantessier.dependency; 34 35 import java.util.*; 36 37 public class LinkMinimizer extends VisitorBase { 38 public LinkMinimizer() { 39 super(); 40 41 getStrategy().setPreOutboundTraversal(false); 42 getStrategy().setPreInboundTraversal(false); 43 getStrategy().setPostOutboundTraversal(false); 44 getStrategy().setPostInboundTraversal(false); 45 } 46 47 public LinkMinimizer(TraversalStrategy strategy) { 48 super(strategy); 49 50 getStrategy().setPreOutboundTraversal(false); 51 getStrategy().setPreInboundTraversal(false); 52 getStrategy().setPostOutboundTraversal(false); 53 getStrategy().setPostInboundTraversal(false); 54 } 55 56 protected void postprocessPackageNode(PackageNode node) { 57 traverseOutbound(node.getOutboundDependencies()); 58 59 super.postprocessPackageNode(node); 60 } 61 62 protected void postprocessClassNode(ClassNode node) { 63 Iterator i = getStrategy().order(node.getOutboundDependencies()).iterator(); 64 while (i.hasNext()) { 65 Node outbound = (Node) i.next(); 66 67 node.getPackageNode().removeDependency(outbound); 68 69 outbound.acceptOutbound(this); 70 71 pushNode(node.getPackageNode()); 72 outbound.acceptOutbound(this); 73 popNode(); 74 } 75 76 super.postprocessClassNode(node); 77 } 78 79 public void visitOutboundClassNode(ClassNode node) { 80 getCurrentNode().removeDependency(node.getPackageNode()); 81 } 82 83 protected void postprocessFeatureNode(FeatureNode node) { 84 Iterator i = getStrategy().order(node.getOutboundDependencies()).iterator(); 85 while (i.hasNext()) { 86 Node outbound = (Node) i.next(); 87 88 node.getClassNode().removeDependency(outbound); 89 node.getClassNode().getPackageNode().removeDependency(outbound); 90 91 outbound.acceptOutbound(this); 92 93 pushNode(node.getClassNode()); 94 outbound.acceptOutbound(this); 95 popNode(); 96 97 pushNode(node.getClassNode().getPackageNode()); 98 outbound.acceptOutbound(this); 99 popNode(); 100 } 101 102 super.postprocessFeatureNode(node); 103 } 104 105 public void visitOutboundFeatureNode(FeatureNode node) { 106 getCurrentNode().removeDependency(node.getClassNode()); 107 getCurrentNode().removeDependency(node.getClassNode().getPackageNode()); 108 } 109 } 110 | Popular Tags |