/******************************************************************************* * Copyright (c) 2002 - 2006 IBM Corporation. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package com.ibm.wala.util.shrike; import java.util.HashMap; import com.ibm.wala.shrikeBT.BytecodeConstants; import com.ibm.wala.shrikeBT.Constants; import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.types.TypeName; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.strings.ImmutableByteArray; /** * Utilities to interface with the Shrike CT library. */ public class ShrikeUtil implements BytecodeConstants { final private static HashMap<String, TypeReference> primitiveMap; static { primitiveMap = HashMapFactory.make(10); primitiveMap.put("I", TypeReference.Int); primitiveMap.put("J", TypeReference.Long); primitiveMap.put("S", TypeReference.Short); primitiveMap.put("B", TypeReference.Byte); primitiveMap.put("C", TypeReference.Char); primitiveMap.put("D", TypeReference.Double); primitiveMap.put("F", TypeReference.Float); primitiveMap.put("Z", TypeReference.Boolean); primitiveMap.put("V", TypeReference.Void); primitiveMap.put(Constants.TYPE_null, TypeReference.Null); } /** * @param type a type as a String returned by Shrike */ public static TypeReference makeTypeReference(ClassLoaderReference loader, String type) throws IllegalArgumentException { if (type == null) { throw new IllegalArgumentException("null type"); } TypeReference p = primitiveMap.get(type); if (p != null) { return p; } ImmutableByteArray b = ImmutableByteArray.make(type); TypeName T = null; /*if (b.get(0) != '[') { T = TypeName.findOrCreate(b, 0, b.length() - 1); } else {*/ if (b.get(b.length() - 1) == ';') { T = TypeName.findOrCreate(b, 0, b.length() - 1); } else { T = TypeName.findOrCreate(b); } //} return TypeReference.findOrCreate(loader, T); } }