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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? methodrewriter.java

?? 配置文件
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
			subroutineMap.put(label, subroutine);
		}
		
		return subroutine.endIndex + 1;
	}
	
	/**
	 * Return a boolean indicating whether or not this
	 * try-catch block should be copied to the new class.
	 * 
	 * @param tryCatch
	 * @return
	 */
	private boolean shouldCopy(TryCatchBlockNode tryCatch) {
		boolean shouldCopy = true;

		int startIndex = getLabelIndex(srcMethod, tryCatch.start);
		ArrayList insns = new ArrayList();

		for (int i = startIndex; i < srcMethod.instructions.size(); i++) {
			AbstractInsnNode insn = getInstruction(srcMethod, i);
			
			if (insn.getType() == AbstractInsnNode.LABEL) {
				LabelNode l = (LabelNode) insn;
				if (l.label.equals(tryCatch.end)) {
					break;
				}
			} else {
				insns.add(insn);
			}
		}
		
		if (insns.size() == 1) {
			AbstractInsnNode insn = (AbstractInsnNode) insns.get(0);
			shouldCopy = (insn.getOpcode() != Opcodes.JSR);
		}
		
		return shouldCopy;
	}

	/**
	 * Return a boolean indicating whether the variable visibility should
	 * be reduced.
	 * 
	 * @param method
	 * @return
	 */
	private boolean shouldReduceVariableVisibility(MethodNode method) {
		boolean shouldReduce = false;
		
		if (getLastInstruction(method) instanceof LabelNode) {
			List instructions = updatedMethod.instructions;
			int instructionCount = instructions.size();

			AbstractInsnNode node = getInstruction(method, instructionCount - 2); 
			if (node instanceof InsnNode) {
				InsnNode insnNode = (InsnNode) node;
				switch (insnNode.getOpcode()) {
					case Opcodes.IRETURN:
					case Opcodes.LRETURN:
					case Opcodes.FRETURN:
					case Opcodes.DRETURN:
					case Opcodes.ARETURN:
					case Opcodes.RETURN:
					case Opcodes.ATHROW:
						shouldReduce = true;
						break;
				}
			}
		}
		
		return shouldReduce;
	}

	/**
	 * Sort the try/catch blocks such that they are associated with
	 * the smallest region that surrounds that block. 
	 * 
	 * @param methodRegion 
	 */
	private void sortTryCatchBlocks(Region methodRegion) {
		Iterator blocks = srcMethod.tryCatchBlocks.iterator();
		while (blocks.hasNext()) {
			Region enclosingRegion = methodRegion;
			TryCatchBlockNode block = (TryCatchBlockNode) blocks.next();

			Iterator regions = subroutineMap.values().iterator();
			while (regions.hasNext()) {
				Region region = (Region) regions.next();
				if (region.encloses(block)) {
					if (enclosingRegion == null) {
						enclosingRegion = region;
					} else {
						// Pick the smallest region that encloses the block
						if (region.getLength() < enclosingRegion.getLength()) {
							enclosingRegion = region;
						}
					}
				}
			}
			
			enclosingRegion.addTryCatchBlock(block);
		}
	}

	/**
	 * Return the target labels used in generation of the stack map attribute.
	 * 
	 * @return
	 */
	private Set findTargetLabels() {
		Set targetLabels = new HashSet();
		
		Iterator insns = updatedMethod.instructions.iterator();
		while (insns.hasNext()) {
			AbstractInsnNode insnNode = (AbstractInsnNode) insns.next();
			switch (insnNode.getType()) {
				case AbstractInsnNode.JUMP_INSN:
					JumpInsnNode jumpInsnNode = (JumpInsnNode) insnNode;
					targetLabels.add(jumpInsnNode.label);
					break;
					
				case AbstractInsnNode.LOOKUPSWITCH_INSN:
				{
					LookupSwitchInsnNode lookupSwitchNode = (LookupSwitchInsnNode) insnNode;
					Iterator labels = lookupSwitchNode.labels.iterator();
					while (labels.hasNext()) {
						Label label = (Label) labels.next();
						targetLabels.add(label);
					}
					targetLabels.add(lookupSwitchNode.dflt);
				}	
				break;
					
				case AbstractInsnNode.TABLESWITCH_INSN:
				{
					TableSwitchInsnNode tableSwitchNode = (TableSwitchInsnNode) insnNode;
					Iterator labels = tableSwitchNode.labels.iterator();
					while (labels.hasNext()) {
						Label label = (Label) labels.next();
						targetLabels.add(label);
					}
					targetLabels.add(tableSwitchNode.dflt);
				}
				break;
			}
		}
		
		Iterator blocks = updatedMethod.tryCatchBlocks.iterator();
		while (blocks.hasNext()) {
			TryCatchBlockNode tryCatchBlock = (TryCatchBlockNode) blocks.next();
			targetLabels.add(tryCatchBlock.handler);
		}

		return targetLabels;
	}

	/**
	 * Return the instruction at the specified index.
	 * 
	 * @param method
	 * @param index
	 * @return
	 */
	private AbstractInsnNode getInstruction(MethodNode method, int index) {
		List instructions = method.instructions;
		return (AbstractInsnNode) ((index < instructions.size()) ? instructions.get(index) : null);
	}
	
	/**
	 * Return the index of the specified label within the specified method node.
	 * 
	 * @param methodNode
	 * @param label
	 * @return
	 */
	private int getLabelIndex(PreverifierMethodNode methodNode, Label label) {
		Integer i = (Integer) methodNode.getLabelIndices().get(label);
		return i.intValue();
	}
	
	/**
	 * Return the last instruction in the specified method.
	 * 
	 * @param method
	 * @return
	 */
	private AbstractInsnNode getLastInstruction(MethodNode method) {
		return getInstruction(method, method.instructions.size() - 1);
	}
	
	/**
	 * Map the specified list of labels into an array of labels
	 * mapped into the target region.
	 * 
	 * @param region
	 * @param labels
	 * @return
	 */
	private Label[] getMappedLabelArray(Region region, List labels) {
		Label[] mappedLabels = new Label[labels.size()];
		
		for (int i = 0; i < mappedLabels.length; i++) {
			mappedLabels[i] = region.getMappedLabel((Label) labels.get(i));
		}
		
		return mappedLabels;
	}

	/**
	 * Return a method indicating whether the specified label is the start
	 * of a referenced subroutine.
	 * 
	 * @param label
	 * @return
	 */
	private boolean isSubroutineStart(Label label) {
		return subroutineMap.containsKey(label);
	}

	/**
	 * Visit the specified instruction and do the right thing.
	 * 
	 * @param method
	 * @param region
	 * @param insnNode
	 * @throws AnalyzerException
	 */
	private void visitInstruction(
		MethodNode method, 
		Region region,
		AbstractInsnNode insnNode) 
			throws AnalyzerException 
	{
		int opcode = insnNode.getOpcode();
		switch (opcode) {
			case Opcodes.JSR:
				visitJumpToSubroutine(method, region, (JumpInsnNode) insnNode);
				break;
			
			case Opcodes.IFEQ:
			case Opcodes.IFNE: 
			case Opcodes.IFLT:
			case Opcodes.IFGE:
			case Opcodes.IFGT:
			case Opcodes.IFLE:
			case Opcodes.IF_ICMPEQ:
			case Opcodes.IF_ICMPNE: 
			case Opcodes.IF_ICMPLT:
			case Opcodes.IF_ICMPGE:
			case Opcodes.IF_ICMPGT:
			case Opcodes.IF_ICMPLE:
			case Opcodes.IF_ACMPEQ:
			case Opcodes.IF_ACMPNE:
			case Opcodes.GOTO:
			case Opcodes.IFNULL:
			case Opcodes.IFNONNULL:
				visitJump(method, region, (JumpInsnNode) insnNode);
				break;
			
			case Opcodes.LOOKUPSWITCH:
				visitLookupSwitch(method, region, (LookupSwitchInsnNode) insnNode);
				break;
			
			case Opcodes.TABLESWITCH:
				visitTableSwitch(method, region, (TableSwitchInsnNode) insnNode);
				break;
			
			default:
				insnNode.accept(method);
		}
	}

	/**
	 * Visit the specified jump instructions, mapping the labels into the target
	 * method.
	 * 
	 * @param method
	 * @param region
	 * @param jumpNode
	 */
	private void visitJump(MethodNode method, Region region, JumpInsnNode jumpNode) {
		Label mappedLabel = region.getMappedLabel(jumpNode.label);
		JumpInsnNode newJumpNode = new JumpInsnNode(jumpNode.getOpcode(), mappedLabel);
		newJumpNode.accept(method);
	}

	/**
	 * Visit a JSR instruction... Inlining the subroutine.
	 * 
	 * @param method
	 * @param region
	 * @param jumpNode
	 * @throws AnalyzerException
	 */
	private void visitJumpToSubroutine(MethodNode method, Region region, JumpInsnNode jumpNode) 
		throws AnalyzerException 
	{
		// Back up and see if we need to remap a local variable label
		// The WTK preverifier extends the scope of a local variable
		// one instruction further if the last instruction of the block
		// is a variable store instruction
		AbstractInsnNode insnNode = getLastInstruction(updatedMethod);
		
		if (insnNode instanceof VarInsnNode) {
			List instructions = updatedMethod.instructions;
			AbstractInsnNode insnNode2 = 
				(AbstractInsnNode) instructions.get(instructions.size() - 2);
			
			if (insnNode2 instanceof LabelNode) {
				// Looks like we have the correct situation here.
				// Introduce a new label as the last instruction
				// and add it to the label map to be used when 
				// adding the local variables
				LabelNode labelNode = (LabelNode) insnNode2;
				ArrayList localVariables = 
					(ArrayList) localVariableByEndLabelMap.get(labelNode.label);
				
				if (localVariables != null)
				{
					Iterator vars = localVariables.iterator();
					while (vars.hasNext()) {
						LocalVariableNode var = (LocalVariableNode) vars.next();
						var.end = new Label();
						method.visitLabel(var.end);
					}
				}
			}
		}
		
		// Inline the subroutine
		Subroutine subroutine = (Subroutine) subroutineMap.get(jumpNode.label);
		subroutine.setParentRegion(region);
		copyRegion(method, subroutine);
	}

	/**
	 * Visit the specified label in the context of the region.  Handle
	 * all things related to that label.
	 * 
	 * @param method
	 * @param region
	 * @param label
	 */
	private void visitLabel(MethodNode method, Region region, Label label) {
		Label mappedLabel = region.getMappedLabel(label);
		method.visitLabel(mappedLabel);
		
		// Check for any related attributes
		LineNumberNode lineNumber = (LineNumberNode) lineNumberMap.get(label);
		if (lineNumber != null) {
			method.visitLineNumber(lineNumber.line, mappedLabel);
		}
		
		ArrayList localVariables = (ArrayList) localVariableByStartLabelMap.get(label);
		if (localVariables != null) {
			Iterator vars = localVariables.iterator();
			while (vars.hasNext()) {
				int localVariableCount = method.localVariables.size();
				LocalVariableNode localVariable = (LocalVariableNode) vars.next();
				
				method.visitLocalVariable(
						localVariable.name, 
						localVariable.desc, 
						localVariable.signature,
						region.getMappedLabel(localVariable.start), 
						region.getMappedLabel(localVariable.end), 
						localVariable.index);
				
				LocalVariableNode newLocalVariable =
					(LocalVariableNode) method.localVariables.get(localVariableCount);
				addNewLocalVariableByEnd(newLocalVariable);
			}
		}
	}

	/**
	 * Visit the specified instruction, mapping the labels into the target
	 * method.
	 * 
	 * @param codeVisitor
	 * @param region
	 * @param node
	 */
	private void visitLookupSwitch(MethodNode codeVisitor, Region region, LookupSwitchInsnNode node) {
		Label dflt = region.getMappedLabel(node.dflt);
		
		int[] keys = new int[node.keys.size()];
		for (int i = 0; i < keys.length; i++) {
			keys[i] = ((Integer) node.keys.get(i)).intValue();
		}

		Label[] labels = getMappedLabelArray(region, node.labels);
		
		LookupSwitchInsnNode newSwitch = new LookupSwitchInsnNode(dflt, keys, labels);
		newSwitch.accept(codeVisitor);
	}

	/**
	 * Visit the specified instructions, mapping the labels into the target
	 * method.
	 * 
	 * @param codeVisitor
	 * @param region
	 * @param node
	 */
	private void visitTableSwitch(MethodNode codeVisitor, Region region, TableSwitchInsnNode node) {
		Label dflt = region.getMappedLabel(node.dflt);
		Label[] labels = getMappedLabelArray(region, node.labels);
		
		TableSwitchInsnNode newSwitch =
			new TableSwitchInsnNode(node.min, node.max, dflt, labels);
		newSwitch.accept(codeVisitor);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久先锋资源网| 精品视频1区2区| 麻豆成人91精品二区三区| 一区二区三区四区国产精品| 国产欧美精品区一区二区三区| xnxx国产精品| 久久精品一区四区| 国产午夜精品久久久久久免费视| 国产欧美日韩在线| 中文字幕欧美国产| 国产偷国产偷亚洲高清人白洁| 国产三级欧美三级日产三级99| 久久亚洲精品小早川怜子| 国产亚洲女人久久久久毛片| 国产精品系列在线| 亚洲三级在线免费观看| 日韩美女精品在线| 亚洲成人你懂的| 日韩不卡一二三区| 国产精品一区二区91| 99精品桃花视频在线观看| 99久久久久久99| 欧美精三区欧美精三区| 日韩手机在线导航| 中文字幕av一区二区三区免费看 | 精品少妇一区二区三区视频免付费 | 欧美男生操女生| 欧美一级午夜免费电影| 欧美精品一区二区三区蜜桃 | 日韩福利电影在线观看| 久久av资源网| aaa欧美大片| 欧美美女一区二区在线观看| 亚洲精品一区二区精华| 亚洲精品中文字幕在线观看| 另类人妖一区二区av| 国产99久久久精品| 欧美日韩的一区二区| 国产欧美日韩卡一| 天堂成人免费av电影一区| 国产1区2区3区精品美女| 欧洲精品一区二区三区在线观看| 精品少妇一区二区三区视频免付费| 国产精品热久久久久夜色精品三区 | 欧洲精品一区二区三区在线观看| 欧美电影免费观看完整版| 亚洲人成网站影音先锋播放| 免费成人小视频| 一本久久a久久免费精品不卡| 日韩精品一区二区三区视频在线观看 | 亚洲成av人片一区二区| 国产一区欧美日韩| 欧美日韩的一区二区| 亚洲欧洲日本在线| 国产一区视频网站| 欧美不卡视频一区| 午夜免费久久看| 色综合天天综合| 久久精品视频网| 另类中文字幕网| 欧美日本在线播放| 亚洲精品欧美在线| 99精品视频在线观看| 国产精品久久久久婷婷二区次| 日本va欧美va欧美va精品| 色呦呦一区二区三区| 国产精品视频yy9299一区| 久久精品国产一区二区| 91精品国产全国免费观看| 亚洲成人av在线电影| 欧美亚洲国产一区在线观看网站 | 欧美肥妇bbw| 午夜私人影院久久久久| 欧美影视一区在线| 亚洲一区二区欧美日韩| 欧美丝袜丝交足nylons| 亚洲精品久久久蜜桃| 在线观看日产精品| 亚洲综合久久av| 在线中文字幕一区二区| 亚洲五码中文字幕| 欧美日韩久久一区二区| 午夜精品一区二区三区三上悠亚 | 欧美一区二区三区公司| 裸体一区二区三区| 精品国产乱码久久久久久1区2区| 日本不卡视频在线| 欧美精品一区在线观看| 成人爽a毛片一区二区免费| 国产精品国产精品国产专区不片| 不卡高清视频专区| 一区二区三区在线免费播放| 欧美午夜精品久久久| 青娱乐精品视频| 久久久久久久久久久99999| 国产成人精品免费网站| 国产精品护士白丝一区av| 色综合亚洲欧洲| 天天综合网天天综合色| 欧美精品一区二区三区视频| 粉嫩aⅴ一区二区三区四区五区 | 日本亚洲最大的色成网站www| 91精品欧美综合在线观看最新| 美女脱光内衣内裤视频久久影院| 精品国产91乱码一区二区三区 | 亚洲成av人片一区二区梦乃| 欧美成人在线直播| av欧美精品.com| 亚州成人在线电影| 国产日韩欧美精品一区| 在线观看91视频| 国内精品自线一区二区三区视频| 亚洲视频免费看| 日韩三级在线免费观看| av中文字幕亚洲| 青草国产精品久久久久久| 国产日韩精品一区| 欧美日韩久久一区二区| 国产a视频精品免费观看| 天天综合色天天综合| 国产欧美一区二区精品性色| 欧美特级限制片免费在线观看| 国产一区二区三区免费| 一区二区三区四区高清精品免费观看 | 樱花影视一区二区| 26uuu精品一区二区在线观看| 91视视频在线观看入口直接观看www | 一本大道久久a久久精二百 | 不卡av在线免费观看| 偷拍日韩校园综合在线| 国产精品黄色在线观看| 精品国精品自拍自在线| 精品视频一区二区三区免费| 夫妻av一区二区| 另类的小说在线视频另类成人小视频在线| 国产精品久久福利| 国产亚洲婷婷免费| 日韩精品一区二区三区视频| 在线观看欧美黄色| 91欧美一区二区| 不卡一区中文字幕| 成人性生交大片免费看中文 | 91蜜桃在线观看| 国产夫妻精品视频| 精品一区二区三区免费毛片爱| 亚洲第一在线综合网站| 一区二区三区在线播放| 亚洲欧洲av色图| 中文字幕一区二区三区不卡| 久久综合九色综合久久久精品综合| 91精品国产免费| 91精品国产色综合久久| 91精品国产综合久久久久久漫画| 欧美日韩一区二区三区免费看| 在线观看av一区二区| 欧美色图一区二区三区| 欧美中文字幕不卡| 欧美日韩1234| 精品日韩在线一区| 26uuu国产电影一区二区| 久久精品一区二区三区不卡| 国产欧美中文在线| 1区2区3区欧美| 亚洲激情成人在线| 视频一区视频二区中文字幕| 日韩高清中文字幕一区| 蜜桃免费网站一区二区三区| 国内成人免费视频| 国产高清不卡一区| www.欧美日韩| 欧美在线观看视频一区二区三区| 欧美日韩一区二区在线观看| 91精品国产福利在线观看| 日韩欧美激情一区| 欧美国产日韩亚洲一区| 亚洲欧美日韩一区二区三区在线观看 | 国产不卡免费视频| 色悠悠亚洲一区二区| 欧美男生操女生| 久久精品日产第一区二区三区高清版 | 一个色在线综合| 欧美aaaaaa午夜精品| 国产成人综合亚洲91猫咪| 91麻豆免费观看| 欧美一区二区视频在线观看2022| 2欧美一区二区三区在线观看视频| 中文字幕在线不卡国产视频| 性做久久久久久| 大胆欧美人体老妇| 91精品久久久久久蜜臀| 中文字幕欧美国产| 午夜精品一区二区三区三上悠亚| 国产一区二区免费在线| 在线亚洲+欧美+日本专区| 欧美一区二区三区公司| 成人欧美一区二区三区小说| 理论电影国产精品| 97se亚洲国产综合在线| 精品国产1区2区3区| 综合网在线视频|