1 19 20 package edu.umd.cs.findbugs.classfile.engine.bcel; 21 22 import java.io.IOException ; 23 import java.util.HashMap ; 24 import java.util.Map ; 25 26 import javax.rmi.CORBA.ClassDesc ; 27 28 import org.apache.bcel.Repository; 29 import org.apache.bcel.classfile.ClassParser; 30 import org.apache.bcel.classfile.JavaClass; 31 32 import edu.umd.cs.findbugs.AnalysisCacheToRepositoryAdapter; 33 import edu.umd.cs.findbugs.SystemProperties; 34 import edu.umd.cs.findbugs.classfile.CheckedAnalysisException; 35 import edu.umd.cs.findbugs.classfile.ClassDescriptor; 36 import edu.umd.cs.findbugs.classfile.IAnalysisCache; 37 import edu.umd.cs.findbugs.classfile.IClassAnalysisEngine; 38 import edu.umd.cs.findbugs.classfile.ResourceNotFoundException; 39 import edu.umd.cs.findbugs.classfile.analysis.ClassData; 40 41 47 public class JavaClassAnalysisEngine implements IClassAnalysisEngine { 48 private static final boolean DEBUG_MISSING_CLASSES = 49 SystemProperties.getBoolean("findbugs.debug.missingclasses"); 50 51 54 public Object analyze(IAnalysisCache analysisCache, 55 ClassDescriptor descriptor) throws CheckedAnalysisException { 56 try { 57 ClassData classData = analysisCache.getClassAnalysis(ClassData.class, descriptor); 58 JavaClass javaClass = new ClassParser(classData.getInputStream(), descriptor.toResourceName()).parse(); 59 60 javaClass.setRepository(Repository.getRepository()); 63 64 if (DEBUG_MISSING_CLASSES && 65 !(javaClass.getRepository() instanceof AnalysisCacheToRepositoryAdapter)) { 66 throw new IllegalStateException ("this should not happen"); 67 } 68 69 return javaClass; 70 } catch (IOException e) { 71 throw new ResourceNotFoundException(descriptor.toResourceName(), e); 72 } 73 } 74 75 78 public void registerWith(IAnalysisCache analysisCache) { 79 analysisCache.registerClassAnalysisEngine(JavaClass.class, this); 80 } 81 82 85 public boolean retainAnalysisResults() { 86 return true; 89 } 90 91 } 92 | Popular Tags |