KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > codehaus > aspectwerkz > expression > QDoxParser


1 /**************************************************************************************
2  * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved. *
3  * http://aspectwerkz.codehaus.org *
4  * ---------------------------------------------------------------------------------- *
5  * The software in this package is published under the terms of the LGPL license *
6  * a copy of which has been included with this distribution in the license.txt file. *
7  **************************************************************************************/

8 package org.codehaus.aspectwerkz.expression;
9
10 import com.thoughtworks.qdox.JavaDocBuilder;
11 import com.thoughtworks.qdox.model.JavaClass;
12 import com.thoughtworks.qdox.model.JavaField;
13 import com.thoughtworks.qdox.model.JavaMethod;
14 import com.thoughtworks.qdox.model.JavaParameter;
15 import com.thoughtworks.qdox.model.Type;
16
17 import org.codehaus.aspectwerkz.exception.DefinitionException;
18
19 import java.io.File JavaDoc;
20 import java.util.ArrayList JavaDoc;
21 import java.util.Collection JavaDoc;
22 import java.util.Iterator JavaDoc;
23
24 /**
25  * Parses a src tree with <code>QDox</code>.
26  *
27  * @author <a HREF="mailto:jboner@codehaus.org">Jonas BonŽr </a>
28  */

29 public class QDoxParser {
30     /**
31      * The QDox builder.
32      */

33     private JavaDocBuilder m_builder = new JavaDocBuilder();
34
35     /**
36      * The parsed java class.
37      */

38     private JavaClass m_class;
39
40     /**
41      * The name of the class.
42      */

43     private String JavaDoc m_className;
44
45     /**
46      * Transforms the QDox JavaMethod parameters to a String array with the types represented as strings.
47      *
48      * @param method the JavaMethod
49      * @return an array with the types as strings
50      */

51     public static String JavaDoc[] getJavaMethodParametersAsStringArray(final JavaMethod method) {
52         JavaParameter[] javaParameters = method.getParameters();
53         String JavaDoc[] parameters = new String JavaDoc[javaParameters.length];
54         for (int i = 0; i < javaParameters.length; i++) {
55             Type type = javaParameters[i].getType();
56             int dimensions = type.getDimensions();
57             StringBuffer JavaDoc parameter = new StringBuffer JavaDoc(type.getValue());
58             for (int j = 0; j < dimensions; j++) {
59                 parameter.append("[]");
60             }
61             parameters[i] = parameter.toString();
62         }
63         return parameters;
64     }
65
66     /**
67      * Adds a source tree to the builder.
68      *
69      * @param srcDir the source tree
70      */

71     public QDoxParser(final String JavaDoc srcDir) {
72         m_builder.addSourceTree(new File JavaDoc(srcDir));
73     }
74
75     /**
76      * Parses a specific class.
77      *
78      * @param className the name of the class to compile
79      * @return true if class was found and false otherwise
80      * @todo QDox seems to have a problem retrieving inner classes => null
81      */

82     public boolean parse(final String JavaDoc className) {
83         m_class = m_builder.getClassByName(className);
84         if (m_class == null) {
85             return false;
86         }
87         m_className = m_class.getFullyQualifiedName();
88         return true;
89     }
90
91     /**
92      * Returns the QDox JavaClass.
93      *
94      * @return the QDox JavaClass
95      */

96     public JavaClass getJavaClass() {
97         if ((m_class == null) && (m_className == null)) {
98             throw new DefinitionException("no class has been parsed, call parse(..) first");
99         }
100         if (m_class == null) {
101             throw new DefinitionException(
102                     "could not find source file for "
103                     + m_className
104                     + " (have you specified the correct srcDir)"
105             );
106         }
107         return m_class;
108     }
109
110     /**
111      * Returns all classes.
112      *
113      * @return a collections with all classes
114      */

115     public String JavaDoc[] getAllClassNames() {
116         Collection JavaDoc classes = m_builder.getClassLibrary().all();
117         Collection JavaDoc classNames = new ArrayList JavaDoc();
118         String JavaDoc className = null;
119         for (Iterator JavaDoc it = classes.iterator(); it.hasNext();) {
120             className = (String JavaDoc) it.next();
121             if ("java.lang.Object".equals(className)) {
122                 continue;
123             }
124             classNames.add(className);
125         }
126         return (String JavaDoc[]) classNames.toArray(new String JavaDoc[]{});
127     }
128
129     /**
130      * Parses a specific class A returns an array with the methods.
131      *
132      * @return an array with the methods
133      */

134     public JavaMethod[] getJavaMethods() {
135         if ((m_class == null) && (m_className == null)) {
136             throw new DefinitionException("no class has been parsed, call parse(..) first");
137         }
138         if (m_class == null) {
139             throw new DefinitionException(
140                     "could not find source file for "
141                     + m_className
142                     + " (have you specified the correct srcDir)"
143             );
144         }
145         return m_class.getMethods();
146     }
147
148     /**
149      * Parses a specific class A returns an array with the methods.
150      *
151      * @return an array with the methods
152      */

153     public JavaField[] getJavaFields() {
154         if ((m_class == null) && (m_className == null)) {
155             throw new DefinitionException("no class has been parsed, call parse(..) first");
156         }
157         if (m_class == null) {
158             throw new DefinitionException(
159                     "could not find source file for "
160                     + m_className
161                     + " (have you specified the correct srcDir)"
162             );
163         }
164         return m_class.getFields();
165     }
166 }
Popular Tags