< prev index next >
test/compiler/jvmci/common/testcases/MultipleImplementer2.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2015, 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.
--- 1,7 ----
/*
! * Copyright (c) 2015, 2016, 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.
*** 21,45 ****
* questions.
*/
package compiler.jvmci.common.testcases;
public class MultipleImplementer2 implements MultipleImplementersInterface {
private static int intStaticField = INT_CONSTANT;
! static long longStaticField = LONG_CONSTANT;
! static float floatStaticField = FLOAT_CONSTANT;
static double doubleStaticField = DOUBLE_CONSTANT;
public static String stringStaticField = STRING_CONSTANT;
protected static Object objectStaticField = OBJECT_CONSTANT;
public int intField = INT_CONSTANT;
private long longField = LONG_CONSTANT;
protected float floatField = FLOAT_CONSTANT;
! double doubleField = DOUBLE_CONSTANT;
! String stringField = STRING_CONSTANT;
! Object objectField = OBJECT_CONSTANT;
public MultipleImplementer2() {
intField = Integer.MAX_VALUE;
longField = Long.MAX_VALUE;
floatField = Float.MAX_VALUE;
--- 21,53 ----
* questions.
*/
package compiler.jvmci.common.testcases;
+ import java.util.HashMap;
+ import java.util.Map;
+
public class MultipleImplementer2 implements MultipleImplementersInterface {
+ // Different access levels on the fields of this class are used on purpose.
+ // It is needed to verify jdk.vm.ci.CompilerToVM constant pool related
+ // methods, e.g. resolveFieldInPool.
+
private static int intStaticField = INT_CONSTANT;
! final static long longStaticField = LONG_CONSTANT;
! volatile static float floatStaticField = FLOAT_CONSTANT;
static double doubleStaticField = DOUBLE_CONSTANT;
public static String stringStaticField = STRING_CONSTANT;
protected static Object objectStaticField = OBJECT_CONSTANT;
public int intField = INT_CONSTANT;
private long longField = LONG_CONSTANT;
protected float floatField = FLOAT_CONSTANT;
! transient double doubleField = DOUBLE_CONSTANT;
! volatile String stringField = STRING_CONSTANT;
! String stringFieldEmpty = "";
! final Object objectField;
public MultipleImplementer2() {
intField = Integer.MAX_VALUE;
longField = Long.MAX_VALUE;
floatField = Float.MAX_VALUE;
*** 56,69 ****
@Override
public void finalize() throws Throwable {
super.finalize();
}
- public void interfaceMethodReferral2(MultipleImplementersInterface obj) {
- obj.interfaceMethodReferral(obj);
- }
-
public void lambdaUsingMethod2() {
Thread t = new Thread(this::testMethod);
t.start();
}
}
--- 64,117 ----
@Override
public void finalize() throws Throwable {
super.finalize();
}
public void lambdaUsingMethod2() {
Thread t = new Thread(this::testMethod);
t.start();
}
+
+ /**
+ * This method is needed to have "getstatic" and "getfield" instructions
+ * in the class. These instructions are needed to test
+ * resolveFieldInPool method, because it needs a bytecode as one of its arguments.
+ */
+ public void printFileds() {
+ System.out.println(intStaticField);
+ System.out.println(longStaticField);
+ System.out.println(floatStaticField);
+ System.out.println(doubleStaticField);
+ System.out.println(stringStaticField);
+ System.out.println(objectStaticField);
+ System.out.println(intField);
+ System.out.println(longField);
+ System.out.println(floatField);
+ System.out.println(doubleField);
+ System.out.println(stringField);
+ System.out.println(stringFieldEmpty);
+ System.out.println(objectField);
+ }
+
+ public static void staticMethod() {
+ System.getProperties(); // calling some static method
+ Map map = new HashMap(); // calling some constructor
+ map.put(OBJECT_CONSTANT, OBJECT_CONSTANT); // calling some interface method
+ map.remove(OBJECT_CONSTANT); // calling some default interface method
+ }
+
+ @Override
+ public void instanceMethod() {
+ toString(); // calling some virtual method
+ super.toString(); // calling some special method
+ }
+
+ @Override
+ public void anonClassMethod() {
+ new Runnable() {
+ @Override
+ public void run() {
+ System.out.println("Running");
+ }
+ }.run();
+ }
}
< prev index next >