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

📄 resulttreetype.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	    // Push required parameters 	    il.append(classGen.loadTranslet());	    if (classGen.isExternal()) {		il.append(new CHECKCAST(cpg.addClass(className)));	    }	    il.append(methodGen.loadDOM());	    // Create new instance of DOM class (with RTF_INITIAL_SIZE nodes)	    il.append(methodGen.loadDOM());	    int index = cpg.addInterfaceMethodref(DOM_INTF,				 "getResultTreeFrag",				 "(IZ)" + DOM_INTF_SIG);	    il.append(new PUSH(cpg, RTF_INITIAL_SIZE));	    il.append(new PUSH(cpg, false));	    il.append(new INVOKEINTERFACE(index,3));	    il.append(DUP);	    	    // Store new DOM into a local variable	    newDom = methodGen.addLocalVariable("rt_to_reference_dom", 						Util.getJCRefType(DOM_INTF_SIG),						null, null);	    il.append(new CHECKCAST(cpg.addClass(DOM_INTF_SIG)));	    il.append(new ASTORE(newDom.getIndex()));	    // Overwrite old handler with DOM handler	    index = cpg.addInterfaceMethodref(DOM_INTF,				 "getOutputDomBuilder",				 "()" + TRANSLET_OUTPUT_SIG);	    il.append(new INVOKEINTERFACE(index,1));	    //index = cpg.addMethodref(DOM_IMPL,		//		     "getOutputDomBuilder", 		//		     "()" + TRANSLET_OUTPUT_SIG);	    //il.append(new INVOKEVIRTUAL(index));	    il.append(DUP);	    il.append(DUP);	    // Store DOM handler in a local in order to call endDocument()	    domBuilder =		methodGen.addLocalVariable("rt_to_reference_handler", 					   Util.getJCRefType(TRANSLET_OUTPUT_SIG),					   null, null);	    il.append(new ASTORE(domBuilder.getIndex()));	    // Call startDocument on the new handler	    index = cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE, 					      "startDocument", "()V");	    il.append(new INVOKEINTERFACE(index, 1));	    // Call the method that implements this result tree	    index = cpg.addMethodref(className,				     _methodName,				     "("				     + DOM_INTF_SIG				     + TRANSLET_OUTPUT_SIG				     +")V");	    il.append(new INVOKEVIRTUAL(index));	    // Call endDocument on the DOM handler	    il.append(new ALOAD(domBuilder.getIndex()));	    index = cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE, 					      "endDocument", "()V");	    il.append(new INVOKEINTERFACE(index, 1));	    // Push the new DOM on the stack	    il.append(new ALOAD(newDom.getIndex()));	}    }    /**     * Expects a result tree on the stack and pushes a node-set (iterator).     * Note that the produced iterator is an iterator for the DOM that     * contains the result tree, and not the DOM that is currently in use.     * This conversion here will therefore not directly work with elements     * such as <xsl:apply-templates> and <xsl:for-each> without the DOM     * parameter/variable being updates as well.     *     * @param classGen A BCEL class generator     * @param methodGen A BCEL method generator     * @param type An instance of NodeSetType (any)     * @see com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type#translateTo     */    public void translateTo(ClassGenerator classGen, MethodGenerator methodGen, 			    NodeSetType type) {	final ConstantPoolGen cpg = classGen.getConstantPool();	final InstructionList il = methodGen.getInstructionList();	// Put an extra copy of the result tree (DOM) on the stack	il.append(DUP);	// DOM adapters containing a result tree are not initialised with	// translet-type to DOM-type mapping. This must be done now for	// XPath expressions and patterns to work for the iterator we create.	il.append(classGen.loadTranslet()); // get names array	il.append(new GETFIELD(cpg.addFieldref(TRANSLET_CLASS,					       NAMES_INDEX,					       NAMES_INDEX_SIG)));	il.append(classGen.loadTranslet()); // get uris array	il.append(new GETFIELD(cpg.addFieldref(TRANSLET_CLASS,					       URIS_INDEX,					       URIS_INDEX_SIG)));	il.append(classGen.loadTranslet()); // get types array	il.append(new GETFIELD(cpg.addFieldref(TRANSLET_CLASS,					       TYPES_INDEX,					       TYPES_INDEX_SIG)));	il.append(classGen.loadTranslet()); // get namespaces array	il.append(new GETFIELD(cpg.addFieldref(TRANSLET_CLASS,					       NAMESPACE_INDEX,					       NAMESPACE_INDEX_SIG)));	// Pass the type mappings to the DOM adapter	final int mapping = cpg.addInterfaceMethodref(DOM_INTF,						      "setupMapping",						      "(["+STRING_SIG+						      "["+STRING_SIG+						      "[I" +						      "["+STRING_SIG+")V");	il.append(new INVOKEINTERFACE(mapping, 5));	il.append(DUP);	// Create an iterator for the root node of the DOM adapter	final int iter = cpg.addInterfaceMethodref(DOM_INTF,						   "getIterator",						   "()"+NODE_ITERATOR_SIG);	il.append(new INVOKEINTERFACE(iter, 1));	    }    /**     * Subsume result tree into ObjectType.     *     * @see	com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type#translateTo     */    public void translateTo(ClassGenerator classGen, MethodGenerator methodGen, 			    ObjectType type) {	methodGen.getInstructionList().append(NOP);	    }    /**     * Translates a result tree into a non-synthesized boolean.     * It does not push a 0 or a 1 but instead returns branchhandle list     * to be appended to the false list.     *     * @param classGen A BCEL class generator     * @param methodGen A BCEL method generator     * @param type An instance of BooleanType (any)     * @see com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type#translateToDesynthesized     */    public FlowList translateToDesynthesized(ClassGenerator classGen, 					     MethodGenerator methodGen, 					     BooleanType type) {	final InstructionList il = methodGen.getInstructionList();	translateTo(classGen, methodGen, Type.Boolean);	return new FlowList(il.append(new IFEQ(null)));    }    /**     * Translates a result tree to a Java type denoted by <code>clazz</code>.      * Expects a result tree on the stack and pushes an object     * of the appropriate type after coercion. Result trees are translated     * to W3C Node or W3C NodeList and the translation is done     * via node-set type.     *     * @param classGen A BCEL class generator     * @param methodGen A BCEL method generator     * @param clazz An reference to the Class to translate to     * @see com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type#translateTo     */    public void translateTo(ClassGenerator classGen, MethodGenerator methodGen, 			    Class clazz) {	final String className = clazz.getName();	final ConstantPoolGen cpg = classGen.getConstantPool();	final InstructionList il = methodGen.getInstructionList();	if (className.equals("org.w3c.dom.Node")) {	    translateTo(classGen, methodGen, Type.NodeSet);	    int index = cpg.addInterfaceMethodref(DOM_INTF,						  MAKE_NODE,						  MAKE_NODE_SIG2);	    il.append(new INVOKEINTERFACE(index, 2));	}	else if (className.equals("org.w3c.dom.NodeList")) {	    translateTo(classGen, methodGen, Type.NodeSet);	    int index = cpg.addInterfaceMethodref(DOM_INTF,						  MAKE_NODE_LIST,						  MAKE_NODE_LIST_SIG2);	    il.append(new INVOKEINTERFACE(index, 2));	}	else if (className.equals("java.lang.Object")) {	    il.append(NOP);	}        else if (className.equals("java.lang.String")) {            translateTo(classGen, methodGen, Type.String);        }	else {	    ErrorMsg err = new ErrorMsg(ErrorMsg.DATA_CONVERSION_ERR,					toString(), className);	    classGen.getParser().reportError(Constants.FATAL, err);	}    }    /**     * Translates an object of this type to its boxed representation.     */     public void translateBox(ClassGenerator classGen,			     MethodGenerator methodGen) {	translateTo(classGen, methodGen, Type.Reference);    }    /**     * Translates an object of this type to its unboxed representation.     */     public void translateUnBox(ClassGenerator classGen,			       MethodGenerator methodGen) {	methodGen.getInstructionList().append(NOP);    }    /**     * Returns the class name of an internal type's external representation.     */    public String getClassName() {	return(DOM_INTF);    }    public Instruction LOAD(int slot) {	return new ALOAD(slot);    }	    public Instruction STORE(int slot) {	return new ASTORE(slot);    }}

⌨️ 快捷键说明

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