1 19 20 package edu.umd.cs.findbugs.classfile.engine; 21 22 import java.io.ByteArrayOutputStream ; 23 import java.io.IOException ; 24 import java.io.InputStream ; 25 26 import edu.umd.cs.findbugs.classfile.CheckedAnalysisException; 27 import edu.umd.cs.findbugs.classfile.ClassDescriptor; 28 import edu.umd.cs.findbugs.classfile.IAnalysisCache; 29 import edu.umd.cs.findbugs.classfile.IClassAnalysisEngine; 30 import edu.umd.cs.findbugs.classfile.IClassPath; 31 import edu.umd.cs.findbugs.classfile.ICodeBaseEntry; 32 import edu.umd.cs.findbugs.classfile.MissingClassException; 33 import edu.umd.cs.findbugs.classfile.ResourceNotFoundException; 34 import edu.umd.cs.findbugs.classfile.analysis.ClassData; 35 import edu.umd.cs.findbugs.io.IO; 36 37 42 public class ClassDataAnalysisEngine implements IClassAnalysisEngine { 43 44 47 public Object analyze(IAnalysisCache analysisCache, 48 ClassDescriptor descriptor) throws CheckedAnalysisException { 49 50 String resourceName = descriptor.toResourceName(); 52 53 ICodeBaseEntry codeBaseEntry; 55 try { 56 codeBaseEntry = analysisCache.getClassPath().lookupResource(resourceName); 57 } catch (ResourceNotFoundException e) { 58 throw new MissingClassException(descriptor, e); 59 } 60 61 int length = codeBaseEntry.getNumBytes(); 63 ByteArrayOutputStream byteSink; 64 if (length >= 0) { 65 byteSink = new ByteArrayOutputStream (length); 66 } else { 67 byteSink = new ByteArrayOutputStream (); 68 } 69 70 InputStream in = null; 72 try { 73 in = codeBaseEntry.openResource(); 74 IO.copy(in, byteSink); 75 } catch (IOException e) { 76 throw new MissingClassException(descriptor, e); 77 } finally { 78 if (in != null) { 79 IO.close(in); 80 } 81 } 82 83 byte[] data = byteSink.toByteArray(); 85 return new ClassData(descriptor, codeBaseEntry, data); 86 } 87 88 91 public void registerWith(IAnalysisCache analysisCache) { 92 analysisCache.registerClassAnalysisEngine(ClassData.class, this); 93 } 94 95 98 public boolean retainAnalysisResults() { 99 return false; 101 } 102 } 103 | Popular Tags |