亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? preverificationclassnode.java

?? 配置文件
?? JAVA
字號(hào):
/**
 * Copyright (c) 2003-2004 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 java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.MethodNode;

import eclipseme.preverifier.IPreverificationPolicy;
import eclipseme.preverifier.internal.results.ClassNodeErrorInformation;
import eclipseme.preverifier.internal.results.FieldErrorInformation;
import eclipseme.preverifier.internal.results.MethodNodeErrorInformation;
import eclipseme.preverifier.results.PreverificationError;
import eclipseme.preverifier.results.PreverificationErrorLocation;
import eclipseme.preverifier.results.PreverificationErrorLocationType;
import eclipseme.preverifier.results.PreverificationErrorType;

/**
 * A class visitor that provides necessary functionality
 * for traversing and handling the structure changes required by
 * the preverifier to a class.
 * <p />
 * Copyright (c) 2003-2004 Craig Setera<br>
 * All Rights Reserved.<br>
 * Licensed under the Eclipse Public License - v 1.0<p/>
 * <br>
 * $Revision: 1.4 $
 * <br>
 * $Date: 2006/02/11 21:26:41 $
 * <br>
 * @author Craig Setera
 */
public class PreverificationClassNode extends ClassNode {
	// Type definitions
	private static final Type BOOLEAN_TYPE = Type.getType("Ljava/lang/Boolean;");
	private static final Type CHARACTER_TYPE = Type.getType("Ljava/lang/Character;");
	private static final Type BYTE_TYPE = Type.getType("Ljava/lang/Byte;");
	private static final Type SHORT_TYPE = Type.getType("Ljava/lang/Short;");
	private static final Type INTEGER_TYPE = Type.getType("Ljava/lang/Integer;");
	private static final Type FLOAT_TYPE = Type.getType("Ljava/lang/Float;");
	private static final Type LONG_TYPE = Type.getType("Ljava/lang/Long;");
	private static final Type DOUBLE_TYPE = Type.getType("Ljava/lang/Double;");
	private static final Type VOID_TYPE = Type.getType("Ljava/lang/Void;");
	
	// Implementation
	private IPreverificationPolicy preverificationPolicy;
	private ArrayList errorList;
	private ClassLoader classLoader;
	private Map validTypes;
	
	// Some class instances in the correct classloader
	private Class objectClass;
	private Class floatClass;
	private Class doubleClass;
	
	
	/**
	 * Construct a class adapter for preverification.
	 * 
	 * @param preverificationPolicy
	 * @param classpath
	 */
	public PreverificationClassNode(
		IPreverificationPolicy preverificationPolicy,
		ClassLoader classloader)
	{
		this.preverificationPolicy = preverificationPolicy;
		this.errorList = new ArrayList();
		this.classLoader = classloader;
		
		validTypes = new HashMap();
		
		// Capture some class instances in the specified classloader
		try {
			objectClass = Class.forName("java.lang.Object", true, classLoader);
			floatClass = Class.forName("java.lang.Float", true, classLoader);
			doubleClass = Class.forName("java.lang.Double", true, classLoader);
		} catch (ClassNotFoundException e) {
			// Shouldn't happen
		}
	}

	/**
	 * Return the list of errors accumulated during the traversal.
	 * @return
	 */
	public List getErrorList() {
		return errorList;
	}

	/**
	 * Return a boolean indicating whether or not this class node has any errors.
	 * 
	 * @return
	 */
	public boolean hasError() {
		return errorList.size() > 0;
	}
	
	/**
	 * @see org.objectweb.asm.ClassVisitor#visitField(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object)
	 */
	public FieldVisitor visitField(
			final int access, 
			final String name,
			final String desc, 
			final String signature, 
			final Object value) 
	{	
		FieldVisitor fieldVisitor = null;
		
		Type type = Type.getType(desc);
		PreverificationErrorType error = validateType(type);
		
		if (error == PreverificationErrorType.NO_ERROR) {
			// To match up with the WTK output, we want to make sure to strip
			// off potential constant values from non-static fields.
			Object constantValue = ((access & Opcodes.ACC_STATIC) != 0) ? value : null;
			fieldVisitor = super.visitField(access, name, desc, signature, constantValue);
		} else {
			ClassNodeErrorInformation classInfo = new ClassNodeErrorInformation(this);
			FieldErrorInformation fieldInfo = new FieldErrorInformation(name, desc);
			PreverificationErrorLocation location = new PreverificationErrorLocation(
					PreverificationErrorLocationType.CLASS_FIELD,
					classInfo, null, fieldInfo,	-1);
			PreverificationError fieldError = 
				new PreverificationError(error, location, null);
			getErrorList().add(fieldError);
		}

		return fieldVisitor;
	}

	/**
	 * @see org.objectweb.asm.ClassVisitor#visitMethod(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])
	 */
	public MethodVisitor visitMethod(
			final int access,
			final String name,
			final String desc,
			final String signature,
			final String[] exceptions)
	{
	    MethodNode mn = new PreverifierMethodNode(this, access, name, desc, signature, exceptions);
	    
	    boolean isNativeError =
	    	!preverificationPolicy.areNativeMethodsAllowed() &&
	    	((access & Opcodes.ACC_NATIVE) != 0);
	    boolean isFinalizerError =
			!preverificationPolicy.areFinalizersAllowed() &&
			name.equals("finalize") &&
			(Type.getArgumentTypes(desc).length == 0);
	    PreverificationErrorType signatureErrorType = getMethodSignatureError(desc);
	    boolean isInvalidMethodSignature = (signatureErrorType != PreverificationErrorType.NO_ERROR);

	    if (isNativeError || isFinalizerError || isInvalidMethodSignature) {
			ClassNodeErrorInformation classInfo = new ClassNodeErrorInformation(this);
			MethodNodeErrorInformation methodInfo =
				new MethodNodeErrorInformation(classInfo, mn);
			PreverificationErrorLocation location = new PreverificationErrorLocation(
					PreverificationErrorLocationType.METHOD_SIGNATURE,
					classInfo, methodInfo, null, -1);
			
			if (isNativeError) {
				PreverificationError error = 
					new PreverificationError(PreverificationErrorType.NATIVE, location, null);
				getErrorList().add(error);
			}
			
			if (isFinalizerError) {
				PreverificationError error = 
					new PreverificationError(PreverificationErrorType.FINALIZERS, location, null);
				getErrorList().add(error);
			}
			
			if (isInvalidMethodSignature) {
				PreverificationError error = 
					new PreverificationError(signatureErrorType, location, null);
				getErrorList().add(error);
			}
		}

		return mn;
	}
	
	/**
	 * Return the root type of the specified type, stripping away
	 * the array and primitive wrappers.
	 * 
	 * @param type
	 * @return
	 */
	private Type getObjectType(Type type) {
		Type objectType = type;
		
		switch (type.getSort())
		{
			// Convert primitive types to object types
			case Type.BOOLEAN:
				objectType = BOOLEAN_TYPE;
				break;
			case Type.CHAR:
				objectType = CHARACTER_TYPE;
				break;
			case Type.BYTE:
				objectType = BYTE_TYPE;
				break;
			case Type.SHORT:
				objectType = SHORT_TYPE;
				break;
			case Type.INT:
				objectType = INTEGER_TYPE;
				break;
			case Type.FLOAT:
				objectType = FLOAT_TYPE;
				break;
			case Type.LONG:
				objectType = LONG_TYPE;
				break;
			case Type.DOUBLE:
				objectType = DOUBLE_TYPE;
				break;
			case Type.VOID:
				objectType = VOID_TYPE;
				break;
				
			case Type.ARRAY:
				objectType = getObjectType(type.getElementType());
				break;
		}
		
		return objectType;
	}
	
	/**
	 * Return a classloader for the verification classpath.
	 * 
	 * @return
	 */
	ClassLoader getClassLoader() {
		return classLoader;
	}
	
	/**
	 * Return the preverification policy in use.
	 * 
	 * @return
	 */
	IPreverificationPolicy getPreverificationPolicy() {
		return preverificationPolicy;
	}

	/**
	 * Attempt to locate the class that defines the specified type
	 * instance.
	 * 
	 * @param objectType
	 * @return
	 * @throws ClassNotFoundException
	 */
	private Class getTypeClass(Type objectType) 
		throws ClassNotFoundException 
	{
		String dottedName = objectType.getInternalName().replace('/', '.');
		return Class.forName(dottedName, true, classLoader);
	}

	/**
	 * Return a boolean indicating whether or not the specified
	 * type is disallowed.
	 * 
	 * @param clazz
	 * @return
	 */
	private boolean isDisallowedType(Class clazz) {
		boolean disallowed = false;
		
		if (!getPreverificationPolicy().isFloatingPointAllowed()) {
			disallowed = isFloatingPointType(clazz);
		}
		
		return disallowed;
	}

	/**
	 * Return a boolean indicating whether or not the specified type
	 * is a floating point type.
	 * 
	 * @param clazz
	 * @return
	 */
	private boolean isFloatingPointType(Class clazz) {
		return (clazz == floatClass) || (clazz == doubleClass);
	}
	
	/**
	 * Return a boolean indicating whether the method signature is invalid.
	 * 
	 * @param desc
	 * @return
	 */
	private PreverificationErrorType getMethodSignatureError(String desc) {
		Type returnType = Type.getReturnType(desc);
		PreverificationErrorType errorType = validateType(returnType);

		if (errorType != PreverificationErrorType.NO_ERROR) {
			Type[] paramTypes = Type.getArgumentTypes(desc);
			for (
				int i = 0; 
				(i < paramTypes.length) && 
				(errorType != PreverificationErrorType.NO_ERROR); 
				i++) 
			{
				errorType = validateType(paramTypes[i]);
			}
		}
		
		return errorType;
	}

	/**
	 * Return an error code concerning the validity of
	 * the specified type.
	 * 
	 * @param type
	 * @return
	 */
	PreverificationErrorType validateType(Type type) {
		PreverificationErrorType errorCode = 
			(PreverificationErrorType) validTypes.get(type);
		
		if (errorCode == null) {
			Type objectType = getObjectType(type);
			
			try {
				Class clazz = getTypeClass(objectType);
				errorCode = validateHierarchy(clazz);
			} catch (ClassNotFoundException e) {
				errorCode = PreverificationErrorType.MISSING_TYPE;
			}
			
			validTypes.put(type, errorCode);
		}
		
		return errorCode;
	}

	/**
	 * Validate the hierarchy to see if it is ok.
	 * 
	 * @param clazz
	 * @return
	 */
	private PreverificationErrorType validateHierarchy(Class clazz) {
		PreverificationErrorType error = null;

		if ((clazz == null) || (clazz == objectClass)) {
			error = PreverificationErrorType.NO_ERROR;
		} else {
			if (isDisallowedType(clazz)) {
				// Assumption is that the only disallowed types are floating point types
				error = PreverificationErrorType.FLOATING_POINT;
			} else {
				error = validateHierarchy(clazz.getSuperclass());
			}
		}
		
		return error;
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜亚洲精品理论片色戒| 亚洲欧洲性图库| 欧美一级理论片| 欧美体内she精高潮| 色欧美日韩亚洲| 91成人看片片| 欧美日韩精品一区二区天天拍小说 | 欧美日韩在线直播| 99久久精品国产麻豆演员表| 国产999精品久久久久久绿帽| 国产综合色在线视频区| 久久国产麻豆精品| 国产精品白丝jk黑袜喷水| 狠狠色综合日日| 国产98色在线|日韩| 成人免费视频视频在线观看免费| 粗大黑人巨茎大战欧美成人| 成人福利视频网站| 在线观看日韩精品| 欧美二区三区91| 欧美www视频| 国产三级精品在线| 亚洲美女屁股眼交3| 亚洲bt欧美bt精品777| 麻豆一区二区三| 国产成人夜色高潮福利影视| 成人av影院在线| 欧美日韩免费视频| 欧美成人官网二区| 国产精品三级视频| 亚洲一本大道在线| 蜜臀精品一区二区三区在线观看| 狠狠狠色丁香婷婷综合久久五月| 国产成人免费视| 91国在线观看| 精品国产乱码久久久久久1区2区| 久久久不卡网国产精品一区| 18成人在线观看| 亚洲v中文字幕| 国产一区二区日韩精品| 97国产精品videossex| 这里只有精品99re| 欧美国产激情二区三区| 性做久久久久久免费观看| 国内精品不卡在线| 欧美自拍偷拍一区| 久久伊99综合婷婷久久伊| 怡红院av一区二区三区| 九一久久久久久| 91日韩一区二区三区| 日韩精品一区二区三区四区视频| 日本一区二区三区在线观看| 亚洲午夜激情网页| 国产99精品国产| 欧美一区二区播放| 成人欧美一区二区三区黑人麻豆| 婷婷久久综合九色国产成人| 高清在线成人网| 欧美一区二区三区在线视频| 国产精品视频线看| 免费在线视频一区| 91在线云播放| 欧美精品一区视频| 五月激情综合色| 不卡一区在线观看| 精品国产乱子伦一区| 亚洲一级片在线观看| 成人深夜在线观看| 日韩精品一区二区三区视频| 亚洲国产另类av| www.成人网.com| 久久综合久久99| 免费黄网站欧美| 欧美亚洲尤物久久| 国产精品久久久久久亚洲毛片| 免费成人在线网站| 欧美视频一区二区在线观看| 国产精品久久久久久福利一牛影视| 麻豆久久久久久久| 欧美喷水一区二区| 亚洲一区在线观看网站| 99国产精品视频免费观看| 久久久99精品久久| 久久超碰97中文字幕| 欧美日韩激情在线| 亚洲曰韩产成在线| 一本色道**综合亚洲精品蜜桃冫| 中文字幕精品一区二区精品绿巨人| 蜜桃91丨九色丨蝌蚪91桃色| 欧美日韩一区二区在线视频| 亚洲天天做日日做天天谢日日欢| 岛国一区二区三区| 久久久久久电影| 久草精品在线观看| 26uuu亚洲| 久久99国产精品麻豆| 欧美va在线播放| 日本不卡一区二区三区高清视频| 欧美日韩亚洲国产综合| 亚洲欧美日韩一区二区三区在线观看| 成人av片在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 风间由美中文字幕在线看视频国产欧美 | 欧美日韩情趣电影| 亚洲国产精品一区二区久久| 色www精品视频在线观看| 亚洲免费观看在线视频| 91免费看视频| 亚洲影院免费观看| 欧美日韩国产bt| 日本视频一区二区三区| 日韩精品中文字幕一区| 黄色资源网久久资源365| 久久这里只有精品首页| 国产精品一区二区91| 欧美激情一区二区| 91理论电影在线观看| 一片黄亚洲嫩模| 欧美疯狂性受xxxxx喷水图片| 日韩av电影免费观看高清完整版 | 日韩三区在线观看| 国产精品一色哟哟哟| 国产精品素人视频| 91啪在线观看| 五月天视频一区| 久久影院电视剧免费观看| 成人av电影在线网| 一区二区三区中文在线观看| 欧美日韩久久一区| 国产一区二区三区观看| 成人欧美一区二区三区视频网页| 欧洲亚洲国产日韩| 精品亚洲成a人在线观看| 国产欧美日韩卡一| 欧美亚日韩国产aⅴ精品中极品| 天天做天天摸天天爽国产一区| 精品国产乱码久久久久久蜜臀| 国产乱子轮精品视频| 亚洲精品v日韩精品| 在线播放91灌醉迷j高跟美女| 久久99精品久久久久久久久久久久 | 欧美在线观看一区二区| 午夜精品成人在线视频| ww久久中文字幕| 91一区二区在线| 奇米一区二区三区av| 国产欧美日韩另类视频免费观看| 91搞黄在线观看| 久久99国产精品尤物| 亚洲欧美日韩人成在线播放| 日韩一级二级三级精品视频| 国产suv精品一区二区883| 亚洲一区av在线| 久久久精品国产免费观看同学| 色婷婷综合五月| 精品亚洲欧美一区| 日韩毛片在线免费观看| 日韩精品一区二区三区在线播放 | 日韩视频免费观看高清完整版在线观看| 国产精品1区2区3区| 亚洲国产另类av| 中文字幕的久久| 欧美一区午夜视频在线观看| jlzzjlzz欧美大全| 秋霞午夜鲁丝一区二区老狼| 一区免费观看视频| 久久免费电影网| 在线成人av网站| 91网站黄www| 国产一区二区三区久久久| 午夜不卡av在线| 亚洲欧洲www| 国产婷婷色一区二区三区| 欧美一区二区网站| 91成人免费网站| 99久久777色| 国产成+人+日韩+欧美+亚洲| 欧美aa在线视频| 亚洲成人久久影院| 亚洲人成人一区二区在线观看| 精品久久久久久久久久久院品网| 在线免费观看一区| www.日韩在线| 国产东北露脸精品视频| 久久99热这里只有精品| 天天综合网天天综合色| 亚洲一区二区三区视频在线| 国产精品电影一区二区| 久久综合九色综合欧美亚洲| 日韩情涩欧美日韩视频| 欧美日韩午夜在线视频| 色av综合在线| 色欧美日韩亚洲| 色成人在线视频| 一本久久a久久免费精品不卡| 波多野结衣在线aⅴ中文字幕不卡| 国产美女娇喘av呻吟久久| 麻豆国产精品一区二区三区| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲猫色日本管|