29 * @compile ClassB.java 30 * p1/A.java 31 * p2/B.jcod 32 * p1/C.java 33 * p2/D.java 34 * @modules java.base/jdk.internal.misc 35 * java.management 36 * @run driver VtablesTest 37 */ 38 39 import jdk.test.lib.*; 40 41 public class VtablesTest { 42 public static void main(String[] args) throws Exception { 43 if (Platform.isDebugBuild()) { 44 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xlog:vtables=trace", "ClassB"); 45 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 46 output.shouldContain("copy vtable from ClassA to ClassB"); 47 output.shouldContain("Initializing: ClassB"); 48 output.shouldContain("adding ClassB.Method1()V"); 49 output.shouldContain("] overriding with ClassB::ClassB.Method2()V"); 50 output.shouldContain("invokevirtual resolved method: caller-class:ClassB"); 51 output.shouldContain("invokevirtual selected method: receiver-class:ClassB"); 52 output.shouldContain("NOT overriding with p2.D::p2.D.nooverride()V"); 53 output.shouldHaveExitValue(0); 54 55 pb = ProcessTools.createJavaProcessBuilder("-Xlog:vtables=trace", "p1/C"); 56 output = new OutputAnalyzer(pb.start()); 57 output.shouldContain("transitive overriding superclass "); 58 output.shouldHaveExitValue(0); 59 } 60 } 61 } 62 | 29 * @compile ClassB.java 30 * p1/A.java 31 * p2/B.jcod 32 * p1/C.java 33 * p2/D.java 34 * @modules java.base/jdk.internal.misc 35 * java.management 36 * @run driver VtablesTest 37 */ 38 39 import jdk.test.lib.*; 40 41 public class VtablesTest { 42 public static void main(String[] args) throws Exception { 43 if (Platform.isDebugBuild()) { 44 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xlog:vtables=trace", "ClassB"); 45 OutputAnalyzer output = new OutputAnalyzer(pb.start()); 46 output.shouldContain("copy vtable from ClassA to ClassB"); 47 output.shouldContain("Initializing: ClassB"); 48 output.shouldContain("adding ClassB.Method1()V"); 49 output.shouldContain("] overriding with ClassB.Method2()V"); 50 output.shouldContain("invokevirtual resolved method: caller-class:ClassB"); 51 output.shouldContain("invokevirtual selected method: receiver-class:ClassB"); 52 output.shouldContain("NOT overriding with p2.D.nooverride()V"); 53 output.shouldHaveExitValue(0); 54 55 pb = ProcessTools.createJavaProcessBuilder("-Xlog:vtables=trace", "p1/C"); 56 output = new OutputAnalyzer(pb.start()); 57 output.shouldContain("transitive overriding superclass "); 58 output.shouldHaveExitValue(0); 59 } 60 } 61 } 62 |