1 24 package org.hammurapi.inspectors; 25 26 import java.util.ArrayList ; 27 import java.util.Iterator ; 28 29 import org.apache.oro.text.GlobCompiler; 30 import org.apache.oro.text.regex.MalformedPatternException; 31 import org.apache.oro.text.regex.Pattern; 32 import org.apache.oro.text.regex.Perl5Matcher; 33 import org.hammurapi.InspectorBase; 34 35 import com.pavelvlasov.antlr.AST; 36 import com.pavelvlasov.config.ConfigurationException; 37 import com.pavelvlasov.config.Parameterizable; 38 import com.pavelvlasov.jsel.CompilationUnit; 39 import com.pavelvlasov.jsel.impl.JavaTokenTypes; 40 import com.pavelvlasov.jsel.impl.Token; 41 42 43 49 public class FileHeaderRule extends InspectorBase implements Parameterizable { 50 private Perl5Matcher matcher=new Perl5Matcher(); 51 52 56 public void visit(CompilationUnit element) { 57 AST ast = element.getAst(); 58 if (ast!=null) { 59 Token firstToken = (Token) ast.getFirstToken(); 60 if (firstToken!=null) { 61 while (firstToken.getPrevToken()!=null) { 62 firstToken=(Token) firstToken.getPrevToken(); 63 } 64 70 while(firstToken.getType()!=JavaTokenTypes.LITERAL_class && firstToken.getNextToken()!=null) 71 { 72 if ((firstToken.getType()==JavaTokenTypes.ML_COMMENT||firstToken.getType()==JavaTokenTypes.SL_COMMENT) && firstToken.getText()!=null ) { 73 Iterator it=patterns.iterator(); 74 while (it.hasNext()) { 75 if (matcher.contains(firstToken.getText(), (Pattern) it.next())) { 76 return; 77 } 78 } 79 } 80 firstToken=(Token) firstToken.getNextToken(); 81 } 82 } 83 84 93 context.reportViolation(element); 94 } 95 96 } 97 98 102 private ArrayList copyrights=new ArrayList (); 103 private ArrayList patterns=new ArrayList (); 104 105 112 public boolean setParameter(String name, Object parameter) throws ConfigurationException { 113 if ("copyright".equals(name)) { 114 if (!copyrights.contains(parameter.toString())) { 115 copyrights.add(parameter.toString()); 116 GlobCompiler compiler=new GlobCompiler(); 117 try { 118 patterns.add(compiler.compile(parameter.toString())); 119 } catch (MalformedPatternException e) { 120 throw new ConfigurationException("Malformed pattern: "+parameter, e); 121 } 122 } 123 return true; 124 } 125 126 throw new ConfigurationException("Parameter '"+name+"' is not supported by "+getClass().getName()); 127 } 128 129 132 public String getConfigInfo() { 133 StringBuffer ret=new StringBuffer ("Configured Copyright text:\n"); 134 Iterator it=copyrights.iterator(); 135 while (it.hasNext()) { 136 ret.append(" " + it.next() + "\n"); 137 } 138 return ret.toString(); 139 } 140 } 141 | Popular Tags |