View Javadoc

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.reflect;
9   
10  import com.thoughtworks.qdox.model.Type;
11  
12  /***
13   * Methods to convert Class to Java type names. Handles array types and the constructor "return" type.
14   * 
15   * @author <a href="mailto:jboner@codehaus.org">Jonas Bonér </a>
16   * @author <a href="mailto:vta@medios.fi">Tibor Varga </a>
17   */
18  public class TypeConverter {
19      /***
20       * Converts an array of Classes to their Java language declaration equivalents.
21       * 
22       * @param types is the array of <code>Class</code> objects.
23       * @return an array of Strings representing the given types. For <code>null</code> types, this method returns
24       *         "void"s.
25       */
26      public static String[] convertTypeToJava(final Class[] types) {
27          String[] parameterTypeNames = new String[types.length];
28          for (int i = 0; i < types.length; i++) {
29              parameterTypeNames[i] = convertTypeToJava(types[i]);
30          }
31          return parameterTypeNames;
32      }
33  
34      /***
35       * Converts a Class to its Java language declaration equivalent.
36       * 
37       * @param type is the <code>Class</code> object.
38       * @return a Strings representing the given types. For <code>null</code> type, this method returns "void".
39       */
40      public static String convertTypeToJava(final Class type) {
41          String rv = null;
42  
43          // constructor return type can be null
44          if (type != null) {
45              StringBuffer dim = new StringBuffer();
46              Class componentType = type.getComponentType();
47              for (Class nestedType = type; nestedType.isArray(); nestedType = nestedType.getComponentType()) {
48                  dim.append("[]");
49              }
50  
51              // Found a component type => we had an array
52              if (dim.length() > 0) {
53                  rv = componentType.getName() + dim;
54              } else {
55                  rv = type.getName();
56              }
57          } else {
58              rv = "void";
59          }
60          return rv;
61      }
62  
63      /***
64       * Converts a QDox type to a Java language declaration equivalent.
65       * 
66       * @param type
67       * @return
68       */
69      public static String convertTypeToJava(final Type type) {
70          StringBuffer dim = new StringBuffer();
71          if (type.isArray()) {
72              for (int i = type.getDimensions(); i > 0; --i) {
73                  dim.append("[]");
74              }
75          }
76          return type.getValue() + dim;
77      }
78  }