From f21824a34af77dcd7e32d781a4ab91152865fd06 Mon Sep 17 00:00:00 2001 From: Sacha Coppey Date: Fri, 29 Nov 2024 14:09:31 +0100 Subject: [PATCH] Load all possible annotation values --- .../graal/pointsto/heap/ImageLayerLoader.java | 6 +- .../graal/pointsto/heap/ImageLayerWriter.java | 6 +- ...redLayerSnapshotCapnProtoSchemaHolder.java | 1053 ++++++++++------- .../SharedLayerSnapshotCapnProtoSchema.capnp | 59 +- .../svm/hosted/heap/SVMImageLayerLoader.java | 62 +- .../svm/hosted/heap/SVMImageLayerWriter.java | 64 +- 6 files changed, 798 insertions(+), 452 deletions(-) diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageLayerLoader.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageLayerLoader.java index 47ee090ab228..d2b203ea1e3e 100644 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageLayerLoader.java +++ b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageLayerLoader.java @@ -68,6 +68,8 @@ import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PersistedConstant; import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PersistedConstant.Object.Relinking.EnumConstant; import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PersistedConstant.Object.Relinking.StringConstant; +import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray; +import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue; import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.SharedLayerSnapshot; import com.oracle.graal.pointsto.heap.value.ValueSupplier; import com.oracle.graal.pointsto.infrastructure.ResolvedSignature; @@ -952,7 +954,7 @@ protected void injectIdentityHashCode(Object object, Integer identityHashCode) { /* The hash code can only be injected in the SVM context. */ } - private static Object getArray(PersistedConstant.PrimitiveData.Reader reader) { + protected static Object getArray(PrimitiveArray.Reader reader) { return switch (reader.which()) { case Z -> getBooleans(reader.getZ()); case B -> toArray(reader.getB(), r -> IntStream.range(0, r.size()).collect(() -> new byte[r.size()], (a, i) -> a[i] = r.get(i), combineUnsupported())); @@ -1019,7 +1021,7 @@ private Object[] getReferencedValues(ImageHeapConstant parentConstant, StructLis throw AnalysisError.shouldNotReachHere("This constant was not materialized in the base image."); }); case PRIMITIVE_VALUE -> { - ConstantReference.PrimitiveValue.Reader pv = constantData.getPrimitiveValue(); + PrimitiveValue.Reader pv = constantData.getPrimitiveValue(); yield JavaConstant.forPrimitive((char) pv.getTypeChar(), pv.getRawValue()); } default -> throw GraalError.shouldNotReachHere("Unexpected constant reference: " + constantData.which()); diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageLayerWriter.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageLayerWriter.java index ff5b4725b85a..6d55fdbd770e 100644 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageLayerWriter.java +++ b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/ImageLayerWriter.java @@ -81,6 +81,8 @@ import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PersistedConstant; import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PersistedConstant.Object.Relinking.EnumConstant; import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PersistedConstant.Object.Relinking.StringConstant; +import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray; +import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue; import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.SharedLayerSnapshot; import com.oracle.graal.pointsto.infrastructure.OriginalFieldProvider; import com.oracle.graal.pointsto.meta.AnalysisField; @@ -699,7 +701,7 @@ protected void persistConstantRelinkingInfo(PersistedConstant.Object.Relinking.B } } - private static void persistConstantPrimitiveArray(PersistedConstant.PrimitiveData.Builder builder, JavaKind componentKind, Object array) { + protected static void persistConstantPrimitiveArray(PrimitiveArray.Builder builder, JavaKind componentKind, Object array) { assert componentKind.toJavaClass().equals(array.getClass().getComponentType()); switch (array) { case boolean[] a -> persistArray(a, builder::initZ, (b, i) -> b.set(i, a[i])); @@ -737,7 +739,7 @@ private void persistConstantObjectData(PersistedConstant.Object.Builder builder, } else if (object == JavaConstant.NULL_POINTER) { b.setNullPointer(Void.VOID); } else if (object instanceof PrimitiveConstant pc) { - ConstantReference.PrimitiveValue.Builder pb = b.initPrimitiveValue(); + PrimitiveValue.Builder pb = b.initPrimitiveValue(); pb.setTypeChar(NumUtil.safeToUByte(pc.getJavaKind().getTypeChar())); pb.setRawValue(pc.getRawValue()); } else { diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/SharedLayerSnapshotCapnProtoSchemaHolder.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/SharedLayerSnapshotCapnProtoSchemaHolder.java index abb56adb9e84..2c6b91b2cb0e 100644 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/SharedLayerSnapshotCapnProtoSchemaHolder.java +++ b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/heap/SharedLayerSnapshotCapnProtoSchemaHolder.java @@ -2246,7 +2246,7 @@ public final org.capnproto.TextList.Reader getParameterNames() { public static class ConstantReference { - public static final org.capnproto.StructSize STRUCT_SIZE = new org.capnproto.StructSize((short)2,(short)1); + public static final org.capnproto.StructSize STRUCT_SIZE = new org.capnproto.StructSize((short)1,(short)1); public static final class Factory extends org.capnproto.StructFactory { public Factory() { } @@ -2323,16 +2323,19 @@ public final void setNotMaterialized(org.capnproto.Void value) { public final boolean isPrimitiveValue() { return which() == ConstantReference.Which.PRIMITIVE_VALUE; } - public final PrimitiveValue.Builder getPrimitiveValue() { - return new ConstantReference.PrimitiveValue.Builder(segment, data, pointers, dataSize, pointerCount); + public final com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.Builder getPrimitiveValue() { + assert which() == ConstantReference.Which.PRIMITIVE_VALUE: + "Must check which() before get()ing a union member."; + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.factory, 0, null, 0); } - public final PrimitiveValue.Builder initPrimitiveValue() { + public final void setPrimitiveValue(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.Reader value) { _setShortField(2, (short)ConstantReference.Which.PRIMITIVE_VALUE.ordinal()); - _setByteField(0,(byte)0); - _setLongField(1,0L); - return new ConstantReference.PrimitiveValue.Builder(segment, data, pointers, dataSize, pointerCount); + _setPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.factory,0, value); + } + public final com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.Builder initPrimitiveValue() { + _setShortField(2, (short)ConstantReference.Which.PRIMITIVE_VALUE.ordinal()); + return _initPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.factory,0, 0); } - public final boolean isMethodPointer() { return which() == ConstantReference.Which.METHOD_POINTER; } @@ -2407,8 +2410,13 @@ assert which() == ConstantReference.Which.NOT_MATERIALIZED: public final boolean isPrimitiveValue() { return which() == ConstantReference.Which.PRIMITIVE_VALUE; } - public PrimitiveValue.Reader getPrimitiveValue() { - return new ConstantReference.PrimitiveValue.Reader(segment, data, pointers, dataSize, pointerCount, nestingLimit); + public boolean hasPrimitiveValue() { + return !_pointerFieldIsNull(0); + } + public com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.Reader getPrimitiveValue() { + assert which() == ConstantReference.Which.PRIMITIVE_VALUE: + "Must check which() before get()ing a union member."; + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.factory,0,null, 0); } public final boolean isMethodPointer() { @@ -2442,7 +2450,7 @@ public enum Which { _NOT_IN_SCHEMA, } public static class ObjectConstant { - public static final org.capnproto.StructSize STRUCT_SIZE = new org.capnproto.StructSize((short)2,(short)1); + public static final org.capnproto.StructSize STRUCT_SIZE = new org.capnproto.StructSize((short)1,(short)1); public static final class Factory extends org.capnproto.StructFactory { public Factory() { } @@ -2492,70 +2500,8 @@ public final int getConstantId() { } - public static class PrimitiveValue { - public static final org.capnproto.StructSize STRUCT_SIZE = new org.capnproto.StructSize((short)2,(short)1); - public static final class Factory extends org.capnproto.StructFactory { - public Factory() { - } - public final Reader constructReader(org.capnproto.SegmentReader segment, int data,int pointers, int dataSize, short pointerCount, int nestingLimit) { - return new Reader(segment,data,pointers,dataSize,pointerCount,nestingLimit); - } - public final Builder constructBuilder(org.capnproto.SegmentBuilder segment, int data,int pointers, int dataSize, short pointerCount) { - return new Builder(segment, data, pointers, dataSize, pointerCount); - } - public final org.capnproto.StructSize structSize() { - return ConstantReference.PrimitiveValue.STRUCT_SIZE; - } - public final Reader asReader(Builder builder) { - return builder.asReader(); - } - } - public static final Factory factory = new Factory(); - public static final org.capnproto.StructList.Factory listFactory = - new org.capnproto.StructList.Factory(factory); - public static final class Builder extends org.capnproto.StructBuilder { - Builder(org.capnproto.SegmentBuilder segment, int data, int pointers,int dataSize, short pointerCount){ - super(segment, data, pointers, dataSize, pointerCount); - } - public final Reader asReader() { - return new Reader(segment, data, pointers, dataSize, pointerCount, 0x7fffffff); - } - public final byte getTypeChar() { - return _getByteField(0); - } - public final void setTypeChar(byte value) { - _setByteField(0, value); - } - - public final long getRawValue() { - return _getLongField(1); - } - public final void setRawValue(long value) { - _setLongField(1, value); - } - - } - - public static final class Reader extends org.capnproto.StructReader { - Reader(org.capnproto.SegmentReader segment, int data, int pointers,int dataSize, short pointerCount, int nestingLimit){ - super(segment, data, pointers, dataSize, pointerCount, nestingLimit); - } - - public final byte getTypeChar() { - return _getByteField(0); - } - - public final long getRawValue() { - return _getLongField(1); - } - - } - - } - - public static class MethodPointer { - public static final org.capnproto.StructSize STRUCT_SIZE = new org.capnproto.StructSize((short)2,(short)1); + public static final org.capnproto.StructSize STRUCT_SIZE = new org.capnproto.StructSize((short)1,(short)1); public static final class Factory extends org.capnproto.StructFactory { public Factory() { } @@ -2699,16 +2645,19 @@ public final Object.Builder initObject() { public final boolean isPrimitiveData() { return which() == PersistedConstant.Which.PRIMITIVE_DATA; } - public final PrimitiveData.Builder getPrimitiveData() { - return new PersistedConstant.PrimitiveData.Builder(segment, data, pointers, dataSize, pointerCount); + public final com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.Builder getPrimitiveData() { + assert which() == PersistedConstant.Which.PRIMITIVE_DATA: + "Must check which() before get()ing a union member."; + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.factory, 0, null, 0); } - public final PrimitiveData.Builder initPrimitiveData() { + public final void setPrimitiveData(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.Reader value) { _setShortField(16, (short)PersistedConstant.Which.PRIMITIVE_DATA.ordinal()); - _setShortField(7,(short)0); - _clearPointerField(0); - return new PersistedConstant.PrimitiveData.Builder(segment, data, pointers, dataSize, pointerCount); + _setPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.factory,0, value); + } + public final com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.Builder initPrimitiveData() { + _setShortField(16, (short)PersistedConstant.Which.PRIMITIVE_DATA.ordinal()); + return _initPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.factory,0, 0); } - public final boolean isRelocatable() { return which() == PersistedConstant.Which.RELOCATABLE; } @@ -2780,8 +2729,13 @@ public Object.Reader getObject() { public final boolean isPrimitiveData() { return which() == PersistedConstant.Which.PRIMITIVE_DATA; } - public PrimitiveData.Reader getPrimitiveData() { - return new PersistedConstant.PrimitiveData.Reader(segment, data, pointers, dataSize, pointerCount, nestingLimit); + public boolean hasPrimitiveData() { + return !_pointerFieldIsNull(0); + } + public com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.Reader getPrimitiveData() { + assert which() == PersistedConstant.Which.PRIMITIVE_DATA: + "Must check which() before get()ing a union member."; + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.factory,0,null, 0); } public final boolean isRelocatable() { @@ -3283,299 +3237,6 @@ public final int getTypeId() { } - public static class PrimitiveData { - public static final org.capnproto.StructSize STRUCT_SIZE = new org.capnproto.StructSize((short)6,(short)3); - public static final class Factory extends org.capnproto.StructFactory { - public Factory() { - } - public final Reader constructReader(org.capnproto.SegmentReader segment, int data,int pointers, int dataSize, short pointerCount, int nestingLimit) { - return new Reader(segment,data,pointers,dataSize,pointerCount,nestingLimit); - } - public final Builder constructBuilder(org.capnproto.SegmentBuilder segment, int data,int pointers, int dataSize, short pointerCount) { - return new Builder(segment, data, pointers, dataSize, pointerCount); - } - public final org.capnproto.StructSize structSize() { - return PersistedConstant.PrimitiveData.STRUCT_SIZE; - } - public final Reader asReader(Builder builder) { - return builder.asReader(); - } - } - public static final Factory factory = new Factory(); - public static final org.capnproto.StructList.Factory listFactory = - new org.capnproto.StructList.Factory(factory); - public static final class Builder extends org.capnproto.StructBuilder { - Builder(org.capnproto.SegmentBuilder segment, int data, int pointers,int dataSize, short pointerCount){ - super(segment, data, pointers, dataSize, pointerCount); - } - public Which which() { - switch(_getShortField(7)) { - case 0 : return Which.Z; - case 1 : return Which.B; - case 2 : return Which.S; - case 3 : return Which.C; - case 4 : return Which.I; - case 5 : return Which.F; - case 6 : return Which.J; - case 7 : return Which.D; - default: return Which._NOT_IN_SCHEMA; - } - } - public final Reader asReader() { - return new Reader(segment, data, pointers, dataSize, pointerCount, 0x7fffffff); - } - public final boolean isZ() { - return which() == PersistedConstant.PrimitiveData.Which.Z; - } - public final boolean hasZ() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Boolean.Builder getZ() { - return _getPointerField(org.capnproto.PrimitiveList.Boolean.factory, 0, null, 0); - } - public final void setZ(org.capnproto.PrimitiveList.Boolean.Reader value) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.Z.ordinal()); - _setPointerField(org.capnproto.PrimitiveList.Boolean.factory, 0, value); - } - public final org.capnproto.PrimitiveList.Boolean.Builder initZ(int size) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.Z.ordinal()); - return _initPointerField(org.capnproto.PrimitiveList.Boolean.factory, 0, size); - } - public final boolean isB() { - return which() == PersistedConstant.PrimitiveData.Which.B; - } - public final boolean hasB() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Byte.Builder getB() { - return _getPointerField(org.capnproto.PrimitiveList.Byte.factory, 0, null, 0); - } - public final void setB(org.capnproto.PrimitiveList.Byte.Reader value) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.B.ordinal()); - _setPointerField(org.capnproto.PrimitiveList.Byte.factory, 0, value); - } - public final org.capnproto.PrimitiveList.Byte.Builder initB(int size) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.B.ordinal()); - return _initPointerField(org.capnproto.PrimitiveList.Byte.factory, 0, size); - } - public final boolean isS() { - return which() == PersistedConstant.PrimitiveData.Which.S; - } - public final boolean hasS() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Short.Builder getS() { - return _getPointerField(org.capnproto.PrimitiveList.Short.factory, 0, null, 0); - } - public final void setS(org.capnproto.PrimitiveList.Short.Reader value) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.S.ordinal()); - _setPointerField(org.capnproto.PrimitiveList.Short.factory, 0, value); - } - public final org.capnproto.PrimitiveList.Short.Builder initS(int size) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.S.ordinal()); - return _initPointerField(org.capnproto.PrimitiveList.Short.factory, 0, size); - } - public final boolean isC() { - return which() == PersistedConstant.PrimitiveData.Which.C; - } - public final boolean hasC() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Short.Builder getC() { - return _getPointerField(org.capnproto.PrimitiveList.Short.factory, 0, null, 0); - } - public final void setC(org.capnproto.PrimitiveList.Short.Reader value) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.C.ordinal()); - _setPointerField(org.capnproto.PrimitiveList.Short.factory, 0, value); - } - public final org.capnproto.PrimitiveList.Short.Builder initC(int size) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.C.ordinal()); - return _initPointerField(org.capnproto.PrimitiveList.Short.factory, 0, size); - } - public final boolean isI() { - return which() == PersistedConstant.PrimitiveData.Which.I; - } - public final boolean hasI() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Int.Builder getI() { - return _getPointerField(org.capnproto.PrimitiveList.Int.factory, 0, null, 0); - } - public final void setI(org.capnproto.PrimitiveList.Int.Reader value) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.I.ordinal()); - _setPointerField(org.capnproto.PrimitiveList.Int.factory, 0, value); - } - public final org.capnproto.PrimitiveList.Int.Builder initI(int size) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.I.ordinal()); - return _initPointerField(org.capnproto.PrimitiveList.Int.factory, 0, size); - } - public final boolean isF() { - return which() == PersistedConstant.PrimitiveData.Which.F; - } - public final boolean hasF() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Float.Builder getF() { - return _getPointerField(org.capnproto.PrimitiveList.Float.factory, 0, null, 0); - } - public final void setF(org.capnproto.PrimitiveList.Float.Reader value) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.F.ordinal()); - _setPointerField(org.capnproto.PrimitiveList.Float.factory, 0, value); - } - public final org.capnproto.PrimitiveList.Float.Builder initF(int size) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.F.ordinal()); - return _initPointerField(org.capnproto.PrimitiveList.Float.factory, 0, size); - } - public final boolean isJ() { - return which() == PersistedConstant.PrimitiveData.Which.J; - } - public final boolean hasJ() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Long.Builder getJ() { - return _getPointerField(org.capnproto.PrimitiveList.Long.factory, 0, null, 0); - } - public final void setJ(org.capnproto.PrimitiveList.Long.Reader value) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.J.ordinal()); - _setPointerField(org.capnproto.PrimitiveList.Long.factory, 0, value); - } - public final org.capnproto.PrimitiveList.Long.Builder initJ(int size) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.J.ordinal()); - return _initPointerField(org.capnproto.PrimitiveList.Long.factory, 0, size); - } - public final boolean isD() { - return which() == PersistedConstant.PrimitiveData.Which.D; - } - public final boolean hasD() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Double.Builder getD() { - return _getPointerField(org.capnproto.PrimitiveList.Double.factory, 0, null, 0); - } - public final void setD(org.capnproto.PrimitiveList.Double.Reader value) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.D.ordinal()); - _setPointerField(org.capnproto.PrimitiveList.Double.factory, 0, value); - } - public final org.capnproto.PrimitiveList.Double.Builder initD(int size) { - _setShortField(7, (short)PersistedConstant.PrimitiveData.Which.D.ordinal()); - return _initPointerField(org.capnproto.PrimitiveList.Double.factory, 0, size); - } - } - - public static final class Reader extends org.capnproto.StructReader { - Reader(org.capnproto.SegmentReader segment, int data, int pointers,int dataSize, short pointerCount, int nestingLimit){ - super(segment, data, pointers, dataSize, pointerCount, nestingLimit); - } - - public Which which() { - switch(_getShortField(7)) { - case 0 : return Which.Z; - case 1 : return Which.B; - case 2 : return Which.S; - case 3 : return Which.C; - case 4 : return Which.I; - case 5 : return Which.F; - case 6 : return Which.J; - case 7 : return Which.D; - default: return Which._NOT_IN_SCHEMA; - } - } - public final boolean isZ() { - return which() == PersistedConstant.PrimitiveData.Which.Z; - } - public final boolean hasZ() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Boolean.Reader getZ() { - return _getPointerField(org.capnproto.PrimitiveList.Boolean.factory, 0, null, 0); - } - - public final boolean isB() { - return which() == PersistedConstant.PrimitiveData.Which.B; - } - public final boolean hasB() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Byte.Reader getB() { - return _getPointerField(org.capnproto.PrimitiveList.Byte.factory, 0, null, 0); - } - - public final boolean isS() { - return which() == PersistedConstant.PrimitiveData.Which.S; - } - public final boolean hasS() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Short.Reader getS() { - return _getPointerField(org.capnproto.PrimitiveList.Short.factory, 0, null, 0); - } - - public final boolean isC() { - return which() == PersistedConstant.PrimitiveData.Which.C; - } - public final boolean hasC() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Short.Reader getC() { - return _getPointerField(org.capnproto.PrimitiveList.Short.factory, 0, null, 0); - } - - public final boolean isI() { - return which() == PersistedConstant.PrimitiveData.Which.I; - } - public final boolean hasI() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Int.Reader getI() { - return _getPointerField(org.capnproto.PrimitiveList.Int.factory, 0, null, 0); - } - - public final boolean isF() { - return which() == PersistedConstant.PrimitiveData.Which.F; - } - public final boolean hasF() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Float.Reader getF() { - return _getPointerField(org.capnproto.PrimitiveList.Float.factory, 0, null, 0); - } - - public final boolean isJ() { - return which() == PersistedConstant.PrimitiveData.Which.J; - } - public final boolean hasJ() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Long.Reader getJ() { - return _getPointerField(org.capnproto.PrimitiveList.Long.factory, 0, null, 0); - } - - public final boolean isD() { - return which() == PersistedConstant.PrimitiveData.Which.D; - } - public final boolean hasD() { - return !_pointerFieldIsNull(0); - } - public final org.capnproto.PrimitiveList.Double.Reader getD() { - return _getPointerField(org.capnproto.PrimitiveList.Double.factory, 0, null, 0); - } - - } - - public enum Which { - Z, - B, - S, - C, - I, - F, - J, - D, - _NOT_IN_SCHEMA, - } - } - - public static class Relocatable { public static final org.capnproto.StructSize STRUCT_SIZE = new org.capnproto.StructSize((short)6,(short)3); public static final class Factory extends org.capnproto.StructFactory { @@ -4231,8 +3892,13 @@ public static final class Builder extends org.capnproto.StructBuilder { } public Which which() { switch(_getShortField(0)) { - case 0 : return Which.OTHER; - case 1 : return Which.ENUM; + case 0 : return Which.STRING; + case 1 : return Which.PRIMITIVE; + case 2 : return Which.PRIMITIVE_ARRAY; + case 3 : return Which.ENUM; + case 4 : return Which.CLASS_NAME; + case 5 : return Which.ANNOTATION; + case 6 : return Which.MEMBERS; default: return Which._NOT_IN_SCHEMA; } } @@ -4254,28 +3920,60 @@ public final void setName(String value) { public final org.capnproto.Text.Builder initName(int size) { return _initPointerField(org.capnproto.Text.factory, 0, size); } - public final boolean isOther() { - return which() == AnnotationValue.Which.OTHER; + public final boolean isString() { + return which() == AnnotationValue.Which.STRING; } - public final boolean hasOther() { - if (which() != AnnotationValue.Which.OTHER) return false; + public final boolean hasString() { + if (which() != AnnotationValue.Which.STRING) return false; return !_pointerFieldIsNull(1); } - public final org.capnproto.Text.Builder getOther() { + public final org.capnproto.Text.Builder getString() { return _getPointerField(org.capnproto.Text.factory, 1, null, 0, 0); } - public final void setOther(org.capnproto.Text.Reader value) { - _setShortField(0, (short)AnnotationValue.Which.OTHER.ordinal()); + public final void setString(org.capnproto.Text.Reader value) { + _setShortField(0, (short)AnnotationValue.Which.STRING.ordinal()); _setPointerField(org.capnproto.Text.factory, 1, value); } - public final void setOther(String value) { - _setShortField(0, (short)AnnotationValue.Which.OTHER.ordinal()); + public final void setString(String value) { + _setShortField(0, (short)AnnotationValue.Which.STRING.ordinal()); _setPointerField(org.capnproto.Text.factory, 1, new org.capnproto.Text.Reader(value)); } - public final org.capnproto.Text.Builder initOther(int size) { - _setShortField(0, (short)AnnotationValue.Which.OTHER.ordinal()); + public final org.capnproto.Text.Builder initString(int size) { + _setShortField(0, (short)AnnotationValue.Which.STRING.ordinal()); return _initPointerField(org.capnproto.Text.factory, 1, size); } + public final boolean isPrimitive() { + return which() == AnnotationValue.Which.PRIMITIVE; + } + public final com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.Builder getPrimitive() { + assert which() == AnnotationValue.Which.PRIMITIVE: + "Must check which() before get()ing a union member."; + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.factory, 1, null, 0); + } + public final void setPrimitive(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.Reader value) { + _setShortField(0, (short)AnnotationValue.Which.PRIMITIVE.ordinal()); + _setPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.factory,1, value); + } + public final com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.Builder initPrimitive() { + _setShortField(0, (short)AnnotationValue.Which.PRIMITIVE.ordinal()); + return _initPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.factory,1, 0); + } + public final boolean isPrimitiveArray() { + return which() == AnnotationValue.Which.PRIMITIVE_ARRAY; + } + public final com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.Builder getPrimitiveArray() { + assert which() == AnnotationValue.Which.PRIMITIVE_ARRAY: + "Must check which() before get()ing a union member."; + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.factory, 1, null, 0); + } + public final void setPrimitiveArray(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.Reader value) { + _setShortField(0, (short)AnnotationValue.Which.PRIMITIVE_ARRAY.ordinal()); + _setPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.factory,1, value); + } + public final com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.Builder initPrimitiveArray() { + _setShortField(0, (short)AnnotationValue.Which.PRIMITIVE_ARRAY.ordinal()); + return _initPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.factory,1, 0); + } public final boolean isEnum() { return which() == AnnotationValue.Which.ENUM; } @@ -4289,6 +3987,57 @@ public final Enum.Builder initEnum() { return new AnnotationValue.Enum.Builder(segment, data, pointers, dataSize, pointerCount); } + public final boolean isClassName() { + return which() == AnnotationValue.Which.CLASS_NAME; + } + public final boolean hasClassName() { + if (which() != AnnotationValue.Which.CLASS_NAME) return false; + return !_pointerFieldIsNull(1); + } + public final org.capnproto.Text.Builder getClassName() { + return _getPointerField(org.capnproto.Text.factory, 1, null, 0, 0); + } + public final void setClassName(org.capnproto.Text.Reader value) { + _setShortField(0, (short)AnnotationValue.Which.CLASS_NAME.ordinal()); + _setPointerField(org.capnproto.Text.factory, 1, value); + } + public final void setClassName(String value) { + _setShortField(0, (short)AnnotationValue.Which.CLASS_NAME.ordinal()); + _setPointerField(org.capnproto.Text.factory, 1, new org.capnproto.Text.Reader(value)); + } + public final org.capnproto.Text.Builder initClassName(int size) { + _setShortField(0, (short)AnnotationValue.Which.CLASS_NAME.ordinal()); + return _initPointerField(org.capnproto.Text.factory, 1, size); + } + public final boolean isAnnotation() { + return which() == AnnotationValue.Which.ANNOTATION; + } + public final com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.Annotation.Builder getAnnotation() { + assert which() == AnnotationValue.Which.ANNOTATION: + "Must check which() before get()ing a union member."; + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.Annotation.factory, 1, null, 0); + } + public final void setAnnotation(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.Annotation.Reader value) { + _setShortField(0, (short)AnnotationValue.Which.ANNOTATION.ordinal()); + _setPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.Annotation.factory,1, value); + } + public final com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.Annotation.Builder initAnnotation() { + _setShortField(0, (short)AnnotationValue.Which.ANNOTATION.ordinal()); + return _initPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.Annotation.factory,1, 0); + } + public final boolean isMembers() { + return which() == AnnotationValue.Which.MEMBERS; + } + public final Members.Builder getMembers() { + return new AnnotationValue.Members.Builder(segment, data, pointers, dataSize, pointerCount); + } + public final Members.Builder initMembers() { + _setShortField(0, (short)AnnotationValue.Which.MEMBERS.ordinal()); + _clearPointerField(1); + _clearPointerField(2); + return new AnnotationValue.Members.Builder(segment, data, pointers, dataSize, pointerCount); + } + } public static final class Reader extends org.capnproto.StructReader { @@ -4298,8 +4047,13 @@ public static final class Reader extends org.capnproto.StructReader { public Which which() { switch(_getShortField(0)) { - case 0 : return Which.OTHER; - case 1 : return Which.ENUM; + case 0 : return Which.STRING; + case 1 : return Which.PRIMITIVE; + case 2 : return Which.PRIMITIVE_ARRAY; + case 3 : return Which.ENUM; + case 4 : return Which.CLASS_NAME; + case 5 : return Which.ANNOTATION; + case 6 : return Which.MEMBERS; default: return Which._NOT_IN_SCHEMA; } } @@ -4310,29 +4064,88 @@ public org.capnproto.Text.Reader getName() { return _getPointerField(org.capnproto.Text.factory, 0, null, 0, 0); } - public final boolean isOther() { - return which() == AnnotationValue.Which.OTHER; + public final boolean isString() { + return which() == AnnotationValue.Which.STRING; } - public boolean hasOther() { - if (which() != AnnotationValue.Which.OTHER) return false; + public boolean hasString() { + if (which() != AnnotationValue.Which.STRING) return false; return !_pointerFieldIsNull(1); } - public org.capnproto.Text.Reader getOther() { + public org.capnproto.Text.Reader getString() { return _getPointerField(org.capnproto.Text.factory, 1, null, 0, 0); } - public final boolean isEnum() { - return which() == AnnotationValue.Which.ENUM; + public final boolean isPrimitive() { + return which() == AnnotationValue.Which.PRIMITIVE; } - public Enum.Reader getEnum() { - return new AnnotationValue.Enum.Reader(segment, data, pointers, dataSize, pointerCount, nestingLimit); + public boolean hasPrimitive() { + return !_pointerFieldIsNull(1); } - + public com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.Reader getPrimitive() { + assert which() == AnnotationValue.Which.PRIMITIVE: + "Must check which() before get()ing a union member."; + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveValue.factory,1,null, 0); + } + + public final boolean isPrimitiveArray() { + return which() == AnnotationValue.Which.PRIMITIVE_ARRAY; + } + public boolean hasPrimitiveArray() { + return !_pointerFieldIsNull(1); + } + public com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.Reader getPrimitiveArray() { + assert which() == AnnotationValue.Which.PRIMITIVE_ARRAY: + "Must check which() before get()ing a union member."; + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.PrimitiveArray.factory,1,null, 0); + } + + public final boolean isEnum() { + return which() == AnnotationValue.Which.ENUM; + } + public Enum.Reader getEnum() { + return new AnnotationValue.Enum.Reader(segment, data, pointers, dataSize, pointerCount, nestingLimit); + } + + public final boolean isClassName() { + return which() == AnnotationValue.Which.CLASS_NAME; + } + public boolean hasClassName() { + if (which() != AnnotationValue.Which.CLASS_NAME) return false; + return !_pointerFieldIsNull(1); + } + public org.capnproto.Text.Reader getClassName() { + return _getPointerField(org.capnproto.Text.factory, 1, null, 0, 0); + } + + public final boolean isAnnotation() { + return which() == AnnotationValue.Which.ANNOTATION; + } + public boolean hasAnnotation() { + return !_pointerFieldIsNull(1); + } + public com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.Annotation.Reader getAnnotation() { + assert which() == AnnotationValue.Which.ANNOTATION: + "Must check which() before get()ing a union member."; + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.Annotation.factory,1,null, 0); + } + + public final boolean isMembers() { + return which() == AnnotationValue.Which.MEMBERS; + } + public Members.Reader getMembers() { + return new AnnotationValue.Members.Reader(segment, data, pointers, dataSize, pointerCount, nestingLimit); + } + } public enum Which { - OTHER, + STRING, + PRIMITIVE, + PRIMITIVE_ARRAY, ENUM, + CLASS_NAME, + ANNOTATION, + MEMBERS, _NOT_IN_SCHEMA, } public static class Enum { @@ -4419,6 +4232,87 @@ public org.capnproto.Text.Reader getName() { } + public static class Members { + public static final org.capnproto.StructSize STRUCT_SIZE = new org.capnproto.StructSize((short)1,(short)3); + public static final class Factory extends org.capnproto.StructFactory { + public Factory() { + } + public final Reader constructReader(org.capnproto.SegmentReader segment, int data,int pointers, int dataSize, short pointerCount, int nestingLimit) { + return new Reader(segment,data,pointers,dataSize,pointerCount,nestingLimit); + } + public final Builder constructBuilder(org.capnproto.SegmentBuilder segment, int data,int pointers, int dataSize, short pointerCount) { + return new Builder(segment, data, pointers, dataSize, pointerCount); + } + public final org.capnproto.StructSize structSize() { + return AnnotationValue.Members.STRUCT_SIZE; + } + public final Reader asReader(Builder builder) { + return builder.asReader(); + } + } + public static final Factory factory = new Factory(); + public static final org.capnproto.StructList.Factory listFactory = + new org.capnproto.StructList.Factory(factory); + public static final class Builder extends org.capnproto.StructBuilder { + Builder(org.capnproto.SegmentBuilder segment, int data, int pointers,int dataSize, short pointerCount){ + super(segment, data, pointers, dataSize, pointerCount); + } + public final Reader asReader() { + return new Reader(segment, data, pointers, dataSize, pointerCount, 0x7fffffff); + } + public final boolean hasClassName() { + return !_pointerFieldIsNull(1); + } + public final org.capnproto.Text.Builder getClassName() { + return _getPointerField(org.capnproto.Text.factory, 1, null, 0, 0); + } + public final void setClassName(org.capnproto.Text.Reader value) { + _setPointerField(org.capnproto.Text.factory, 1, value); + } + public final void setClassName(String value) { + _setPointerField(org.capnproto.Text.factory, 1, new org.capnproto.Text.Reader(value)); + } + public final org.capnproto.Text.Builder initClassName(int size) { + return _initPointerField(org.capnproto.Text.factory, 1, size); + } + public final boolean hasMemberValues() { + return !_pointerFieldIsNull(2); + } + public final org.capnproto.StructList.Builder getMemberValues() { + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.AnnotationValue.listFactory, 2, null, 0); + } + public final void setMemberValues(org.capnproto.StructList.Reader value) { + _setPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.AnnotationValue.listFactory, 2, value); + } + public final org.capnproto.StructList.Builder initMemberValues(int size) { + return _initPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.AnnotationValue.listFactory, 2, size); + } + } + + public static final class Reader extends org.capnproto.StructReader { + Reader(org.capnproto.SegmentReader segment, int data, int pointers,int dataSize, short pointerCount, int nestingLimit){ + super(segment, data, pointers, dataSize, pointerCount, nestingLimit); + } + + public boolean hasClassName() { + return !_pointerFieldIsNull(1); + } + public org.capnproto.Text.Reader getClassName() { + return _getPointerField(org.capnproto.Text.factory, 1, null, 0, 0); + } + + public final boolean hasMemberValues() { + return !_pointerFieldIsNull(2); + } + public final org.capnproto.StructList.Reader getMemberValues() { + return _getPointerField(com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.AnnotationValue.listFactory, 2, null, 0); + } + + } + + } + + } @@ -4672,5 +4566,360 @@ public final org.capnproto.StructList.Reader { + public Factory() { + } + public final Reader constructReader(org.capnproto.SegmentReader segment, int data,int pointers, int dataSize, short pointerCount, int nestingLimit) { + return new Reader(segment,data,pointers,dataSize,pointerCount,nestingLimit); + } + public final Builder constructBuilder(org.capnproto.SegmentBuilder segment, int data,int pointers, int dataSize, short pointerCount) { + return new Builder(segment, data, pointers, dataSize, pointerCount); + } + public final org.capnproto.StructSize structSize() { + return PrimitiveValue.STRUCT_SIZE; + } + public final Reader asReader(Builder builder) { + return builder.asReader(); + } + } + public static final Factory factory = new Factory(); + public static final org.capnproto.StructList.Factory listFactory = + new org.capnproto.StructList.Factory(factory); + public static final class Builder extends org.capnproto.StructBuilder { + Builder(org.capnproto.SegmentBuilder segment, int data, int pointers,int dataSize, short pointerCount){ + super(segment, data, pointers, dataSize, pointerCount); + } + public final Reader asReader() { + return new Reader(segment, data, pointers, dataSize, pointerCount, 0x7fffffff); + } + public final byte getTypeChar() { + return _getByteField(0); + } + public final void setTypeChar(byte value) { + _setByteField(0, value); + } + + public final long getRawValue() { + return _getLongField(1); + } + public final void setRawValue(long value) { + _setLongField(1, value); + } + + } + + public static final class Reader extends org.capnproto.StructReader { + Reader(org.capnproto.SegmentReader segment, int data, int pointers,int dataSize, short pointerCount, int nestingLimit){ + super(segment, data, pointers, dataSize, pointerCount, nestingLimit); + } + + public final byte getTypeChar() { + return _getByteField(0); + } + + public final long getRawValue() { + return _getLongField(1); + } + + } + + } + + + public static class PrimitiveArray { + public static final org.capnproto.StructSize STRUCT_SIZE = new org.capnproto.StructSize((short)1,(short)1); + public static final class Factory extends org.capnproto.StructFactory { + public Factory() { + } + public final Reader constructReader(org.capnproto.SegmentReader segment, int data,int pointers, int dataSize, short pointerCount, int nestingLimit) { + return new Reader(segment,data,pointers,dataSize,pointerCount,nestingLimit); + } + public final Builder constructBuilder(org.capnproto.SegmentBuilder segment, int data,int pointers, int dataSize, short pointerCount) { + return new Builder(segment, data, pointers, dataSize, pointerCount); + } + public final org.capnproto.StructSize structSize() { + return PrimitiveArray.STRUCT_SIZE; + } + public final Reader asReader(Builder builder) { + return builder.asReader(); + } + } + public static final Factory factory = new Factory(); + public static final org.capnproto.StructList.Factory listFactory = + new org.capnproto.StructList.Factory(factory); + public static final class Builder extends org.capnproto.StructBuilder { + Builder(org.capnproto.SegmentBuilder segment, int data, int pointers,int dataSize, short pointerCount){ + super(segment, data, pointers, dataSize, pointerCount); + } + public Which which() { + switch(_getShortField(0)) { + case 0 : return Which.Z; + case 1 : return Which.B; + case 2 : return Which.S; + case 3 : return Which.C; + case 4 : return Which.I; + case 5 : return Which.F; + case 6 : return Which.J; + case 7 : return Which.D; + default: return Which._NOT_IN_SCHEMA; + } + } + public final Reader asReader() { + return new Reader(segment, data, pointers, dataSize, pointerCount, 0x7fffffff); + } + public final boolean isZ() { + return which() == PrimitiveArray.Which.Z; + } + public final boolean hasZ() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Boolean.Builder getZ() { + return _getPointerField(org.capnproto.PrimitiveList.Boolean.factory, 0, null, 0); + } + public final void setZ(org.capnproto.PrimitiveList.Boolean.Reader value) { + _setShortField(0, (short)PrimitiveArray.Which.Z.ordinal()); + _setPointerField(org.capnproto.PrimitiveList.Boolean.factory, 0, value); + } + public final org.capnproto.PrimitiveList.Boolean.Builder initZ(int size) { + _setShortField(0, (short)PrimitiveArray.Which.Z.ordinal()); + return _initPointerField(org.capnproto.PrimitiveList.Boolean.factory, 0, size); + } + public final boolean isB() { + return which() == PrimitiveArray.Which.B; + } + public final boolean hasB() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Byte.Builder getB() { + return _getPointerField(org.capnproto.PrimitiveList.Byte.factory, 0, null, 0); + } + public final void setB(org.capnproto.PrimitiveList.Byte.Reader value) { + _setShortField(0, (short)PrimitiveArray.Which.B.ordinal()); + _setPointerField(org.capnproto.PrimitiveList.Byte.factory, 0, value); + } + public final org.capnproto.PrimitiveList.Byte.Builder initB(int size) { + _setShortField(0, (short)PrimitiveArray.Which.B.ordinal()); + return _initPointerField(org.capnproto.PrimitiveList.Byte.factory, 0, size); + } + public final boolean isS() { + return which() == PrimitiveArray.Which.S; + } + public final boolean hasS() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Short.Builder getS() { + return _getPointerField(org.capnproto.PrimitiveList.Short.factory, 0, null, 0); + } + public final void setS(org.capnproto.PrimitiveList.Short.Reader value) { + _setShortField(0, (short)PrimitiveArray.Which.S.ordinal()); + _setPointerField(org.capnproto.PrimitiveList.Short.factory, 0, value); + } + public final org.capnproto.PrimitiveList.Short.Builder initS(int size) { + _setShortField(0, (short)PrimitiveArray.Which.S.ordinal()); + return _initPointerField(org.capnproto.PrimitiveList.Short.factory, 0, size); + } + public final boolean isC() { + return which() == PrimitiveArray.Which.C; + } + public final boolean hasC() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Short.Builder getC() { + return _getPointerField(org.capnproto.PrimitiveList.Short.factory, 0, null, 0); + } + public final void setC(org.capnproto.PrimitiveList.Short.Reader value) { + _setShortField(0, (short)PrimitiveArray.Which.C.ordinal()); + _setPointerField(org.capnproto.PrimitiveList.Short.factory, 0, value); + } + public final org.capnproto.PrimitiveList.Short.Builder initC(int size) { + _setShortField(0, (short)PrimitiveArray.Which.C.ordinal()); + return _initPointerField(org.capnproto.PrimitiveList.Short.factory, 0, size); + } + public final boolean isI() { + return which() == PrimitiveArray.Which.I; + } + public final boolean hasI() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Int.Builder getI() { + return _getPointerField(org.capnproto.PrimitiveList.Int.factory, 0, null, 0); + } + public final void setI(org.capnproto.PrimitiveList.Int.Reader value) { + _setShortField(0, (short)PrimitiveArray.Which.I.ordinal()); + _setPointerField(org.capnproto.PrimitiveList.Int.factory, 0, value); + } + public final org.capnproto.PrimitiveList.Int.Builder initI(int size) { + _setShortField(0, (short)PrimitiveArray.Which.I.ordinal()); + return _initPointerField(org.capnproto.PrimitiveList.Int.factory, 0, size); + } + public final boolean isF() { + return which() == PrimitiveArray.Which.F; + } + public final boolean hasF() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Float.Builder getF() { + return _getPointerField(org.capnproto.PrimitiveList.Float.factory, 0, null, 0); + } + public final void setF(org.capnproto.PrimitiveList.Float.Reader value) { + _setShortField(0, (short)PrimitiveArray.Which.F.ordinal()); + _setPointerField(org.capnproto.PrimitiveList.Float.factory, 0, value); + } + public final org.capnproto.PrimitiveList.Float.Builder initF(int size) { + _setShortField(0, (short)PrimitiveArray.Which.F.ordinal()); + return _initPointerField(org.capnproto.PrimitiveList.Float.factory, 0, size); + } + public final boolean isJ() { + return which() == PrimitiveArray.Which.J; + } + public final boolean hasJ() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Long.Builder getJ() { + return _getPointerField(org.capnproto.PrimitiveList.Long.factory, 0, null, 0); + } + public final void setJ(org.capnproto.PrimitiveList.Long.Reader value) { + _setShortField(0, (short)PrimitiveArray.Which.J.ordinal()); + _setPointerField(org.capnproto.PrimitiveList.Long.factory, 0, value); + } + public final org.capnproto.PrimitiveList.Long.Builder initJ(int size) { + _setShortField(0, (short)PrimitiveArray.Which.J.ordinal()); + return _initPointerField(org.capnproto.PrimitiveList.Long.factory, 0, size); + } + public final boolean isD() { + return which() == PrimitiveArray.Which.D; + } + public final boolean hasD() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Double.Builder getD() { + return _getPointerField(org.capnproto.PrimitiveList.Double.factory, 0, null, 0); + } + public final void setD(org.capnproto.PrimitiveList.Double.Reader value) { + _setShortField(0, (short)PrimitiveArray.Which.D.ordinal()); + _setPointerField(org.capnproto.PrimitiveList.Double.factory, 0, value); + } + public final org.capnproto.PrimitiveList.Double.Builder initD(int size) { + _setShortField(0, (short)PrimitiveArray.Which.D.ordinal()); + return _initPointerField(org.capnproto.PrimitiveList.Double.factory, 0, size); + } + } + + public static final class Reader extends org.capnproto.StructReader { + Reader(org.capnproto.SegmentReader segment, int data, int pointers,int dataSize, short pointerCount, int nestingLimit){ + super(segment, data, pointers, dataSize, pointerCount, nestingLimit); + } + + public Which which() { + switch(_getShortField(0)) { + case 0 : return Which.Z; + case 1 : return Which.B; + case 2 : return Which.S; + case 3 : return Which.C; + case 4 : return Which.I; + case 5 : return Which.F; + case 6 : return Which.J; + case 7 : return Which.D; + default: return Which._NOT_IN_SCHEMA; + } + } + public final boolean isZ() { + return which() == PrimitiveArray.Which.Z; + } + public final boolean hasZ() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Boolean.Reader getZ() { + return _getPointerField(org.capnproto.PrimitiveList.Boolean.factory, 0, null, 0); + } + + public final boolean isB() { + return which() == PrimitiveArray.Which.B; + } + public final boolean hasB() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Byte.Reader getB() { + return _getPointerField(org.capnproto.PrimitiveList.Byte.factory, 0, null, 0); + } + + public final boolean isS() { + return which() == PrimitiveArray.Which.S; + } + public final boolean hasS() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Short.Reader getS() { + return _getPointerField(org.capnproto.PrimitiveList.Short.factory, 0, null, 0); + } + + public final boolean isC() { + return which() == PrimitiveArray.Which.C; + } + public final boolean hasC() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Short.Reader getC() { + return _getPointerField(org.capnproto.PrimitiveList.Short.factory, 0, null, 0); + } + + public final boolean isI() { + return which() == PrimitiveArray.Which.I; + } + public final boolean hasI() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Int.Reader getI() { + return _getPointerField(org.capnproto.PrimitiveList.Int.factory, 0, null, 0); + } + + public final boolean isF() { + return which() == PrimitiveArray.Which.F; + } + public final boolean hasF() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Float.Reader getF() { + return _getPointerField(org.capnproto.PrimitiveList.Float.factory, 0, null, 0); + } + + public final boolean isJ() { + return which() == PrimitiveArray.Which.J; + } + public final boolean hasJ() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Long.Reader getJ() { + return _getPointerField(org.capnproto.PrimitiveList.Long.factory, 0, null, 0); + } + + public final boolean isD() { + return which() == PrimitiveArray.Which.D; + } + public final boolean hasD() { + return !_pointerFieldIsNull(0); + } + public final org.capnproto.PrimitiveList.Double.Reader getD() { + return _getPointerField(org.capnproto.PrimitiveList.Double.factory, 0, null, 0); + } + + } + + public enum Which { + Z, + B, + S, + C, + I, + F, + J, + D, + _NOT_IN_SCHEMA, + } + } + + } diff --git a/substratevm/src/com.oracle.svm.hosted/resources/SharedLayerSnapshotCapnProtoSchema.capnp b/substratevm/src/com.oracle.svm.hosted/resources/SharedLayerSnapshotCapnProtoSchema.capnp index 37a11c262795..ea188e7d1aaf 100644 --- a/substratevm/src/com.oracle.svm.hosted/resources/SharedLayerSnapshotCapnProtoSchema.capnp +++ b/substratevm/src/com.oracle.svm.hosted/resources/SharedLayerSnapshotCapnProtoSchema.capnp @@ -148,15 +148,11 @@ struct ConstantReference { } nullPointer @1 :Void; notMaterialized @2 :Void; - primitiveValue :group { - typeChar @3 :Int8; - rawValue @4 :Int64; - - } + primitiveValue @3 :PrimitiveValue; methodPointer :group { - methodId @5 :MethodId; + methodId @4 :MethodId; } - cEntryPointLiteralCodePointer @6 :CEntryPointLiteralReference; + cEntryPointLiteralCodePointer @5 :CEntryPointLiteralReference; } } @@ -187,22 +183,13 @@ struct PersistedConstant { } } } - primitiveData :union { - z @13 :List(Bool); - b @14 :List(Int8); - s @15 :List(Int16); - c @16 :List(UInt16); - i @17 :List(Int32); - f @18 :List(Float32); - j @19 :List(Int64); - d @20 :List(Float64); - } + primitiveData @13 :PrimitiveArray; relocatable :group { - key @21 :Text; + key @14 :Text; } } - parentConstantId @22 :ConstantId; - parentIndex @23 :Int32; + parentConstantId @15 :ConstantId; + parentIndex @16 :Int32; } struct KeyStoreEntry { @@ -237,10 +224,18 @@ struct Annotation { struct AnnotationValue { name @0 :Text; union { - other @1 :Text; + string @1 :Text; + primitive @2 :PrimitiveValue; + primitiveArray @3 :PrimitiveArray; enum :group { - className @2 :Text; - name @3 :Text; + className @4 :Text; + name @5 :Text; + } + className @6 :Text; + annotation @7 :Annotation; + members :group { + className @8 :Text; + memberValues @9 :List(AnnotationValue); } } } @@ -261,3 +256,21 @@ struct SharedLayerSnapshot { singletonObjects @12 :List(ImageSingletonObject); fields @13 :List(PersistedAnalysisField); } + +struct PrimitiveValue { + typeChar @0 :Int8; + rawValue @1 :Int64; +} + +struct PrimitiveArray { + union { + z @0 :List(Bool); + b @1 :List(Int8); + s @2 :List(Int16); + c @3 :List(UInt16); + i @4 :List(Int32); + f @5 :List(Float32); + j @6 :List(Int64); + d @7 :List(Float64); + } +} diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/heap/SVMImageLayerLoader.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/heap/SVMImageLayerLoader.java index 8e697fb9d7f3..e2b1225c5c17 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/heap/SVMImageLayerLoader.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/heap/SVMImageLayerLoader.java @@ -27,6 +27,7 @@ import static com.oracle.graal.pointsto.heap.ImageLayerSnapshotUtil.PERSISTED; import java.lang.annotation.Annotation; +import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; @@ -153,20 +154,55 @@ public Class lookupClass(boolean optional, String className) { @Override protected Annotation[] getAnnotations(StructList.Reader reader) { - return IntStream.range(0, reader.size()).mapToObj(reader::get).map(a -> { - String typeName = a.getTypeName().toString(); - Class annotationType = lookupBaseLayerTypeInHostVM(typeName).asSubclass(Annotation.class); - Map annotationValuesMap = new HashMap<>(); - a.getValues().forEach(v -> { - Object value = switch (v.which()) { - case ENUM -> getEnumValue(v.getEnum().getClassName(), v.getEnum().getName()); - case OTHER -> v.getOther().toString(); - default -> throw AnalysisError.shouldNotReachHere("Unknown annotation value kind: " + v.which()); + return IntStream.range(0, reader.size()).mapToObj(reader::get).map(this::getAnnotation).toArray(Annotation[]::new); + } + + private Annotation getAnnotation(SharedLayerSnapshotCapnProtoSchemaHolder.Annotation.Reader a) { + String typeName = a.getTypeName().toString(); + Class annotationType = lookupBaseLayerTypeInHostVM(typeName).asSubclass(Annotation.class); + Map annotationValuesMap = new HashMap<>(); + a.getValues().forEach(v -> { + Object value = getAnnotationValue(v); + annotationValuesMap.put(v.getName().toString(), value); + }); + return AnnotationParser.annotationForMap(annotationType, annotationValuesMap); + } + + private Object getAnnotationValue(SharedLayerSnapshotCapnProtoSchemaHolder.AnnotationValue.Reader v) { + return switch (v.which()) { + case STRING -> v.getString().toString(); + case ENUM -> getEnumValue(v.getEnum().getClassName(), v.getEnum().getName()); + case PRIMITIVE -> { + var p = v.getPrimitive(); + long rawValue = p.getRawValue(); + char typeChar = (char) p.getTypeChar(); + yield switch (JavaKind.fromPrimitiveOrVoidTypeChar(typeChar)) { + case Boolean -> rawValue != 0; + case Byte -> (byte) rawValue; + case Char -> (char) rawValue; + case Short -> (short) rawValue; + case Int -> (int) rawValue; + case Long -> rawValue; + case Float -> Float.intBitsToFloat((int) rawValue); + case Double -> Double.longBitsToDouble(rawValue); + default -> throw AnalysisError.shouldNotReachHere("Unknown annotation value type: " + typeChar); }; - annotationValuesMap.put(v.getName().toString(), value); - }); - return AnnotationParser.annotationForMap(annotationType, annotationValuesMap); - }).toArray(Annotation[]::new); + } + case PRIMITIVE_ARRAY -> getArray(v.getPrimitiveArray()); + case CLASS_NAME -> lookupClass(false, v.getClassName().toString()); + case ANNOTATION -> getAnnotation(v.getAnnotation()); + case MEMBERS -> { + var m = v.getMembers(); + var mv = m.getMemberValues(); + Class membersClass = lookupClass(false, m.getClassName().toString()); + var array = Array.newInstance(membersClass, mv.size()); + for (int i = 0; i < mv.size(); ++i) { + Array.set(array, i, getAnnotationValue(mv.get(i))); + } + yield array; + } + case _NOT_IN_SCHEMA -> throw AnalysisError.shouldNotReachHere("Unknown annotation value kind: " + v.which()); + }; } @Override diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/heap/SVMImageLayerWriter.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/heap/SVMImageLayerWriter.java index b248885cdebb..915bed0cb52f 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/heap/SVMImageLayerWriter.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/heap/SVMImageLayerWriter.java @@ -52,6 +52,7 @@ import com.oracle.graal.pointsto.heap.ImageHeapConstant; import com.oracle.graal.pointsto.heap.ImageLayerWriter; import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder; +import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.AnnotationValue; import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.CEntryPointLiteralReference; import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.ImageSingletonKey; import com.oracle.graal.pointsto.heap.SharedLayerSnapshotCapnProtoSchemaHolder.ImageSingletonObject; @@ -63,6 +64,7 @@ import com.oracle.graal.pointsto.meta.AnalysisField; import com.oracle.graal.pointsto.meta.AnalysisMethod; import com.oracle.graal.pointsto.meta.AnalysisType; +import com.oracle.graal.pointsto.util.AnalysisError; import com.oracle.svm.core.FunctionPointerHolder; import com.oracle.svm.core.StaticFieldsSupport; import com.oracle.svm.core.SubstrateOptions; @@ -94,8 +96,10 @@ import com.oracle.svm.util.LogUtils; import com.oracle.svm.util.ModuleSupport; +import jdk.graal.compiler.core.common.NumUtil; import jdk.graal.compiler.debug.Assertions; import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import jdk.vm.ci.meta.ResolvedJavaMethod; import jdk.vm.ci.meta.ResolvedJavaType; import sun.reflect.annotation.AnnotationType; @@ -117,11 +121,14 @@ public void setHostedUniverse(HostedUniverse hUniverse) { } @Override - protected void persistAnnotationValues(AnnotatedElement annotatedElement, Class annotationClass, - IntFunction> builder) { - EconomicMap members = EconomicMap.create(); - AnnotationType annotationType = AnnotationType.getInstance(annotationClass); + protected void persistAnnotationValues(AnnotatedElement annotatedElement, Class annotationClass, IntFunction> builder) { Annotation annotation = AnnotationAccess.getAnnotation(annotatedElement, annotationClass); + persistAnnotationValues(annotation, annotationClass, builder); + } + + private void persistAnnotationValues(Annotation annotation, Class annotationClass, IntFunction> builder) { + AnnotationType annotationType = AnnotationType.getInstance(annotationClass); + EconomicMap members = EconomicMap.create(); annotationType.members().forEach((memberName, memberAccessor) -> { try { String moduleName = memberAccessor.getDeclaringClass().getModule().getName(); @@ -142,17 +149,54 @@ protected void persistAnnotationValues(AnnotatedElement annotatedElement, Class< var b = list.get(i); b.setName(cursor.getKey()); Object v = cursor.getValue(); - if (v.getClass().isEnum()) { - var ba = b.initEnum(); - ba.setClassName(v.getClass().getName()); - ba.setName(v.toString()); - } else { - b.setOther(v.toString()); + persistAnnotationValue(v, b); + } + } + } + + private void persistAnnotationValue(Object v, AnnotationValue.Builder b) { + if (v.getClass().isEnum()) { + var ba = b.initEnum(); + ba.setClassName(v.getClass().getName()); + ba.setName(v.toString()); + } else if (v.getClass().isArray()) { + if (v instanceof Object[] array) { + var ba = b.initMembers(); + ba.setClassName(v.getClass().getComponentType().getName()); + var bav = ba.initMemberValues(array.length); + for (int i = 0; i < array.length; ++i) { + persistAnnotationValue(array[i], bav.get(i)); } + } else { + Class componentType = v.getClass().getComponentType(); + assert componentType.isPrimitive() : v + " should be a primitive array"; + persistConstantPrimitiveArray(b.initPrimitiveArray(), JavaKind.fromJavaClass(componentType), v); + } + } else { + switch (v) { + case Boolean z -> setAnnotationPrimitiveValue(b, JavaKind.Boolean, z ? 1L : 0L); + case Byte z -> setAnnotationPrimitiveValue(b, JavaKind.Byte, z); + case Short s -> setAnnotationPrimitiveValue(b, JavaKind.Short, s); + case Character c -> setAnnotationPrimitiveValue(b, JavaKind.Char, c); + case Integer i -> setAnnotationPrimitiveValue(b, JavaKind.Int, i); + case Float f -> setAnnotationPrimitiveValue(b, JavaKind.Float, Float.floatToRawIntBits(f)); + case Long j -> setAnnotationPrimitiveValue(b, JavaKind.Long, j); + case Double d -> setAnnotationPrimitiveValue(b, JavaKind.Double, Double.doubleToRawLongBits(d)); + case Class clazz -> b.setClassName(clazz.getName()); + case Annotation innerAnnotation -> + persistAnnotationValues(innerAnnotation, innerAnnotation.annotationType(), b.initAnnotation()::initValues); + case String s -> b.setString(s); + default -> throw AnalysisError.shouldNotReachHere("Unknown annotation value: " + v); } } } + private static void setAnnotationPrimitiveValue(AnnotationValue.Builder b, JavaKind kind, long rawValue) { + var pv = b.initPrimitive(); + pv.setTypeChar(NumUtil.safeToUByte(kind.getTypeChar())); + pv.setRawValue(rawValue); + } + @Override protected void persistHook() { ImageHeapConstant staticPrimitiveFields = (ImageHeapConstant) hUniverse.getSnippetReflection().forObject(StaticFieldsSupport.getStaticPrimitiveFields());