KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > edu > umd > cs > findbugs > classfile > engine > bcel > JavaClassAnalysisEngine


1 /*
2  * FindBugs - Find Bugs in Java programs
3  * Copyright (C) 2006, University of Maryland
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  */

19
20 package edu.umd.cs.findbugs.classfile.engine.bcel;
21
22 import java.io.IOException JavaDoc;
23 import java.util.HashMap JavaDoc;
24 import java.util.Map JavaDoc;
25
26 import javax.rmi.CORBA.ClassDesc JavaDoc;
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 /**
42  * Analysis engine to produce a BCEL JavaClass object for
43  * a named class.
44  *
45  * @author David Hovemeyer
46  */

47 public class JavaClassAnalysisEngine implements IClassAnalysisEngine {
48     private static final boolean DEBUG_MISSING_CLASSES =
49         SystemProperties.getBoolean("findbugs.debug.missingclasses");
50     
51     /* (non-Javadoc)
52      * @see edu.umd.cs.findbugs.classfile.IAnalysisEngine#analyze(edu.umd.cs.findbugs.classfile.IAnalysisCache, java.lang.Object)
53      */

54     public Object JavaDoc 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             // Make sure that the JavaClass object knows the repository
61
// it was loaded from.
62
javaClass.setRepository(Repository.getRepository());
63             
64             if (DEBUG_MISSING_CLASSES &&
65                     !(javaClass.getRepository() instanceof AnalysisCacheToRepositoryAdapter)) {
66                 throw new IllegalStateException JavaDoc("this should not happen");
67             }
68             
69             return javaClass;
70         } catch (IOException JavaDoc e) {
71             throw new ResourceNotFoundException(descriptor.toResourceName(), e);
72         }
73     }
74
75     /* (non-Javadoc)
76      * @see edu.umd.cs.findbugs.classfile.IAnalysisEngine#registerWith(edu.umd.cs.findbugs.classfile.IAnalysisCache)
77      */

78     public void registerWith(IAnalysisCache analysisCache) {
79         analysisCache.registerClassAnalysisEngine(JavaClass.class, this);
80     }
81     
82     /* (non-Javadoc)
83      * @see edu.umd.cs.findbugs.classfile.IAnalysisEngine#retainAnalysisResults()
84      */

85     public boolean retainAnalysisResults() {
86         // JavaClass objects must NOT be discarded - Subtypes compares
87
// them by object identity.
88
return true;
89     }
90
91 }
92
Popular Tags