⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simpleverifierplusclassloader.java

📁 eclipseme的最新版本的source,欢迎j2me程序员使用
💻 JAVA
字号:
/**
 * Copyright (c) 2003-2005 Craig Setera
 * All Rights Reserved.
 * Licensed under the Eclipse Public License - v 1.0
 * For more information see http://www.eclipse.org/legal/epl-v10.html
 */
package eclipseme.preverifier.internal;

import org.objectweb.asm.Type;
import org.objectweb.asm.tree.analysis.SimpleVerifier;

/**
 * A subclass of the SimpleVerifier that allows a classloader to be
 * specified for use in locating and loading classes used during
 * verification.  This verifier also extends the type system provided
 * by the SimpleVerifier, allowing boolean, byte, character and short
 * arrays to be passed through the type system.
 * <p />
 * Copyright (c) 2003-2005 Craig Setera<br>
 * All Rights Reserved.<br>
 * Licensed under the Eclipse Public License - v 1.0<p/>
 * <br>
 * $Revision: 1.5 $
 * <br>
 * $Date: 2005/12/17 01:45:49 $
 * <br>
 * @author Craig Setera
 */
public class SimpleVerifierPlusClassloader extends SimpleVerifier {
	private ClassLoader classLoader;

	/**
	 * Construct a new verifier.
	 * 
	 * @param classLoader
	 */
	public SimpleVerifierPlusClassloader(ClassLoader classLoader) {
		super();
		this.classLoader = classLoader;
	}

	/**
	 * @see org.objectweb.asm.tree.analysis.SimpleVerifier#getClass(org.objectweb.asm.Type)
	 */
	protected Class getClass(Type t) {
		Class clazz = null;
		
		if (classLoader == null) {
			clazz = super.getClass(t); 
		} else {
	        try {
	        	String className = getRootClassName(t);
	        	clazz = classLoader.loadClass(className);
	        	
	        } catch (ClassNotFoundException e) {
	        	e.printStackTrace();
	            throw new RuntimeException(e.toString());
	        }
		}

		return clazz; 
	}

	/**
	 * Return the root class name for the specified type, having
	 * removed array prefixes and such.
	 * 
	 * @param type
	 * @return
	 */
	protected String getRootClassName(Type type) {
		String rootClassName = null;
		
    	switch (type.getSort()) {
	    	case Type.BOOLEAN:
	    		rootClassName = "java.lang.Boolean";
	    		break;
	    		
	    	case Type.CHAR:
	    		rootClassName = "java.lang.Character";
	    		break;
	    		
	    	case Type.BYTE:
	    		rootClassName = "java.lang.Byte";
	    		break;
	    		
	    	case Type.SHORT:
	    		rootClassName = "java.lang.Short";
	    		break;
	    		
	    	case Type.INT:
	    		rootClassName = "java.lang.Integer";
	    		break;
	    		
	    	case Type.FLOAT:
	    		rootClassName = "java.lang.Float";
	    		break;
	    		
	    	case Type.LONG:
	    		rootClassName = "java.lang.Long";
	    		break;
	    		
	    	case Type.DOUBLE:
	    		rootClassName = "java.lang.Double";
	    		break;
	    		
	    	case Type.ARRAY:
	    		rootClassName = getRootClassName(type.getElementType());
	    		break;
	    		
	    	case Type.OBJECT:
	    		rootClassName = type.getInternalName().replace('/', '.');
	        	break;
    	}
    	
    	return rootClassName;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -