1 24 package org.hammurapi.inspectors; 25 26 import java.util.Comparator ; 27 import java.util.Iterator ; 28 import java.util.StringTokenizer ; 29 30 import org.hammurapi.InspectorBase; 31 32 import com.pavelvlasov.config.ConfigurationException; 33 import com.pavelvlasov.config.Parameterizable; 34 import com.pavelvlasov.jsel.CompilationUnit; 35 import com.pavelvlasov.jsel.Identifier; 36 import com.pavelvlasov.review.SourceMarker; 37 38 43 public class AlphabeticalImportRule extends InspectorBase implements Parameterizable { 44 45 46 private String [] importOrder ; 47 52 public void visit(CompilationUnit compilationUnit) { 53 Comparator importComparator = new Comparator () { 54 55 public int compare(Object importDef1, Object importDef2) { 56 57 int index1 = getIndex((String ) importDef1); 60 int index2 = getIndex((String ) importDef2); 61 if(index1 != -1 && index2 != -1 ){ 62 if(index1<index2){ 63 return -1; 64 } 65 else if(index1>index2) { 66 return 1; 67 } 68 } 69 else if(index1 == -1 && index2 != -1) 70 { 71 return 1; 72 } 73 else if(index1 != -1 && index2 == -1) 74 { 75 return -1; 76 } 77 78 79 80 85 86 return ((Comparable ) importDef1).compareTo(importDef2); 87 } 88 89 private int getIndex(String importDef) { 90 91 int retVal = -1; 92 int orderLength = importOrder.length -1; 93 for(int i=0;i<=orderLength;i++) 94 { 95 if (importDef.startsWith(importOrder[i])) 96 { 97 retVal = i; 98 break; 99 } 100 } 101 102 return retVal; 103 } 104 105 }; 106 107 Iterator it=compilationUnit.getImports().iterator(); 109 String prevImportValue=null; 110 while (it.hasNext()) { 111 Identifier ii=(Identifier) it.next(); 112 if (prevImportValue!=null && importComparator.compare(ii.getValue(), prevImportValue)<0) { 113 context.reportViolation((SourceMarker) ii); 114 } 115 prevImportValue=ii.getValue(); 116 } 117 } 118 119 122 public boolean setParameter(String name, Object value) throws ConfigurationException { 123 124 String impOrder = ""; 125 if ("import-order".equals(name)) { 126 impOrder = value.toString(); 127 StringTokenizer st=new StringTokenizer (impOrder, ","); 128 importOrder = new String [st.countTokens()]; 129 for (int i=0; st.hasMoreTokens(); i++) { 130 importOrder[i]=st.nextToken(); 131 } 132 return true; 133 } else { 134 throw new ConfigurationException("Parameter '"+name+"' is not supported"); 135 } 136 } 137 138 141 public String getConfigInfo() { 142 StringBuffer ret=new StringBuffer ("Import Order:\n"); 143 int orderSize = importOrder.length -1; 144 for(int i=0;i<=orderSize;i++) { 145 ret.append(" " + importOrder[i] + "\n"); 146 } 147 return ret.toString(); 148 } 149 } 151 | Popular Tags |