/******************************************************************************* * Copyright (c) 2008 Hallvard Traetteberg. * 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://www.eclipse.org/legal/epl-v10.html * * Contributors: * Hallvard Traetteberg - initial API and implementation ******************************************************************************/ package org.eclipse.e4.tm.stringconverters; import java.util.HashMap; import java.util.Map; import org.eclipse.e4.tm.builder.IClassResolver; public class ClassStringConverter extends AbstractClassStringConverter implements IClassResolver { public ClassStringConverter() { super.trim = true; importPackage("java.lang"); resolvedClasses.putAll(primitiveTypes); } private static Map<String, Class<?>> primitiveTypes = new HashMap<String, Class<?>>(); static { primitiveTypes.put("int", Integer.TYPE); primitiveTypes.put("byte", Byte.TYPE); primitiveTypes.put("short", Short.TYPE); primitiveTypes.put("long", Long.TYPE); primitiveTypes.put("double", Double.TYPE); primitiveTypes.put("float", Float.TYPE); primitiveTypes.put("boolean", Boolean.TYPE); primitiveTypes.put("char", Character.TYPE); } public static Class<?> getPrimitiveType(String s) { return primitiveTypes.get(s); } private static Map<Class<?>, Class<?>> wrapperPrimitiveMap = new HashMap<Class<?>, Class<?>>(); private static void addPrimitiveType(Class<?> primitive, Class<?> wrapper) { ClassStringConverter.wrapperPrimitiveMap.put(primitive, wrapper); ClassStringConverter.wrapperPrimitiveMap.put(wrapper, primitive); } static { ClassStringConverter.addPrimitiveType(Integer.TYPE, Integer.class); ClassStringConverter.addPrimitiveType(Byte.TYPE, Byte.class); ClassStringConverter.addPrimitiveType(Short.TYPE, Short.class); ClassStringConverter.addPrimitiveType(Long.TYPE, Long.class); ClassStringConverter.addPrimitiveType(Double.TYPE, Double.class); ClassStringConverter.addPrimitiveType(Float.TYPE, Float.class); ClassStringConverter.addPrimitiveType(Boolean.TYPE, Boolean.class); ClassStringConverter.addPrimitiveType(Character.TYPE, Character.class); } public static Class<?> getPrimitiveType(Class<?> c) { if (c.isPrimitive()) { return c; } Class<?> pc = ClassStringConverter.wrapperPrimitiveMap.get(c); return (pc != null && pc.isPrimitive() ? pc : null); } public static <T> Class<T> getObjectClass(Class<T> c) { if (! c.isPrimitive()) { return c; } Class<?> wc = ClassStringConverter.wrapperPrimitiveMap.get(c); return (Class<T>)wc; } // private ClassLoader classLoader = getClass().getClassLoader(); public ClassLoader getClassLoader() { return classLoader; } public void setClassLoader(ClassLoader classloader) { this.classLoader = classloader; resolvedClasses = new HashMap<String, Class<?>>(primitiveTypes); } protected Class<?> loadClass(String name) throws Exception { return classLoader.loadClass(name); } }