1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /* *******************************************************************
- * Copyright (c) 2005 Contributors.
- * All rights reserved.
- * This program and the accompanying materials are made available
- * under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution and is available at
- * http://eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Adrian Colyer Initial implementation
- * ******************************************************************/
- package org.aspectj.internal.lang.reflect;
-
- import java.lang.reflect.ParameterizedType;
- import java.lang.reflect.Type;
- import java.lang.reflect.TypeVariable;
- import java.util.StringTokenizer;
-
- import org.aspectj.lang.reflect.AjTypeSystem;
-
- /**
- * @author colyer
- * Helper class for converting type representations in Strings into java.lang.reflect.Types.
- */
- public class StringToType {
-
- public static Type[] commaSeparatedListToTypeArray(String typeNames, Class classScope)
- throws ClassNotFoundException {
- StringTokenizer strTok = new StringTokenizer(typeNames,",");
- Type[] ret = new Type[strTok.countTokens()];
- int index = 0;
- //outer:
- while (strTok.hasMoreTokens()) {
- String typeName = strTok.nextToken().trim();
- ret[index++] = stringToType(typeName, classScope);
- }
- return ret;
- }
-
- public static Type stringToType(String typeName, Class classScope)
- throws ClassNotFoundException {
- try {
- if (typeName.indexOf("<") == -1) {
- return AjTypeSystem.getAjType(Class.forName(typeName,false,classScope.getClassLoader()));
- } else {
- return makeParameterizedType(typeName,classScope);
- }
- } catch (ClassNotFoundException e) {
- // could be a type variable
- TypeVariable[] tVars = classScope.getTypeParameters();
- for (int i = 0; i < tVars.length; i++) {
- if (tVars[i].getName().equals(typeName)) {
- return tVars[i];
- }
- }
- throw new ClassNotFoundException(typeName);
- }
- }
-
- private static Type makeParameterizedType(String typeName, Class classScope)
- throws ClassNotFoundException {
- int paramStart = typeName.indexOf('<');
- String baseName = typeName.substring(0, paramStart);
- final Class baseClass = Class.forName(baseName,false,classScope.getClassLoader());
- int paramEnd = typeName.lastIndexOf('>');
- String params = typeName.substring(paramStart+1,paramEnd);
- final Type[] typeParams = commaSeparatedListToTypeArray(params,classScope);
- return new ParameterizedType() {
-
- public Type[] getActualTypeArguments() {
- return typeParams;
- }
-
- public Type getRawType() {
- return baseClass;
- }
-
- public Type getOwnerType() {
- return baseClass.getEnclosingClass();
- }
- };
- }
- }
|