# HG changeset patch # User rschatz # Date 1462961111 -7200 # Wed May 11 12:05:11 2016 +0200 # Node ID 2adf861952c4e57495789dc358a77424301848ff # Parent 6e0056d7769d45470a85eb5480d0bbf00d5f5de6 8156552: [JVMCI] remove final and stable field handling from ConstantReflectionProvider diff --git a/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java b/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java --- a/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java +++ b/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantReflectionProvider.java @@ -22,20 +22,15 @@ */ package jdk.vm.ci.hotspot; -import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; -import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; - import java.lang.reflect.Array; import java.util.Objects; import jdk.internal.vm.annotation.Stable; import jdk.vm.ci.common.JVMCIError; -import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.Option; import jdk.vm.ci.meta.Constant; import jdk.vm.ci.meta.ConstantReflectionProvider; import jdk.vm.ci.meta.JavaConstant; import jdk.vm.ci.meta.JavaKind; -import jdk.vm.ci.meta.JavaType; import jdk.vm.ci.meta.MemoryAccessProvider; import jdk.vm.ci.meta.MethodHandleAccessProvider; import jdk.vm.ci.meta.ResolvedJavaField; @@ -89,50 +84,6 @@ return Array.getLength(arrayObject); } - public JavaConstant readConstantArrayElement(JavaConstant array, int index) { - if (array instanceof HotSpotObjectConstantImpl && ((HotSpotObjectConstantImpl) array).getStableDimension() > 0) { - JavaConstant element = readArrayElement(array, index); - if (element != null && (((HotSpotObjectConstantImpl) array).isDefaultStable() || !element.isDefaultForKind())) { - return element; - } - } - return null; - } - - /** - * Try to convert {@code offset} into an an index into {@code array}. - * - * @return the computed index or -1 if the offset isn't within the array - */ - private int indexForOffset(JavaConstant array, long offset) { - if (array.getJavaKind() != JavaKind.Object || array.isNull()) { - return -1; - } - Class componentType = ((HotSpotObjectConstantImpl) array).object().getClass().getComponentType(); - JavaKind kind = runtime.getHostJVMCIBackend().getMetaAccess().lookupJavaType(componentType).getJavaKind(); - int arraybase = getArrayBaseOffset(kind); - int scale = getArrayIndexScale(kind); - if (offset < arraybase) { - return -1; - } - long index = offset - arraybase; - if (index % scale != 0) { - return -1; - } - long result = index / scale; - if (result >= Integer.MAX_VALUE) { - return -1; - } - return (int) result; - } - - public JavaConstant readConstantArrayElementForOffset(JavaConstant array, long offset) { - if (array instanceof HotSpotObjectConstantImpl && ((HotSpotObjectConstantImpl) array).getStableDimension() > 0) { - return readConstantArrayElement(array, indexForOffset(array, offset)); - } - return null; - } - @Override public JavaConstant readArrayElement(JavaConstant array, int index) { if (array == null || array.getJavaKind() != JavaKind.Object || array.isNull()) { @@ -146,11 +97,7 @@ if (a instanceof Object[]) { Object element = ((Object[]) a)[index]; - if (((HotSpotObjectConstantImpl) array).getStableDimension() > 1) { - return HotSpotObjectConstantImpl.forStableArray(element, ((HotSpotObjectConstantImpl) array).getStableDimension() - 1, ((HotSpotObjectConstantImpl) array).isDefaultStable()); - } else { - return HotSpotObjectConstantImpl.forObject(element); - } + return HotSpotObjectConstantImpl.forObject(element); } else { return JavaConstant.forBoxedPrimitive(Array.get(a, index)); } @@ -228,103 +175,8 @@ return null; } - private static final String SystemClassName = "Ljava/lang/System;"; - - /** - * Determines if a static field is constant for the purpose of - * {@link #readConstantFieldValue(ResolvedJavaField, JavaConstant)}. - */ - protected boolean isStaticFieldConstant(HotSpotResolvedJavaField staticField) { - if (staticField.isFinal() || (staticField.isStable() && runtime.getConfig().foldStableValues)) { - ResolvedJavaType holder = staticField.getDeclaringClass(); - if (holder.isInitialized() && !holder.getName().equals(SystemClassName)) { - return true; - } - } - return false; - } - - /** - * Determines if a value read from a {@code final} instance field is considered constant. The - * implementation in {@link HotSpotConstantReflectionProvider} returns true if {@code value} is - * not the {@link JavaConstant#isDefaultForKind default value} for its kind or if - * {@link Option#TrustFinalDefaultFields} is true. - * - * @param value a value read from a {@code final} instance field - * @param receiverClass the {@link Object#getClass() class} of object from which the - * {@code value} was read - */ - protected boolean isFinalInstanceFieldValueConstant(JavaConstant value, Class receiverClass) { - return !value.isDefaultForKind() || Option.TrustFinalDefaultFields.getBoolean(); - } - - /** - * Determines if a value read from a {@link Stable} instance field is considered constant. The - * implementation in {@link HotSpotConstantReflectionProvider} returns true if {@code value} is - * not the {@link JavaConstant#isDefaultForKind default value} for its kind. - * - * @param value a value read from a {@link Stable} field - * @param receiverClass the {@link Object#getClass() class} of object from which the - * {@code value} was read - */ - protected boolean isStableInstanceFieldValueConstant(JavaConstant value, Class receiverClass) { - return !value.isDefaultForKind(); - } - - public JavaConstant readConstantFieldValue(ResolvedJavaField field, JavaConstant receiver) { - HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field; - - if (hotspotField.isStatic()) { - if (isStaticFieldConstant(hotspotField)) { - JavaConstant value = readFieldValue(field, receiver); - if (hotspotField.isFinal() || !value.isDefaultForKind()) { - return value; - } - } - } else { - /* - * for non-static final fields, we must assume that they are only initialized if they - * have a non-default value. - */ - Object object = receiver.isNull() ? null : ((HotSpotObjectConstantImpl) receiver).object(); - - // Canonicalization may attempt to process an unsafe read before - // processing a guard (e.g. a null check or a type check) for this read - // so we need to check the object being read - if (object != null) { - if (hotspotField.isFinal()) { - if (hotspotField.isInObject(object)) { - JavaConstant value = readFieldValue(field, receiver); - if (isFinalInstanceFieldValueConstant(value, object.getClass())) { - return value; - } - } - } else if (hotspotField.isStable() && runtime.getConfig().foldStableValues) { - if (hotspotField.isInObject(object)) { - JavaConstant value = readFieldValue(field, receiver); - if (isStableInstanceFieldValueConstant(value, object.getClass())) { - return value; - } - } - } - } - } - return null; - } - public JavaConstant readFieldValue(ResolvedJavaField field, JavaConstant receiver) { HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field; - if (!hotspotField.isStable()) { - return readNonStableFieldValue(field, receiver); - } else if (runtime.getConfig().foldStableValues) { - return readStableFieldValue(field, receiver, hotspotField.isDefaultStable()); - } else { - return null; - } - } - - private JavaConstant readNonStableFieldValue(ResolvedJavaField field, JavaConstant receiver) { - HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field; if (hotspotField.isStatic()) { HotSpotResolvedJavaType holder = (HotSpotResolvedJavaType) hotspotField.getDeclaringClass(); if (holder.isInitialized()) { @@ -338,27 +190,6 @@ return null; } - public JavaConstant readStableFieldValue(ResolvedJavaField field, JavaConstant receiver, boolean isDefaultStable) { - JavaConstant fieldValue = readNonStableFieldValue(field, receiver); - if (fieldValue != null && fieldValue.isNonNull()) { - JavaType declaredType = field.getType(); - if (declaredType.getComponentType() != null) { - int stableDimension = getArrayDimension(declaredType); - return HotSpotObjectConstantImpl.forStableArray(((HotSpotObjectConstantImpl) fieldValue).object(), stableDimension, isDefaultStable); - } - } - return fieldValue; - } - - private static int getArrayDimension(JavaType type) { - int dimensions = 0; - JavaType componentType = type; - while ((componentType = componentType.getComponentType()) != null) { - dimensions++; - } - return dimensions; - } - @Override public JavaConstant asJavaClass(ResolvedJavaType type) { return HotSpotObjectConstantImpl.forObject(((HotSpotResolvedJavaType) type).mirror()); diff --git a/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java b/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java --- a/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java +++ b/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java @@ -101,8 +101,7 @@ PrintConfig(boolean.class, false, "Prints all HotSpotVMConfig fields."), PrintFlags(boolean.class, false, "Prints all JVMCI flags and exits."), ShowFlags(boolean.class, false, "Prints all JVMCI flags and continues."), - TraceMethodDataFilter(String.class, null, ""), - TrustFinalDefaultFields(boolean.class, true, "Determines whether to treat final fields with default values as constant."); + TraceMethodDataFilter(String.class, null, ""); /** * The prefix for system properties that are JVMCI options. diff --git a/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotObjectConstantImpl.java b/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotObjectConstantImpl.java --- a/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotObjectConstantImpl.java +++ b/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotObjectConstantImpl.java @@ -53,15 +53,6 @@ } } - static JavaConstant forStableArray(Object object, int stableDimension, boolean isDefaultStable) { - if (object == null) { - return JavaConstant.NULL_POINTER; - } else { - assert object.getClass().isArray(); - return new HotSpotObjectConstantImpl(object, false, stableDimension, isDefaultStable); - } - } - public static JavaConstant forBoxedValue(JavaKind kind, Object value) { if (kind == JavaKind.Object) { return HotSpotObjectConstantImpl.forObject(value); @@ -82,22 +73,11 @@ private final Object object; private final boolean compressed; - private final byte stableDimension; - private final boolean isDefaultStable; - private HotSpotObjectConstantImpl(Object object, boolean compressed, int stableDimension, boolean isDefaultStable) { + private HotSpotObjectConstantImpl(Object object, boolean compressed) { this.object = object; this.compressed = compressed; - this.stableDimension = (byte) stableDimension; - this.isDefaultStable = isDefaultStable; assert object != null; - assert stableDimension == 0 || (object != null && object.getClass().isArray()); - assert stableDimension >= 0 && stableDimension <= 255; - assert !isDefaultStable || stableDimension > 0; - } - - private HotSpotObjectConstantImpl(Object object, boolean compressed) { - this(object, compressed, 0, false); } @Override @@ -118,12 +98,12 @@ public JavaConstant compress() { assert !compressed; - return new HotSpotObjectConstantImpl(object, true, stableDimension, isDefaultStable); + return new HotSpotObjectConstantImpl(object, true); } public JavaConstant uncompress() { assert compressed; - return new HotSpotObjectConstantImpl(object, false, stableDimension, isDefaultStable); + return new HotSpotObjectConstantImpl(object, false); } public HotSpotResolvedObjectType getType() { @@ -248,7 +228,7 @@ return true; } else if (o instanceof HotSpotObjectConstantImpl) { HotSpotObjectConstantImpl other = (HotSpotObjectConstantImpl) o; - return object == other.object && compressed == other.compressed && stableDimension == other.stableDimension && isDefaultStable == other.isDefaultStable; + return object == other.object && compressed == other.compressed; } return false; } @@ -266,19 +246,4 @@ public String toString() { return (compressed ? "NarrowOop" : getJavaKind().getJavaName()) + "[" + JavaKind.Object.format(object) + "]"; } - - /** - * Number of stable dimensions if this constant is a stable array. - */ - public int getStableDimension() { - return stableDimension & 0xff; - } - - /** - * Returns {@code true} if this is a stable array constant and its elements should be considered - * as stable regardless of whether they are default values. - */ - public boolean isDefaultStable() { - return isDefaultStable; - } } diff --git a/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/ConstantReflectionProvider.java b/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/ConstantReflectionProvider.java --- a/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/ConstantReflectionProvider.java +++ b/src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/ConstantReflectionProvider.java @@ -56,39 +56,10 @@ JavaConstant readArrayElement(JavaConstant array, int index); /** - * Reads a value from the given array at the given index if it is a stable array. Returns - * {@code null} if the constant is not a stable array, if it is a default value, if the index is - * out of bounds, or if the value is not available at this point. - */ - JavaConstant readConstantArrayElement(JavaConstant array, int index); - - /** - * Reads a value from the given array at the given offset if it is a stable array. The offset - * will be decoded relative to the platform addressing into an index into the array. Returns - * {@code null} if the constant is not a stable array, if it is a default value, if the offset - * is out of bounds, or if the value is not available at this point. - */ - JavaConstant readConstantArrayElementForOffset(JavaConstant array, long offset); - - /** - * Gets the constant value of this field. Note that a {@code static final} field may not be - * considered constant if its declaring class is not yet initialized or if it is a well known - * field that can be updated via other means (e.g., {@link System#setOut(java.io.PrintStream)}). - * - * @param receiver object from which this field's value is to be read. This value is ignored if - * this field is static. - * @return the constant value of this field or {@code null} if this field is not considered - * constant by the runtime - */ - JavaConstant readConstantFieldValue(ResolvedJavaField field, JavaConstant receiver); - - /** * Gets the current value of this field for a given object, if available. * * There is no guarantee that the same value will be returned by this method for a field unless - * the field is considered to be - * {@linkplain #readConstantFieldValue(ResolvedJavaField, JavaConstant) constant} by the - * runtime. + * the field is considered to be constant by the runtime. * * @param receiver object from which this field's value is to be read. This value is ignored if * this field is static. @@ -98,23 +69,6 @@ JavaConstant readFieldValue(ResolvedJavaField field, JavaConstant receiver); /** - * Gets the current value of this field for a given object, if available. Like - * {@link #readFieldValue(ResolvedJavaField, JavaConstant)} but treats array fields as stable. - * - * There is no guarantee that the same value will be returned by this method for a field unless - * the field is considered to be - * {@linkplain #readConstantFieldValue(ResolvedJavaField, JavaConstant) constant} by the - * runtime. - * - * @param receiver object from which this field's value is to be read. This value is ignored if - * this field is static. - * @param isDefaultStable if {@code true}, default values are considered stable - * @return the value of this field or {@code null} if the value is not available (e.g., because - * the field holder is not yet initialized). - */ - JavaConstant readStableFieldValue(ResolvedJavaField field, JavaConstant receiver, boolean isDefaultStable); - - /** * Converts the given {@link JavaKind#isPrimitive() primitive} constant to a boxed * {@link JavaKind#Object object} constant, according to the Java boxing rules. Returns * {@code null} if the source is is not a primitive constant, or the boxed value is not diff --git a/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/HotSpotConstantReflectionProviderTest.java b/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/HotSpotConstantReflectionProviderTest.java --- a/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/HotSpotConstantReflectionProviderTest.java +++ b/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/HotSpotConstantReflectionProviderTest.java @@ -100,80 +100,6 @@ CONSTANT_REFLECTION_PROVIDER.readFieldValue(field, receiver); } - @Test(dataProvider = "readStableFieldValueDataProvider", dataProviderClass = ReadStableFieldValueDataProvider.class) - public void testReadStableFieldValue(ResolvedJavaField field, JavaConstant receiver, boolean isDefStab, - JavaConstant expected) { - Assert.assertEquals( - CONSTANT_REFLECTION_PROVIDER.readStableFieldValue(field, receiver, isDefStab), - expected, - "Unexpected result:"); - } - - @Test(dataProvider = "readStableFieldValueArrayDataProvider", dataProviderClass = ReadStableFieldValueDataProvider.class) - public void testReadStableFieldValueForArray(ResolvedJavaField field, JavaConstant receiver, boolean isDefStab, - int arrayDim, JavaConstant expected) { - JavaConstant result = CONSTANT_REFLECTION_PROVIDER.readStableFieldValue(field, receiver, - isDefStab); - boolean resultDefStab = false; - int resultStableDim = -1; - try { - Class hotSpotObjectConstantImplClass = Class.forName( - "jdk.vm.ci.hotspot.HotSpotObjectConstantImpl"); - Method getStableDimensionMethod = hotSpotObjectConstantImplClass.getDeclaredMethod( - "getStableDimension"); - Method isDefaultStableMethod = hotSpotObjectConstantImplClass.getDeclaredMethod( - "isDefaultStable"); - getStableDimensionMethod.setAccessible(true); - isDefaultStableMethod.setAccessible(true); - resultDefStab = (boolean) isDefaultStableMethod.invoke(result); - resultStableDim = (int) getStableDimensionMethod.invoke(result); - } catch (ReflectiveOperationException e) { - throw new Error("Unexpected error: " + e, e); - } - Assert.assertEquals(resultDefStab, isDefStab, - "Wrong default stable value for " + result.toString()); - Assert.assertEquals(resultStableDim, arrayDim, - "Wrong array dimension for " + result.toString()); - Assert.assertEquals(result.toString(), expected.toString(), "Unexpected result:"); - } - - @Test(dataProvider = "readStableFieldValueNegativeDataProvider", dataProviderClass = ReadStableFieldValueDataProvider.class, expectedExceptions = {NullPointerException.class}) - public void testNegativeReadStableFieldValue(ResolvedJavaField field, JavaConstant receiver, boolean isDefStab) { - CONSTANT_REFLECTION_PROVIDER.readStableFieldValue(field, receiver, isDefStab); - } - - @Test(dataProvider = "readConstantFieldValueDataProvider", dataProviderClass = ReadConstantFieldValueDataProvider.class) - public void testReadConstantFieldValue(ResolvedJavaField field, JavaConstant receiver, JavaConstant expected, - String testInfo) { - String msg = String.format("Unexpected result for %s. Field is stable = %s.", testInfo, - ((HotSpotResolvedJavaField) field).isStable()); - Assert.assertEquals(CONSTANT_REFLECTION_PROVIDER.readConstantFieldValue(field, receiver), - expected, msg); - } - - @Test(dataProvider = "readConstantFieldValueNegativeDataProvider", dataProviderClass = ReadConstantFieldValueDataProvider.class, expectedExceptions = {NullPointerException.class}) - public void testNegativeReadConstantFieldValue(ResolvedJavaField field, JavaConstant receiver) { - CONSTANT_REFLECTION_PROVIDER.readConstantFieldValue(field, receiver); - } - - @Test(dataProvider = "readConstantArrayElementDataProvider", dataProviderClass = ReadConstantArrayElementDataProvider.class) - public void testReadConstantArrayElement(JavaConstant array, int index, JavaConstant expected, String testInfo) { - JavaConstant actual = CONSTANT_REFLECTION_PROVIDER.readConstantArrayElement(array, index); - Assert.assertEquals(actual == null ? "null" : actual.toString(), - expected == null ? "null" : expected.toString(), - String.format("Unexpected result while testing %s:", testInfo)); - } - - @Test(dataProvider = "readConstantArrayElementForOffsetDataProvider", dataProviderClass = ReadConstantArrayElementDataProvider.class) - public void testReadConstantArrayElementForOffset(JavaConstant array, long offset, JavaConstant expected, - String testInfo) { - JavaConstant actual = CONSTANT_REFLECTION_PROVIDER.readConstantArrayElementForOffset(array, - offset); - Assert.assertEquals(actual == null ? "null" : actual.toString(), - expected == null ? "null" : expected.toString(), - String.format("Unexpected result while testing %s:", testInfo)); - } - @Test(dataProvider = "asJavaTypeDataProvider", dataProviderClass = AsJavaTypeDataProvider.class) public void testAsJavaType(JavaConstant constant, String expected) { ResolvedJavaType actual = CONSTANT_REFLECTION_PROVIDER.asJavaType(constant); diff --git a/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ReadConstantArrayElementDataProvider.java b/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ReadConstantArrayElementDataProvider.java deleted file mode 100644 --- a/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ReadConstantArrayElementDataProvider.java +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright (c) 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. - * - * 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 jdk.vm.ci.hotspot.test; - -import static jdk.vm.ci.hotspot.test.TestHelper.ARRAYS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.ARRAY_ARRAYS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.CONSTANT_REFLECTION_PROVIDER; -import static jdk.vm.ci.hotspot.test.TestHelper.DUMMY_CLASS_CONSTANT; -import static jdk.vm.ci.hotspot.test.TestHelper.DUMMY_CLASS_INSTANCE; -import static jdk.vm.ci.hotspot.test.TestHelper.getResolvedJavaField; -import static jdk.vm.ci.hotspot.test.TestHelper.INSTANCE_STABLE_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.INSTANCE_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.STABLE_ARRAYS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.STABLE_ARRAY_ARRAYS_MAP; - -import java.lang.reflect.Field; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.stream.Stream; - -import jdk.vm.ci.meta.JavaConstant; -import org.testng.annotations.DataProvider; -import jdk.internal.misc.Unsafe; -import jdk.vm.ci.meta.ResolvedJavaField; - -public class ReadConstantArrayElementDataProvider { - - // Non-stable array fields names mapped to their base offsets and index scale - private static final List NON_STABLE_ARRAY_NAMES = new LinkedList<>(); - - static { - NON_STABLE_ARRAY_NAMES.add( - new ArrayFieldParams("booleanArrayWithValues", Unsafe.ARRAY_BOOLEAN_BASE_OFFSET, - Unsafe.ARRAY_BOOLEAN_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("byteArrayWithValues", - Unsafe.ARRAY_BYTE_BASE_OFFSET, - Unsafe.ARRAY_BYTE_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("shortArrayWithValues", - Unsafe.ARRAY_SHORT_BASE_OFFSET, - Unsafe.ARRAY_SHORT_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("charArrayWithValues", - Unsafe.ARRAY_CHAR_BASE_OFFSET, - Unsafe.ARRAY_CHAR_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("intArrayWithValues", - Unsafe.ARRAY_INT_BASE_OFFSET, - Unsafe.ARRAY_INT_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("longArrayWithValues", - Unsafe.ARRAY_LONG_BASE_OFFSET, - Unsafe.ARRAY_LONG_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("floatArrayWithValues", - Unsafe.ARRAY_FLOAT_BASE_OFFSET, - Unsafe.ARRAY_FLOAT_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("doubleArrayWithValues", - Unsafe.ARRAY_DOUBLE_BASE_OFFSET, - Unsafe.ARRAY_DOUBLE_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("objectArrayWithValues", - Unsafe.ARRAY_BOOLEAN_BASE_OFFSET, - Unsafe.ARRAY_BOOLEAN_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("booleanArrayArrayWithValues", - Unsafe.ARRAY_OBJECT_BASE_OFFSET, - Unsafe.ARRAY_OBJECT_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("byteArrayArrayWithValues", - Unsafe.ARRAY_OBJECT_BASE_OFFSET, - Unsafe.ARRAY_OBJECT_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("shortArrayArrayWithValues", - Unsafe.ARRAY_OBJECT_BASE_OFFSET, - Unsafe.ARRAY_OBJECT_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("charArrayArrayWithValues", - Unsafe.ARRAY_OBJECT_BASE_OFFSET, - Unsafe.ARRAY_OBJECT_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("intArrayArrayWithValues", - Unsafe.ARRAY_OBJECT_BASE_OFFSET, - Unsafe.ARRAY_OBJECT_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("longArrayArrayWithValues", - Unsafe.ARRAY_OBJECT_BASE_OFFSET, - Unsafe.ARRAY_OBJECT_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("floatArrayArrayWithValues", - Unsafe.ARRAY_OBJECT_BASE_OFFSET, - Unsafe.ARRAY_OBJECT_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("doubleArrayArrayWithValues", - Unsafe.ARRAY_OBJECT_BASE_OFFSET, - Unsafe.ARRAY_OBJECT_INDEX_SCALE)); - NON_STABLE_ARRAY_NAMES.add(new ArrayFieldParams("objectArrayArrayWithValues", - Unsafe.ARRAY_OBJECT_BASE_OFFSET, - Unsafe.ARRAY_OBJECT_INDEX_SCALE)); - } - - // Stable array fields names mapped to their base offsets and index scale - private static final List STABLE_ARRAY_NAMES = new LinkedList<>(); - - static { - NON_STABLE_ARRAY_NAMES.stream().forEach((entry) -> { - String nsFieldName = entry.name; - char firstChar = nsFieldName.charAt(0); - char newFirstChar = Character.toUpperCase(firstChar); - String sFieldName = nsFieldName.replaceFirst("" + firstChar, - "" + newFirstChar); - sFieldName = "stable" + sFieldName; - STABLE_ARRAY_NAMES.add(new ArrayFieldParams(sFieldName, entry.offsetBase, entry.scale)); - }); - } - - @DataProvider(name = "readConstantArrayElementDataProvider") - public static Object[][] readConstantArrayElementDataProvider() { - LinkedList cfgSet = new LinkedList<>(); - for (int i : new int[]{0, 1}) { - NON_STABLE_ARRAY_NAMES.stream().forEach((entry) -> { - String fieldName = entry.name; - cfgSet.add(new Object[]{ - readFieldValue(fieldName), - i, - null, - "array field \"" + fieldName + "\" for index " + i}); - }); - STABLE_ARRAY_NAMES.stream().forEach((entry) -> { - String fieldName = entry.name; - cfgSet.add(new Object[]{ - readFieldValue(fieldName), - i, - i == 0 ? getJavaConstant(fieldName) : null, - "array field \"" + fieldName + "\" for index " + i}); - }); - } - Stream> arraysStream1 = Stream.concat(ARRAYS_MAP.entrySet().stream(), - ARRAY_ARRAYS_MAP.entrySet().stream()); - Stream> arraysStream2 = Stream.concat(STABLE_ARRAYS_MAP.entrySet().stream(), - STABLE_ARRAY_ARRAYS_MAP.entrySet().stream()); - Stream.concat(arraysStream1, arraysStream2).forEach((array) -> { - for (int i : new int[]{-1, 2}) { - cfgSet.add(new Object[]{ - array.getValue(), - i, - null, - "array field \"" + array.getKey() + "\" for index " + i}); - } - }); - cfgSet.add(new Object[]{null, 0, null, "null"}); - cfgSet.add(new Object[]{JavaConstant.NULL_POINTER, 0, null, "JavaConstant.NULL_POINTER"}); - INSTANCE_FIELDS_MAP.values().forEach((constant) -> { - cfgSet.add(new Object[]{constant, 0, null, "non-stable non-array field"}); - }); - INSTANCE_STABLE_FIELDS_MAP.values().forEach((constant) -> { - cfgSet.add(new Object[]{constant, 0, null, "stable non-array field"}); - }); - return cfgSet.toArray(new Object[0][0]); - } - - @DataProvider(name = "readConstantArrayElementForOffsetDataProvider") - public static Object[][] readConstantArrayElementForOffsetDataProvider() { - LinkedList cfgSet = new LinkedList<>(); - // Testing non-stable arrays. Result should be null in all cases - for (double i : new double[]{-1, 0, 0.5, 1, 1.5, 2}) { - NON_STABLE_ARRAY_NAMES.stream().forEach(entry -> { - String fieldName = entry.name; - long offset = (long) (entry.offsetBase + i * entry.scale); - cfgSet.add(new Object[]{ - readFieldValue(fieldName), - offset, - null, - "array field \"" + fieldName + "\" for offset " + offset}); - }); - } - // Testing stable arrays. Result should be null in all cases except "offset = base + 0" - for (double i : new double[]{-1, 0.5, 1, 1.5, 2}) { - STABLE_ARRAY_NAMES.stream().forEach(entry -> { - String fieldName = entry.name; - long offset = (long) Math.ceil(entry.offsetBase + i * entry.scale); - cfgSet.add(new Object[]{ - readFieldValue(fieldName), - offset, - null, - "array field \"" + fieldName + "\" for offset " + offset}); - }); - } - // Testing stable arrays "offset = base + 0". Result should be non-null - STABLE_ARRAY_NAMES.stream().forEach(entry -> { - String fieldName = entry.name; - long offset = (long) entry.offsetBase; - cfgSet.add(new Object[]{ - readFieldValue(fieldName), - offset, - getJavaConstant(fieldName), - "array field \"" + fieldName + "\" for offset " + offset}); - }); - // Testing null as array - cfgSet.add(new Object[]{null, 0, null, "null"}); - // Testing JavaConstant.NULL_POINTER as array - cfgSet.add(new Object[]{JavaConstant.NULL_POINTER, 0, null, "JavaConstant.NULL_POINTER"}); - // Testing non-stable non-array fields - INSTANCE_FIELDS_MAP.values().forEach((constant) -> { - cfgSet.add(new Object[]{constant, 0, null, "non-stable non-array field"}); - }); - // Testing stable non-array fields - INSTANCE_STABLE_FIELDS_MAP.values().forEach((constant) -> { - cfgSet.add(new Object[]{constant, 0, null, "stable non-array field"}); - }); - return cfgSet.toArray(new Object[0][0]); - } - - private static JavaConstant readFieldValue(String fieldName) { - return CONSTANT_REFLECTION_PROVIDER.readFieldValue(getResolvedJavaField(DummyClass.class, fieldName), - DUMMY_CLASS_CONSTANT); - } - - private static JavaConstant getJavaConstant(String fieldName) { - Class dummyClass = DummyClass.class; - Field arrayField; - try { - arrayField = dummyClass.getDeclaredField(fieldName); - } catch (NoSuchFieldException ex) { - throw new Error("Test bug: wrong field name " + ex, ex); - } catch (SecurityException ex) { - throw new Error("Unexpected error: " + ex, ex); - } - arrayField.setAccessible(true); - Class componentType = arrayField.getType().getComponentType(); - if (componentType == null) { - throw new Error("Test error: field is not an array"); - } - Object value; - try { - value = arrayField.get(DUMMY_CLASS_INSTANCE); - } catch (IllegalArgumentException | IllegalAccessException ex) { - throw new Error("Unexpected error: " + ex, ex); - } - if (componentType == boolean.class) { - return JavaConstant.forBoolean(((boolean[]) value)[0]); - } - if (componentType == byte.class) { - return JavaConstant.forByte(((byte[]) value)[0]); - } - if (componentType == short.class) { - return JavaConstant.forShort(((short[]) value)[0]); - } - if (componentType == char.class) { - return JavaConstant.forChar(((char[]) value)[0]); - } - if (componentType == int.class) { - return JavaConstant.forInt(((int[]) value)[0]); - } - if (componentType == long.class) { - return JavaConstant.forLong(((long[]) value)[0]); - } - if (componentType == float.class) { - return JavaConstant.forFloat(((float[]) value)[0]); - } - if (componentType == double.class) { - return JavaConstant.forDouble(((double[]) value)[0]); - } - return CONSTANT_REFLECTION_PROVIDER.forObject(((Object[]) value)[0]); - } - - private static class ArrayFieldParams { - public final String name; - public final int offsetBase; - public final int scale; - - ArrayFieldParams(String name, int offsetBase, int scale) { - this.name = name; - this.offsetBase = offsetBase; - this.scale = scale; - } - } -} diff --git a/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ReadConstantFieldValueDataProvider.java b/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ReadConstantFieldValueDataProvider.java deleted file mode 100644 --- a/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ReadConstantFieldValueDataProvider.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 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. - * - * 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 jdk.vm.ci.hotspot.test; - -import static jdk.vm.ci.hotspot.test.TestHelper.DUMMY_CLASS_CONSTANT; -import static jdk.vm.ci.hotspot.test.TestHelper.INSTANCE_STABLE_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.INSTANCE_FINAL_DEFAULT_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.INSTANCE_FINAL_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.INSTANCE_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.INSTANCE_STABLE_DEFAULT_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.STATIC_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.STATIC_FINAL_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.STATIC_STABLE_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.STATIC_STABLE_DEFAULT_FIELDS_MAP; - -import java.util.LinkedList; -import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; -import jdk.vm.ci.meta.JavaConstant; -import org.testng.annotations.DataProvider; - -public class ReadConstantFieldValueDataProvider { - - @DataProvider(name = "readConstantFieldValueDataProvider") - public static Object[][] readConstantFieldValueDataProvider() { - LinkedList cfgSet = new LinkedList<>(); - // Testing static final fields - STATIC_FINAL_FIELDS_MAP.entrySet().stream().forEach((field) -> { - cfgSet.add(new Object[]{field.getKey(), null, field.getValue(), "static final field"}); - }); - // Testing static stable fields - STATIC_STABLE_FIELDS_MAP.entrySet().stream().forEach((field) -> { - cfgSet.add(new Object[]{field.getKey(), null, field.getValue(), "static stable field"}); - }); - // Testing instance final non-default fields - INSTANCE_FINAL_FIELDS_MAP.entrySet().stream().forEach((field) -> { - cfgSet.add(new Object[]{field.getKey(), - DUMMY_CLASS_CONSTANT, - field.getValue(), - "instance final field"}); - }); - // Testing instance final default fields. - boolean trustDefFinal = HotSpotJVMCIRuntime.Option.TrustFinalDefaultFields.getBoolean(); - INSTANCE_FINAL_DEFAULT_FIELDS_MAP.entrySet().stream().forEach((field) -> { - JavaConstant expected = trustDefFinal ? field.getValue() : null; - cfgSet.add(new Object[]{field.getKey(), - DUMMY_CLASS_CONSTANT, - expected, - "instance final default field"}); - }); - // Testing instance stable non-default fields - INSTANCE_STABLE_FIELDS_MAP.entrySet().stream().forEach((field) -> { - cfgSet.add(new Object[]{field.getKey(), - DUMMY_CLASS_CONSTANT, - field.getValue(), - "instance stable field"}); - }); - // Testing instance stable default fields - INSTANCE_STABLE_DEFAULT_FIELDS_MAP.entrySet().stream().forEach((field) -> { - cfgSet.add(new Object[]{field.getKey(), - DUMMY_CLASS_CONSTANT, - null, - "instance stable default field"}); - }); - // Testing regular instance fields - INSTANCE_FIELDS_MAP.entrySet().stream().forEach((field) -> { - cfgSet.add(new Object[]{field.getKey(), DUMMY_CLASS_CONSTANT, null, "instance field"}); - }); - // Testing regular static fields - STATIC_FIELDS_MAP.entrySet().stream().forEach((field) -> { - cfgSet.add(new Object[]{field.getKey(), null, null, "static field"}); - }); - // Testing static stable fields - STATIC_STABLE_DEFAULT_FIELDS_MAP.entrySet().stream().forEach((field) -> { - cfgSet.add(new Object[]{field.getKey(), null, null, "static stable default field"}); - }); - return cfgSet.toArray(new Object[0][0]); - } - - @DataProvider(name = "readConstantFieldValueNegativeDataProvider") - public static Object[][] readConstantFieldValueNegativeDataProvider() { - LinkedList cfgSet = new LinkedList<>(); - // Testing instance fields with null as receiver - INSTANCE_FIELDS_MAP.entrySet().stream().forEach((field) -> { - cfgSet.add(new Object[]{field.getKey(), null}); - }); - // Testing null as a field argument - cfgSet.add(new Object[]{null, null}); - return cfgSet.toArray(new Object[0][0]); - } -} diff --git a/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ReadStableFieldValueDataProvider.java b/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ReadStableFieldValueDataProvider.java deleted file mode 100644 --- a/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/ReadStableFieldValueDataProvider.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (c) 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. - * - * 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 jdk.vm.ci.hotspot.test; - -import static jdk.vm.ci.hotspot.test.TestHelper.ARRAYS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.ARRAY_ARRAYS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.CONSTANT_REFLECTION_PROVIDER; -import static jdk.vm.ci.hotspot.test.TestHelper.DUMMY_CLASS_CONSTANT; -import static jdk.vm.ci.hotspot.test.TestHelper.DUMMY_CLASS_INSTANCE; -import static jdk.vm.ci.hotspot.test.TestHelper.STABLE_ARRAYS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.STABLE_ARRAY_ARRAYS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.INSTANCE_STABLE_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.INSTANCE_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.STATIC_FIELDS_MAP; -import static jdk.vm.ci.hotspot.test.TestHelper.STATIC_STABLE_FIELDS_MAP; - -import java.util.LinkedList; -import jdk.vm.ci.meta.JavaConstant; -import org.testng.annotations.DataProvider; - -public class ReadStableFieldValueDataProvider { - - @DataProvider(name = "readStableFieldValueDataProvider") - public static Object[][] readStableFieldValueDataProvider() { - LinkedList cfgSet = new LinkedList<>(); - for (boolean isDefStab : new boolean[]{true, false}) { - // Testing instance non-stable fields - INSTANCE_FIELDS_MAP.entrySet().stream().forEach((instanceField) -> { - cfgSet.add(new Object[]{instanceField.getKey(), - DUMMY_CLASS_CONSTANT, - isDefStab, - instanceField.getValue()}); - }); - // Testing static non-stable fields with null as receiver - STATIC_FIELDS_MAP.entrySet().stream().forEach((staticField) -> { - cfgSet.add(new Object[]{staticField.getKey(), - null, - isDefStab, - staticField.getValue()}); - }); - // Testing static non-stable fields with JavaConstant.NULL_POINTER as receiver - STATIC_FIELDS_MAP.entrySet().stream().forEach((staticField) -> { - cfgSet.add(new Object[]{staticField.getKey(), - JavaConstant.NULL_POINTER, - isDefStab, - staticField.getValue()}); - }); - // Testing instance stable fields - INSTANCE_STABLE_FIELDS_MAP.entrySet().stream().forEach((instanceField) -> { - cfgSet.add(new Object[]{instanceField.getKey(), - DUMMY_CLASS_CONSTANT, - isDefStab, - instanceField.getValue()}); - }); - // Testing static stable fields with null as receiver - STATIC_STABLE_FIELDS_MAP.entrySet().stream().forEach((staticField) -> { - cfgSet.add(new Object[]{staticField.getKey(), - null, - isDefStab, - staticField.getValue()}); - }); - // Testing static stable fields with JavaConstant.NULL_POINTER as receiver - STATIC_STABLE_FIELDS_MAP.entrySet().stream().forEach((staticField) -> { - cfgSet.add(new Object[]{staticField.getKey(), - JavaConstant.NULL_POINTER, - isDefStab, - staticField.getValue()}); - }); - // Testing instance fields with JavaConstant.NULL_POINTER as receiver - INSTANCE_FIELDS_MAP.entrySet().stream().forEach((instanceField) -> { - cfgSet.add(new Object[]{instanceField.getKey(), - JavaConstant.NULL_POINTER, - isDefStab, - null}); - }); - // Testing instance fields with an object that does not have the field - INSTANCE_FIELDS_MAP.entrySet().stream().forEach((instanceField) -> { - cfgSet.add(new Object[]{instanceField.getKey(), - CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.objectField), - isDefStab, - null}); - }); - } - return cfgSet.toArray(new Object[0][0]); - } - - @DataProvider(name = "readStableFieldValueArrayDataProvider") - public static Object[][] readStableFieldValueArrayDataProvider() { - LinkedList cfgSet = new LinkedList<>(); - for (boolean isDefStab : new boolean[]{true, false}) { - // Testing instance non-stable array fields - ARRAYS_MAP.entrySet().stream().forEach((instanceField) -> { - cfgSet.add(new Object[]{instanceField.getKey(), - DUMMY_CLASS_CONSTANT, - isDefStab, - TestHelper.ARRAY_DIMENSION, - instanceField.getValue()}); - }); - // Testing instance stable array fields - STABLE_ARRAYS_MAP.entrySet().stream().forEach((instanceField) -> { - cfgSet.add(new Object[]{instanceField.getKey(), - DUMMY_CLASS_CONSTANT, - isDefStab, - TestHelper.ARRAY_DIMENSION, - instanceField.getValue()}); - }); - // Testing instance non-stable array-of-array fields - ARRAY_ARRAYS_MAP.entrySet().stream().forEach((instanceField) -> { - cfgSet.add(new Object[]{instanceField.getKey(), - DUMMY_CLASS_CONSTANT, - isDefStab, - TestHelper.ARRAY_OF_ARRAYS_DIMENSION, - instanceField.getValue()}); - }); - // Testing instance stable array-of-array fields - STABLE_ARRAY_ARRAYS_MAP.entrySet().stream().forEach((instanceField) -> { - cfgSet.add(new Object[]{instanceField.getKey(), - DUMMY_CLASS_CONSTANT, - isDefStab, - TestHelper.ARRAY_OF_ARRAYS_DIMENSION, - instanceField.getValue()}); - }); - } - return cfgSet.toArray(new Object[0][0]); - } - - @DataProvider(name = "readStableFieldValueNegativeDataProvider") - public static Object[][] readStableFieldValueNegativeDataProvider() { - LinkedList cfgSet = new LinkedList<>(); - for (boolean isDefStab : new boolean[]{true, false}) { - // Testing instance fields with null as receiver - INSTANCE_FIELDS_MAP.keySet().stream().forEach((instanceField) -> { - cfgSet.add(new Object[]{instanceField, null, isDefStab}); - }); - // Testing null as a field argument - cfgSet.add(new Object[]{null, null, isDefStab}); - } - return cfgSet.toArray(new Object[0][0]); - } -} diff --git a/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/TestHelper.java b/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/TestHelper.java --- a/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/TestHelper.java +++ b/test/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/TestHelper.java @@ -157,47 +157,6 @@ DUMMY_CLASS_INSTANCE.stableObjectField)); } - public static final Map INSTANCE_STABLE_DEFAULT_FIELDS_MAP = new HashMap<>(); - - static { - INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, - "stableDefaultBooleanField"), - JavaConstant.forBoolean( - DUMMY_CLASS_INSTANCE.stableDefaultBooleanField)); - INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, - "stableDefaultByteField"), - JavaConstant.forByte( - DUMMY_CLASS_INSTANCE.stableDefaultByteField)); - INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, - "stableDefaultShortField"), - JavaConstant.forShort( - DUMMY_CLASS_INSTANCE.stableDefaultShortField)); - INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, - "stableDefaultCharField"), - JavaConstant.forChar( - DUMMY_CLASS_INSTANCE.stableDefaultCharField)); - INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, - "stableDefaultIntField"), - JavaConstant.forInt( - DUMMY_CLASS_INSTANCE.stableDefaultIntField)); - INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, - "stableDefaultLongField"), - JavaConstant.forLong( - DUMMY_CLASS_INSTANCE.stableDefaultLongField)); - INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, - "stableDefaultFloatField"), - JavaConstant.forFloat( - DUMMY_CLASS_INSTANCE.stableDefaultFloatField)); - INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, - "stableDefaultDoubleField"), - JavaConstant.forDouble( - DUMMY_CLASS_INSTANCE.stableDefaultDoubleField)); - INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, - "stableDefaultObjectField"), - CONSTANT_REFLECTION_PROVIDER.forObject( - DUMMY_CLASS_INSTANCE.stableDefaultObjectField)); - } - public static final Map STATIC_FIELDS_MAP = new HashMap<>(); static { diff --git a/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaField.java b/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaField.java --- a/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaField.java +++ b/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaField.java @@ -37,7 +37,6 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.lang.annotation.Annotation; @@ -45,17 +44,15 @@ import java.lang.reflect.Method; import java.util.Arrays; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; -import jdk.vm.ci.meta.JavaConstant; +import org.junit.Test; + import jdk.vm.ci.meta.LocationIdentity; import jdk.vm.ci.meta.ResolvedJavaField; import jdk.vm.ci.meta.ResolvedJavaMethod; -import org.junit.Test; - /** * Tests for {@link ResolvedJavaField}. */ @@ -111,35 +108,6 @@ } } - static class ReadConstantValueTestConstants { - String stringField = "field"; - final String constantStringField = "constantField"; - - static final Object CONST1 = new ReadConstantValueTestConstants(); - static final Object CONST2 = null; - static final Object CONST3 = new String(); - } - - @Test - public void readConstantValueTest() throws NoSuchFieldException { - ResolvedJavaField field = metaAccess.lookupJavaField(ReadConstantValueTestConstants.class.getDeclaredField("stringField")); - List receiverConstants = readConstants(ReadConstantValueTestConstants.class); - for (ConstantValue receiver : receiverConstants) { - JavaConstant value = constantReflection.readConstantFieldValue(field, receiver.value); - assertNull(value); - } - - ResolvedJavaField constField = metaAccess.lookupJavaField(ReadConstantValueTestConstants.class.getDeclaredField("constantStringField")); - for (ConstantValue receiver : receiverConstants) { - JavaConstant value = constantReflection.readConstantFieldValue(constField, receiver.value); - if (value != null) { - Object expected = "constantField"; - String actual = ((ReadConstantValueTestConstants) receiver.boxed).constantStringField; - assertTrue(actual + " != " + expected, actual == expected); - } - } - } - private Method findTestMethod(Method apiMethod) { String testName = apiMethod.getName() + "Test"; for (Method m : getClass().getDeclaredMethods()) { diff --git a/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TypeUniverse.java b/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TypeUniverse.java --- a/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TypeUniverse.java +++ b/test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TypeUniverse.java @@ -183,7 +183,7 @@ if (boxed instanceof JavaConstant) { res.add(new ConstantValue(javaField.format("%H.%n"), (JavaConstant) boxed, boxed)); } else { - JavaConstant value = constantReflection.readConstantFieldValue(javaField, null); + JavaConstant value = constantReflection.readFieldValue(javaField, null); if (value != null) { res.add(new ConstantValue(javaField.format("%H.%n"), value, boxed)); if (boxed instanceof Object[]) {