--- old/jaxp/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/Constants.java 2016-07-22 17:09:06.000000000 +0100 +++ new/jaxp/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/Constants.java 2016-07-22 17:09:06.000000000 +0100 @@ -72,6 +72,14 @@ public final static short MINOR_1_2 = 0; public final static short MAJOR_1_3 = 47; public final static short MINOR_1_3 = 0; + public final static short MAJOR_1_4 = 48; + public final static short MINOR_1_4 = 0; + public final static short MAJOR_1_5 = 49; + public final static short MINOR_1_5 = 0; + public final static short MAJOR_1_6 = 50; + public final static short MINOR_1_6 = 0; + public final static short MAJOR_1_7 = 51; + public final static short MINOR_1_7 = 0; public final static short MAJOR = MAJOR_1_1; // Defaults public final static short MINOR = MINOR_1_1; --- old/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Constants.java 2016-07-22 17:09:06.000000000 +0100 +++ new/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Constants.java 2016-07-22 17:09:06.000000000 +0100 @@ -98,6 +98,10 @@ public static final int ACC_STATIC = com.sun.org.apache.bcel.internal.Constants.ACC_STATIC; + public static final String MODULE_SIG + = "Ljava/lang/reflect/Module;"; + public static final String CLASS_SIG + = "Ljava/lang/Class;"; public static final String STRING_SIG = "Ljava/lang/String;"; public static final String STRING_BUFFER_SIG @@ -246,8 +250,12 @@ = "com.sun.org.apache.xalan.internal.xsltc.DOM"; public static final String DOM_IMPL = "com.sun.org.apache.xalan.internal.xsltc.dom.SAXImpl"; - public static final String SAX_IMPL + public static final String SAX_IMPL = "com.sun.org.apache.xalan.internal.xsltc.dom.SAXImpl"; + public static final String CLASS_CLASS + = "java.lang.Class"; + public static final String MODULE_CLASS + = "java.lang.reflect.Module"; public static final String STRING_CLASS = "java.lang.String"; public static final String OBJECT_CLASS @@ -293,7 +301,7 @@ = "()D"; public static final String DOM_PNAME - = "dom"; + = "dom"; public static final String NODE_PNAME = "node"; public static final String TRANSLET_OUTPUT_PNAME @@ -335,6 +343,19 @@ = "setStartNode"; public static final String RESET = "reset"; + public static final String GET_MODULE + = "getModule"; + public static final String FOR_NAME + = "forName"; + public static final String ADD_READS + = "addReads"; + + public static final String GET_MODULE_SIG + = "()" + MODULE_SIG; + public static final String FOR_NAME_SIG + = "(" + STRING_SIG + ")" + CLASS_SIG; + public static final String ADD_READS_SIG + = "(" + MODULE_SIG + ")" + MODULE_SIG; public static final String ATTR_SET_SIG = "(" + DOM_INTF_SIG + NODE_ITERATOR_SIG + TRANSLET_OUTPUT_SIG + "I)V"; --- old/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java 2016-07-22 17:09:07.000000000 +0100 +++ new/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java 2016-07-22 17:09:07.000000000 +0100 @@ -32,8 +32,10 @@ import com.sun.org.apache.bcel.internal.generic.InstructionConstants; import com.sun.org.apache.bcel.internal.generic.InstructionList; import com.sun.org.apache.bcel.internal.generic.InvokeInstruction; +import com.sun.org.apache.bcel.internal.generic.LDC; import com.sun.org.apache.bcel.internal.generic.LocalVariableGen; import com.sun.org.apache.bcel.internal.generic.NEW; +import com.sun.org.apache.bcel.internal.generic.POP; import com.sun.org.apache.bcel.internal.generic.PUSH; import com.sun.org.apache.xalan.internal.utils.FeatureManager; import com.sun.org.apache.xalan.internal.utils.ObjectFactory; @@ -792,6 +794,11 @@ final String clazz = _chosenConstructor.getDeclaringClass().getName(); + + // Generate call to Module.addReads: + // .class.getModule().addReads( + generateAddReads(classGen, methodGen, clazz); + Class[] paramTypes = _chosenConstructor.getParameterTypes(); LocalVariableGen[] paramTemp = new LocalVariableGen[n]; @@ -855,6 +862,12 @@ final String clazz = _chosenMethod.getDeclaringClass().getName(); Class[] paramTypes = _chosenMethod.getParameterTypes(); + + // Generate call to Module.addReads: + // .class.getModule().addReads( + // Class.forName().getModule()); + generateAddReads(classGen, methodGen, clazz); + // Push "this" if it is an instance method if (_thisArgument != null) { _thisArgument.translate(classGen, methodGen); @@ -896,6 +909,47 @@ } } + private void generateAddReads(ClassGenerator classGen, MethodGenerator methodGen, + String clazz) { + final ConstantPoolGen cpg = classGen.getConstantPool(); + final InstructionList il = methodGen.getInstructionList(); + + if (classGen.getMajor() < com.sun.org.apache.bcel.internal.Constants.MAJOR_1_5) { + // Major version needs to be >= 5.0 in order to support loading + // a class ref from the constant pool (LDC) + classGen.setMajor(com.sun.org.apache.bcel.internal.Constants.MAJOR_1_5); + classGen.setMinor(com.sun.org.apache.bcel.internal.Constants.MINOR_1_5); + } + + // Generate call to Module.addReads: + // .class.getModule().addReads( + // Class.forName().getModule()); + // Class.forName may throw ClassNotFoundException. + // This is OK as it will caught higher up the stack in + // TransformerImpl.transform() and wrapped into a + // TransformerException. + methodGen.markChunkStart(); + + int index = cpg.addMethodref(CLASS_CLASS, + GET_MODULE, + GET_MODULE_SIG); + il.append(new LDC(cpg.addClass(classGen.getClassName()))); + il.append(new INVOKEVIRTUAL(index)); + int index2 = cpg.addMethodref(CLASS_CLASS, + FOR_NAME, + FOR_NAME_SIG); + il.append(new LDC(cpg.addString(clazz))); + il.append(new INVOKESTATIC(index2)); + il.append(new INVOKEVIRTUAL(index)); + index = cpg.addMethodref(MODULE_CLASS, + ADD_READS, + ADD_READS_SIG); + il.append(new INVOKEVIRTUAL(index)); + il.append(new POP()); + + methodGen.markChunkEnd(); + } + @Override public String toString() { return "funcall(" + _fname + ", " + _arguments + ')'; --- old/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java 2016-07-22 17:09:07.000000000 +0100 +++ new/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java 2016-07-22 17:09:07.000000000 +0100 @@ -58,7 +58,6 @@ import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.URIResolver; -import jdk.internal.module.Modules; /** * @author Morten Jorgensen @@ -486,10 +485,6 @@ thisModule.addExports(p, m); }); - // For now, the module reads all unnnamed modules. This will be changed once - // the XSLT compiler is updated to generate code to invoke addReads. - Modules.addReadsAllUnnamed(m); - // java.xml needs to instanitate the translet class thisModule.addReads(m); --- old/jaxp/test/javax/xml/jaxp/unittest/transform/XSLTFunctionsTest.java 2016-07-22 17:09:08.000000000 +0100 +++ new/jaxp/test/javax/xml/jaxp/unittest/transform/XSLTFunctionsTest.java 2016-07-22 17:09:08.000000000 +0100 @@ -46,7 +46,7 @@ public class XSLTFunctionsTest { /** - * @bug 8062518 + * @bug 8062518 8153082 * Verifies that a reference to the DTM created by XSLT document function is * actually read from the DTM by an extension function. * @param xml Content of xml file to process --- old/jdk/src/java.base/share/classes/module-info.java 2016-07-22 17:09:09.000000000 +0100 +++ new/jdk/src/java.base/share/classes/module-info.java 2016-07-22 17:09:08.000000000 +0100 @@ -149,7 +149,6 @@ exports jdk.internal.module to java.instrument, java.management, - java.xml, jdk.dynalink, jdk.jartool, jdk.jlink;