8199255: [TESTBUG] Open source VM testbase default methods tests

Open sourced default method tests

Reviewed-by: ccheung, iignatyev, erikj
This commit is contained in:
Mikhailo Seledtsov 2018-05-23 17:09:49 -07:00
parent 24d75d940a
commit 6b45a75b88
781 changed files with 44946 additions and 1 deletions

View File

@ -74,6 +74,11 @@ NSK_SHARE_JNI_INCLUDES := \
-I$(VM_TESTBASE_DIR)/nsk/share/native \
-I$(VM_TESTBASE_DIR)/nsk/share/jni
RUNTIME_DEFMETH_INCLUDES := \
-I$(TOPDIR)/test/hotspot/jtreg/vmTestbase/nsk/share/jni \
-I$(TOPDIR)/test/hotspot/jtreg/vmTestbase/nsk/share/native \
-I$(TOPDIR)/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti
NSK_SHARE_LOCKS_INCLUDES := \
-I$(VM_TESTBASE_DIR)/nsk/share/native \
-I$(VM_TESTBASE_DIR)/nsk/share/locks
@ -124,6 +129,8 @@ BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libRecursiveMonitoringThread := $(NSK_MONIT
BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libLockingThreads := $(NSK_MONITORING_INCLUDES)
BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libStackTraceController := $(NSK_MONITORING_INCLUDES)
BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libredefineClasses := $(RUNTIME_DEFMETH_INCLUDES)
BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libforceEarlyReturn005a := $(NSK_JDI_INCLUDES)
BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libMonitorEnterExecutor := $(NSK_SHARE_JDI_INCLUDES)
@ -183,6 +190,7 @@ ifeq ($(OPENJDK_TARGET_OS), linux)
BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rwx := -z execstack
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libstepBreakPopReturn := -lpthread
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libIndyRedefineClass := -lpthread
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libredefineClasses := -lpthread
BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exeinvoke := -ljvm -lpthread
BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exestack-gap := -ljvm -lpthread
BUILD_TEST_exeinvoke_exeinvoke.c_OPTIMIZATION := NONE

View File

@ -588,6 +588,12 @@ vmTestbase_nsk_monitoring_quick = \
vmTestbase/nsk/monitoring/ThreadMXBean/GetThreadAllocatedBytes/noAllocationTest_proxy_default/TestDescription.java \
vmTestbase/nsk/monitoring/ThreadMXBean/GetThreadAllocatedBytes/noAllocationTest_proxy_custom/TestDescription.java
# Tests for default method implementation
vmTestbase_vm_defmeth = \
vmTestbase/vm/runtime/defmeth
# JDI tests
vmTestbase_nsk_jdi = \
vmTestbase/nsk/jdi
@ -1283,4 +1289,3 @@ vmTestbase_vm_heapdump_quick = \
# JDB tests
vmTestbase_nsk_jdb = \
vmTestbase/nsk/jdb

View File

@ -0,0 +1,408 @@
/*
* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package vm.runtime.defmeth;
import nsk.share.test.TestBase;
import static jdk.internal.org.objectweb.asm.Opcodes.*;
import vm.runtime.defmeth.shared.DefMethTest;
import vm.runtime.defmeth.shared.data.*;
import vm.runtime.defmeth.shared.data.method.body.EmptyBody;
import vm.runtime.defmeth.shared.builder.TestBuilder;
/*
* Test allowed combinations of access flags on methods in interfaces.
* Based on assertions from JVMS8.
*/
public class AccessibilityFlagsTest extends DefMethTest {
public static void main(String[] args) {
TestBase.runTest(new AccessibilityFlagsTest(), args);
}
/* ====================================================================== */
// Methods of interfaces may set any of the flags in Table 4.5 except
// ACC_PROTECTED, ACC_FINAL, ACC_NATIVE, and ACC_SYNCHRONIZED (9.4);
/**
* interface I { protected void m(); }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
*/
public void testProtectedMethodAbstract() {
expectClassFormatError(
createAbstractMethodInterface(ACC_PROTECTED));
expectClassFormatError(
createAbstractMethodInterface(ACC_PROTECTED | ACC_PUBLIC));
expectClassFormatError(
createAbstractMethodInterface(ACC_PROTECTED | ACC_PRIVATE));
}
/**
* interface I { protected void m() default {}; }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
*/
public void testProtectedMethodDefault() {
expectClassFormatError(
createDefaultMethodInterface(ACC_PROTECTED));
expectClassFormatError(
createDefaultMethodInterface(ACC_PROTECTED | ACC_PUBLIC));
expectClassFormatError(
createDefaultMethodInterface(ACC_PROTECTED | ACC_PRIVATE));
}
/**
* interface I { final void m() default {}; }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
*/
public void testFinalMethodDefault() {
expectClassFormatError(
createDefaultMethodInterface(ACC_FINAL));
expectClassFormatError(
createDefaultMethodInterface(ACC_FINAL | ACC_PUBLIC));
expectClassFormatError(
createDefaultMethodInterface(ACC_FINAL | ACC_PRIVATE));
}
/**
* interface I { native void m() default {}; }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
*/
public void testNativeMethodDefault() {
expectClassFormatError(
createDefaultMethodInterface(ACC_NATIVE));
expectClassFormatError(
createDefaultMethodInterface(ACC_NATIVE | ACC_PUBLIC));
expectClassFormatError(
createDefaultMethodInterface(ACC_NATIVE | ACC_PRIVATE));
}
/**
* interface I { synchronized void m(); }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
*/
public void testSynchronizedMethodAbstract() {
expectClassFormatError(
createAbstractMethodInterface(ACC_SYNCHRONIZED));
expectClassFormatError(
createAbstractMethodInterface(ACC_SYNCHRONIZED | ACC_PUBLIC));
expectClassFormatError(
createAbstractMethodInterface(ACC_SYNCHRONIZED | ACC_PRIVATE));
}
/**
* interface I { synchronized void m() default {}; }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
*/
public void testSynchronizedMethodDefault() {
expectClassFormatError(
createDefaultMethodInterface(ACC_SYNCHRONIZED));
expectClassFormatError(
createDefaultMethodInterface(ACC_SYNCHRONIZED | ACC_PUBLIC));
expectClassFormatError(
createDefaultMethodInterface(ACC_SYNCHRONIZED | ACC_PRIVATE));
}
/* ===================================================================== */
// [methods of interfaces] must have exactly one of the ACC_PUBLIC or ACC_PRIVATE flags set.
/**
* interface I { private void m() default {}; }
*
* TEST: ClassLoader.loadClass("I") == succeeds
*/
public void testPrivateMethodDefault() {
loadClass(
createDefaultMethodInterface(ACC_PRIVATE));
}
/**
* interface I { public void m(); }
*
* TEST: ClassLoader.loadClass("I") == succeeds
*/
public void testPublicMethodAbstract() {
loadClass(
createAbstractMethodInterface(ACC_PUBLIC));
}
/**
* interface I { public void m() default {}; }
*
*/
public void testPublicMethodDefault() {
loadClass(
createDefaultMethodInterface(ACC_PUBLIC));
}
/**
* interface I { private public void m(); }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
*/
public void testPrivatePublicMethodAbstract() {
expectClassFormatError(
createAbstractMethodInterface(ACC_PUBLIC | ACC_PRIVATE));
}
/**
* interface I { private public void m() default {}; }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
*/
public void testPrivatePublicMethodDefault() {
expectClassFormatError(
createDefaultMethodInterface(ACC_PUBLIC | ACC_PRIVATE));
}
/* ===================================================================== */
// Methods of classes may set any of the flags in Table 4.5 except
// ACC_PROTECTED, ACC_FINAL, ACC_NATIVE, and ACC_SYNCHRONIZED (9.4);
// they must have exactly one of the ACC_PUBLIC or ACC_PRIVATE flags set.
//
// The following flags are allowed:
// ACC_PUBLIC 0x0001 Declared public; may be accessed from outside its package.
// ACC_PRIVATE 0x0002 Declared private; accessible only within the defining class.
// ACC_STATIC 0x0008 Declared static.
// ACC_BRIDGE 0x0040 A bridge method, generated by the compiler.
// ACC_VARARGS 0x0080 Declared with variable number of arguments.
// ACC_STRICT 0x0800 Declared strictfp; floating-point mode is FP-strict.
// ACC_SYNTHETIC 0x1000 Declared synthetic; not present in the source code.
/**
* interface I { static void m() default {}; }
*
* TEST: ClassLoader.loadClass("I") == succeeds
*/
public void testStaticMethodDefault() {
loadClass(
createDefaultMethodInterface(ACC_STATIC | ACC_PUBLIC));
loadClass(
createDefaultMethodInterface(ACC_STATIC | ACC_PRIVATE));
}
/**
* interface I { strictfp void m() default {}; }
*
* TEST: ClassLoader.loadClass("I") == succeeds
*/
public void testStrictFPMethodDefault() {
loadClass(
createDefaultMethodInterface(ACC_STRICT | ACC_PUBLIC));
loadClass(
createDefaultMethodInterface(ACC_STRICT | ACC_PRIVATE));
}
/* =============================================================================== */
// If a specific method of a class or interface has its ACC_ABSTRACT flag set,
// it must not have any of its ACC_FINAL, ACC_NATIVE, ACC_PRIVATE, ACC_STATIC, ACC_STRICT,
// or ACC_SYNCHRONIZED flags set (8.4.3.1, 8.4.3.3, 8.4.3.4).
/**
* interface I { final void m(); }
* abstract class C { abstract final void m(); }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
* TEST: ClassLoader.loadClass("C") ==> ClassFormatError
*/
public void testFinalMethodAbstract() {
/* interface I */
expectClassFormatError(
createAbstractMethodInterface(ACC_FINAL));
expectClassFormatError(
createAbstractMethodInterface(ACC_FINAL | ACC_PUBLIC));
/* abstract class C */
expectClassFormatError(
createAbstractMethodClass(ACC_FINAL));
}
/**
* interface I { native void m(); }
* interface K { native void m() default {}; }
* abstract class C { abstract native m(); }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
* TEST: ClassLoader.loadClass("K") ==> ClassFormatError
* TEST: ClassLoader.loadClass("C") ==> ClassFormatError
*/
public void testNativeMethodAbstract() {
/* interface I */
expectClassFormatError(
createDefaultMethodInterface(ACC_NATIVE));
expectClassFormatError(
createDefaultMethodInterface(ACC_NATIVE | ACC_PUBLIC));
/* interface K */
expectClassFormatError(
createAbstractMethodInterface(ACC_NATIVE));
expectClassFormatError(
createAbstractMethodInterface(ACC_NATIVE | ACC_PUBLIC));
/* abstract class C */
expectClassFormatError(
createAbstractMethodClass(ACC_NATIVE));
}
/**
* interface I { private void m(); }
* abstract class C { abstract private void m(); }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
* TEST: ClassLoader.loadClass("C") ==> ClassFormatError
*/
public void testPrivateMethodAbstract() {
/* interface I */
expectClassFormatError(
createAbstractMethodInterface(ACC_PRIVATE));
/* abstract class C */
expectClassFormatError(
createAbstractMethodClass(ACC_PRIVATE));
}
/**
* interface I { static void m(); }
* abstract class C { abstract static void m(); }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
* TEST: ClassLoader.loadClass("C") ==> ClassFormatError
*/
public void testStaticMethodAbstract() {
/* interface I */
expectClassFormatError(
createAbstractMethodInterface(ACC_STATIC));
expectClassFormatError(
createAbstractMethodInterface(ACC_STATIC | ACC_PUBLIC));
/* abstract class C */
expectClassFormatError(
createAbstractMethodClass(ACC_STATIC));
}
/**
* interface I { strictfp void m(); }
* abstract class C { abstract strictfp void m(); }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
* TEST: ClassLoader.loadClass("C") ==> ClassFormatError
*/
public void testStrictFPMethodAbstract() {
/* interface I */
expectClassFormatError(
createAbstractMethodInterface(ACC_STRICT));
expectClassFormatError(
createAbstractMethodInterface(ACC_STRICT | ACC_PUBLIC));
/* abstract class C */
expectClassFormatError(
createAbstractMethodClass(ACC_STRICT));
}
/* =============================================================================== */
/**
* interface I { abstract void m() default {}; }
*
* TEST: ClassLoader.loadClass("I") ==> ClassFormatError
*/
public void testAbstractMethodDefault() {
expectClassFormatError(
createDefaultMethodInterface(ACC_ABSTRACT));
}
/* ====================================================================== */
// Helper methods
private Interface createAbstractMethodInterface(int acc) {
return factory.getBuilder()
.intf("I")
.abstractMethod("m", "()V").flags(acc)
.build()
.build();
}
private Clazz createAbstractMethodClass(int acc) {
return factory.getBuilder()
.clazz("I")
.abstractMethod("m", "()V").flags(acc)
.build()
.build();
}
private Interface createDefaultMethodInterface(int acc) {
return factory.getBuilder()
.intf("I")
.defaultMethod("m", "()V").flags(acc)
.body(new EmptyBody())
.build()
.build();
}
private void expectException(Clazz clz, Class<? extends Throwable> exc) {
TestBuilder b = factory.getBuilder()
.register(clz);
b.test().loadClass(clz).throws_(exc).done()
.run();
}
private void loadClass(Clazz clz) {
TestBuilder b = factory.getBuilder()
.register(clz);
b.test().loadClass(clz).ignoreResult().done()
.run();
}
private void expectClassFormatError(Clazz clz) {
expectException(clz, ClassFormatError.class);
}
}

View File

@ -0,0 +1,381 @@
/*
* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package vm.runtime.defmeth;
import nsk.share.TestFailure;
import nsk.share.test.TestBase;
import vm.runtime.defmeth.shared.MemoryClassLoader;
import vm.runtime.defmeth.shared.annotation.KnownFailure;
import vm.runtime.defmeth.shared.annotation.NotApplicableFor;
import vm.runtime.defmeth.shared.builder.TestBuilder;
import vm.runtime.defmeth.shared.data.*;
import static jdk.internal.org.objectweb.asm.Opcodes.*;
import vm.runtime.defmeth.shared.DefMethTest;
import java.util.Map;
import static vm.runtime.defmeth.shared.ExecutionMode.*;
/**
* Basic tests on some of the assertions from JVMS.
*/
public class BasicTest extends DefMethTest {
public static void main(String[] args) {
TestBase.runTest(new BasicTest(), args);
}
/*
* JVMS 6.5 invokevirtual
*
* ...
*
* Runtime Exceptions
*
* Otherwise, if the resolved method is not signature polymorphic:
*
*/
/*
* ...
*
* If the resolved method is declared in an interface and the class of
* objectref does not implement the resolved interface, invokevirtual throws
* an IncompatibleClassChangeError.
*/
@KnownFailure(modes = {
REFLECTION, // throws IAE
INVOKE_GENERIC, INVOKE_WITH_ARGS}) // throws ClassCastException
public void testInterfaceNotImplemented() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()V").emptyBody().build()
.build();
ConcreteClass C = b.clazz("C").build();
Class expectedClass;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedClass = IllegalArgumentException.class;
} else if (factory.getExecutionMode().equals("INVOKE_WITH_ARGS")) {
// Notes from JDK-8029926 which details reasons behind CCE.
// The code below demonstrates the use of a MethodHandle
// of kind REF_invokeInterface pointing to method I.m.
// Because 'invoke' is called, this MethodHandle is effectively
// wrapped in the type adaptations necessary to accept a C
// as the first argument. ***Before we even get to the point
// of the invokeinterface call to I.m***, the adaptation
// code must run, and that is where the ClassCastException occurs.
// This exception can be thrown from code that is cleanly
// compiled and does no bytecode generation, so an ICCE would
// be inappropriate since no classes are changed.
expectedClass = ClassCastException.class;
} else {
expectedClass = IncompatibleClassChangeError.class;
}
b.test().callSite(I, C, "m", "()V").throws_(expectedClass).done()
.run();
}
/*
* ...
*
* Otherwise, if no method matching the resolved name and descriptor is
* selected, invokevirtual throws an NoSuchMethodError.
*
* ...
*/
@KnownFailure(modes = {
DIRECT, REFLECTION, INVOKE_WITH_ARGS, // NSME, instead of AME
INVOKE_EXACT, INVOKE_GENERIC, INDY}) // IncompatibleClassChangeError, instead of AME
public void testNoMatch() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "(Ljava/lang/Object;)V").emptyBody().build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().callSite(C, C, "m", "()I").throws_(NoSuchMethodError.class).done()
.test().callSite(C, C, "m1", "()V").throws_(NoSuchMethodError.class).done()
.test().callSite(C, C, "m", "(I)V").throws_(NoSuchMethodError.class).done()
.run();
}
/*
* ...
*
* 8025604: Updated specification text for both 5.4.3.3 and 5.4.4.4
* "Otherwise, if any superinterface of C declares a method with the name and
* descriptor specified by the method reference that has set neither
* its ACC_PRIVATE flag nor its ACC_STATIC flag, one of these is arbitrarily
* chosen and method lookup succeeds."
* If method lookup fails, method resolution throws a NoSuchMethodError
*
* ...
*/
public void testNonPublic() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m1", "()V").private_().emptyBody().build()
.defaultMethod("m2", "()I").private_().returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().callSite(C, C, "m1", "()V").throws_(NoSuchMethodError.class).done()
.test().callSite(C, C, "m2", "()I").throws_(NoSuchMethodError.class).done()
.run();
}
/*
* Default method override w/ non-public concrete method
*
* interface I { void m() default {} }
* class C implements I {
* [private/package-private/protected]
* void m() {}
* }
*
*/
@KnownFailure(modes = {INVOKE_EXACT, INVOKE_GENERIC, INVOKE_WITH_ARGS, INDY}) // NPE, instead of IAE
public void testNonPublicOverride() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m","()V").emptyBody().build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.concreteMethod("m", "()V").private_().emptyBody().build()
.build();
ConcreteClass D = b.clazz("D").implement(I)
.concreteMethod("m", "()V").protected_().emptyBody().build()
.build();
ConcreteClass E = b.clazz("E").implement(I)
.concreteMethod("m", "()V").package_private().emptyBody().build()
.build();
b.test().callSite(I, C, "m", "()V").throws_(IllegalAccessError.class).done()
.test().callSite(I, D, "m", "()V").throws_(IllegalAccessError.class).done()
.test().callSite(I, E, "m", "()V").throws_(IllegalAccessError.class).done()
.run();
}
/**
* interface I {
* static { throw new RE()}
* public default void m() {}
* }
*
* class C implements I {}
*
* TEST: C c = new C(); ==> LinkageError
* Static initialization of class C will trigger
* I's static initialization due to I's default method.
*/
public void testStaticInit() throws ClassNotFoundException {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("<clinit>", "()V")
.flags(ACC_STATIC)
.throw_(RuntimeException.class)
.build()
.defaultMethod("m", "()V")
.emptyBody().build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().callSite(I, C, "m", "()V").throws_(LinkageError.class).done()
.run();
}
/**
* interface I {
* static { throw new RE()}
* private default void m() {}
* }
*
* class C implements I {}
*
* TEST: C c = new C(); ==> LinkageError
* Static initialization of class C will trigger
* I's static initialization due to I's private concrete method.
*/
public void testStaticInitPrivate() throws ClassNotFoundException {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("<clinit>", "()V")
.flags(ACC_STATIC)
.throw_(RuntimeException.class)
.build()
.defaultMethod("m", "()V")
.flags(ACC_PRIVATE)
.emptyBody().build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
Class expectedClass;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedClass = NoSuchMethodException.class;
} else {
expectedClass = LinkageError.class;
}
b.test().callSite(I, C, "m", "()V").throws_(expectedClass).done()
.run();
}
/**
* interface I {
* static { throw new RE()}
* }
* interface J {
* public default int m() { return 1}
*
* class C implements I,J {}
*
* TEST: C c = new C()
* c.m() returns 1
* Static initialization of class C will not trigger
* I's static initialization since I has no concrete methods.
*/
public void testNotStaticInitNoDefault() throws ClassNotFoundException {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("<clinit>", "()V")
.flags(ACC_STATIC)
.throw_(RuntimeException.class)
.build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I")
.returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I,J).build();
b.test().callSite(C, C, "m", "()I").returns(1).done()
.run();
}
/*
* Example A.10
*
* Let L1 and L2 be class loaders with different interpretations of the type "A".
*
* Loaded by L1:
* public interface I { public default A m() { return null; } }
*
* Loaded by L2:
* public class C implements I {}
*
* TEST: I o = new C(); o.m() ==> LinkageError;
* TEST: C o = new C(); o.m() ==> LinkageError;
*/
// disabling this test for REFLECTION and INVOKE for now until
// loader constraint issue associated with those modes has been resolved
@NotApplicableFor(modes = { REFLECTION, INVOKE_WITH_ARGS, INVOKE_EXACT, INVOKE_GENERIC, INDY })
public void testLoaderConstraint() throws Exception{
TestBuilder b = factory.getBuilder();
ConcreteClass A = b.clazz("A").build();
Interface I = b.intf("I")
.defaultMethod("m", "()LA;").returnsNewInstance(A).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().callSite(I, C, "m", "()LA;").throws_(LinkageError.class).done()
.test().callSite(C, C, "m", "()LA;").throws_(LinkageError.class).done()
.prepare(new TestBuilder.LoaderConstructor() {
@Override
public MemoryClassLoader construct(Map<String, byte[]> classFiles) {
final byte[] cfI = classFiles.get("I");
final byte[] cfC = classFiles.get("C");
final byte[] cfA = classFiles.get("A");
final byte[] cfT1 = classFiles.get("Test1_I_C_m");
final byte[] cfT2 = classFiles.get("Test2_C_C_m");
final ClassLoader l1 = new ClassLoader() {
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
switch (name) {
case "I":
return defineClass(name, cfI, 0, cfI.length);
case "A":
return defineClass(name, cfA, 0, cfA.length);
default:
throw new ClassNotFoundException(name);
}
}
};
final MemoryClassLoader l2 = new MemoryClassLoader(classFiles) {
@Override
public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
if ("I".equals(name)) {
return l1.loadClass(name);
} else {
return super.loadClass(name, resolve);
}
}
};
try {
// Need to preload classes, otherwise A will be resolved in the same loader
l1.loadClass("A"); l1.loadClass("I");
l2.loadClass("A"); l2.loadClass("C");
} catch (ClassNotFoundException e) {
throw new TestFailure(e);
}
return l2;
}
}).run();
}
}

View File

@ -0,0 +1,590 @@
/*
* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package vm.runtime.defmeth;
import nsk.share.test.TestBase;
import vm.runtime.defmeth.shared.DefMethTest;
import vm.runtime.defmeth.shared.annotation.KnownFailure;
import vm.runtime.defmeth.shared.annotation.NotApplicableFor;
import vm.runtime.defmeth.shared.data.*;
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.Invoke.*;
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.IndexbyteOp.*;
import vm.runtime.defmeth.shared.builder.TestBuilder;
import static vm.runtime.defmeth.shared.ExecutionMode.*;
/**
* Tests on conflicting defaults.
*
* It is allowable to inherit a default through multiple paths (such as
* through a diamond-shaped interface hierarchy), but the resolution procedure
* is looking for a unique, most specific default-providing interface.
*
* If one default shadows another (where a subinterface provides a different
* default for an extension method declared in a superinterface), then the less
* specific interface is pruned from consideration no matter where it appears
* in the inheritance hierarchy. If two or more extended interfaces provide
* default implementations, and one is not a superinterface of the other, then
* neither is used and a linkage exception is thrown indicating conflicting
* default implementations.
*/
public class ConflictingDefaultsTest extends DefMethTest {
public static void main(String[] args) {
TestBase.runTest(new ConflictingDefaultsTest(), args);
}
/*
* Conflict
*
* interface I { int m() default { return 1; } }
* interface J { int m() default { return 2; } }
* class C implements I, J {}
*
* TEST: C c = new C(); c.m() ==> ICCE
*/
public void testConflict() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(I,J).build();
b.test().callSite(C, C, "m","()I")
.throws_(IncompatibleClassChangeError.class)
.done()
.run();
}
/*
* Maximally-specific Default (0.6.3 spec change)
*
* interface I { int m(); }
* interface J { int m() default { return 2; } }
* class C implements I, J {}
*
* TEST: C c = new C(); c.m() return 2
*/
public void testMaximallySpecificDefault() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.abstractMethod("m", "()I").build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(I,J).build();
b.test().callSite(C, C, "m","()I")
.returns(2)
.done()
.run();
}
/*
* Reabstract
*
* interface I { int m() default { return 1; } }
* interface J extends I { int m(); }
* class C implements J {}
*
* TEST: C c = new C(); c.m() ==> AME
*/
public void testReabstract() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.abstractMethod("m", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
b.test().callSite(C, C, "m","()I")
.throws_(AbstractMethodError.class)
.done()
.run();
}
/*
* Reabstract2
*
* interface I { int m() default { return 1; } }
* interface J extends I { int m(); }
* class C implements J {}
* class D extends C { callSuper C.m}
*
* TEST: C c = new C(); c.m() ==> AME
* TEST: J j = new C(); j.m() ==> AME
* TEST: I i = new C(); i.m() ==> AME
* TEST: D d = new D(); d.m() ==> callSuper C.m ==> AME
*/
public void testReabstract2() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.abstractMethod("m", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
ConcreteClass D = b.clazz("D").extend(C)
.concreteMethod("m", "()I").callSuper(C, "m", "()I").build()
.build();
b.test().callSite(C, C, "m","()I")
.throws_(AbstractMethodError.class)
.done()
.test().callSite(J, C, "m","()I")
.throws_(AbstractMethodError.class)
.done()
.test().callSite(I, C, "m","()I")
.throws_(AbstractMethodError.class)
.done()
.test().callSite(D, D, "m","()I")
.throws_(AbstractMethodError.class)
.done()
.run();
}
/*
* ReabstractConflictingDefaults
*
* interface I { int m() default { return 1; } }
* interface J { int m() default { return 2; } }
* interface K extends I,J { int m(); }
* class A implements I,J {}
* class C extends A implements K {}
*
* TEST: A c = new C(); c.m() ==> AME
*/
public void testReabstractConflictingDefaults() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
Interface K = b.intf("K").extend(I,J)
.abstractMethod("m", "()I").build()
.build();
ConcreteClass A = b.clazz("A").implement(I,J).build();
ConcreteClass C = b.clazz("C").extend(A).implement(K).build();
b.test().callSite(A, C, "m","()I")
.throws_(AbstractMethodError.class)
.done()
.run();
}
/*
* ReabstractConflictingDefaultsInvokeInterface
*
* interface I { int m() default { return 1; } }
* interface J { int m() default { return 2; } }
* interface K extends I,J { int m(); }
* interface L extends K { }
* class A implements I,J {}
* class C extends A implements K {}
* class D extends C implements L {}
*
* TEST: I i = new A(); i.m() ==> ICCE
* TEST: K k = new C(); k.m() ==> AME
* TEST: L l = new D(); l.m() ==> AME
*/
public void testReabstractConflictingDefaultsInvokeInterface() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
Interface K = b.intf("K").extend(I,J)
.abstractMethod("m", "()I").build()
.build();
Interface L = b.intf("L").extend(K)
.build();
ConcreteClass A = b.clazz("A").implement(I,J).build();
ConcreteClass C = b.clazz("C").extend(A).implement(K).build();
ConcreteClass D = b.clazz("D").extend(C).implement(L).build();
b.test().callSite(I, A, "m","()I")
.throws_(IncompatibleClassChangeError.class)
.done()
.test().callSite(K, C, "m","()I")
.throws_(AbstractMethodError.class)
.done()
.test().callSite(L, D, "m","()I")
.throws_(AbstractMethodError.class)
.done()
.run();
}
/*
* ReabstractConflictingDefaultsSuper
*
* interface I { int m() default { return 1; } }
* interface J { int m() default { return 2; } }
* interface K extends I,J { int m(); }
* interface L extends K { }
* class A implements I,J {}
* class C extends A implements K {}
* class D extends C implements L {int m() {callSuper A.m }
*
* TEST: I i = new A(); i.m() ==> ICCE
* TEST: K k = new C(); CallSuper k.m() ==> AME
* TEST: L l = new D(); l.m() ==> AME
*/
public void testReabstractConflictingDefaultsSuper() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
Interface K = b.intf("K").extend(I,J)
.abstractMethod("m", "()I").build()
.build();
Interface L = b.intf("L").extend(K)
.build();
ConcreteClass A = b.clazz("A").implement(I,J).build();
ConcreteClass C = b.clazz("C").extend(A).implement(K).build();
ConcreteClass D = b.clazz("D").extend(C).implement(L)
.concreteMethod("m", "()I").callSuper(A, "m", "()I").build()
.build();
b.test().callSite(I, A, "m","()I")
.throws_(IncompatibleClassChangeError.class)
.done()
.test().callSite(L, D, "m","()I")
.throws_(AbstractMethodError.class)
.done()
.run();
}
/*
* testReabstractResolveMethod00705m2
*
* Test case for JDK-8027804: JCK resolveMethod test fails expecting AME
*
* This test is an extension of the JCK test resolveMethod00705m2
* with additional invoke* bytecodes specified for testing purposes.
*
* interface I { int m() default { return 1; } }
* interface J implements I { int m(); }
* class A implements J,I {}
* class C extends A {}
*
* TEST: A a = new C(); a.m() ==> AME (invokevirtual)
* C c = new C(); c.m() ==> AME (invokevirtual)
* J j = new C(); j.m() ==> AME (invokeinterface)
* I i = new C(); i.m() ==> AME (invokeinterface)
* c.test_Cmethod_ISMR(); c.super.m() ==> AME (invokespecial MR)
* a.test_Amethod_ISIMR(); j.super.m() ==> AME (invokespecial IMR)
*
* For ver > 49, error will be AME
* For ver = 49, error will be VE
*/
@NotApplicableFor(modes = { REDEFINITION }) // Can't redefine a class that gets error during loading
public void testReabstractResolveMethod00705m2() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.abstractMethod("m", "()I").build()
.build();
ConcreteClass A = b.clazz("A").implement(J,I)
.concreteMethod("test_Amethod_ISIMR", "()V")
.invoke(SPECIAL, b.clazzByName("J"), b.clazzByName("A"),
"m", "()I", INTERFACEMETHODREF)
.build()
.build();
ConcreteClass C = b.clazz("C").extend(A)
.concreteMethod("test_Cmethod_ISMR", "()V")
.invoke(SPECIAL, b.clazzByName("C"), b.clazzByName("C"),
"m", "()I", CALLSITE)
.build()
.build();
Class expectedError1, expectedError2;
if (factory.getVer() >=52) {
expectedError1 = expectedError2 = AbstractMethodError.class;
} else {
expectedError1 = expectedError2 = VerifyError.class;
}
b.test().callSite(A, C, "m", "()I")
.throws_(expectedError2)
.done()
.test().callSite(C, C, "m", "()I")
.throws_(expectedError2)
.done()
.test().callSite(J, C, "m", "()I")
.throws_(expectedError1)
.done()
.test().callSite(I, C, "m", "()I")
.throws_(expectedError1)
.done()
.test().callSite(C, C, "test_Cmethod_ISMR", "()V")
.throws_(expectedError2)
.done()
.test().callSite(A, C, "test_Amethod_ISIMR", "()V")
.throws_(expectedError2)
.done()
.run();
}
/*
* Shadow
*
* interface I { int m() default { return 1; } }
* interface J extends I { int m() default { return 2; } }
* class C implements J {}
*
* TEST: [I|J|C] c = new C(); c.m() == 2;
*/
public void testShadow() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
b.test().callSite(I, C, "m","()I")
.returns(2)
.done()
.test()
.callSite(J, C, "m","()I")
.returns(2)
.done()
.test()
.callSite(C, C, "m","()I")
.returns(2)
.done()
.run();
}
/*
* Disqualified
*
* interface I { int m() default { return 1; } }
* interface J extends I { int m() default { return 2; } }
* class C implements I, J {}
*
* TEST: [I|J|C] c = new C(); c.m() == 2;
*/
public void testDisqualified() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(I,J).build();
b.test()
.callSite(I, C, "m","()I")
.returns(2)
.done()
.test()
.callSite(J, C, "m","()I")
.returns(2)
.done()
.test()
.callSite(C, C, "m","()I")
.returns(2)
.done()
.run();
}
/*
* Mixed arity
*
* interface I { int m() default { return 1; } }
* interface J { int m(int i) default { return 2; } }
* class C implements I, J {}
*
* TEST: I i = new C(); i.m() == 1; i.m(0) ==> NSME
* TEST: J j = new C(); j.m() ==> NSME; j.m(0) == 2
* TEST: C c = new C(); c.m() == 1; c.m(0) == 2
*/
@KnownFailure(modes = { INVOKE_EXACT, INVOKE_GENERIC, INDY }) // IncompatibleClassChangeError instead of NoSuchMethodError
public void testMixedArity1() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "(I)I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(I,J).build();
// I i = new C(); ...
b.test()
.callSite(I, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(I, C, "m","(I)I")
.params(0)
.throws_(NoSuchMethodError.class)
.done()
// J j = new C(); ...
.test()
.callSite(J, C, "m","()I")
.throws_(NoSuchMethodError.class)
.done()
.test()
.callSite(J, C, "m","(I)I")
.params(0)
.returns(2)
.done()
// C c = new C(); ...
.test()
.callSite(C, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(C, C, "m","(I)I")
.params(0)
.returns(2)
.done()
.run();
}
/*
* Mixed arity
*
* interface I { int m() default { return 1; } }
* interface J { int m() default { return 2; } }
* class C implements I, J { int m(int i) { return 3; }}
*
* TEST: I i = new C(); i.m() ==> ICCE
* TEST: J j = new C(); j.m() ==> ICCE
* TEST: C c = new C(); c.m() ==> ICCE; c.m(0) == 3
*/
public void testMixedArity2() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(I,J)
.concreteMethod("m", "(I)I").returns(3).build()
.build();
// I i = new C(); ...
b.test()
.callSite(I, C, "m","()I")
.throws_(IncompatibleClassChangeError.class)
.done()
// J j = new C(); ...
.test()
.callSite(J, C, "m","()I")
.throws_(IncompatibleClassChangeError.class)
.done()
// C c = new C(); ...
.test()
.callSite(C, C, "m","()I")
.throws_(IncompatibleClassChangeError.class)
.done()
.test()
.callSite(C, C, "m","(I)I")
.params(0)
.returns(3)
.done()
.run();
}
}

View File

@ -0,0 +1,526 @@
/*
* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package vm.runtime.defmeth;
import nsk.share.test.TestBase;
import vm.runtime.defmeth.shared.DefMethTest;
import vm.runtime.defmeth.shared.annotation.KnownFailure;
import vm.runtime.defmeth.shared.data.*;
import vm.runtime.defmeth.shared.data.method.param.NewInstanceParam;
import vm.runtime.defmeth.shared.builder.TestBuilder;
import static vm.runtime.defmeth.shared.ExecutionMode.*;
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.Invoke.*;
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.IndexbyteOp.*;
/**
* Tests on interaction of default methods with abstract methods
*
* The rule: "the superclass always wins."
*
* In searching the superclass hierarchy, a declaration in a superclass is
* preferred to a default in an interface. This preference includes abstract
* methods in superclasses as well; the defaults are only considered when
* the entire implementation hierarchy is silent on the status of the method
* in question.
*/
public class DefaultVsAbstractTest extends DefMethTest {
public static void main(String[] args) {
TestBase.runTest(new DefaultVsAbstractTest(), args);
}
/*
* interface I { public int m() default { return 1; } }
* class C implements I { public abstract int m(); }
*
* TEST: new C() throws InstantiationError
*/
public void test0() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.abstractMethod("m", "()I").build()
.build();
b.test()
.callSite(I, C, "m", "()I")
.throws_(InstantiationError.class)
.done()
.run();
}
/*
* interface I {
* public int m() default { return 1; }
* }
* class C implements I {
* public abstract int m();
* }
* class D extends C {}
*
* TEST: I i = new D(); i.m() ==> AME
* TEST: C c = new D(); c.m() ==> AME
* TEST: D d = new D(); d.m() ==> AME
*/
@KnownFailure(modes = {INVOKE_EXACT, INVOKE_GENERIC, INVOKE_WITH_ARGS, INDY }) // Test1_I_D_m: NPE instead of AME
// Test3_D_D_m: AME => IAE => ICCE instead of AME
public void test1() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.abstractMethod("m", "()I").build()
.build();
ConcreteClass D = b.clazz("D").extend(C).build();
b.test()
.callSite(I, D, "m", "()I")
.throws_(AbstractMethodError.class)
.done()
.test()
.callSite(C, D, "m", "()I")
.throws_(AbstractMethodError.class)
.done()
.test()
.callSite(D, D, "m", "()I")
.throws_(AbstractMethodError.class)
.done()
.run();
}
/*
* interface I {
* default public int m() { return 1; }
* }
* class C {
* abstract public int m();
* }
* class D extends C implements I {}
*
* TEST: I o = new D(); o.m()I throws AME
* TEST: C o = new D(); o.m()I throws AME
* TEST: D o = new D(); o.m()I throws AME
*/
@KnownFailure(modes = { INVOKE_EXACT, INVOKE_GENERIC, INVOKE_WITH_ARGS, INDY }) // Test1_I_D_m: NPE instead of AME
// Test3_D_D_m: AME => IAE => ICCE instead of AME
public void test2() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass C = b.clazz("C")
.abstractMethod("m", "()I").build()
.build();
ConcreteClass D = b.clazz("D").extend(C).implement(I).build();
b.test()
.callSite(I, D, "m", "()I")
.throws_(AbstractMethodError.class)
.done()
.test()
.callSite(C, D, "m", "()I")
.throws_(AbstractMethodError.class)
.done()
.test()
.callSite(D, D, "m", "()I")
.throws_(AbstractMethodError.class)
.done()
.run();
}
/*
* interface I {
* default public int m() { return 1; }
* }
* class C {
* abstract public int m();
* }
* class D extends C implements I {
* public int m() { return 2; }
* }
*
* TEST: I o = new D(); o.m()I == 2
* TEST: C o = new D(); o.m()I == 2
* TEST: D o = new D(); o.m()I == 2
*/
public void test3() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass C = b.clazz("C")
.abstractMethod("m", "()I").build()
.build();
ConcreteClass D = b.clazz("D").extend(C).implement(I)
.concreteMethod("m", "()I").returns(2)
.build()
.build();
b.test() // I i = new D(); ...
.callSite(I, D, "m", "()I").returns(2)
.done()
.test() // C c = new D(); ...
.callSite(C, D, "m", "()I").returns(2)
.done()
.test() // D d = new C(); ...
.callSite(D, D, "m", "()I").returns(2)
.done()
.run();
}
/*
* interface I {
* default public int m() { return 1; }
* }
* class E {
* abstract public int m();
* }
* class D extends E {}
* class C extends D implements I {}
*
* TEST: I o = new C(); o.m()I throws AME
* TEST: E o = new C(); o.m()I throws AME
* TEST: D o = new C(); o.m()I throws AME
* TEST: C o = new C(); o.m()I throws AME
*/
@KnownFailure(modes = {
INVOKE_EXACT, INVOKE_GENERIC, INVOKE_WITH_ARGS, INDY // Test1_I_C_m: NPE instead of AME
// Test3_D_C_m: AME => IAE => ICCE instead of AME
// Test4_C_C_m: AME => IAE => ICCE instead of AME
})
public void test4() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass E = b.clazz("E")
.abstractMethod("m", "()I").build()
.build();
ConcreteClass D = b.clazz("D").extend(E).build();
ConcreteClass C = b.clazz("C").extend(D).implement(I).build();
b.test() // I i = new C(); ...
.callSite(I, C, "m", "()I")
.throws_(AbstractMethodError.class)
.done()
.test() // E e = new C(); ...
.callSite(E, C, "m", "()I")
.throws_(AbstractMethodError.class)
.done()
.test() // D d = new C(); ...
.callSite(D, C, "m", "()I")
.throws_(AbstractMethodError.class)
.done()
.test() // C c = new C(); ...
.callSite(C, C, "m", "()I")
.throws_(AbstractMethodError.class)
.done()
.run();
}
/*
* interface I {
* default public int m() { return 1; }
* }
* class E {
* abstract public int m();
* }
* class D extends E {
* public int m() { return 2; }
* }
* class C extends D implements I {}
*
* TEST: I o = new C(); o.m()I == 2
* TEST: I o = new C(); o.m()I == 2
* TEST: I o = new C(); o.m()I == 2
* TEST: I o = new C(); o.m()I == 2
*/
public void test5() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass E = b.clazz("E")
.abstractMethod("m", "()I").build()
.build();
ConcreteClass D = b.clazz("D").extend(E)
.concreteMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").extend(D).implement(I).build();
b.test() // I i = new C(); ...
.callSite(I, C, "m", "()I")
.returns(2)
.done()
.test() // E e = new C(); ...
.callSite(I, C, "m", "()I")
.returns(2)
.done()
.test() // D d = new C(); ...
.callSite(I, C, "m", "()I")
.returns(2)
.done()
.test() // C c = new C(); ...
.callSite(I, C, "m", "()I")
.returns(2)
.done()
.run();
}
/*
* interface I {
* default public int m() { return 1; }
* }
* interface J {
* default public int m() { return 2; }
* }
* class E {
* abstract public int m();
* }
* class D extends E {
* public int m() { return 3; }
* }
* class C extends D implements I, J {}
*
* TEST: I o = new C(); o.m()I == 3
* TEST: J o = new C(); o.m()I == 3
* TEST: E o = new C(); o.m()I == 3
* TEST: D o = new C(); o.m()I == 3
* TEST: J o = new C(); o.m()I == 3
*/
public void test6() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
ConcreteClass E = b.clazz("E")
.abstractMethod("m", "()I").build()
.build();
ConcreteClass D = b.clazz("D").extend(E)
.concreteMethod("m", "()I").returns(3).build()
.build();
ConcreteClass C = b.clazz("C").extend(D).implement(I, J).build();
b.test() // I i = new C(); ...
.callSite(I, C, "m", "()I").returns(3)
.done()
.test() // J j = new C(); ...
.callSite(J, C, "m", "()I").returns(3)
.done()
.test() // E e = new C(); ...
.callSite(E, C, "m", "()I").returns(3)
.done()
.test() // D d = new C(); ...
.callSite(D, C, "m", "()I").returns(3)
.done()
.test() // C c = new C(); ...
.callSite(J, C, "m", "()I").returns(3)
.done()
.run();
}
/*
* interface I {
* abstract public int m();
* }
*
* interface J {
* default public int m() { return 1; }
* }
*
* class A implements I;
*
* class B extends A implements J;
*
* TEST: A o = new B(); o.m()I
* returns 1 for REFLECTION and INVOKE_WITH_ARGS
* ICCE for other modes
*/
public void testInvokeInterfaceClassDefaultMethod() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.abstractMethod("m", "()I").build()
.build();
Interface J = b.intf("J")
.extend(I)
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass A = b.clazz("A").implement(I).build();
ConcreteClass B = b.clazz("B").extend(A).implement(J).build();
String exeMode = factory.getExecutionMode();
// the test passes in the reflection mode because there's no way to
// express invokeinterface on a class using Reflection API
// In the test generator, vm.runtime.defmeth.shared.executor.ReflectionTest,
// the invokeinterface is switched to invokevirtual.
//
// the test passes in the INVOKE_WITH_ARGS mode due to the fix for
// JDK-8032010 to conform with the removal of the following check
// during method resolution in JVMS-5.4.3.3 Method Resolution
// "If method lookup succeeds and the method is abstract, but C is not
// abstract, method resolution throws an AbstractMethodError."
if (exeMode.equals("REFLECTION") ||
exeMode.equals("INVOKE_WITH_ARGS")) {
b.test().interfaceCallSite(A, B, "m", "()I")
.returns(1).done()
.run();
} else {
// ICCE in other modes due to
// JVMS-5.4.3.4. Interface Method Resolution
// When resolving an interface method reference:
// If C is not an interface, interface method resolution throws an IncompatibleClassChangeError.
b.test().interfaceCallSite(A, B, "m", "()I")
.throws_(IncompatibleClassChangeError.class).done()
.run();
}
}
/*
* interface I {
* abstract public int m();
* }
*
* interface J {
* abstract public int m();
* }
*
* class A implements I;
*
* class B extends A implements J;
*
* TEST: A o = new B(); o.m()I
* ICCE for DIRECT mode
* AME for REFLECTION and INVOKE_WITH_ARGS modes
* IAE for other modes
*/
public void testInvokeInterfaceClassAbstractMethod() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.abstractMethod("m", "()I").build()
.build();
Interface J = b.intf("J")
.abstractMethod("m", "()I").build()
.build();
ConcreteClass A = b.clazz("A").implement(I).build();
ConcreteClass B = b.clazz("B").extend(A).implement(J).build();
String exeMode = factory.getExecutionMode();
// ICCE in direct mode due to
// JVMS-5.4.3.4. Interface Method Resolution
// When resolving an interface method reference:
// If C is not an interface, interface method resolution throws an IncompatibleClassChangeError.
Class expectedError = IncompatibleClassChangeError.class;;
b.test().interfaceCallSite(A, B, "m", "()I")
.throws_(expectedError).done()
.run();
}
/*
* interface I {
* public int m() default { return 1; }
* }
*
* interface J {
* public int m() default { return 1; }
* }
*
* class A implements I;
*
* class B extends A implements J;
*
* TEST: A o = new B(); o.m()I
* ICCE for all modes
*/
public void testInvokeInterfaceMultipleDefinedClassDefaultMethod() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass A = b.clazz("A").implement(I).build();
ConcreteClass B = b.clazz("B").extend(A).implement(J).build();
String exeMode = factory.getExecutionMode();
// ICCE in direct mode due to
// JVMS-5.4.3.4. Interface Method Resolution
// When resolving an interface method reference:
// If C is not an interface, interface method resolution throws an IncompatibleClassChangeError.
Class expectedError = IncompatibleClassChangeError.class;
b.test().interfaceCallSite(A, B, "m", "()I")
.throws_(expectedError).done()
.run();
}
}

View File

@ -0,0 +1,904 @@
/*
* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package vm.runtime.defmeth;
import nsk.share.test.TestBase;
import vm.runtime.defmeth.shared.annotation.KnownFailure;
import vm.runtime.defmeth.shared.data.*;
import vm.runtime.defmeth.shared.data.method.param.*;
import static jdk.internal.org.objectweb.asm.Opcodes.*;
import vm.runtime.defmeth.shared.DefMethTest;
import vm.runtime.defmeth.shared.builder.TestBuilder;
import static vm.runtime.defmeth.shared.ExecutionMode.*;
/**
* Tests on method resolution in presence of default methods in the hierarchy.
*
* Because default methods reside in interfaces, and interfaces do not have
* the constraint of being single-inheritance, it is possible to inherit
* multiple conflicting default methods, or even inherit the same default method
* from many different inheritance paths.
*
* There is an algorithm to select which method to use in the case that a
* concrete class does not provide an implementation. Informally, the algorithm
* works as follows:
*
* (1) If there is a adequate implementation in the class itself or in a
* superclass (not an interface), then that implementation should be used
* (i.e., class methods always "win").
*
* (2) Failing that, create the set of methods consisting of all methods in the
* type hierarchy which satisfy the slot to be filled, where in this case
* 'satisfy' means that the methods have the same name, the same language-
* level representation of the parameters, and covariant return values. Both
* default methods and abstract methods will be part of this set.
*
* (3) Remove from this set, any method which has a "more specific" version
* anywhere in the hierarchy. That is, if C implements I,J and I extends J,
* then if both I and J have a suitable methods, J's method is eliminated
* from the set since I is a subtype of J -- there exist a more specific
* method than J's method, so that is eliminated.
*
* (4) If the remaining set contains only a single entry, then that method is
* selected. Note that the method may be abstract, in which case an
* IncompatibleClassChangeError is thrown when/if the method is called. If there are
* multiple entries in the set, or no entries, then this also results in an
* IncompatibleClassChangeError when called.
*/
public class MethodResolutionTest extends DefMethTest {
public static void main(String[] args) {
TestBase.runTest(new MethodResolutionTest(), args);
}
/*
* Basic
*
* interface I { int m(); }
* class C implements I { public int m() { return 1; } }
*
* TEST: C c = new C(); c.m() == 1;
* TEST: I i = new C(); i.m() == 1;
*/
public void testBasic() {
TestBuilder b = factory.getBuilder();
Interface I =
b.intf("I")
.abstractMethod("m", "()I").build()
.build();
ConcreteClass C =
b.clazz("C").implement(I)
.concreteMethod("m", "()I").returns(1).build()
.build();
b.test()
.callSite(I, C, "m", "()I")
.returns(1)
.done()
.test()
.callSite(C, C, "m", "()I")
.returns(1)
.done()
.run();
}
/*
* Basic Default
*
* interface I { int m() default { return 1; } }
* class C implements I {}
*
* TEST: C c = new C(); c.m() == 1;
* TEST: I i = new C(); i.m() == 1;
*/
public void testBasicDefault() {
TestBuilder b = factory.getBuilder();
Interface I =
b.intf("I")
.defaultMethod("m", "()I").returns(1)
.build()
.build();
ConcreteClass C =
b.clazz("C").implement(I)
.build();
b.test()
.callSite(I, C, "m", "()I")
.returns(1)
.done()
.test().callSite(C, C, "m", "()I")
.returns(1)
.done()
.run();
}
/*
* Far Default
*
* interface I { int m() default { return 1; } }
* interface J extends I {}
* interface K extends J {}
* class C implements K {}
*
* TEST: [I|J|K|C] i = new C(); i.m() == 1;
*/
@KnownFailure(modes = { INVOKE_EXACT, INVOKE_GENERIC, INVOKE_WITH_ARGS, INDY }) // Test2_J_C_m, Test3_K_C_m: AME => IAE => ICCE instead of successful call
public void testFarDefault() {
TestBuilder b = factory.getBuilder();
Interface I =
b.intf("I")
.defaultMethod("m", "()I").returns(1)
.build()
.build();
Interface J = b.intf("J").extend(I).build();
Interface K = b.intf("K").extend(J).build();
ConcreteClass C =
b.clazz("C").implement(K)
.build();
b.test()
.callSite(I, C, "m", "()I")
.returns(1)
.done()
.test().callSite(J, C, "m", "()I")
.returns(1)
.done()
.test().callSite(K, C, "m", "()I")
.returns(1)
.done()
.test().callSite(C, C, "m", "()I")
.returns(1)
.done()
.run();
}
/*
* Override Abstract
*
* interface I { int m(); }
* interface J extends I { int m() default { return 1; } }
* interface K extends J {}
* class C implements K {}
*
* TEST: C c = new C(); c.m() == 1;
* TEST: K k = new C(); k.m() == 1;
*/
@KnownFailure(modes = { INVOKE_EXACT, INVOKE_GENERIC, INVOKE_WITH_ARGS, INDY }) // Test3_K_C_m: AME => IAE => ICCE instead of successful call
public void testOverrideAbstract() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.abstractMethod("m", "()I").build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface K = b.intf("K").extend(J).build();
ConcreteClass C = b.clazz("C").implement(K).build();
b.test()
.callSite(I, C, "m", "()I")
.returns(1)
.done()
.test()
.callSite(J, C, "m", "()I")
.returns(1)
.done()
.test()
.callSite(K, C, "m", "()I")
.returns(1)
.done()
.test()
.callSite(C, C, "m", "()I")
.returns(1)
.done()
.run();
}
/*
* Default vs Concrete
*
* interface I { int m() default { return 1; } }
* class C implements I { public int m() { return 2; } }
*
* TEST: [C|I] c = new C(); c.m() == 2;
*/
public void testDefaultVsConcrete() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.concreteMethod("m", "()I").returns(2).build()
.build();
b.test()
.callSite(I, C, "m", "()I")
.returns(2)
.done()
.test()
.callSite(C, C, "m", "()I")
.returns(2)
.done()
.run();
}
/*
* InheritedDefault
*
* interface I { int m() default { return 1; } }
* class B implements I {}
* class C extends B {}
*
* TEST: [I|B|C] v = new C(); v.m() == 1;
*/
public void testInheritedDefault() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass B = b.clazz("B").implement(I).build();
ConcreteClass C = b.clazz("C").extend(B).build();
b.test()
.callSite(I, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(B, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(C, C, "m","()I")
.returns(1)
.done()
.run();
}
/*
* ExistingInherited
*
* interface I { int m() default { return 1; } }
* class B { public int m() { return 2; } }
* class C extends B implements I {}
*
* TEST: [I|B|C] v = new C(); v.m() == 2;
*/
public void testExistingInherited() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass B = b.clazz("B")
.concreteMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").extend(B).implement(I).build();
b.test()
.callSite(I, C, "m","()I")
.returns(2)
.done()
.test()
.callSite(B, C, "m","()I")
.returns(2)
.done()
.test()
.callSite(C, C, "m","()I")
.returns(2)
.done()
.run();
}
/*
* ExistingInheritedOverride
*
* interface I { int m() default { return 1; } }
* class B implements I { public int m() { return 2; } }
* class C extends B { public int m() { return 3; } }
*
* TEST: [I|B|D] v = new C(); v.m() == 3;
*/
public void testExistingInheritedOverride() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass B = b.clazz("B").implement(I)
.concreteMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").extend(B)
.concreteMethod("m", "()I").returns(3).build()
.build();
b.test()
.callSite(I, C, "m","()I")
.returns(3)
.done()
.test()
.callSite(B, C, "m","()I")
.returns(3)
.done()
.test()
.callSite(C, C, "m","()I")
.returns(3)
.done()
.run();
}
/*
* ExistingInheritedPlusDefault
*
* interface I { int m() default { return 11; } }
* interface J { int m() default { return 12; } }
* class C implements I { public int m() { return 21; } }
* class D extends C { public int m() { return 22; } }
* class E extends D implements J {}
*
* TEST: [I|J|C|D|J] v = new E(); v.m() == 22;
*/
public void testExistingInheritedPlusDefault() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(11).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(12).build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.concreteMethod("m","()I").returns(21).build()
.build();
ConcreteClass D = b.clazz("D").extend(C)
.concreteMethod("m", "()I").returns(22).build()
.build();
ConcreteClass E = b.clazz("E").extend(D).implement(J)
.build();
b.test()
.callSite(I, E, "m","()I")
.returns(22)
.done()
.test()
.callSite(J, E, "m","()I")
.returns(22)
.done()
.test()
.callSite(C, E, "m","()I")
.returns(22)
.done()
.test()
.callSite(D, E, "m","()I")
.returns(22)
.done()
.test()
.callSite(E, E, "m","()I")
.returns(22)
.done()
.run();
}
/*
* InheritedWithConcrete
*
* interface I { int m() default { return 1; } }
* class B implements I {}
* class C extends B { public int m() { return 2; } }
*
* TEST: [I|B|C] v = new C(); v.m() == 2;
*/
public void testInheritedWithConcrete() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass B = b.clazz("B").implement(I).build();
ConcreteClass C = b.clazz("C").extend(B)
.concreteMethod("m", "()I").returns(2).build()
.build();
b.test()
.callSite(I, C, "m","()I")
.returns(2)
.done()
.test()
.callSite(B, C, "m","()I")
.returns(2)
.done()
.test()
.callSite(C, C, "m","()I")
.returns(2)
.done()
.run();
}
/*
* InheritedWithConcreteAndImpl
*
* interface I { int m() default { return 1; } }
* class B implements I {}
* class C extends B implements I { public int m() { return 2; } }
*
* TEST: [I|B|C] v = new C(); v.m() == 2;
*/
public void testInheritedWithConcreteAndImpl() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass B = b.clazz("B").implement(I).build();
ConcreteClass C = b.clazz("C").extend(B)
.concreteMethod("m", "()I").returns(2).build()
.build();
b.test()
.callSite(I, C, "m","()I")
.returns(2)
.done()
.test()
.callSite(B, C, "m","()I")
.returns(2)
.done()
.test()
.callSite(C, C, "m","()I")
.returns(2)
.done()
.run();
}
/*
* Diamond
*
* interface I { int m() default { return 1; } }
* interface J extends I {}
* interface K extends I {}
* class C implements J, K {}
*
* TEST: [I|J|K|C] c = new C(); c.m() == 99
*/
@KnownFailure(modes = { INVOKE_EXACT, INVOKE_GENERIC, INVOKE_WITH_ARGS, INDY }) // Test2_J_C_m, Test3_K_C_m: AME => IAE => ICCE instead of successful call
public void testDiamond() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I).build();
Interface K = b.intf("K").extend(I).build();
ConcreteClass C = b.clazz("C").implement(J,K)
.build();
b.test()
.callSite(I, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(J, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(K, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(C, C, "m","()I")
.returns(1)
.done()
.run();
}
/*
* ExpandedDiamond
*
* interface I { int m() default { return 1; } }
* interface J extends I {}
* interface K extends I {}
* interface L extends I {}
* interface M extends I {}
* class C implements J, K, L, M {}
*
* TEST: [I|J|K|L|M|C] c = new C(); c.m() == 1
*/
@KnownFailure(modes = { INVOKE_EXACT, INVOKE_GENERIC, INVOKE_WITH_ARGS, INDY }) // Test2_J_C_m, Test3_K_C_m, Test4_L_C_m, Test5_M_C_m:
// AME => IAE => ICCE instead of successful call
public void testExpandedDiamond() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I).build();
Interface K = b.intf("K").extend(I).build();
Interface L = b.intf("L").extend(I).build();
Interface M = b.intf("M").extend(I).build();
ConcreteClass C = b.clazz("C").implement(J,K,L,M)
.build();
b.test()
.callSite(I, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(J, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(K, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(L, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(M, C, "m","()I")
.returns(1)
.done()
.test()
.callSite(C, C, "m","()I")
.returns(1)
.done()
.run();
}
/*
* SelfFill w/ explicit bridge
*
* interface I<T> { int m(T t) default { return 1; } }
* class C implements I<C> {
* public int m(C s) { return 2; }
* public int m(Object o) { ... }
* }
*
* TEST: I i = new C(); i.m((Object)null) == 2;
* TEST: C c = new C(); c.m((Object)null) == 2;
* TEST: C c = new C(); c.m((C)null) == 2;
*/
public void testSelfFillWithExplicitBridge() {
TestBuilder b = factory.getBuilder();
/* interface I<T> { ... */
Interface I = b.intf("I").sig("<T:Ljava/lang/Object;>Ljava/lang/Object;")
/* default int m(T t) { return 1; } */
.defaultMethod("m", "(Ljava/lang/Object;)I")
.sig("(TT;)I")
.returns(1)
.build()
.build();
/* class C implements I<C> { ... */
ConcreteClass C = b.clazz("C").implement(I)
.sig("Ljava/lang/Object;LI<LC;>;")
/* public int m(I i) { return 2; } */
.concreteMethod("m","(LC;)I").returns(2).build()
/* bridge method for m(LI;)I */
.concreteMethod("m","(Ljava/lang/Object;)I")
.flags(ACC_PUBLIC | ACC_BRIDGE | ACC_SYNTHETIC)
.returns(2)
.build()
.build();
// I i = new C(); ...
b.test()
.callSite(I, C, "m", "(Ljava/lang/Object;)I")
.params(new NullParam())
.returns(2)
.done()
// C c = new C(); ...
.test()
.callSite(C, C, "m", "(Ljava/lang/Object;)I")
.params(new NullParam())
.returns(2)
.done()
.test()
.callSite(C, C, "m", "(LC;)I")
.params(new NullParam())
.returns(2)
.done()
.run();
}
/*
* interface I { int m() default { return 1; } }
* class C implements I { int m(int i) { return 2; } }
*
* TEST: C c = new C(); c.m(0) == 2;
* TEST: I i = new C(); i.m() == 1;
*/
public void testMixedArity() {
TestBuilder b = factory.getBuilder();
Interface I =
b.intf("I")
.defaultMethod("m", "()I").returns(1)
.build()
.build();
ConcreteClass C =
b.clazz("C").implement(I)
.concreteMethod("m", "(I)I").returns(2)
.build()
.build();
b.test().callSite(I, C, "m", "()I")
.returns(1)
.build();
b.test().callSite(C, C, "m", "(I)I").params(ICONST_0)
.returns(2)
.build();
b.run();
}
/*
* interface I { int m() default { return 1; } }
* interface J { int m(int i) default { return 2; } }
* class C implements I, J {}
*
* TEST: I i = new C(); i.m() == 1; i.m(0) ==> NSME
* TEST: J j = new C(); j.m() ==> NSME; j.m(0) == 2
* TEST: C c = new C(); c.m() == 1; c.m(0) == 2
*/
@KnownFailure(modes = { INVOKE_EXACT, INVOKE_GENERIC, INDY }) //Test2_I_C_m, Test3_J_C_m: NSMError => NSMException => ICCE instead of NSME
public void testConflictingDefaultMixedArity1() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1)
.build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "(I)I").returns(2)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I,J).build();
// I i = new C(); ...
b.test().callSite(I, C, "m", "()I")
.returns(1)
.build();
b.test().callSite(I, C, "m", "(I)I").params(ICONST_0)
.throws_(NoSuchMethodError.class)
.build();
// J j = new C(); ...
b.test().callSite(J, C, "m", "()I")
.throws_(NoSuchMethodError.class)
.build();
b.test().callSite(J, C, "m", "(I)I").params(ICONST_0)
.returns(2)
.build();
// C c = new C(); ...
b.test().callSite(C, C, "m", "()I")
.returns(1)
.build();
b.test().callSite(C, C, "m", "(I)I").params(ICONST_0)
.returns(2)
.build();
b.run();
}
/*
* interface I { int m() default { return 1; } }
* interface J { int m() default { return 2; } }
* class C implements I, J {
* int m(int i) { return 3; }
* }
*
* TEST: I i = new C(); i.m(0) ==> ICCE
* TEST: J j = new C(); j.m(0) ==> ICCE
* TEST: C c = new C(); c.m() ==> ICCE; c.m(0) == 3
*/
@KnownFailure(modes = { INVOKE_EXACT, INVOKE_GENERIC, INDY })
//Test2_I_C_m, Test3_J_C_m: NSMError => NSMException => ICCE instead of NSME
public void testConflictingDefaultMixedArity2() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1)
.build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I, J)
.concreteMethod("m", "(I)I").returns(3)
.build()
.build();
// I i = new C(); ...
b.test().callSite(I, C, "m", "()I")
.throws_(IncompatibleClassChangeError.class)
.build();
b.test().callSite(I, C, "m", "(I)I").params(ICONST_0)
.throws_(NoSuchMethodError.class)
.build();
// J j = new C(); ...
b.test().callSite(J, C, "m", "()I")
.throws_(IncompatibleClassChangeError.class)
.build();
b.test().callSite(J, C, "m", "(I)I").params(ICONST_0)
.throws_(NoSuchMethodError.class)
.build();
// C c = new C(); ...
b.test().callSite(C, C, "m", "()I")
.throws_(IncompatibleClassChangeError.class)
.build();
b.test().callSite(C, C, "m", "(I)I").params(ICONST_0)
.returns(3)
.build();
b.run();
}
/* In package1:
* package p1;
* interface I {
* default int m() { return 10; };
* }
* public interface J extends I {};
*
* In package2:
* class A implements p1.J {}
* A myA = new A;
* myA.m(); // should return 10 except for reflect mode,
* // throw IllegalAccessException with reflect mode
* B myB = new B; // not related
*/
public void testMethodResolvedInDifferentPackage() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("p1.I").flags(~ACC_PUBLIC & ACC_PUBLIC) // make it package private
.defaultMethod("m", "()I").returns(10)
.build()
.build();
Interface J = b.intf("p1.J").extend(I)
.build();
ConcreteClass myA = b.clazz("p2.A").implement(J)
.build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
b.test()
.callSite(myA, myA, "m", "()I")
.returns(10)
.done()
.run();
// -mode reflect will fail with IAE as expected
} else {
b.test()
.callSite(myA, myA, "m", "()I")
.throws_(IllegalAccessException.class)
.done()
.run();
}
ConcreteClass myB = b.clazz("p2.B").build();
}
/* In package p1:
* package p1;
* interface I {
* public default int m() { return 12; };
* }
*
* public class A implements I {}
*
* In package p2:
* package p2;
* public interface J { int m(); }
*
* public class B extends p1.A implements J {
* public int m() { return 13; }
* }
*
* Then:
* A myA = new B;
* myA.m(); // should return 13, not throw IllegalAccessError
*/
public void testMethodResolvedInLocalFirst() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("p1.I")
.defaultMethod("m", "()I").returns(12)
.build()
.build();
ConcreteClass myA = b.clazz("p1.A").implement(I)
.build();
Interface J = b.intf("p2.J").abstractMethod("m", "()I")
.build()
.build();
ConcreteClass myB = b.clazz("p2.B").extend(myA).implement(J)
.concreteMethod("m", "()I").returns(13)
.build()
.build();
b.test()
.callSite(myB, myB, "m", "()I")
.returns(13)
.done()
.run();
}
}

View File

@ -0,0 +1,246 @@
/*
* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package vm.runtime.defmeth;
import nsk.share.TestFailure;
import nsk.share.test.TestBase;
import vm.runtime.defmeth.shared.DefMethTest;
import vm.runtime.defmeth.shared.data.*;
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.Invoke.*;
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.IndexbyteOp.*;
import vm.runtime.defmeth.shared.data.method.body.*;
import vm.runtime.defmeth.shared.builder.TestBuilder;
/**
* Test that default methods don't override methods inherited from Object class.
*/
public class ObjectMethodOverridesTest extends DefMethTest {
public static void main(String[] args) {
TestBase.runTest(new ObjectMethodOverridesTest(), args);
}
/* protected Object clone() */
public void testClone() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("clone", "()Ljava/lang/Object;")
.throw_(TestFailure.class)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.concreteMethod("m", "()V")
// force an invokevirtual MR
.invoke(CallMethod.Invoke.VIRTUAL,
b.clazzByName("C"), b.clazzByName("C"),
"clone", "()Ljava/lang/Object;", METHODREF)
.build()
.build();
b.test().callSite(C, C, "m", "()V")
.throws_(CloneNotSupportedException.class)
.done()
.run();
}
/* boolean equals(Object obj) */
public void testEquals() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("equals", "(Ljava/lang/Object;)Z")
.throw_(TestFailure.class)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
ClassLoader cl = b.build();
Object c = cl.loadClass("C").newInstance();
c.equals(this);
}
/* void finalize() */
public void testFinalize() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("finalize", "()V")
.throw_(TestFailure.class)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.concreteMethod("m", "()V")
// force an invokevirtual MR
.invoke(CallMethod.Invoke.VIRTUAL,
b.clazzByName("C"), b.clazzByName("C"), "finalize", "()V", METHODREF)
.build()
.build();
b.test().callSite(C, C, "m", "()V")
.ignoreResult()
.done()
.run();
}
/* final Class<?> getClass() */
public void testGetClass() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("getClass", "()Ljava/lang/Class;")
.sig("()Ljava/lang/Class<*>;")
.throw_(TestFailure.class)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().loadClass(I).throws_(VerifyError.class).done()
.run();
}
/* int hashCode() */
public void testHashCode() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("hashCode", "()I")
.throw_(TestFailure.class)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
ClassLoader cl = b.build();
Object c = cl.loadClass("C").newInstance();
c.hashCode();
}
/* final void notify() */
public void testNotify() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("notify", "()V")
.throw_(TestFailure.class)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().loadClass(I).throws_(VerifyError.class).done()
.run();
}
/* void notifyAll() */
public void testNotifyAll() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("notifyAll", "()V")
.throw_(TestFailure.class)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().loadClass(I).throws_(VerifyError.class).done()
.run();
}
/* String toString() */
public void testToString() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("toString()", "()Ljava/lang/String;")
.throw_(TestFailure.class)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
ClassLoader cl = b.build();
Object c = cl.loadClass("C").newInstance();
c.toString();
}
/* final void wait() */
public void testWait() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("wait", "()V")
.throw_(TestFailure.class)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().loadClass(I).throws_(VerifyError.class).done()
.run();
}
/* final void wait(long timeout) */
public void testTimedWait() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("wait", "(J)V")
.throw_(TestFailure.class)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().loadClass(I).throws_(VerifyError.class).done()
.run();
}
/* final void wait(long timeout, int nanos) */
public void testTimedWait1() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("wait", "(JI)V")
.throw_(TestFailure.class)
.build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().loadClass(I).throws_(VerifyError.class).done()
.run();
}
}

View File

@ -0,0 +1,814 @@
/*
* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package vm.runtime.defmeth;
import nsk.share.test.TestBase;
import vm.runtime.defmeth.shared.DefMethTest;
import vm.runtime.defmeth.shared.annotation.Crash;
import vm.runtime.defmeth.shared.annotation.KnownFailure;
import vm.runtime.defmeth.shared.annotation.NotApplicableFor;
import vm.runtime.defmeth.shared.data.*;
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.Invoke.*;
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.IndexbyteOp.*;
import vm.runtime.defmeth.shared.builder.TestBuilder;
import static vm.runtime.defmeth.shared.ExecutionMode.*;
/**
* Scenarios on private methods in interfaces.
*/
public class PrivateMethodsTest extends DefMethTest {
public static void main(String[] args) {
TestBase.runTest(new PrivateMethodsTest(), args);
}
// invokevirtual & invokeinterface from same/subintf
// Spec change July 2013 to not allow invokevirtual or invokeinterface
// to even see an interface private method
// Throw ICCE if method resolution returns interface private method
/*
* testPrivateInvokeVirtual
*
* interface I {
* default private int privateM() { return 1; }
* default public int m() { return (I)this.privateM(); } // invokevirtual
* }
* class C implements I {}
*
* TEST: I o = new C(); o.m()I throws VerifyError
* TEST: C o = new C(); o.m()I throws VerifyError
*/
@NotApplicableFor(modes = { REDEFINITION }) // Can't redefine a class that gets error during loading
public void testPrivateInvokeVirtual() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("privateM", "()I")
.private_().returns(1).build()
// force an invokevirtual of an IMR to test verification code
.defaultMethod("m", "()I")
.invoke(VIRTUAL, b.intfByName("I"), null, "privateM", "()I", INTERFACEMETHODREF).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().callSite(I, C, "m", "()I").throws_(VerifyError.class).done()
.test().callSite(C, C, "m", "()I").throws_(VerifyError.class).done()
.run();
}
/*
* testPrivateInvokeIntf
*
* interface I {
* default private int privateM() { return 1; }
* default public int m() { return (I)this.privateM(); } // invokeinterface
* }
* class C implements I {}
*
* TEST: I o = new C(); o.m()I throws IncompatibleClassChangeError
* TEST: C o = new C(); o.m()I throws IncompatibleClassChangeError
*/
public void testPrivateInvokeIntf() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("privateM", "()I")
.private_().returns(1).build()
.defaultMethod("m", "()I")
.invoke(INTERFACE, b.intfByName("I"), null, "privateM", "()I", CALLSITE).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().callSite(I, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(C, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.run();
}
/*
* testPrivateInvokeStatic
*
* interface I {
* default private int privateM() { return 1; }
* default public int m() { return I.privateM(); } // invokestatic
* }
* class C implements I {}
*
* TEST: I o = new C(); o.m()I throws LinkageError
* TEST: C o = new C(); o.m()I throws LinkageError
*/
public void testPrivateInvokeStatic() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("privateM", "()I")
.private_().returns(1).build()
.defaultMethod("m", "()I")
.invoke(STATIC, b.intfByName("I"), null, "privateM", "()I", CALLSITE).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().callSite(I, C, "m", "()I").throws_(LinkageError.class).done()
.test().callSite(C, C, "m", "()I").throws_(LinkageError.class).done()
.run();
}
// call from another default method in the same interface
/*
* testPrivateCallSameClass
*
* interface I {
* default private privateM()I { return 1; }
* default public int m() { return I.super.privateM(); }
* }
* class C implements I {}
*
* TEST: { I o = new C(); o.m()I == 1; }
* TEST: { C o = new C(); o.m()I == 1; }
*/
public void testPrivateCallSameClass() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("privateM", "()I")
.private_().returns(1).build()
.defaultMethod("m", "()I")
.invokeSpecial(b.intfByName("I"), "privateM", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(C, C, "m", "()I").returns(1).done()
.run();
}
/*
* testPrivateCallSubIntf
*
* Attempt to call from subinterface fails
* interface I {
* default private privateM()I { return 1; }
* }
* J, K, L use invokespecial
* interface J extends I {
* default public int m() { return I.super.privateM(); }
* }
* interface K extends I {
* default public int m() { return K.super.privateM(); }
* }
* interface L extends J {
* default public int m() { return I.super.privateM(); }
* }
* class C implements J {}
* class D implements K {}
* class E implements L {}
*
* TEST: { J o = new C(); o.m()I throws IAE; }
* TEST: { C o = new C(); o.m()I throws IAE; }
* TEST: { K o = new D(); o.m()I throws NSME; } // does not see
* TEST: { D o = new D(); o.m()I throws NSME; }
* TEST: { L o = new E(); o.m()I throws VerifyError; } // VerifyError intfmethodref
* TEST: { E o = new E(); o.m()I throws VerifyError; }
*/
@NotApplicableFor(modes = { REDEFINITION }) // Can't redefine a class that gets error during loading
public void testPrivateCallSubIntf() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("privateM", "()I")
.private_().returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I")
.invokeSpecial(I, "privateM", "()I").build()
.build();
Interface K = b.intf("K").extend(J)
.defaultMethod("m", "()I")
.invokeSpecial(b.intfByName("K"), "privateM", "()I").build()
.build();
// L.privateM -> J -> L (I.privateM call)
Interface L = b.intf("L").extend(J)
.defaultMethod("m", "()I")
.invokeSpecial(I, "privateM", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
ConcreteClass D = b.clazz("D").implement(K).build();
ConcreteClass E = b.clazz("E").implement(L).build();
b.test().callSite(J, C, "m", "()I").throws_(IllegalAccessError.class).done()
.test().callSite(C, C, "m", "()I").throws_(IllegalAccessError.class).done()
.test().callSite(K, D, "m", "()I").throws_(NoSuchMethodError.class).done()
.test().callSite(D, D, "m", "()I").throws_(NoSuchMethodError.class).done()
.test().callSite(L, E, "m", "()I").throws_(VerifyError.class).done()
.test().callSite(E, E, "m", "()I").throws_(VerifyError.class).done()
.run();
}
/*
* Attempt to call from subclass fails
*
* interface I {
* default private privateM()I { return 1; }
* }
* class C implements I {
* public int m() { return I.super.privateM(); }
* }
* class D extends C {
* public int m() { return I.super.privateM(); }
* }
* class E extends C {
* public int m() { return C.super.privateM(); }
* }
*
* TEST: { C o = new C(); o.m()I throws LinkageError }
* TEST: { D o = new D(); o.m()I throws LinkageError }
* TEST: { E o = new E(); o.m()I throws NoSuchMethodError; }
*/
@NotApplicableFor(modes = { REDEFINITION }) // Can't redefine a class that gets error during loading
public void testPrivateCallImplClass() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("privateM", "()I")
.private_().returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.concreteMethod("m", "()I")
.invokeSpecial(I, "privateM", "()I").build()
.build();
ConcreteClass D = b.clazz("D").extend(C)
.concreteMethod("m", "()I")
.invokeSpecial(I, "privateM", "()I").build()
.build();
ConcreteClass E = b.clazz("E").extend(C)
.concreteMethod("m", "()I")
.invokeSpecial(C, "privateM", "()I").build()
.build();
Class eeExpectedClass;
if (factory.getVer() >= 52) {
eeExpectedClass = NoSuchMethodError.class;
} else {
// The test gets a VerifyError in this case due to an
// invokespecial IMR bytecode. This was not allowed
// until class file version 52. (See 8030249.)
eeExpectedClass = VerifyError.class;
}
b.test().callSite(C, C, "m", "()I").throws_(LinkageError.class).done()
.test().callSite(D, D, "m", "()I").throws_(LinkageError.class).done()
.test().callSite(E, E, "m", "()I").throws_(eeExpectedClass).done()
.run();
}
// doesn't participate in default method analysis
// method overriding
/*
* testPrivateDefault
*
* interface I {
* default private int m() { return 1; }
* }
* class C implements I {}
*
* TEST: { I o = new C(); o.m()I throws IllegalAccessError; }
* -mode reflect throws NoSuchMethodException
* TEST: { C o = new C(); o.m()I throws java/lang/NoSuchMethodError; }
*/
public void testPrivateDefault() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.private_().returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
Class expectedClass;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedClass = NoSuchMethodException.class;
} else {
expectedClass = IllegalAccessError.class;
}
b.test().callSite(I, C, "m", "()I").throws_(expectedClass).done()
.test().callSite(C, C, "m", "()I").throws_(NoSuchMethodError.class).done()
.run();
}
/*
* testPrivateDefaultVsConcrete
*
* interface I {
* default private int m() { return 1; }
* }
* class C implements I {
* public int m() { return 2; }
* }
*
* TEST: { I o = new C(); o.m()I == IllegalAccessError; }
* -mode reflect throws NoSuchMethodException
* TEST: { C o = new C(); o.m()I == 2; }
*/
public void testPrivateDefaultVsConcrete() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.private_().returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.concreteMethod("m", "()I").returns(2).build()
.build();
Class expectedClass;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedClass = NoSuchMethodException.class;
} else {
expectedClass = IllegalAccessError.class;
}
b.test().callSite(I, C, "m", "()I").throws_(expectedClass).done()
.test().callSite(C, C, "m", "()I").returns(2).done()
.run();
}
/*
* testPublicOverridePrivate
*
* interface I {
* default private int m() { return 1; }
* }
* interface J extends I {
* default public int m() { return 2; }
* }
* class C implements J {}
*
* TEST: { I o = new C(); o.m()I throws IllegalAccessError; }
* -mode reflect throws NoSuchMethodException
* TEST: { J o = new C(); o.m()I == 2; }
* TEST: { C o = new C(); o.m()I == 2; }
*/
public void testPublicOverridePrivate() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.private_().returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I")
.returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
Class expectedClass;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedClass = NoSuchMethodException.class;
} else {
expectedClass = IllegalAccessError.class;
}
b.test().callSite(I, C, "m", "()I").throws_(expectedClass).done()
.test().callSite(J, C, "m", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").returns(2).done()
.run();
}
/*
* testPrivateOverrideDefault
*
* interface I {
* default public int m() { return 1; }
* }
* interface J extends I {
* default private int m() { return 2; }
* }
* class C implements J {}
*
* TEST: { I o = new C(); o.m()I == 1; }
* TEST: { J o = new C(); o.m()I == IllegalAccessError; } II J.m priv
* TEST: { C o = new C(); o.m()I == 1; }
*/
/*
REFLECTION:
Test2_J_C_m : FAILED
nsk.share.TestFailure: Caught exception as expected, but its type is wrong:
expected: java.lang.IllegalAccessError;
actual: java.lang.NoSuchMethodException.
*/
public void testPrivateOverrideDefault() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I")
.private_().returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
b.test().callSite(I, C, "m", "()I").returns(1).done()
.test().privateCallSite(J, C, "m", "()I").throws_(IllegalAccessError.class).done()
.test().callSite(C, C, "m", "()I").returns(1).done()
.run();
}
/*
* testPrivateReabstract
*
* interface I {
* default private int m() { return 1; }
* }
* interface J extends I {
* abstract public int m();
* }
* class C implements J {}
*
* TEST: { I o = new C(); o.m()I throws IllegalAccessError; } II I.m
* -mode reflect throws NoSuchMethodException
* TEST: { J o = new C(); o.m()I throws java/lang/AbstractMethodError; }
* TEST: { C o = new C(); o.m()I throws java/lang/AbstractMethodError; }
*/
public void testPrivateReabstract() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.private_().returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.abstractMethod("m", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
Class expectedClass;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedClass = NoSuchMethodException.class;
} else {
expectedClass = IllegalAccessError.class;
}
b.test().callSite(I, C, "m", "()I").throws_(expectedClass).done()
.test().callSite(J, C, "m", "()I").throws_(AbstractMethodError.class).done()
.test().callSite(C, C, "m", "()I").throws_(AbstractMethodError.class).done()
.run();
}
/*
* testPrivateOverrideAbstract
*
* interface I {
* abstract public int m();
* }
* interface J extends I {
* default private int m() { return 1; }
* }
* class C implements J {}
*
* TEST: { I o = new C(); o.m()I throws AbstractMethodError }
* TEST: { J o = new C(); o.m()I throws IncompatibleClassChangeError }
* TEST: { C o = new C(); o.m()I throws AbstractMethodError }
*/
/*
REFLECTION:
Test1_I_C_m : FAILED
nsk.share.TestFailure: No exception was thrown: java.lang.AbstractMethodError
Test2_J_C_m : FAILED
nsk.share.TestFailure: No exception was thrown: java.lang.AbstractMethodError
Test3_C_C_m : FAILED
nsk.share.TestFailure: No exception was thrown: java.lang.AbstractMethodError
*/
public void testPrivateOverrideAbstract() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.abstractMethod("m", "()I").build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I")
.private_().returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
Class expectedClass;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedClass = IllegalAccessException.class;
} else {
expectedClass = IncompatibleClassChangeError.class;
}
b.test().callSite(I, C, "m", "()I").throws_(AbstractMethodError.class).done()
.test().privateCallSite(J, C, "m", "()I").throws_(expectedClass).done()
.test().callSite(C, C, "m", "()I").throws_(AbstractMethodError.class).done()
.run();
}
/*
* testPrivateInheritedDefault
*
* interface I {
* default private int m() { return 1; }
* }
* class B implements I {}
* class C extends B {}
*
* TEST: { I o = new C(); o.m()I throws IllegalAccessError } II I.m
* -mode reflect throws NoSuchMethodException
* TEST: { B o = new C(); o.m()I throws NoSuchMethodError }
* TEST: { C o = new C(); o.m()I throws NoSuchMethodError }
*/
public void testPrivateInheritedDefault() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.private_().returns(1).build()
.build();
ConcreteClass B = b.clazz("B").implement(I).build();
ConcreteClass C = b.clazz("C").extend(B).build();
Class expectedClass;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedClass = NoSuchMethodException.class;
} else {
expectedClass = IllegalAccessError.class;
}
b.test().callSite(I, C, "m","()I").throws_(expectedClass).done()
.test().callSite(B, C, "m","()I").throws_(NoSuchMethodError.class).done()
.test().callSite(C, C, "m","()I").throws_(NoSuchMethodError.class).done()
.run();
}
/*
* testPrivateDefaultVsConcreteInherited
*
* interface I {
* default private int m() { return 1; }
* }
* class B {
* public int m() { return 2; }
* }
* class C extends B implements I {}
*
* TEST: { I o = new C(); o.m()I == throws IllegalAccessError; }
* -mode reflect throws NoSuchMethodException
* TEST: { B o = new C(); o.m()I == 2; }
* TEST: { C o = new C(); o.m()I == 2; }
*/
public void testPrivateDefaultVsConcreteInherited() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.private_().returns(1).build()
.build();
ConcreteClass B = b.clazz("B")
.concreteMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").extend(B).implement(I).build();
Class expectedClass;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedClass = NoSuchMethodException.class;
} else {
expectedClass = IllegalAccessError.class;
}
b.test().callSite(I, C, "m","()I").throws_(expectedClass).done()
.test().callSite(B, C, "m","()I").returns(2).done()
.test().callSite(C, C, "m","()I").returns(2).done()
.run();
}
/*
* testPrivateConflict
*
* Conflicting default methods
*
* interface I {
* default private int m() { return 1; }
* }
* interface J {
* default public int m() { return 2; }
* }
* class C implements I, J {}
*
* TEST: { I o = new C(); o.m()I throws IllegalAccessError; }
* -mode reflect throws NoSuchMethodException
* TEST: { J o = new C(); o.m()I == 2; }
* TEST: { C o = new C(); o.m()I == 2; }
*/
public void testPrivateConflict() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").private_().returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(I,J).build();
Class expectedClass;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedClass = NoSuchMethodException.class;
} else {
expectedClass = IllegalAccessError.class;
}
b.test().callSite(I, C, "m", "()I").throws_(expectedClass).done()
.test().callSite(J, C, "m", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").returns(2).done()
.run();
}
/*
* testPrivateSuperClassMethodNoDefaultMethod
*
* interface I {
* public int m();
* }
*
* public class A {
* private int m() { return 1; }
* }
*
* public class B extends A implements I {}
*
* public class C extends B {
* public int m() { return 2; }
* }
*
* TEST: { B b = new C(); b.m()I throws IllegalAccessError; }
*/
public void testPrivateSuperClassMethodNoDefaultMethod() {
TestBuilder b = factory.getBuilder();
ConcreteClass A = b.clazz("A")
.concreteMethod("m", "()I").private_().returns(1).build()
.build();
Interface I = b.intf("I")
.abstractMethod("m", "()I").public_().build()
.build();
ConcreteClass B = b.clazz("B").extend(A).implement(I).build();
ConcreteClass C = b.clazz("C").extend(B)
.concreteMethod("m", "()I").public_().returns(2).build()
.build();
b.test().privateCallSite(B, C, "m", "()I").throws_(IllegalAccessError.class).done()
.run();
}
/*
* testPrivateSuperClassMethodDefaultMethod
*
* interface I {
* public default int m() { return 3; }
* }
*
* public class A {
* private int m() { return 1; }
* }
*
* public class B extends A implements I {}
*
* public class C extends B {
* public int m() { return 2; }
* }
*
* TEST: { B b = new C(); b.m()I throws IllegalAccessError; }
*/
public void testPrivateSuperClassMethodDefaultMethod() {
TestBuilder b = factory.getBuilder();
ConcreteClass A = b.clazz("A")
.concreteMethod("m", "()I").private_().returns(1).build()
.build();
Interface I = b.intf("I")
.defaultMethod("m", "()I").public_().returns(3).build()
.build();
ConcreteClass B = b.clazz("B").extend(A).implement(I).build();
ConcreteClass C = b.clazz("C").extend(B)
.concreteMethod("m", "()I").public_().returns(2).build()
.build();
b.test().privateCallSite(B, C, "m", "()I").throws_(IllegalAccessError.class).done()
.run();
}
/*
* testPrivateSuperClassMethodDefaultMethodNoOverride
*
* interface I {
* public default int m() { return 3; }
* }
*
* public class A {
* private int m() { return 1; }
* }
*
* public class B extends A implements I {}
*
* public class C extends B { }
*
* TEST: { B b = new C(); b.m()I throws IllegalAccessError; }
*/
public void testPrivateSuperClassMethodDefaultMethodNoOverride() {
TestBuilder b = factory.getBuilder();
ConcreteClass A = b.clazz("A")
.concreteMethod("m", "()I").private_().returns(1).build()
.build();
Interface I = b.intf("I")
.defaultMethod("m", "()I").public_().returns(3).build()
.build();
ConcreteClass B = b.clazz("B").extend(A).implement(I).build();
ConcreteClass C = b.clazz("C").extend(B).build();
b.test().privateCallSite(B, C, "m", "()I").throws_(IllegalAccessError.class).done()
.run();
}
}

View File

@ -0,0 +1,261 @@
Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 only, as
published by the Free Software Foundation.
This code is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
version 2 for more details (a copy is included in the LICENSE file that
accompanied this code).
You should have received a copy of the GNU General Public License version
2 along with this work; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
or visit www.oracle.com if you need additional information or have any
questions.
ABOUT
Once published, it is impossible to add methods to an interface without
breaking existing implementations (specifically, adding a method to an
interface is not a source-compatible change). The longer the time since a
library has been published, the more likely it is that this restriction will
cause grief for its maintainers.
The addition of closures to the Java language in JDK 8 place additional stress
on the aging Collection interfaces; one of the most significant benefits of
closures is that it enables the development of more powerful libraries. It
would be disappointing to add a language feature that enables better libraries
while at the same time not extending the core libraries to take advantage of
that feature.
A mechanism for adding new methods to existing interfaces is proposed, which is
called virtual extension (or default) methods. Existing interfaces can be
augmented without compromising backward compatibility by adding extension
methods to the interface, whose declaration would contain instructions for
finding the default implementation in the event that implementers do not
provide a method body. A key characteristic of extension methods is that they
are virtual methods just like other interface methods, but provide a default
implementation in the event that the implementing class does not provide a
method body.
VM support is necessary to implement virtual extension methods.
OVERVIEW
The test suite is organized in the following manner.
The tests rely on a framework to generate class hierarchies and tests
directly in bytecode from a pseudo-code in Java. Pseudo-code is written
using builder pattern and fluent coding style.
The framework is located in src/vm/runtime/defmeth/shared and divided into
/data and /builder sections.
As an example, the following code:
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.concreteMethod("m", "()I").returns(2).build()
.build();
b.test().callSite(I, C, "m", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").returns(2).done()
.run();
translates into bytecode equivalent of:
2-class hierarchy:
interface I {
int m() default { return 1; }
}
class C implements I {
public int m() { return 2; }
}
and 2 tests:
Test1_I_C_m {
static void test() {
I i = new C();
if (i.m() != 2) throw new TestFailure();
}
}
Test2_C_C_m {
static void test() {
C c = new C();
if (c.m() != 2) throw new TestFailure();
}
}
TestBuilder.run() calls Test1_I_C_m.test() and Test2_C_C_m.test() and
performs failure reporting, if necessary.
All tests are located in src/vm/runtime/defmeth and are grouped according
to the area they excercise. The test groups are:
- AccessibilityFlagsTest
- BasicTest
- ConflictingDefaultsTest
- DefaultVsAbstractTest
- MethodResolutionTest
- ObjectMethodOverridesTest
- PrivateMethodsTest
- RedefineTest
- StaticMethodsTest
- StressTest
- SuperCallTest
Each test group can be executed in different modes. For each mode there's a
corresponding scenario in src/vm/runtime/defmeth/scenarios.
Scenarios are organized in the following manner:
.../scenarios/[test_group]_[majorVer]_[methodFlags]_[invocationType]_[shouldRedefine]
where
majorVer - major version of class files for generated concrete classes
values: ver49, ver50, ver51, ver52
methodFlags - additional access flags for methods in generated classes
values:
none == no additional flags
sync == ACC_SYNCHRONIZED
strict == ACC_STRICT
syncstrict == ACC_SYNCHRONIZED | ACC_STRICT
invocationType - how methods in test hiearchies are invoked during testing
values:
direct - using invoke* bytecodes
reflect - using Reflection API
invoke - using invokedynamic & java.lang.invoke API (MethodHandles/JSR292)
redefine - whether to preload and redefine classes before running individual tests
values: redefine, noredefine
testGroup - name of test group being used
values: BasicTests/BridgeMethod/etc
STRESS TESTING
Stress test differs from other scenarios - it has only 2 modes: redefine and noredefine.
Stress scenario is the following:
- in multiple threads (5 by default)...
- ... continuously run random vm.runtime.defmeth.* tests ...
- ... in random configurations ...
- ... until predefined period of time is over...
- ... or any failures occured.
HOW TO RUN
Directly from command-line:
$ java -cp ${VMTESTBASE}/bin/classes vm.runtime.defmeth.shared.DefMethTest
Specify testing mode:
-flags <int>
additional access flags on default methods (default: 0)
-ver <int>
class file major version (default: 52)
-redefine <boolean>
redefine classes during execution (default: false)
-mode [direct|reflect|invoke]
specify method invocation mechanism (default: direct):
- direct - invoke* instructions in bytecode
- reflect - Reflection API
- invoke - invokedynamic & MethodHandle.invoke*
-execMode [DIRECT|REFLECTION|INVOKE_EXACT|INVOKE_GENERIC|INVOKE_WITH_ARGS|INDY]
specify concrete execution mode
Execution-specific flags:
-list <boolean>
list available tests
-filter <regex>
filter tests by name
(default: .* )
If you run tests directly from command line, in order to make "-redefine true",
StressTest or RedefineTest work, additional steps are necessary:
add -agentlib:redefineClasses to JVM options
set correct LD_LIBRARY_PATH:
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${VM_TESTBASE}/bin/lib/${PLATFORM}/vm/runtime/defmeth/shared/
Also, it is possible to run any test group directly:
$ java -cp ${VMTESTBASE}/bin/classes vm.runtime.defmeth.BasicTest
StressTest has some specific options:
-stressTime <long>
Stress execution time in seconds (default: 60)
-stressThreadsFactor <int>
Stress threads factor (default: 1)
-seed <int>
force deterministic behavior (default: 0)
-redefine <boolean>
use scenarios w/ class redefinition (default: false)
-ver <int>
minimum class file version to be used in the tests (default: 49)
-ignoreTestFailures
ignore failures of individual tests
To simplify failure analysis, the framework has some additional flags to produce
diagnostics output:
-Dvm.runtime.defmeth.printTests
print pseudo-code for each test;
-Dvm.runtime.defmeth.printAssembly
print bytecode assembly for all generated class files;
-Dvm.runtime.defmeth.printASMify
print "asmified" version of generated class files;
very useful when preparing reduced test cases.
-Dvm.runtime.defmeth.dumpClasses
dump class files under DUMP_CLASS_FILES in <test_name> folder
-Dvm.runtime.defmeth.printStackTrace
print full stack traces for all errors and test failures
-Dvm.runtime.defmeth.traceClassRedefinition
trace class redefinition during testing
LINKS
[1] "Design and Implementation of Default Methods in Hotspot JVM", by Keith McGuigan, 09/18/2012
http://cr.openjdk.java.net/~kamg/default_methods_in_hotspot.txt
[2] "Featherweight Defenders: A formal model for virtual extension methods in Java", by Brian Goetz, Robert Field, 03/27/2012
http://cr.openjdk.java.net/~briangoetz/lambda/featherweight-defenders.pdf
[3] "Interface evolution via virtual extension methods", by Brian Goetz, 4th draft, 06/2011
http://cr.openjdk.java.net/~briangoetz/lambda/Defender%20Methods%20v4.pdf

View File

@ -0,0 +1,235 @@
/*
* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package vm.runtime.defmeth;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nsk.share.Pair;
import nsk.share.TestFailure;
import nsk.share.test.TestBase;
import vm.runtime.defmeth.shared.DefMethTest;
import vm.runtime.defmeth.shared.DefMethTestFailure;
import vm.runtime.defmeth.shared.MemoryClassLoader;
import vm.runtime.defmeth.shared.annotation.NotApplicableFor;
import vm.runtime.defmeth.shared.builder.TestBuilder;
import vm.runtime.defmeth.shared.executor.TestExecutor;
import vm.runtime.defmeth.shared.data.Clazz;
import vm.runtime.defmeth.shared.data.ConcreteClass;
import vm.runtime.defmeth.shared.data.Interface;
import vm.runtime.defmeth.shared.data.Tester;
import static vm.runtime.defmeth.shared.ExecutionMode.*;
/*
* Basic scenarios on class redefinition.
*/
public class RedefineTest extends DefMethTest {
public static void main(String[] args) {
TestBase.runTest(new RedefineTest(), args);
}
@Override
protected void configure() {
// There are no testers being generated for reflection-based scenarios,
// so scenarios on class redefinition don't work
String mode = factory.getExecutionMode();
if ( "REFLECTION".equals(mode) || "INVOKE_WITH_ARGS".equals(mode)) {
throw new TestFailure("RedefineTest isn't applicable to reflection-based execution scenario " +
"(REDEFINE & INVOKE_WITH_ARGS).");
}
}
/**
* Run test {@code b1} w/ redefined {@code classes} from {@code b2}.
*
* @param b1
* @param b2
* @param classes
*/
private void redefineAndRun(TestBuilder b1, TestBuilder b2, Clazz... classes) {
TestExecutor executor = b1.prepare();
getLog().info("Before");
List<Pair<Tester,Throwable>> errorsBefore =
executor.run(); // run b1
// redefine in b1
MemoryClassLoader cl = executor.getLoader(); // b1.cl
Map<String,byte[]> cf = b2.produce(); //
Map<String,byte[]> forRedef = new HashMap<>();
for (Clazz clz : classes) {
String name = clz.name();
forRedef.put(name, cf.get(name));
}
cl.modifyClasses(forRedef, factory.isRetransformClasses());
getLog().info("After");
List<Pair<Tester,Throwable>> errorsAfter =
executor.run();
if (!errorsBefore.isEmpty()) {
throw new DefMethTestFailure(errorsBefore);
}
if (!errorsAfter.isEmpty()) {
throw new DefMethTestFailure(errorsAfter);
}
}
/*
* Before redefinition:
* interface I { public int m() { return 1; } }
* class C extends I { public int m() { return 2; } }
*
* TEST: I i = new C(); i.m() == 2
* TEST: C c = new C(); c.m() == 2
*
* After redefinition:
* interface I { public int m() { return 1; } }
* class C extends I { public int m() { return 3; } }
*
* TEST: I i = new C(); i.m() == 3
* TEST: C c = new C(); c.m() == 3
*/
@NotApplicableFor(modes = { REFLECTION, INVOKE_WITH_ARGS }) // reflection-based scenarios rely on checks in bytecode
public void testRedefineConcreteMethod() {
TestBuilder before = factory.getBuilder();
{ // Before redefinition
Interface I = before.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass C = before.clazz("C").implement(I)
.concreteMethod("m", "()I").returns(2).build()
.build();
before.test().callSite(I, C, "m", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").returns(2).done();
}
{ // After redefinition
TestBuilder after = factory.getBuilder();
Interface I = after.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass C = after.clazz("C").implement(I)
.concreteMethod("m", "()I").returns(3).build()
.build();
Tester T1 = after.test().callSite(I, C, "m", "()I").returns(3).build();
Tester T2 = after.test().callSite(C, C, "m", "()I").returns(3).build();
redefineAndRun(before, after, C, T1, T2);
}
}
/*
* Before redefinition:
* interface I { public int m() { return 1; } }
* class C extends I { public int m() { return 2; } }
*
* TEST: I i = new C(); i.m() == 2
* TEST: C c = new C(); c.m() == 2
*
* After redefinition:
* interface I { public int m() { return 3; } }
* class C extends I { public int m() { return 2; } }
*
* TEST: I i = new C(); i.m() == 2
* TEST: C c = new C(); c.m() == 2
*/
@NotApplicableFor(modes = { REFLECTION, INVOKE_WITH_ARGS }) // reflection-based scenarios rely on checks in bytecode
public void testRedefineDefaultMethod() {
TestBuilder before = factory.getBuilder();
{ // Before redefinition
Interface I = before.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass C = before.clazz("C").implement(I)
.concreteMethod("m", "()I").returns(2).build()
.build();
before.test().callSite(I, C, "m", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").returns(2).done();
}
{ // After redefinition
TestBuilder after = factory.getBuilder();
Interface I = after.intf("I")
.defaultMethod("m", "()I").returns(3).build()
.build();
ConcreteClass C = after.clazz("C").implement(I)
.concreteMethod("m", "()I").returns(2).build()
.build();
redefineAndRun(before, after, C);
}
}
/*
* Before redefinition:
* interface I { public int m() { return 1; } }
* class C extends I {}
*
* TEST: I i = new C(); i.m() == 1
* TEST: C c = new C(); c.m() == 1
*
* After redefinition:
* interface I { public int m() { return 2; } }
* class C extends I {}
*
* TEST: I i = new C(); i.m() == 2
* TEST: C c = new C(); c.m() == 2
*/
@NotApplicableFor(modes = { REFLECTION, INVOKE_WITH_ARGS }) // reflection-based scenarios rely on checks in bytecode
public void testRedefineDefMethInConcreteClass() {
TestBuilder before = factory.getBuilder();
{ // Before redefinition
Interface I = before.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass C = before.clazz("C").implement(I).build();
before.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(C, C, "m", "()I").returns(1).done();
}
{ // After redefinition
TestBuilder after = factory.getBuilder();
Interface I = after.intf("I")
.defaultMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = after.clazz("C").implement(I).build();
Tester T1 = after.test().callSite(I, C, "m", "()I").returns(2).build();
Tester T2 = after.test().callSite(C, C, "m", "()I").returns(2).build();
redefineAndRun(before, after, I, T1, T2);
}
}
}

View File

@ -0,0 +1,838 @@
/*
* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package vm.runtime.defmeth;
import nsk.share.test.TestBase;
import vm.runtime.defmeth.shared.DefMethTest;
import vm.runtime.defmeth.shared.annotation.Crash;
import vm.runtime.defmeth.shared.data.*;
import vm.runtime.defmeth.shared.builder.TestBuilder;
import vm.runtime.defmeth.shared.annotation.NotApplicableFor;
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.Invoke.*;
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.IndexbyteOp.*;
import static vm.runtime.defmeth.shared.ExecutionMode.*;
/*
* Scenarios on static methods in interfaces.
*/
public class StaticMethodsTest extends DefMethTest {
public static void main(String[] args) {
TestBase.runTest(new StaticMethodsTest(), args);
}
// static method in interface
/*
* testStaticMethod
*
* interface I {
* default static public int m() { return 1; }
* }
*
* class C implements I {}
*/
public void testStaticMethod() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.static_().public_().returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().staticCallSite(I, "m", "()I").returns(1).done()
.run();
}
// invoke[virtual|interface|special] from same/subintf
/*
* testInvokeVirtual
*
* interface I {
* default static public int staticM() { return 1; }
* default public int m() { return ((I)this).staticM(); }
* }
*
* class C implements I {}
*/
public void testInvokeVirtual() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("staticM", "()I")
.static_().public_().returns(1).build()
// force an invokevirtual MR of staticM()
.defaultMethod("m", "()I")
.invoke(VIRTUAL, b.intfByName("I"), null, "staticM", "()I", METHODREF).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().staticCallSite(I, "staticM", "()I").returns(1).done()
.test().callSite(I, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(C, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.run();
}
/*
* testInvokeIntf
*
* interface I {
* default static public int staticM() { return 1; }
* default public int m() { return ((I)this).staticM(); }
* }
*
* class C implements I {}
*/
public void testInvokeIntf() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("staticM", "()I")
.static_().public_().returns(1).build()
.defaultMethod("m", "()I")
.invoke(INTERFACE, b.intfByName("I"), null, "staticM", "()I", CALLSITE).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().staticCallSite(I, "staticM", "()I").returns(1).done()
.test().callSite(I, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(C, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.run();
}
/*
* testInvokeSpecial
*
* interface I {
* default static public int staticM() { return 1; }
* default public int m() { return I.super.staticM(); }
* }
*
* class C implements I {}
*/
public void testInvokeSpecial() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("staticM", "()I")
.static_().public_().returns(1).build()
.defaultMethod("m", "()I")
.invoke(SPECIAL, b.intfByName("I"), null, "staticM", "()I", CALLSITE).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().staticCallSite(I, "staticM", "()I").returns(1).done()
.test().callSite(I, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(C, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.run();
}
/*
* testStaticVsDefault
*
* interface I {
* default static public int m() { return 1; }
* default public int m() { return 2; }
* }
*
* class C implements I {}
*/
public void testStaticVsDefault() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.static_().public_().returns(1).build()
.defaultMethod("m", "()I")
.public_().returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().staticCallSite(I, "m", "()I").throws_(ClassFormatError.class).done()
// FIXME: throws exception during an attempt to lookup Test2.test() method
// Invalid test. ClassFormatError is thrown at verification time, rather
// than execution time.
// .test().callSite(I, C, "m", "()I").throws_(ClassFormatError.class).done()
.test().callSite(C, C, "m", "()I").throws_(ClassFormatError.class).done()
.run();
}
// call static method from default method
/*
* testInvokeFromDefaultMethod
*
* interface I {
* default static public int staticPublicM() { return 1; }
* default public int invokePublic() { return I.staticPublicM(); }
* default static private int staticPrivateM() { return 1; }
* default public int invokePrivate() { return I.staticPrivateM(); }
* }
*
* class C implements I {}
*/
public void testInvokeFromDefaultMethod() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("staticPublicM", "()I")
.static_().public_().returns(1).build()
.defaultMethod("invokePublic", "()I")
.invokeStatic(b.intfByName("I"), "staticPublicM", "()I").build()
.defaultMethod("staticPrivateM", "()I")
.static_().private_().returns(1).build()
.defaultMethod("invokePrivate", "()I")
.invokeStatic(b.intfByName("I"), "staticPrivateM", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
Class expectedClass;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedClass = NoSuchMethodException.class;
} else {
expectedClass = IllegalAccessError.class;
}
// call static method from another class
b.test().staticCallSite(I, "staticPublicM", "()I").returns(1).done()
.test().staticCallSite(I, "staticPrivateM", "()I").throws_(expectedClass).done()
// call public static method from default method
.test().callSite(I, C, "invokePublic", "()I").returns(1).done()
.test().callSite(C, C, "invokePublic", "()I").returns(1).done()
// call private static method from default method
.test().callSite(I, C, "invokePrivate", "()I").returns(1).done()
.test().callSite(C, C, "invokePrivate", "()I").returns(1).done()
.run();
}
// call static method from implementing subclass
/*
* testInvokeFromSubclass
*
* interface I {
* default static public int staticPublicM() { return 1; }
* default static private int staticPrivateM() { return 1; }
* }
*
* class C implements I {
* public int invokePublic() { return I.staticPublicM(); }
* public int invokePrivate() { return I.staticPublicM(); }
*
* I.staticPublicM(); ==> returns 1;
* I.staticPrivateM(); ==> Either NSME or IAE depending on execution mode
* C c = new C(); c.invokePublic(); ==> returns 1 or if -ver < 52 IAE or VerifyError
* C c = new C(); c.invokePrivate() ==> IAE or if -ver < 52, IAE or VerifyError
* }
*/
@NotApplicableFor(modes = { REDEFINITION }) // Can't redefine a class that gets error during loading
public void testInvokeFromSubclass() throws Exception {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("staticPublicM", "()I")
.static_().public_().returns(1).build()
.defaultMethod("staticPrivateM", "()I")
.static_().private_().returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.concreteMethod("invokePublic", "()I")
.invokeStatic(b.intfByName("I"), "staticPublicM", "()I").build()
.concreteMethod("invokePrivate", "()I")
.invokeStatic(b.intfByName("I"), "staticPrivateM", "()I").build()
.build();
Class expectedError1;
if (factory.getExecutionMode().equals("REFLECTION")) {
expectedError1 = NoSuchMethodException.class;
} else {
expectedError1 = IllegalAccessError.class;
}
// Adjust for -ver < 52
if (factory.getVer() >=52) {
// call static method from another class
b.test().staticCallSite(I, "staticPublicM", "()I").returns(1).done()
.test().staticCallSite(I, "staticPrivateM", "()I").throws_(expectedError1).done()
// call static method from implementing subclass
.test().callSite(C, C, "invokePublic", "()I").returns(1).done()
.test().callSite(C, C, "invokePrivate", "()I").throws_(IllegalAccessError.class).done()
.run();
} else {
// call static method from another class
b.test().staticCallSite(I, "staticPublicM", "()I").returns(1).done()
.test().staticCallSite(I, "staticPrivateM", "()I").throws_(expectedError1).done()
// call static method from implementing subclass
// invokestatic IMR - not supported for ver < 52
.test().callSite(C, C, "invokePublic", "()I").throws_(VerifyError.class).done()
.test().callSite(C, C, "invokePrivate", "()I").throws_(VerifyError.class).done()
.run();
}
}
// static method doesn't participate in default method analysis:
// method overriding
/*
* testNotInherited
*
* interface I {
* default static public int m() { return 1; }
* }
*
* class C implements I {}
*/
public void testNotInherited() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.static_().public_().returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
b.test().staticCallSite(I, "m", "()I").returns(1).done()
// invokeinterface to static method ==> ICCE
.test().callSite(I, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(C, C, "m", "()I").throws_(NoSuchMethodError.class).done()
.run();
} else {
b.test().staticCallSite(I, "m", "()I").returns(1).done()
.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(C, C, "m", "()I").throws_(NoSuchMethodError.class).done()
.run();
}
}
/*
* testDefaultVsConcrete
*
* interface I {
* default static public int m() { return 1; }
* }
*
* class C implements I {
* public int m() { return 2; }
* }
* TEST: I o = new C(); o.m()I throws ICCE
* TEST: C o = new C(); o.m()I == 2
*/
public void testDefaultVsConcrete() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.static_().public_().returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(I)
.concreteMethod("m", "()I").returns(2).build()
.build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
// invokeinterface to static method ==> ICCE
b.test().callSite(I, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(C, C, "m", "()I").returns(2).done().run();
} else {
b.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(C, C, "m", "()I").returns(2).done().run();
}
}
/*
* TEST: StaticMethodsTest.testOverrideStatic
*
* interface I {
* default static public int m() { return 1; }
* }
*
* interface J extends I {
* default public int m() { return 2; }
* }
*
* class C implements J {
* }
*/
public void testOverrideStatic() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.static_().public_().returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I")
.returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
b.test().staticCallSite(I, "m", "()I").returns(1).done()
.test().callSite(I, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(J, C, "m", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").returns(2).done()
.run();
} else {
b.test().staticCallSite(I, "m", "()I").returns(1).done()
.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(J, C, "m", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").returns(2).done()
.run();
}
}
/*
* testOverrideDefault
*
* interface I {
* default public int m() { return 1; }
* }
*
* interface J extends I {
* default static public int m() { return 2; }
* }
*
* class C implements J {}
*
* TEST: I o = new C(); o.m()I == 1
* TEST: J o = new C(); o.m()I == ICCE
* TEST: C o = new C(); o.m()I == 1
*/
public void testOverrideDefault() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I")
.static_().public_().returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
b.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(J, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(C, C, "m", "()I").returns(1).done()
.run();
} else {
// Reflection correctly finds the static method defined in J and
// calls it with invokestatic.
b.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(J, C, "m", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").returns(1).done()
.run();
}
}
/*
* testReabstract
*
* interface I {
* default static public int m() { return 1; }
* }
*
* interface J extends I {
* abstract public int m();
* }
*
* class C implements J {}
*
* TEST: I o = new C(); o.m()I throws ICCE
* -mode reflect returns 1
* TEST: J o = new C(); o.m()I throws AME
* TEST: C o = new C(); o.m()I throws AME
*/
public void testReabstract() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.static_().public_().returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.abstractMethod("m", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
b.test().callSite(I, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(J, C, "m", "()I").throws_(AbstractMethodError.class).done()
.test().callSite(C, C, "m", "()I").throws_(AbstractMethodError.class).done()
.run();
} else {
b.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(J, C, "m", "()I").throws_(AbstractMethodError.class).done()
.test().callSite(C, C, "m", "()I").throws_(AbstractMethodError.class).done()
.run();
}
}
/*
* testOverrideAbstract
*
* interface I {
* abstract public int m();
* }
*
* interface J extends I {
* default static public int m() { return 1; }
* }
*
* class C implements J {}
*
* TEST: I o = new C(); o.m()I throws AME
* TEST: J o = new C(); o.m()I throws ICCE
* -mode reflect returns 1
* TEST: C o = new C(); o.m()I throws AME
*/
public void testOverrideAbstract() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.abstractMethod("m", "()I").build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I")
.static_().public_().returns(1).build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
b.test().callSite(I, C, "m", "()I").throws_(AbstractMethodError.class).done()
.test().callSite(J, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(C, C, "m", "()I").throws_(AbstractMethodError.class).done()
.run();
} else {
b.test().callSite(I, C, "m", "()I").throws_(AbstractMethodError.class).done()
.test().callSite(J, C, "m", "()I").returns(1).done()
.test().callSite(C, C, "m", "()I").throws_(AbstractMethodError.class).done()
.run();
}
}
/*
* testInheritedDefault
*
* interface I {
* default static public int m() { return 1; }
* }
*
* class B implements I {}
*
* class C extends B {}
*
* TEST: I o = new C(); o.m()I throws IncompatibleClassChangeError
* -mode reflect returns 1
* TEST: B o = new C(); o.m()I throws NoSuchMethodError
* TEST: C o = new C(); o.m()I throws NoSuchMethodError
*/
public void testInheritedDefault() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.static_().public_().returns(1).build()
.build();
ConcreteClass B = b.clazz("B").implement(I).build();
ConcreteClass C = b.clazz("C").extend(B).build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
b.test().callSite(I, C, "m","()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(B, C, "m","()I").throws_(NoSuchMethodError.class).done()
.test().callSite(C, C, "m","()I").throws_(NoSuchMethodError.class).done()
.run();
} else {
b.test().callSite(I, C, "m","()I").returns(1).done()
.test().callSite(B, C, "m","()I").throws_(NoSuchMethodError.class).done()
.test().callSite(C, C, "m","()I").throws_(NoSuchMethodError.class).done()
.run();
}
}
/*
* testDefaultVsConcreteInherited
*
* interface I {
* default static public int m() { return 1; }
* }
*
* class B {
* public int m() { return 2; }
* }
*
* class C extends B implements I {}
*
*/
public void testDefaultVsConcreteInherited() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.static_().public_().returns(1).build()
.build();
ConcreteClass B = b.clazz("B")
.concreteMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").extend(B).implement(I).build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
b.test().staticCallSite(I, "m","()I").returns(1).done()
.test().callSite(I, C, "m","()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(B, C, "m","()I").returns(2).done()
.test().callSite(C, C, "m","()I").returns(2).done()
.run();
} else {
b.test().staticCallSite(I, "m","()I").returns(1).done()
.test().callSite(I, C, "m","()I").returns(1).done()
.test().callSite(B, C, "m","()I").returns(2).done()
.test().callSite(C, C, "m","()I").returns(2).done()
.run();
}
}
/*
* testDefaultVsStaticConflict
*
* interface I {
* default static public int m() { return 1; }
* }
*
* interface J {
* default public int m() { return 2; }
* }
*
* class C implements I, J {}
*
* TEST: I o = new C(); o.m()I throws ICCE
* -mode reflect returns 1
* TEST: J o = new C(); o.m()I == 2
* TEST: C o = new C(); o.m()I == 2
*/
public void testDefaultVsStaticConflict() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.static_().public_().returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(I,J).build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
b.test().callSite(I, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(J, C, "m", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").returns(2).done()
.run();
} else {
b.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(J, C, "m", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").returns(2).done()
.run();
}
}
/*
* testStaticSuperClassVsDefaultSuperInterface
*
* interface I {
* default public int m() { return 1; }
* }
*
* class A {
* public static int m() { return 2; }
* }
*
* class C extends A implements I {}
*
* TEST: C o = new C(); o.m()I throws ICCE
* -mode reflect returns 2
* TEST: I o = new C(); o.m()I == 1
*/
public void testStaticSuperClassVsDefaultSuperInterface() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.public_().returns(1).build()
.build();
ConcreteClass A = b.clazz("A")
.concreteMethod("m", "()I")
.static_().public_().returns(2).build()
.build();
ConcreteClass C = b.clazz("C").extend(A).implement(I).build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
b.test().callSite(C, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(I, C, "m", "()I").returns(1).done()
.run();
} else {
b.test().callSite(C, C, "m", "()I").returns(2).done()
.test().callSite(I, C, "m", "()I").returns(1).done()
.run();
}
}
/*
* testStaticLocalVsDefaultSuperInterface
*
* interface I {
* default public int m() { return 1; }
* }
*
* class A implements I {
* public static int m() { return 2; }
* }
*
* class C extends A implements I {}
*
* TEST: A o = new A(); o.m()I throws ICCE
* -mode reflect returns 2
* TEST: I o = new A(); o.m()I == 1
*/
public void testStaticLocalVsDefaultSuperInterface() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.public_().returns(1).build()
.build();
ConcreteClass A = b.clazz("A").implement(I)
.concreteMethod("m", "()I")
.static_().public_().returns(2).build()
.build();
ConcreteClass C = b.clazz("C").extend(A).implement(I).build();
if (!factory.getExecutionMode().equals("REFLECTION")) {
b.test().callSite(A, A, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(I, A, "m", "()I").returns(1).done()
.run();
} else {
b.test().callSite(A, A, "m", "()I").returns(2).done()
.test().callSite(I, A, "m", "()I").returns(1).done()
.run();
}
}
/*
* testConflictingDefaultsandStaticMethod
* @bug 8033150
*
* interface I {
* default public int m() { return 1; }
* }
*
* interface J {
* default public int m() { return 2; }
* }
*
* class A implements I, J {
* public static int m() { return 3; }
* }
*
* class C extends A {}
*
* TEST: C.m(); should call A.m, return value = 3
*/
public void testConflictingDefaultsandStaticMethod() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I")
.public_().returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I")
.public_().returns(2).build()
.build();
ConcreteClass A = b.clazz("A").implement(I,J)
.concreteMethod("m", "()I")
.static_().public_().returns(3).build()
.build();
ConcreteClass C = b.clazz("C").extend(A).build();
b.test().staticCallSite(C, "m", "()I").returns(3).done()
.run();
}
}

View File

@ -0,0 +1,315 @@
/*
* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package vm.runtime.defmeth;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import nsk.share.TestFailure;
import nsk.share.test.StressOptions;
import nsk.share.test.Stresser;
import vm.runtime.defmeth.shared.Constants;
import vm.runtime.defmeth.shared.DefMethTest;
import vm.runtime.defmeth.shared.ExecutionMode;
import vm.runtime.defmeth.shared.builder.TestBuilder;
import vm.share.options.Option;
import vm.share.options.OptionSupport;
import vm.share.options.Options;
import static jdk.internal.org.objectweb.asm.Opcodes.*;
/*
* Stress test for default methods implementation.
*
* Stress scenario is the following:
* - in multiple threads ...
* - ... continuously run random tests ...
* - ... in random configuration ...
* - ... until predefined period of time is over...
* - ... or any failures occured.
*/
public class StressTest implements Runnable {
@Options
private StressOptions opts = new StressOptions();
@Option(name="seed", default_value="0", description="force deterministic behavior")
private int seed;
@Option(name="redefine", default_value="false", description="use scenarios w/ class redefinition")
private boolean doRedefine;
@Option(name="ver", default_value="49", description="minimum class file version to be used in the tests")
private int minMajorVer;
@Option(name="ignoreTestFailures", default_value="false", description="ignore failures of the executed tests")
private boolean ignoreTestFailures;
class Worker extends Thread {
private final Random rand;
private volatile DefMethTest failedTest;
private Throwable reason;
private volatile long executedTests = 0;
public Worker(String id, int seed) {
setName(id);
this.rand = new Random(seed);
}
@Override
public void run() {
while (!Thread.interrupted()) {
int idx = rand.nextInt(testlist.size());
DefMethTest test = testlist.get(idx);
try {
test.run();
executedTests++;
if (test.isFailed()) {
throw new TestFailure(test.toString());
}
} catch (Throwable e) {
if (!ignoreTestFailures) {
failedTest = test;
reason = e;
break;
}
}
}
}
public boolean isFailed() { return failedTest != null; }
public Throwable getReason() { return reason; }
public DefMethTest getFailedTest() { return failedTest; }
public long getExecutedTests() { return executedTests; }
}
private List<DefMethTest> testlist;
private Worker[] workers;
Stresser stresser;
public static void main(String[] args) {
StressTest test = new StressTest();
OptionSupport.setupAndRun(test, args);
}
@Override
public void run() {
configureTests();
startWorkers();
stresser = new Stresser(opts);
try {
stresser.start(0);
while (workersAlive() && stresser.continueExecution()) {
printStats();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {}
}
} finally {
interruptWorkers();
joinWorkers();
stresser.finish();
}
}
private void configureTests() {
int[] majorVerValues = new int[52 - minMajorVer + 1];
for (int i = 0; i< majorVerValues.length; i++) {
majorVerValues[i] = minMajorVer + i;
}
int[] flagsValues = new int[] {
0,
ACC_STRICT,
ACC_SYNCHRONIZED,
ACC_STRICT | ACC_SYNCHRONIZED
};
boolean[] doRedefineValues;
if (doRedefine) {
doRedefineValues = new boolean[] { true, false};
} else {
doRedefineValues = new boolean[] { false };
}
// Upper limit for test count
int testCount = DefMethTest.getTests().size() * majorVerValues.length
* flagsValues.length * doRedefineValues.length;
testlist = new ArrayList<>(testCount);
// Enumerate all tests in all possible modes
for (Class<? extends DefMethTest> testClass : DefMethTest.getTests()) {
for (ExecutionMode mode : ExecutionMode.values()) {
// Skip REDEFINITION execmode, the top README file indicates that it isn't a
// valid execution mode and there's also no code supporting this in the test generator.
if ("REDEFINITION".equals(mode.toString())) {
continue;
}
for (int majorVer : majorVerValues) {
for (int flags : flagsValues ) {
for (boolean redefine : doRedefineValues) {
// RedefineTest isn't applicable to reflection-based execution scenario (REDEFINE & INVOKE_WITH_ARGS)
if (testClass == RedefineTest.class && mode.isReflectionBased()) {
continue;
}
// Only run the RedefineTest tests when redefining
if (!redefine && testClass == RedefineTest.class) {
continue;
}
try {
DefMethTest test = testClass.newInstance();
OptionSupport.setup(test, new String[] {
"-execMode", mode.toString(),
"-ver", Integer.toString(majorVer),
"-flags", Integer.toString(flags),
"-redefine", Boolean.toString(redefine),
"-ignoreCrashes",
"-ignoreKnownFailures",
"-silent",
"-failfast"});
testlist.add(test);
} catch (InstantiationException | IllegalAccessException ex) {
throw new TestFailure(ex);
}
}
}
}
}
}
System.out.printf("Testlist size: %d\n", testlist.size());
}
private void startWorkers() {
Random rand;
if (seed == 0) {
seed = (new Random()).nextInt();
}
System.out.printf("Seed: %d\n", seed);
rand = new Random(seed);
//Workaround for the deadlock caused by
// JDK-7122142: "(ann) Race condition between isAnnotationPresent and getAnnotations"
try {
// Do a warm-up cycle
for (Class<? extends DefMethTest> testClass : DefMethTest.getTests()) {
DefMethTest test = testClass.newInstance();
OptionSupport.setupAndRun(test,
new String[] { "-silent", "-ignoreKnownFailures"});
}
} catch(InstantiationException | IllegalAccessException e) {
throw new RuntimeException(e);
}
int threadsCount = opts.getThreadsFactor();
if (threadsCount == 1) {
threadsCount = 5;
}
workers = new Worker[threadsCount];
System.out.printf("Spawning %d workers...\n", workers.length);
for (int i = 0; i < workers.length; i++) {
workers[i] = new Worker(
String.format("Worker #%d/%d", i+1, workers.length),
rand.nextInt());
}
for (Worker worker : workers) {
worker.start();
}
}
private void interruptWorkers() {
for (Worker worker : workers) {
worker.interrupt();
}
}
private void joinWorkers() {
boolean isFailed = false;
for (Worker worker : workers) {
while (worker.isAlive()) {
try {
worker.join();
} catch (InterruptedException e) {}
}
System.out.printf("%s: %s (executed: %d)\n",
worker.getName(),
worker.isFailed() ? "FAILED: " + worker.getFailedTest() : "PASSED",
worker.getExecutedTests());
if (worker.isFailed()) {
if (Constants.PRINT_STACK_TRACE) {
worker.getReason().printStackTrace();
}
isFailed = true;
}
}
if (isFailed) {
throw new TestFailure("Some of the worker threads failed.");
}
}
private boolean workersAlive() {
for (Worker worker : workers) {
if (!worker.isAlive()) {
return false;
}
}
return true;
}
private void printStats() {
long[] counts = new long[workers.length];
for (int i = 0; i < counts.length; i++) {
counts[i] = workers[i].executedTests;
}
StringBuilder msg = new StringBuilder();
msg.append(stresser.getTimeLeft() / 1000).append("s left: ");
msg.append(Arrays.toString(counts));
System.out.println(msg);
}
}

View File

@ -0,0 +1,771 @@
/*
* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package vm.runtime.defmeth;
import nsk.share.test.TestBase;
import vm.runtime.defmeth.shared.DefMethTest;
import vm.runtime.defmeth.shared.annotation.KnownFailure;
import vm.runtime.defmeth.shared.annotation.NotApplicableFor;
import vm.runtime.defmeth.shared.data.*;
import vm.runtime.defmeth.shared.builder.TestBuilder;
import static vm.runtime.defmeth.shared.ExecutionMode.*;
/*
* Tests on invoke-super-default.
*
* Invoke-super-default is used by a subclass to defer to a default method
* implementation or to disambiguate between conflicting inherited default
* methods.
*
* Invoke-super-default appears in the source code as
* "<interface-name>.super.<method-name>(<args>)". It is compiled into an
* invokespecial instruction whose target is <interface-name>.<method-name>,
* where the interface is a direct supertype of the current class (the current class
* must directly implement <interface-name>).
*
* 0.6.3 JVMS draft for JDK8 updated.
* Invokespecial on any superinterface method will run interface method
* resolution, and then the selected method will be set to the resolved method.
* super defaults no longer check for lack of shadowing, other languages
* want this capability.
*/
public class SuperCallTest extends DefMethTest {
@Override
protected void configure() {
// Since invoke-super-default relies on new semantics of invokespecial,
// the tests are applicable only to class files of 52 version.
if (factory.getVer() != 52) {
getLog().warn("WARN: SuperCallTest is applicable only for class files w/ version 52.");
getLog().warn("WARN: Overriding \"-ver " + factory.getVer() + "\" w/ \"-ver 52\".");
factory.setVer(52);
}
}
public static void main(String[] args) {
TestBase.runTest(new SuperCallTest(), args);
}
/*
* Basic case
*
* interface I { int m() default { return 1; } }
* interface J extends I { int m() default { return I.super.m(); } }
* class C implements J {}
*
* TEST: C c = new C(); c.m() == 88;
* TEST: I i = new C(); i.m() == 88;
*/
public void testSuperBasic1() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I").callSuper(I, "m", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
b.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(J, C, "m", "()I").returns(1).done()
.test().callSite(C, C, "m", "()I").returns(1).done()
.run();
}
/*
* Super Conflict Resolution
*
* interface K { int m() default { return 1; } }
* interface L { int m() default { return 2; } }
* interface I extends K,L { int m() default { K.super.m(); } }
* class C implements I {}
* class D implements K,L {}
*
* TEST: K k = new C(); k.m() == 1
* TEST: L l = new C(); l.m() == 1
* TEST: I i = new C(); i.m() == 1
* TEST: C c = new C(); c.m() == 1
*
* TEST: K k = new D(); k.m() == 1
* TEST: L l = new D(); l.m() == 1
* TEST: D d = new D(); d.m() == 1
*/
public void testSuperConflictResolution() {
TestBuilder b = factory.getBuilder();
Interface K = b.intf("K")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface L = b.intf("L")
.defaultMethod("m", "()I").returns(2).build()
.build();
Interface I = b.intf("I").extend(K, L)
.defaultMethod("m", "()I").callSuper(K, "m", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
ConcreteClass D = b.clazz("D").implement(K,L)
.concreteMethod("m", "()I").callSuper(K, "m", "()I").build()
.build();
b.test().callSite(K, C, "m", "()I").returns(1).done()
.test().callSite(L, C, "m", "()I").returns(1).done()
.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(C, C, "m", "()I").returns(1).done()
.test().callSite(K, D, "m", "()I").returns(1).done()
.test().callSite(L, D, "m", "()I").returns(1).done()
.test().callSite(D, D, "m", "()I").returns(1).done()
.run();
}
/*
* Super call of conflicting default method from different method name
*
* interface K {
* default public int m(int) { return 1; }
* }
* interface L {
* default public int m(int) { return 2; }
* }
* interface I extends K, L {
* default public int k() { return K.super.m((int)0); }
* default public int l() { return L.super.m((int)0); }
* }
* class C implements I {}
* class D implements K, L {
* public int k() { return K.super.m((int)0); }
* public int l() { return L.super.m((int)0); }
* }
*
* TEST: K o = new C(); o.m(I)I throws ICCE
* TEST: L o = new C(); o.m(I)I throws ICCE
* TEST: C o = new C(); o.m(I)I throws ICCE
* TEST: I o = new C(); o.k()I == 1
* TEST: C o = new C(); o.k()I == 1
* TEST: I o = new C(); o.l()I == 2
* TEST: C o = new C(); o.l()I == 2
* TEST: K o = new D(); o.m(I)I throws ICCE
* TEST: L o = new D(); o.m(I)I throws ICCE
* TEST: D o = new D(); o.m(I)I throws ICCE
* TEST: D o = new D(); o.k()I == 1
* TEST: D o = new D(); o.l()I == 2
*/
public void testSuperConflictDiffMethod() {
TestBuilder b = factory.getBuilder();
Interface K = b.intf("K")
.defaultMethod("m", "(I)I").returns(1).build()
.build();
Interface L = b.intf("L")
.defaultMethod("m", "(I)I").returns(2).build()
.build();
Interface I = b.intf("I").extend(K, L)
.defaultMethod("k", "()I").callSuper(K, "m", "(I)I").build()
.defaultMethod("l", "()I").callSuper(L, "m", "(I)I").build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
ConcreteClass D = b.clazz("D").implement(K,L)
.concreteMethod("k", "()I").callSuper(K, "m", "(I)I").build()
.concreteMethod("l", "()I").callSuper(L, "m", "(I)I").build()
.build();
b.test().callSite(K, C, "m", "(I)I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(L, C, "m", "(I)I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(C, C, "m", "(I)I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(I, C, "k", "()I").returns(1).done()
.test().callSite(C, C, "k", "()I").returns(1).done()
.test().callSite(I, C, "l", "()I").returns(2).done()
.test().callSite(C, C, "l", "()I").returns(2).done()
.test().callSite(K, D, "m", "(I)I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(L, D, "m", "(I)I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(D, D, "m", "(I)I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(D, D, "k", "()I").returns(1).done()
.test().callSite(D, D, "l", "()I").returns(2).done()
.run();
}
/*
* SuperConflict
*
* interface K { int m() default { return 1; } }
* interface L { int m() default { return 2; } }
* interface J extends K, L {}
* interface I extends J, K { int m() default { J.super.m(); } }
* class C implements I {}
*
* TEST: K k = new C(); k.m() ==> ICCE
* TEST: L l = new C(); l.m() ==> ICCE
* TEST: J j = new C(); j.m() ==> ICCE
* TEST: I i = new C(); i.m() ==> ICCE
* TEST: C c = new C(); c.m() ==> ICCE
*/
public void testSuperConflict() {
TestBuilder b = factory.getBuilder();
Interface K = b.intf("K")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface L = b.intf("L")
.defaultMethod("m", "()I").returns(2).build()
.build();
Interface J = b.intf("J").extend(K, L).build();
Interface I = b.intf("I").extend(K, J)
.defaultMethod("m", "()I").callSuper(J, "m", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(I).build();
b.test().callSite(K, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(L, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(J, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(I, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(C, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.run();
}
/*
* SuperDisqual
*
* interface I { int m() default { return 1; } }
* interface J { int m() default { return 2; } }
* class C implements I, J { public int m() { return I.super.m(); } }
*
* TEST: C c = new C(); c.m() ==> 1
* TEST: J j = new C(); j.m() ==> 1
*/
public void testSuperDisqual() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(I, J)
.concreteMethod("m", "()I").callSuper(I, "m", "()I").build()
.build();
b.test().callSite(I, C, "m", "()I").returns(1).done()
.test().callSite(J, C, "m", "()I").returns(1).done()
.test().callSite(C, C, "m", "()I").returns(1).done()
.run();
}
/*
* SuperNull
*
* interface I { int m(); }
* interface J extends I { int m() default { return I.super.m(); } }
* interface K extends I { int m() default { return I.super.n(); } }
* class C implements J {}
* class D implements K {}
*
* TEST: I i = new C(); i.m() ==> AME
* TEST: J j = new C(); j.m() ==> AME
* TEST: C c = new C(); c.m() ==> AME
* TEST: K k = new D(); k.m() ==> NSME
*/
public void testSuperNull() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.abstractMethod("m", "()I").build()
.build();
Interface J = b.intf("J").extend(I)
.defaultMethod("m", "()I").callSuper(I, "m", "()I").build()
.build();
Interface K = b.intf("K").extend(I)
.defaultMethod("m", "()I").callSuper(I, "n", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
ConcreteClass D = b.clazz("D").implement(K).build();
b.test().callSite(I, C, "m", "()I").throws_(AbstractMethodError.class).done()
.test().callSite(J, C, "m", "()I").throws_(AbstractMethodError.class).done()
.test().callSite(C, C, "m", "()I").throws_(AbstractMethodError.class).done()
.test().callSite(K, D, "m", "()I").throws_(NoSuchMethodError.class).done()
.run();
}
/*
* SuperGeneric
*
* interface J<T> { int m(T t) default { return 1; } }
* interface I extends J<String> { int m(String s) default { return J.super.m(); } }
* class C implements I {}
*
* TEST: I i = new C(); i.m(new Object()) == 1;
* TESTL J j = new C(); j.m(new Object()) == 1;
* TEST: J j = new C(); j.m("") == 1;
* TEST: C c = new C(); c.m(new Object()) == 1;
* TEST: C c = new C(); c.m("") == 1;
*/
@KnownFailure(modes = { INVOKE_EXACT, INVOKE_GENERIC, INVOKE_WITH_ARGS, INDY }) // Test2_J_C_m: AME => IAE => ICCE instead of successful call
public void testSuperGeneric() {
TestBuilder b = factory.getBuilder();
// interface I<T> {
// default int m(T t) { return 1; }
// }
Interface I = b.intf("I")
.sig("<T:Ljava/lang/Object;>Ljava/lang/Object;")
.defaultMethod("m", "(Ljava/lang/Object;)I").sig("(TT;)I").returns(1).build()
.build();
// interface J extends I<String> {
// default int m(String s) { return I.super.m(); }
// }
Interface J = b.intf("J").extend(I)
.sig("Ljava/lang/Object;LI<Ljava/lang/String;>;")
.defaultMethod("m", "(Ljava/lang/String;)I").callSuper(I, "m", "(Ljava/lang/Object;)I").build()
.build();
ConcreteClass C = b.clazz("C").implement(J).build();
b.test().callSite(I, C, "m", "(Ljava/lang/Object;)I").returns(1).done()
.test().callSite(J, C, "m", "(Ljava/lang/Object;)I").returns(1).done()
.test().callSite(J, C, "m", "(Ljava/lang/String;)I").returns(1).done()
.test().callSite(C, C, "m", "(Ljava/lang/Object;)I").returns(1).done()
.test().callSite(C, C, "m", "(Ljava/lang/String;)I").returns(1).done()
.run();
}
/*
* SuperGenericDisqual
*
* interface I<T> { int m(T t) default { return 1; } }
* interface J extends I<String> { int m(String s) default { return 2; } }
* class C implements I<String>, J { public int m(String s) { return I.super.m(s); } }
*
* TEST: C c = new C(); c.m("string") == 1
*/
@KnownFailure(modes = { INVOKE_EXACT, INVOKE_GENERIC, INVOKE_WITH_ARGS, INDY }) // Test2_J_C_m: AME => IAE => ICCE instead of successful call
public void testSuperGenericDisqual() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I").sig("<T:Ljava/lang/Object;>Ljava/lang/Object;")
.defaultMethod("m", "(Ljava/lang/Object;)I").sig("(TT;)I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.sig("Ljava/lang/Object;LJ<Ljava/lang/String;>;")
.defaultMethod("m", "(Ljava/lang/String;)I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(I,J)
.sig("Ljava/lang/Object;LI;LJ<Ljava/lang/String;>;")
.concreteMethod("m", "(Ljava/lang/String;)I").callSuper(I, "m", "(Ljava/lang/Object;)I").build()
.build();
b.test().callSite(I, C, "m", "(Ljava/lang/Object;)I").returns(1).done()
.test().callSite(J, C, "m", "(Ljava/lang/Object;)I").returns(1).done()
.test().callSite(J, C, "m", "(Ljava/lang/String;)I").returns(1).done()
.test().callSite(C, C, "m", "(Ljava/lang/Object;)I").returns(1).done()
.test().callSite(C, C, "m", "(Ljava/lang/String;)I").returns(1).done()
.run();
}
/*
* Super-call of non-default method
*
* class C { int m() { return 1; } }
* class D extends C { int m() { return C.super.m(); } }
*
* TEST: C d = new D(); d.m() == 1
* TEST: D d = new D(); d.m() == 1
*/
public void testSuperNonDefault() {
TestBuilder b = factory.getBuilder();
ConcreteClass C = b.clazz("C")
.concreteMethod("m", "()I").returns(1).build()
.build();
ConcreteClass D = b.clazz("D").extend(C)
.concreteMethod("m", "()I").callSuper(C, "m", "()I").build()
.build();
b.test().callSite(C, D, "m", "()I").returns(1).done()
.test().callSite(D, D, "m", "()I").returns(1).done()
.run();
}
/*
* Super-call of non-default method
*
* interface I { int m(); }
* class C { int m() { return 1; } }
* class D extends C implements I { int m() { return I.super.m(); } }
* class E extends C implements I { int m() { return C.super.m(); } }
*
* TEST: I d = new D(); d.m() ==> AME
* TEST: C d = new D(); d.m() ==> AME
* TEST: D d = new D(); d.m() ==> AME
* TEST: I e = new E(); e.m() == 1
* TEST: C e = new E(); e.m() == 1
* TEST: E e = new E(); e.m() == 1
*/
public void testSuperNonDefault1() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.abstractMethod("m", "()I").build()
.build();
ConcreteClass C = b.clazz("C")
.concreteMethod("m", "()I").returns(1).build()
.build();
ConcreteClass D = b.clazz("D").extend(C).implement(I)
.concreteMethod("m", "()I").callSuper(I, "m", "()I").build()
.build();
ConcreteClass E = b.clazz("E").extend(C).implement(I)
.concreteMethod("m", "()I").callSuper(C, "m", "()I").build()
.build();
b.test().callSite(I, D, "m", "()I").throws_(AbstractMethodError.class).done()
.test().callSite(C, D, "m", "()I").throws_(AbstractMethodError.class).done()
.test().callSite(D, D, "m", "()I").throws_(AbstractMethodError.class).done()
.test().callSite(I, E, "m", "()I").returns(1).done()
.test().callSite(C, E, "m", "()I").returns(1).done()
.test().callSite(E, E, "m", "()I").returns(1).done()
.run();
}
/*
* Super-call of non-default method
*
* interface I { int m() {return 1;} }
* class C { int m() { return 2; } }
* class D extends C implements I { int m() { return I.super.m(); } }
* class E extends C implements I { int m() { return C.super.m(); } }
*
* TEST: I d = new D(); d.m() == 1
* TEST: C d = new D(); d.m() == 1
* TEST: D d = new D(); d.m() == 1
*
* TEST: I e = new E(); e.m() == 2
* TEST: C e = new E(); e.m() == 2
* TEST: E e = new E(); e.m() == 2
*/
public void testSuperNonDefault2() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
ConcreteClass C = b.clazz("C")
.concreteMethod("m", "()I").returns(2).build()
.build();
ConcreteClass D = b.clazz("D").extend(C).implement(I)
.concreteMethod("m", "()I").callSuper(I, "m", "()I").build()
.build();
ConcreteClass E = b.clazz("E").extend(C).implement(I)
.concreteMethod("m", "()I").callSuper(C, "m", "()I").build()
.build();
b.test().callSite(I, D, "m", "()I").returns(1).done()
.test().callSite(C, D, "m", "()I").returns(1).done()
.test().callSite(D, D, "m", "()I").returns(1).done()
.test().callSite(I, E, "m", "()I").returns(2).done()
.test().callSite(C, E, "m", "()I").returns(2).done()
.test().callSite(E, E, "m", "()I").returns(2).done()
.run();
}
/*
* Disambig
*
* interface I { int m() default { return 1; } }
* interface J { int m() default { return 2; } }
* class C implements I, J { int q() { return I.super.m(); }
* int r() { return J.super.m(); } }
*
* TEST: C c = new C(); c.m() == ICCE;
* TEST: C c = new C(); c.q() == 1;
* TEST: C c = new C(); c.r() == 2;
*/
public void testDisambig() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(I,J)
.concreteMethod("q", "()I").callSuper(I, "m", "()I").build()
.concreteMethod("r", "()I").callSuper(J, "m", "()I").build()
.build();
b.test().callSite(C, C, "q", "()I").returns(1).done()
.test().callSite(C, C, "r", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.run();
}
/*
* Disambig2
*
* interface I { int m() default { return 1; } }
* interface J { int m() default { return 2; } }
* interface K extends I
* interface L extends J
* class C implements K, L { int q() { return K.super.m(); }
* int r() { return L.super.m(); } }
*
* TEST: C c = new C(); c.m() == ICCE;
* TEST: C c = new C(); c.q() == 1;
* TEST: C c = new C(); c.r() == 2;
*/
public void testDisambig2() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J")
.defaultMethod("m", "()I").returns(2).build()
.build();
Interface K = b.intf("K").extend(I).build();
Interface L = b.intf("L").extend(J).build();
ConcreteClass C = b.clazz("C").implement(K,L)
.concreteMethod("q", "()I").callSuper(K, "m", "()I").build()
.concreteMethod("r", "()I").callSuper(L, "m", "()I").build()
.build();
b.test().callSite(C, C, "q", "()I").returns(1).done()
.test().callSite(C, C, "r", "()I").returns(2).done()
.test().callSite(C, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.run();
}
/*
* testResolvedShadowed
*
* interface I { int m() default { return 1; } }
* interface K extends I { int m() default { return 2; } }
* interface J extends I { }
* class C implements J,K { int q { J.super.m(); } }
*
* TEST: C c = new C(); c.m() == 2
* TEST: C c = new C(); c.q() == 1
*/
public void testResolvedShadowed() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface K = b.intf("K").extend(I)
.defaultMethod("m", "()I").returns(2).build()
.build();
Interface J = b.intf("J").extend(I)
.build();
ConcreteClass C = b.clazz("C").implement(J,K)
.concreteMethod("q", "()I").callSuper(J, "m", "()I").build()
.build();
b.test().callSite(C, C, "m", "()I").returns(2).done()
.test().callSite(C, C, "q", "()I").returns(1).done()
.run();
}
/*
* testResolvedButSuperClass
*
* interface I { int m() default { return 1; } }
* interface J { }
* class A { public int m() { return 2; } }
* class C implements J extends A { int q { J.super.m(); } }
*
* TEST: C c = new C(); c.q() == 1
* TEST: C c = new C(); c.m() == 2
*/
public void testResolvedButSuperClass() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I)
.build();
ConcreteClass A = b.clazz("A")
.concreteMethod("m", "()I").returns(2).build()
.build();
ConcreteClass C = b.clazz("C").implement(J).extend(A)
.concreteMethod("q", "()I").callSuper(J, "m", "()I").build()
.build();
b.test().callSite(C, C, "q", "()I").returns(1).done()
.test().callSite(C, C, "m", "()I").returns(2).done()
.run();
}
/*
* testResolved1Caller2NotShadowed
*
* interface I { int m() default { return 1; } }
* interface J extends I { }
* interface L { int m() default { return 2; } }
* interface K extends I, L { }
* class C implements J,K { int q { J.super.m(); } }
*
* TEST: C c = new C(); c.m() == ICCE
* TEST: C c = new C(); c.q() == 1
*/
public void testResolved1Caller2NotShadowed() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I).build();
Interface L = b.intf("L")
.defaultMethod("m", "()I").returns(2).build()
.build();
Interface K = b.intf("K").extend(I,L)
.build();
ConcreteClass C = b.clazz("C").implement(J,K)
.concreteMethod("q", "()I").callSuper(J, "m", "()I").build()
.build();
b.test().callSite(C, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
.test().callSite(C, C, "q", "()I").returns(1).done()
.run();
}
/*
* Test validity of invokespecial on indirect superinterface's method,
* this test should receive a verification error.
*
* (JVMS draft 0.7.0) JVMS 4.9.2 Structural Constraints
* Each invokespecial instruction must name an instance initialization
* method (2.9), or must reference a method in the current class or interface,
* a method in a superclass of the current class or interface, or a method
* in a direct superinterface of the current class or interface
*
* Note: Normally javac would reject this test case complaining that,
* InDirectSuper.java:5: error: not an enclosing class: I
* interface K extends J { default public void m() { I.super.m(); } }
* ^
* However, the below test case allows us to check for this structural
* constraint on invokespecial in the JVM.
*
* interface I { int m() default { return 1; } }
* interface J extends I { }
* interface K extends J { int m() default { return I.super.m(); } }
* class C implements K {}
*
* TEST: K k = new C(); k.m() == VerifyError
*/
@NotApplicableFor(modes = { REDEFINITION }) // Can't redefine a class that gets VerifyError
public void testSuperInvalidIndirectInterfaceMethodInvokeSpecial() {
TestBuilder b = factory.getBuilder();
Interface I = b.intf("I")
.defaultMethod("m", "()I").returns(1).build()
.build();
Interface J = b.intf("J").extend(I).build();
Interface K = b.intf("K").extend(J)
.defaultMethod("m", "()I").callSuper(I, "m", "()I").build()
.build();
ConcreteClass C = b.clazz("C").implement(K).build();
b.test().callSite(K, C, "m", "()I").throws_(VerifyError.class).done()
.run();
}
}

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_none_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 0
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_none_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 0
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_none_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 0
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_none_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 0
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_none_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 0
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_none_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 0
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_strict_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2048
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_strict_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2048
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_strict_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2048
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_strict_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2048
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_strict_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2048
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_strict_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2048
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_sync_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 32
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_sync_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 32
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_sync_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 32
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_sync_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 32
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_sync_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 32
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_sync_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 32
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_syncstrict_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2080
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_syncstrict_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2080
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_syncstrict_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2080
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_syncstrict_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2080
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_syncstrict_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2080
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/AccessibilityFlags_v52_syncstrict_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.AccessibilityFlagsTest
* -ver 52
* -flags 2080
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_none_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 0
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_none_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 0
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_none_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 0
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_none_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 0
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_none_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 0
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_none_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 0
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_strict_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2048
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_strict_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2048
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_strict_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2048
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_strict_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2048
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_strict_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2048
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_strict_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2048
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_sync_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 32
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_sync_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 32
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_sync_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 32
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_sync_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 32
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_sync_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 32
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_sync_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 32
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_syncstrict_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2080
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_syncstrict_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2080
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_syncstrict_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2080
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_syncstrict_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2080
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_syncstrict_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2080
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v49_syncstrict_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 49
* -flags 2080
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_none_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 0
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_none_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 0
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_none_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 0
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_none_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 0
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_none_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 0
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_none_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 0
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_strict_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2048
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_strict_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2048
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_strict_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2048
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_strict_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2048
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_strict_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2048
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_strict_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2048
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_sync_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 32
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_sync_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 32
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_sync_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 32
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_sync_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 32
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_sync_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 32
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_sync_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 32
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_syncstrict_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2080
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_syncstrict_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2080
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_syncstrict_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2080
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_syncstrict_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2080
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_syncstrict_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2080
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v50_syncstrict_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 50
* -flags 2080
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_none_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 0
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_none_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 0
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_none_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 0
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_none_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 0
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_none_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 0
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_none_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 0
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_strict_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 2048
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_strict_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 2048
* -redefine
* -retransform
* -mode direct
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_strict_invoke_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 2048
* -mode invoke
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_strict_invoke_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 2048
* -redefine
* -retransform
* -mode invoke
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_strict_reflect_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 2048
* -mode reflect
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_strict_reflect_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 2048
* -redefine
* -retransform
* -mode reflect
*/

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_sync_direct_noredefine.
* VM Testbase keywords: [defmeth, jdk8, quick]
*
* @library /vmTestbase /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm
* -XX:+IgnoreUnrecognizedVMOptions
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 32
* -mode direct
*/

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @modules java.base/jdk.internal.org.objectweb.asm:+open java.base/jdk.internal.org.objectweb.asm.util:+open
*
* @summary converted from VM Testbase vm/runtime/defmeth/scenarios/Basic_v51_sync_direct_redefine.
* VM Testbase keywords: [defmeth, jdk8, jdk_instrument, quick]
*
* @library /vmTestbase /test/lib
*
* @comment build retransform.jar in current dir
* @run driver vm.runtime.defmeth.shared.BuildJar
*
* @run driver jdk.test.lib.FileInstaller . .
* @run main/othervm/native
* -agentlib:redefineClasses
* -javaagent:retransform.jar
* vm.runtime.defmeth.BasicTest
* -ver 51
* -flags 32
* -redefine
* -retransform
* -mode direct
*/

Some files were not shown because too many files have changed in this diff Show More