From c9bda1acf99d74c4f930ec5f0a10c2d4d212c15f Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Tue, 17 Sep 2024 12:31:27 +0800 Subject: [PATCH 01/28] add graalvm 11/17/22 ci --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cec90a08d6..98dc863dda 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -89,11 +89,14 @@ jobs: graalvm: name: GraalVM CI runs-on: ubuntu-latest + strategy: + matrix: + java-version: ["11", "17", "21", "22"] steps: - uses: actions/checkout@v4 - uses: graalvm/setup-graalvm@v1 with: - java-version: "21" + java-version: ${{ matrix.java-version }} distribution: "graalvm" github-token: ${{ secrets.GITHUB_TOKEN }} native-image-job-reports: "true" From aa89bb5b731d89a7b4df888f19b5287accf44dda Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Tue, 17 Sep 2024 12:37:49 +0800 Subject: [PATCH 02/28] remove graalvm 11 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98dc863dda..002b66e2c0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -91,7 +91,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java-version: ["11", "17", "21", "22"] + java-version: ["17", "21", "22"] steps: - uses: actions/checkout@v4 - uses: graalvm/setup-graalvm@v1 From e8460e85e9801a38da9d21a140a6891f3403305d Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Tue, 17 Sep 2024 12:43:47 +0800 Subject: [PATCH 03/28] add ClassInfo init --- .../org.apache.fury/fury-core/native-image.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties index e9d4a67b24..f891ce64c4 100644 --- a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties +++ b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties @@ -76,6 +76,7 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.shaded.org.codehaus.janino.IClass,\ org.apache.fury.shaded.org.codehaus.janino.Java$ClassLiteral,\ org.apache.fury.resolver.ClassResolver$2,\ + org.apache.fury.resolver.ClassInfo,\ org.apache.fury.meta.ClassDef,\ org.apache.fury.meta.Encoders,\ org.apache.fury.shaded.org.codehaus.janino.Parser$1,\ From 5f2f9310b420bf5b65303ba34646ca49f88a7b56 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Wed, 18 Sep 2024 14:05:55 +0800 Subject: [PATCH 04/28] debug on ci --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 002b66e2c0..68632ca0e5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -100,6 +100,9 @@ jobs: distribution: "graalvm" github-token: ${{ secrets.GITHUB_TOKEN }} native-image-job-reports: "true" + - uses: actions/checkout@v4 + - name: Setup tmate session + uses: mxschmitt/action-tmate@v3 - name: Build native image and run run: ./ci/run_ci.sh graalvm_test From c290c63d07d722a674be3292827d995fbca7ceb2 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Wed, 18 Sep 2024 14:11:24 +0800 Subject: [PATCH 05/28] add FieldInfo init --- .../org.apache.fury/fury-core/native-image.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties index f891ce64c4..952698d5da 100644 --- a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties +++ b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties @@ -78,6 +78,8 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.resolver.ClassResolver$2,\ org.apache.fury.resolver.ClassInfo,\ org.apache.fury.meta.ClassDef,\ + org.apache.fury.meta.ClassDef,\ + org.apache.fury.meta.ClassDef$FieldInfo,\ org.apache.fury.meta.Encoders,\ org.apache.fury.shaded.org.codehaus.janino.Parser$1,\ org.apache.fury.shaded.org.codehaus.janino.Java$BinaryOperation,\ From e38e8c7dfc5536822fbbf4519d7ab235f8287892 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Wed, 18 Sep 2024 14:26:15 +0800 Subject: [PATCH 06/28] trigger ci --- .../src/main/java/org/apache/fury/graalvm/Main.java | 1 + 1 file changed, 1 insertion(+) diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/Main.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/Main.java index 6b51256b38..b8b6085690 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/Main.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/Main.java @@ -31,6 +31,7 @@ public static void main(String[] args) throws Throwable { RecordExample.main(args); CompatibleRecordExample.main(args); RecordExample2.main(args); + ThreadSafeExample.main(args); CompatibleThreadSafeExample.main(args); ProxyExample.main(args); From 9dc79e8f3648d388d76e1303dfa70610ed9f5af6 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Wed, 18 Sep 2024 14:30:07 +0800 Subject: [PATCH 07/28] trigger ci --- .github/workflows/ci.yml | 195 --------------------------------------- 1 file changed, 195 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 68632ca0e5..d1f1827c73 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,53 +39,6 @@ on: types: ["opened", "reopened", "synchronize"] jobs: - java: - name: Java CI - runs-on: ubuntu-latest - env: - MY_VAR: "PATH" - strategy: - matrix: - java-version: ["8", "11", "17", "21"] - steps: - - uses: actions/checkout@v4 - - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v4 - with: - java-version: ${{ matrix.java-version }} - distribution: "temurin" - - name: Install bazel - run: ./ci/run_ci.sh install_bazel - - name: Install python - run: ./ci/run_ci.sh install_python - - name: Install pyfury - run: ./ci/run_ci.sh install_pyfury - - name: Run CI with Maven - run: ./ci/run_ci.sh java${{ matrix.java-version }} - openj9: - name: Openj9 Java CI - runs-on: ubuntu-latest - env: - MY_VAR: "PATH" - strategy: - matrix: - # String in openj9 1.8 share byte array by offset, fury doesn't allow it. - java-version: ["21"] - steps: - - uses: actions/checkout@v4 - - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v4 - with: - java-version: ${{ matrix.java-version }} - distribution: "adopt-openj9" - - name: Install bazel - run: ./ci/run_ci.sh install_bazel - - name: Install python - run: ./ci/run_ci.sh install_python - - name: Install pyfury - run: ./ci/run_ci.sh install_pyfury - - name: Run CI with Maven - run: ./ci/run_ci.sh java${{ matrix.java-version }} graalvm: name: GraalVM CI runs-on: ubuntu-latest @@ -106,151 +59,3 @@ jobs: - name: Build native image and run run: ./ci/run_ci.sh graalvm_test - scala: - name: Scala CI - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Set up JDK8 - uses: actions/setup-java@v4 - with: - java-version: 8 - distribution: "temurin" - - name: Install fury java - run: cd java && mvn -T10 --no-transfer-progress clean install -DskipTests && cd - - - name: Test - run: | - # Avoid sbt download jackson-databind error - rm -rf /home/runner/.m2/repository/com/fasterxml/jackson/ - cd scala && sbt +test && cd - - - integration_tests: - name: Integration Tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Set up JDK8 - uses: actions/setup-java@v4 - with: - java-version: 8 - distribution: "temurin" - - name: Run CI - run: ./ci/run_ci.sh integration_tests - - javascript: - name: JavaScript CI - strategy: - matrix: - node-version: [14.x, 16.x, 18.x, 20.x] - os: [ubuntu-latest, macos-13, windows-2022] - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - name: Upgrade npm - run: npm install -g npm@8 - # node-gyp needs to use python and relies on the distutils module. - # The distutils module has been removed starting from python 3.12 - # (see https://docs.python.org/3.10/library/distutils.html). Some - # OS (such as macos -latest) uses python3.12 by default, so python 3.8 - # is used here to avoid this problem. - - name: Set up Python3.8 - uses: actions/setup-python@v5 - with: - python-version: 3.8 - - name: Run CI with NodeJS - run: python ./ci/run_ci.py javascript - - rust: - name: Rust CI - strategy: - matrix: - os: [ubuntu-latest, macos-12, macos-14] # macos-12: x86, macos-14: arm64 - runs-on: ${{ matrix.os }} - timeout-minutes: 45 - steps: - - uses: actions/checkout@v4 - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: 3.11 - - name: Run Rust CI - run: python ./ci/run_ci.py rust - - cpp: - name: C++ CI - strategy: - matrix: - os: [ubuntu-latest, macos-12, macos-14] # macos-12: x86, macos-14: arm64 - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: 3.11 - - name: Run C++ CI with Bazel - run: python ./ci/run_ci.py cpp - python: - name: Python CI - # Fix python 3.6 install issue, see - # https://github.com/rwth-i6/returnn/commit/38ecab17d781c4b74db6a174c8097187380b4ddc - runs-on: ubuntu-20.04 - strategy: - matrix: - python-version: [3.7, 3.12] - steps: - - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Install bazel - run: ./ci/run_ci.sh install_bazel - - name: Run Python CI - run: ./ci/run_ci.sh python - - go: - name: Golang CI - runs-on: ubuntu-latest - strategy: - matrix: - go-version: ["1.13", "1.18"] - steps: - - uses: actions/checkout@v4 - - name: Setup Go ${{ matrix.go-version }} - uses: actions/setup-go@v4 - with: - go-version: ${{ matrix.go-version }} - - name: Display Go version - run: go version - - name: Install bazel - run: ./ci/run_ci.sh install_bazel - - name: Install python - run: ./ci/run_ci.sh install_python - - name: Install pyfury - run: ./ci/run_ci.sh install_pyfury - - name: Run Golang CI - run: ./ci/run_ci.sh go - - lint: - name: Code Style Check - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v4 - with: - java-version: 21 - distribution: "oracle" - - name: Check License Header - uses: korandoru/hawkeye@v3 - - name: Set up Python 3.8 - uses: actions/setup-python@v5 - with: - python-version: 3.8 - - name: Check code style - run: ./ci/run_ci.sh format From a8239e1fac680f358e7bd32c22a01b04a64598b2 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Sun, 22 Sep 2024 12:44:07 +0800 Subject: [PATCH 08/28] trigger ci --- .../graalvm_tests/native-image.properties | 150 ++++++++++++++++++ 1 file changed, 150 insertions(+) diff --git a/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties b/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties index c01360795a..a80362926a 100644 --- a/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties +++ b/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties @@ -26,4 +26,154 @@ Args = -H:+ReportExceptionStackTraces \ org.apache.fury.graalvm.ThreadSafeExample,\ org.apache.fury.graalvm.CompatibleThreadSafeExample,\ org.apache.fury.graalvm.ProxyExample,\ + com.google.common.cache.LocalCache$1,\ + com.google.common.cache.LocalCache$2,\ + com.google.common.cache.LocalCache$Segment,\ + com.google.common.cache.LocalCache$EntrySet,\ + com.google.common.cache.LocalCache$EntryFactory$1,\ + com.google.common.cache.LocalCache$EntryFactory$2,\ + com.google.common.cache.LocalCache$EntryFactory$3,\ + com.google.common.cache.LocalCache$EntryFactory$4,\ + com.google.common.cache.LocalCache$EntryFactory$5,\ + com.google.common.cache.LocalCache$EntryFactory$6,\ + com.google.common.cache.LocalCache$EntryFactory$7,\ + com.google.common.cache.LocalCache$EntryFactory$8,\ + com.google.common.cache.LocalCache$Strength$1,\ + com.google.common.cache.LocalCache$Strength$2,\ + com.google.common.cache.LocalCache$Strength$3,\ + org.apache.fury.meta.ClassDef,\ + org.apache.fury.util.StringUtils,\ + org.apache.fury.reflect.TypeRef,\ + org.apache.fury.resolver.ClassInfoHolder,\ + org.apache.fury.resolver.ClassResolver$ExtRegistry,\ + org.apache.fury.resolver.MetaStringResolver,\ + org.apache.fury.resolver.NoRefResolver,\ + org.apache.fury.resolver.ClassInfo,\ + org.apache.fury.util.unsafe._JDKAccess$1,\ + org.apache.fury.util.record.RecordUtils$1,\ + org.apache.fury.util.record.RecordUtils$2,\ + org.apache.fury.util.record.RecordUtils$3,\ + org.apache.fury.serializer.PrimitiveSerializers$BooleanSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$ByteSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$CharSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$DoubleSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$FloatSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$IntSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$LongSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$ShortSerializer,\ + org.apache.fury.serializer.Serializers$AtomicBooleanSerializer,\ + org.apache.fury.serializer.Serializers$AtomicIntegerSerializer,\ + org.apache.fury.serializer.Serializers$AtomicLongSerializer,\ + org.apache.fury.serializer.Serializers$AtomicReferenceSerializer,\ + org.apache.fury.serializer.Serializers$BigDecimalSerializer,\ + org.apache.fury.serializer.Serializers$BigIntegerSerializer,\ + org.apache.fury.serializer.Serializers$ClassSerializer,\ + org.apache.fury.serializer.Serializers$CurrencySerializer,\ + org.apache.fury.serializer.Serializers$EmptyObjectSerializer,\ + org.apache.fury.serializer.Serializers$RegexSerializer,\ + org.apache.fury.serializer.Serializers$StringBufferSerializer,\ + org.apache.fury.serializer.Serializers$StringBuilderSerializer,\ + org.apache.fury.serializer.Serializers$URISerializer,\ + org.apache.fury.serializer.Serializers$UUIDSerializer,\ + org.apache.fury.serializer.TimeSerializers$DateSerializer,\ + org.apache.fury.serializer.TimeSerializers$DurationSerializer,\ + org.apache.fury.serializer.TimeSerializers$InstantSerializer,\ + org.apache.fury.serializer.TimeSerializers$LocalDateSerializer,\ + org.apache.fury.serializer.TimeSerializers$LocalDateTimeSerializer,\ + org.apache.fury.serializer.TimeSerializers$LocalTimeSerializer,\ + org.apache.fury.serializer.TimeSerializers$MonthDaySerializer,\ + org.apache.fury.serializer.TimeSerializers$OffsetDateTimeSerializer,\ + org.apache.fury.serializer.TimeSerializers$OffsetTimeSerializer,\ + org.apache.fury.serializer.TimeSerializers$PeriodSerializer,\ + org.apache.fury.serializer.TimeSerializers$SqlDateSerializer,\ + org.apache.fury.serializer.TimeSerializers$SqlTimeSerializer,\ + org.apache.fury.serializer.TimeSerializers$TimestampSerializer,\ + org.apache.fury.serializer.TimeSerializers$YearMonthSerializer,\ + org.apache.fury.serializer.TimeSerializers$YearSerializer,\ + org.apache.fury.serializer.TimeSerializers$ZoneOffsetSerializer,\ + org.apache.fury.serializer.TimeSerializers$ZonedDateTimeSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$ArrayDequeSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$ArrayListSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$BitSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$CollectionsSingletonListSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$CollectionsSingletonSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$ConcurrentHashMapKeySetView,\ + org.apache.fury.serializer.collection.CollectionSerializers$ConcurrentSkipListSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$CopyOnWriteArrayListSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$EmptyListSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$EmptySetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$EmptySortedSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$HashSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$LinkedHashSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$PriorityQueueSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$SortedSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$VectorSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableBiMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableListSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSetSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedSetSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$RegularImmutableListSerializer,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableListSerializer,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableMapSerializer,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableSetSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$ConcurrentHashMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$ConcurrentSkipListMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$EmptyMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$EmptySortedMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$HashMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$LazyMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$LinkedHashMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$SingletonMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$SortedMapSerializer,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ + org.apache.fury.serializer.ArraySerializers$BooleanArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$ByteArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$CharArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$DoubleArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$FloatArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$IntArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$LongArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$ShortArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$StringArraySerializer,\ + org.apache.fury.serializer.JavaSerializer$1,\ + org.apache.fury.serializer.JavaSerializer$2,\ + org.apache.fury.serializer.JavaSerializer$3,\ + org.apache.fury.serializer.JavaSerializer$4,\ + org.apache.fury.serializer.OptionalSerializers$OptionalDoubleSerializer,\ + org.apache.fury.serializer.OptionalSerializers$OptionalIntSerializer,\ + org.apache.fury.serializer.OptionalSerializers$OptionalLongSerializer,\ + org.apache.fury.serializer.OptionalSerializers$OptionalSerializer,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedMapSerializer,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableMapSerializer,\ + org.apache.fury.type.Descriptor$1,\ + com.google.common.cache.LocalCache$LocalManualCache,\ + com.google.common.collect.NaturalOrdering,\ + com.google.common.collect.RegularImmutableList,\ + com.google.common.collect.RegularImmutableSet,\ + org.apache.fury.builder.JITContext,\ + org.apache.fury.codegen.Expression$Reference,\ + org.apache.fury.collection.IdentityMap,\ + org.apache.fury.collection.ObjectMap,\ + org.apache.fury.collection.Tuple2,\ + org.apache.fury.config.Config,\ + org.apache.fury.config.Language,\ + org.apache.fury.config.LongEncoding,\ + org.apache.fury.meta.MetaStringEncoder,\ + org.apache.fury.resolver.MetaStringBytes,\ + org.apache.fury.config.CompatibleMode,\ + org.apache.fury.meta.DeflaterMetaCompressor,\ + com.google.common.base.Equivalence,\ + com.google.common.base.Equivalence$Equals,\ + com.google.common.base.Equivalence$Identity,\ + com.google.common.cache.CacheBuilder$1,\ + com.google.common.cache.CacheBuilder$2,\ + com.google.common.cache.CacheBuilder$3,\ + com.google.common.cache.CacheBuilder$NullListener,\ + com.google.common.cache.CacheBuilder$OneWeigher,\ + org.apache.fury.resolver.ClassChecker,\ + com.google.common.base.Ticker$1,\ + org.apache.fury.meta.ClassDef$FieldInfo,\ org.apache.fury.graalvm.Benchmark From 8e5750dc04d5f1074742717f4184118b8e9cac50 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Sun, 22 Sep 2024 14:53:59 +0800 Subject: [PATCH 09/28] load janino in a separate classloader instead for graalvm --- .../graalvm_tests/native-image.properties | 13 +++- .../org/apache/fury/codegen/JaninoUtils.java | 78 ++++++++++++++----- .../apache/fury/util/ClassLoaderUtils.java | 62 +++++++++++++++ .../serializer/CodegenSerializerTest.java | 2 +- 4 files changed, 132 insertions(+), 23 deletions(-) diff --git a/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties b/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties index a80362926a..0d8924d6df 100644 --- a/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties +++ b/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties @@ -14,19 +14,22 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. - # https://www.graalvm.org/latest/reference-manual/native-image/dynamic-features/Reflection/#unsafe-accesses : # The unsafe offset get on build time may be different from runtime -Args = -H:+ReportExceptionStackTraces \ +Args=-H:+ReportExceptionStackTraces \ --initialize-at-build-time=org.apache.fury.graalvm.Example,\ org.apache.fury.graalvm.CompatibleExample,\ + org.apache.fury.util.DelayedRef,\ + org.apache.fury.util.LoaderBinding$1,\ org.apache.fury.graalvm.record.RecordExample,\ org.apache.fury.graalvm.record.CompatibleRecordExample,\ org.apache.fury.graalvm.record.RecordExample2,\ org.apache.fury.graalvm.ThreadSafeExample,\ org.apache.fury.graalvm.CompatibleThreadSafeExample,\ org.apache.fury.graalvm.ProxyExample,\ - com.google.common.cache.LocalCache$1,\ + org.apache.fury.type.Generics,\ + org.apache.fury.type.Generics,org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$17,\ + com.google.common.cache.LocalCache$1,\ com.google.common.cache.LocalCache$2,\ com.google.common.cache.LocalCache$Segment,\ com.google.common.cache.LocalCache$EntrySet,\ @@ -41,7 +44,9 @@ Args = -H:+ReportExceptionStackTraces \ com.google.common.cache.LocalCache$Strength$1,\ com.google.common.cache.LocalCache$Strength$2,\ com.google.common.cache.LocalCache$Strength$3,\ - org.apache.fury.meta.ClassDef,\ + com.google.common.cache.LocalCache$StrongEntry,com.google.common.cache.LocalCache$WeakEntry,\ + org.apache.fury.util.record.RecordComponent,com.google.common.cache.LocalCache$EntryFactory$2,\ + org.apache.fury.meta.ClassDef,\ org.apache.fury.util.StringUtils,\ org.apache.fury.reflect.TypeRef,\ org.apache.fury.resolver.ClassInfoHolder,\ diff --git a/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java b/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java index ced6e3cc51..3d7d5b1bd8 100644 --- a/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java +++ b/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java @@ -24,6 +24,8 @@ import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -38,13 +40,17 @@ import org.apache.fury.logging.Logger; import org.apache.fury.logging.LoggerFactory; import org.apache.fury.reflect.ReflectionUtils; +import org.apache.fury.util.ClassLoaderUtils; +import org.apache.fury.util.GraalvmSupport; import org.apache.fury.util.StringUtils; +import org.codehaus.commons.compiler.ICompiler; import org.codehaus.commons.compiler.util.reflect.ByteArrayClassLoader; import org.codehaus.commons.compiler.util.resource.MapResourceCreator; import org.codehaus.commons.compiler.util.resource.MapResourceFinder; import org.codehaus.commons.compiler.util.resource.Resource; import org.codehaus.janino.ClassLoaderIClassLoader; import org.codehaus.janino.Compiler; +import org.codehaus.janino.IType; import org.codehaus.janino.util.ClassFile; /** A util to compile code to bytecode and create classloader to load generated class. */ @@ -75,11 +81,10 @@ public static Map toBytecode( public static Map toBytecode( ClassLoader parentClassLoader, String codeDir, CompileUnit... compileUnits) { - MapResourceFinder sourceFinder = new MapResourceFinder(); + Map codeMap = new HashMap<>(); for (CompileUnit unit : compileUnits) { String stubFileName = unit.pkg.replace(".", "/") + "/" + unit.mainClassName + ".java"; - sourceFinder.addResource(stubFileName, unit.getCode()); - + codeMap.put(stubFileName, unit.getCode()); if (StringUtils.isNotBlank(codeDir)) { Path path = Paths.get(codeDir, stubFileName).toAbsolutePath(); try { @@ -95,30 +100,20 @@ public static Map toBytecode( } } } - long startTime = System.nanoTime(); - // Storage for generated bytecode - final Map classes = new HashMap<>(); - // Set up the compiler. - ClassLoaderIClassLoader classLoader = new ClassLoaderIClassLoader(parentClassLoader); - Compiler compiler = new Compiler(sourceFinder, classLoader); - compiler.setClassFileCreator(new MapResourceCreator(classes)); - compiler.setClassFileFinder(new MapResourceFinder(classes)); - - // set debug flag to get source file names and line numbers for debug and stacktrace. - // this is also the default behaviour for javac. - compiler.setDebugSource(true); - compiler.setDebugLines(true); - // Compile all sources try { - compiler.compile(sourceFinder.resources().toArray(new Resource[0])); + Map result = + GraalvmSupport.isGraalBuildtime() + ? toBytecodeGraal(parentClassLoader, codeMap) + : toBytecodeInternal(parentClassLoader, codeMap); long durationMs = (System.nanoTime() - startTime) / 1000_000; String classNames = Arrays.stream(compileUnits) .map(unit -> unit.mainClassName) .collect(Collectors.joining(", ", "[", "]")); LOG.info("Compile {} take {} ms", classNames, durationMs); + return result; } catch (Exception e) { StringBuilder msgBuilder = new StringBuilder("Compile error: \n"); for (int i = 0; i < compileUnits.length; i++) { @@ -132,12 +127,59 @@ public static Map toBytecode( } throw new CodegenException(msgBuilder.toString(), e); } + } + + private static Map toBytecodeInternal( + ClassLoader parentClassLoader, Map codeMap) { + MapResourceFinder sourceFinder = new MapResourceFinder(); + codeMap.forEach(sourceFinder::addResource); + // Storage for generated bytecode + final Map classes = new HashMap<>(); + // Set up the compiler. + ClassLoaderIClassLoader classLoader = new ClassLoaderIClassLoader(parentClassLoader); + Compiler compiler = new Compiler(sourceFinder, classLoader); + compiler.setClassFileCreator(new MapResourceCreator(classes)); + compiler.setClassFileFinder(new MapResourceFinder(classes)); + + // set debug flag to get source file names and line numbers for debug and stacktrace. + // this is also the default behaviour for javac. + compiler.setDebugSource(true); + compiler.setDebugLines(true); + + // Compile all sources + try { + compiler.compile(sourceFinder.resources().toArray(new Resource[0])); + } catch (Exception e) { + throw new RuntimeException(e); + } // See https://github.com/janino-compiler/janino/issues/173 ReflectionUtils.setObjectFieldValue(classLoader, "classLoader", null); ReflectionUtils.setObjectFieldValue(classLoader, "loadedIClasses", new HashMap<>()); return classes; } + private static Map toBytecodeGraal( + ClassLoader parentClassLoader, Map codeMap) { + try (ClassLoaderUtils.SelectedChildFirstURLClassLoader loader = + new ClassLoaderUtils.SelectedChildFirstURLClassLoader( + new URL[] { + ICompiler.class.getProtectionDomain().getCodeSource().getLocation(), + IType.class.getProtectionDomain().getCodeSource().getLocation(), + JaninoUtils.class.getProtectionDomain().getCodeSource().getLocation() + }, + parentClassLoader, + c -> c.toLowerCase().contains("janino"))) { + Method toBytecodeInternal = + loader + .loadClass(JaninoUtils.class.getName()) + .getDeclaredMethod("toBytecodeInternal", ClassLoader.class, Map.class); + toBytecodeInternal.setAccessible(true); + return (Map) toBytecodeInternal.invoke(null, parentClassLoader, codeMap); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + public static class CodeStats { public final Map methodsSize; public final int constPoolSize; diff --git a/java/fury-core/src/main/java/org/apache/fury/util/ClassLoaderUtils.java b/java/fury-core/src/main/java/org/apache/fury/util/ClassLoaderUtils.java index 8ebb09d8c4..63431b547b 100644 --- a/java/fury-core/src/main/java/org/apache/fury/util/ClassLoaderUtils.java +++ b/java/fury-core/src/main/java/org/apache/fury/util/ClassLoaderUtils.java @@ -32,6 +32,7 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Predicate; import java.util.stream.Collectors; import org.apache.fury.logging.Logger; import org.apache.fury.logging.LoggerFactory; @@ -115,6 +116,67 @@ public void addURL(URL url) { } } + /** + * A mutable class loader that gives preference to its own URLs and selected classes over the + * parent class loader when loading classes and resources. + */ + public static class SelectedChildFirstURLClassLoader extends URLClassLoader { + + static { + registerAsParallelCapable(); + } + + private final ParentClassLoader parent; + private final Predicate childClassloaderFirst; + + public SelectedChildFirstURLClassLoader( + URL[] urls, ClassLoader parent, Predicate childClassloaderFirst) { + super(urls, null); + this.parent = new ParentClassLoader(parent); + this.childClassloaderFirst = childClassloaderFirst; + } + + @Override + public Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + if (!childClassloaderFirst.test(name)) { + return parent.loadClass(name, resolve); + } + try { + return super.loadClass(name, resolve); + } catch (ClassNotFoundException cnf) { + return parent.loadClass(name, resolve); + } + } + + @Override + public Enumeration getResources(String name) throws IOException { + if (!childClassloaderFirst.test(name)) { + return parent.getResources(name); + } + ArrayList urls = Collections.list(super.getResources(name)); + urls.addAll(Collections.list(parent.getResources(name))); + return Collections.enumeration(urls); + } + + @Override + public URL getResource(String name) { + if (!childClassloaderFirst.test(name)) { + return parent.getResource(name); + } + URL url = super.getResource(name); + if (url != null) { + return url; + } else { + return parent.getResource(name); + } + } + + @Override + public void addURL(URL url) { + super.addURL(url); + } + } + /** * A class loader that gives preference to its contained classloaders over the parent class loader * when loading classes and resources. diff --git a/java/fury-core/src/test/java/org/apache/fury/serializer/CodegenSerializerTest.java b/java/fury-core/src/test/java/org/apache/fury/serializer/CodegenSerializerTest.java index 862cb434b2..7da0848653 100644 --- a/java/fury-core/src/test/java/org/apache/fury/serializer/CodegenSerializerTest.java +++ b/java/fury-core/src/test/java/org/apache/fury/serializer/CodegenSerializerTest.java @@ -66,7 +66,7 @@ public void testSimpleBean() { } @Test(dataProvider = "furyCopyConfig") - public void testSimpleBean(Fury fury) { + public void testSimpleBeanCopy(Fury fury) { B b = new B(); b.f1 = "str1"; b.f2 = 1; From c0e96b0e8c1b13ff56fad5e7ed0e922a20f9f291 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Sun, 22 Sep 2024 15:44:15 +0800 Subject: [PATCH 10/28] fix class init --- .../graalvm_tests/native-image.properties | 156 ------- .../org/apache/fury/codegen/JaninoUtils.java | 3 +- .../fury-core/native-image.properties | 434 ++++++++++++++---- 3 files changed, 358 insertions(+), 235 deletions(-) diff --git a/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties b/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties index 0d8924d6df..748540f018 100644 --- a/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties +++ b/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties @@ -19,166 +19,10 @@ Args=-H:+ReportExceptionStackTraces \ --initialize-at-build-time=org.apache.fury.graalvm.Example,\ org.apache.fury.graalvm.CompatibleExample,\ - org.apache.fury.util.DelayedRef,\ - org.apache.fury.util.LoaderBinding$1,\ org.apache.fury.graalvm.record.RecordExample,\ org.apache.fury.graalvm.record.CompatibleRecordExample,\ org.apache.fury.graalvm.record.RecordExample2,\ org.apache.fury.graalvm.ThreadSafeExample,\ org.apache.fury.graalvm.CompatibleThreadSafeExample,\ org.apache.fury.graalvm.ProxyExample,\ - org.apache.fury.type.Generics,\ - org.apache.fury.type.Generics,org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$17,\ - com.google.common.cache.LocalCache$1,\ - com.google.common.cache.LocalCache$2,\ - com.google.common.cache.LocalCache$Segment,\ - com.google.common.cache.LocalCache$EntrySet,\ - com.google.common.cache.LocalCache$EntryFactory$1,\ - com.google.common.cache.LocalCache$EntryFactory$2,\ - com.google.common.cache.LocalCache$EntryFactory$3,\ - com.google.common.cache.LocalCache$EntryFactory$4,\ - com.google.common.cache.LocalCache$EntryFactory$5,\ - com.google.common.cache.LocalCache$EntryFactory$6,\ - com.google.common.cache.LocalCache$EntryFactory$7,\ - com.google.common.cache.LocalCache$EntryFactory$8,\ - com.google.common.cache.LocalCache$Strength$1,\ - com.google.common.cache.LocalCache$Strength$2,\ - com.google.common.cache.LocalCache$Strength$3,\ - com.google.common.cache.LocalCache$StrongEntry,com.google.common.cache.LocalCache$WeakEntry,\ - org.apache.fury.util.record.RecordComponent,com.google.common.cache.LocalCache$EntryFactory$2,\ - org.apache.fury.meta.ClassDef,\ - org.apache.fury.util.StringUtils,\ - org.apache.fury.reflect.TypeRef,\ - org.apache.fury.resolver.ClassInfoHolder,\ - org.apache.fury.resolver.ClassResolver$ExtRegistry,\ - org.apache.fury.resolver.MetaStringResolver,\ - org.apache.fury.resolver.NoRefResolver,\ - org.apache.fury.resolver.ClassInfo,\ - org.apache.fury.util.unsafe._JDKAccess$1,\ - org.apache.fury.util.record.RecordUtils$1,\ - org.apache.fury.util.record.RecordUtils$2,\ - org.apache.fury.util.record.RecordUtils$3,\ - org.apache.fury.serializer.PrimitiveSerializers$BooleanSerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$ByteSerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$CharSerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$DoubleSerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$FloatSerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$IntSerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$LongSerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$ShortSerializer,\ - org.apache.fury.serializer.Serializers$AtomicBooleanSerializer,\ - org.apache.fury.serializer.Serializers$AtomicIntegerSerializer,\ - org.apache.fury.serializer.Serializers$AtomicLongSerializer,\ - org.apache.fury.serializer.Serializers$AtomicReferenceSerializer,\ - org.apache.fury.serializer.Serializers$BigDecimalSerializer,\ - org.apache.fury.serializer.Serializers$BigIntegerSerializer,\ - org.apache.fury.serializer.Serializers$ClassSerializer,\ - org.apache.fury.serializer.Serializers$CurrencySerializer,\ - org.apache.fury.serializer.Serializers$EmptyObjectSerializer,\ - org.apache.fury.serializer.Serializers$RegexSerializer,\ - org.apache.fury.serializer.Serializers$StringBufferSerializer,\ - org.apache.fury.serializer.Serializers$StringBuilderSerializer,\ - org.apache.fury.serializer.Serializers$URISerializer,\ - org.apache.fury.serializer.Serializers$UUIDSerializer,\ - org.apache.fury.serializer.TimeSerializers$DateSerializer,\ - org.apache.fury.serializer.TimeSerializers$DurationSerializer,\ - org.apache.fury.serializer.TimeSerializers$InstantSerializer,\ - org.apache.fury.serializer.TimeSerializers$LocalDateSerializer,\ - org.apache.fury.serializer.TimeSerializers$LocalDateTimeSerializer,\ - org.apache.fury.serializer.TimeSerializers$LocalTimeSerializer,\ - org.apache.fury.serializer.TimeSerializers$MonthDaySerializer,\ - org.apache.fury.serializer.TimeSerializers$OffsetDateTimeSerializer,\ - org.apache.fury.serializer.TimeSerializers$OffsetTimeSerializer,\ - org.apache.fury.serializer.TimeSerializers$PeriodSerializer,\ - org.apache.fury.serializer.TimeSerializers$SqlDateSerializer,\ - org.apache.fury.serializer.TimeSerializers$SqlTimeSerializer,\ - org.apache.fury.serializer.TimeSerializers$TimestampSerializer,\ - org.apache.fury.serializer.TimeSerializers$YearMonthSerializer,\ - org.apache.fury.serializer.TimeSerializers$YearSerializer,\ - org.apache.fury.serializer.TimeSerializers$ZoneOffsetSerializer,\ - org.apache.fury.serializer.TimeSerializers$ZonedDateTimeSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$ArrayDequeSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$ArrayListSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$BitSetSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$CollectionsSingletonListSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$CollectionsSingletonSetSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$ConcurrentHashMapKeySetView,\ - org.apache.fury.serializer.collection.CollectionSerializers$ConcurrentSkipListSetSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$CopyOnWriteArrayListSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$EmptyListSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$EmptySetSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$EmptySortedSetSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$HashSetSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$LinkedHashSetSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$PriorityQueueSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$SortedSetSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$VectorSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableBiMapSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableListSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableMapSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSetSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedMapSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedSetSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$RegularImmutableListSerializer,\ - org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableListSerializer,\ - org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableMapSerializer,\ - org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableSetSerializer,\ - org.apache.fury.serializer.collection.MapSerializers$ConcurrentHashMapSerializer,\ - org.apache.fury.serializer.collection.MapSerializers$ConcurrentSkipListMapSerializer,\ - org.apache.fury.serializer.collection.MapSerializers$EmptyMapSerializer,\ - org.apache.fury.serializer.collection.MapSerializers$EmptySortedMapSerializer,\ - org.apache.fury.serializer.collection.MapSerializers$HashMapSerializer,\ - org.apache.fury.serializer.collection.MapSerializers$LazyMapSerializer,\ - org.apache.fury.serializer.collection.MapSerializers$LinkedHashMapSerializer,\ - org.apache.fury.serializer.collection.MapSerializers$SingletonMapSerializer,\ - org.apache.fury.serializer.collection.MapSerializers$SortedMapSerializer,\ - org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ - org.apache.fury.serializer.ArraySerializers$BooleanArraySerializer,\ - org.apache.fury.serializer.ArraySerializers$ByteArraySerializer,\ - org.apache.fury.serializer.ArraySerializers$CharArraySerializer,\ - org.apache.fury.serializer.ArraySerializers$DoubleArraySerializer,\ - org.apache.fury.serializer.ArraySerializers$FloatArraySerializer,\ - org.apache.fury.serializer.ArraySerializers$IntArraySerializer,\ - org.apache.fury.serializer.ArraySerializers$LongArraySerializer,\ - org.apache.fury.serializer.ArraySerializers$ShortArraySerializer,\ - org.apache.fury.serializer.ArraySerializers$StringArraySerializer,\ - org.apache.fury.serializer.JavaSerializer$1,\ - org.apache.fury.serializer.JavaSerializer$2,\ - org.apache.fury.serializer.JavaSerializer$3,\ - org.apache.fury.serializer.JavaSerializer$4,\ - org.apache.fury.serializer.OptionalSerializers$OptionalDoubleSerializer,\ - org.apache.fury.serializer.OptionalSerializers$OptionalIntSerializer,\ - org.apache.fury.serializer.OptionalSerializers$OptionalLongSerializer,\ - org.apache.fury.serializer.OptionalSerializers$OptionalSerializer,\ - org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedMapSerializer,\ - org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ - org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableMapSerializer,\ - org.apache.fury.type.Descriptor$1,\ - com.google.common.cache.LocalCache$LocalManualCache,\ - com.google.common.collect.NaturalOrdering,\ - com.google.common.collect.RegularImmutableList,\ - com.google.common.collect.RegularImmutableSet,\ - org.apache.fury.builder.JITContext,\ - org.apache.fury.codegen.Expression$Reference,\ - org.apache.fury.collection.IdentityMap,\ - org.apache.fury.collection.ObjectMap,\ - org.apache.fury.collection.Tuple2,\ - org.apache.fury.config.Config,\ - org.apache.fury.config.Language,\ - org.apache.fury.config.LongEncoding,\ - org.apache.fury.meta.MetaStringEncoder,\ - org.apache.fury.resolver.MetaStringBytes,\ - org.apache.fury.config.CompatibleMode,\ - org.apache.fury.meta.DeflaterMetaCompressor,\ - com.google.common.base.Equivalence,\ - com.google.common.base.Equivalence$Equals,\ - com.google.common.base.Equivalence$Identity,\ - com.google.common.cache.CacheBuilder$1,\ - com.google.common.cache.CacheBuilder$2,\ - com.google.common.cache.CacheBuilder$3,\ - com.google.common.cache.CacheBuilder$NullListener,\ - com.google.common.cache.CacheBuilder$OneWeigher,\ - org.apache.fury.resolver.ClassChecker,\ - com.google.common.base.Ticker$1,\ - org.apache.fury.meta.ClassDef$FieldInfo,\ org.apache.fury.graalvm.Benchmark diff --git a/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java b/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java index 3d7d5b1bd8..d8608398be 100644 --- a/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java +++ b/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java @@ -43,7 +43,6 @@ import org.apache.fury.util.ClassLoaderUtils; import org.apache.fury.util.GraalvmSupport; import org.apache.fury.util.StringUtils; -import org.codehaus.commons.compiler.ICompiler; import org.codehaus.commons.compiler.util.reflect.ByteArrayClassLoader; import org.codehaus.commons.compiler.util.resource.MapResourceCreator; import org.codehaus.commons.compiler.util.resource.MapResourceFinder; @@ -163,7 +162,7 @@ private static Map toBytecodeGraal( try (ClassLoaderUtils.SelectedChildFirstURLClassLoader loader = new ClassLoaderUtils.SelectedChildFirstURLClassLoader( new URL[] { - ICompiler.class.getProtectionDomain().getCodeSource().getLocation(), + Resource.class.getProtectionDomain().getCodeSource().getLocation(), IType.class.getProtectionDomain().getCodeSource().getLocation(), JaninoUtils.class.getProtectionDomain().getCodeSource().getLocation() }, diff --git a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties index 952698d5da..99ce05761d 100644 --- a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties +++ b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties @@ -39,110 +39,34 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.serializer.JavaSerializer,\ org.apache.fury.reflect.ReflectionUtils,\ org.apache.fury.builder.ObjectCodecBuilder,\ - org.apache.fury.shaded.org.codehaus.janino.Java$ArrayType,\ org.apache.fury.serializer.LocaleSerializer,\ - org.apache.fury.shaded.org.codehaus.janino.Java$AbstractCompilationUnit$TypeImportOnDemandDeclaration,\ - org.apache.fury.shaded.org.codehaus.janino.Compiler,\ - org.apache.fury.shaded.org.codehaus.janino.UnitCompiler,\ com.google.common.util.concurrent.SettableFuture,\ org.apache.fury.config.FuryBuilder,\ - org.apache.fury.shaded.org.codehaus.janino.Java$MethodInvocation,\ - org.apache.fury.shaded.org.codehaus.janino.Java$FunctionDeclarator$FormalParameter,\ - org.apache.fury.shaded.org.codehaus.janino.Java$ExpressionStatement,\ - org.apache.fury.shaded.org.codehaus.janino.Java$FunctionDeclarator$FormalParameters,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Rvalue,\ - org.apache.fury.shaded.javassist.util.proxy.DefineClassHelper,\ - org.apache.fury.shaded.org.codehaus.janino.Java$LocalVariableAccess,\ - org.apache.fury.shaded.org.codehaus.janino.ClassLoaderIClassLoader,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Located$1,\ - org.apache.fury.shaded.org.codehaus.janino.Java$EmptyStatement,\ - org.apache.fury.shaded.org.codehaus.janino.Java$ForStatement,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Type,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Cast,\ - org.apache.fury.shaded.org.codehaus.janino.Java$BooleanRvalue,\ - org.apache.fury.shaded.org.codehaus.janino.IClass$PrimitiveIClass,\ - org.apache.fury.shaded.org.codehaus.janino.Compiler$CompilerIClassLoader,\ - org.apache.fury.shaded.javassist.util.proxy.SecurityActions,\ org.apache.fury.util.unsafe._Lookup,\ - org.apache.fury.shaded.org.codehaus.commons.compiler.util.iterator.Iterables$5,\ com.google.common.base.internal.Finalizer,\ org.apache.fury.serializer.ReplaceResolveSerializer,\ com.google.common.primitives.Primitives,\ org.apache.fury.type.GenericType,\ - org.apache.fury.shaded.org.codehaus.janino.Java$BreakableStatement,\ - org.apache.fury.shaded.org.codehaus.janino.Java$LocalVariableDeclarationStatement,\ - org.apache.fury.shaded.org.codehaus.janino.TokenStreamImpl$1,\ - org.apache.fury.shaded.org.codehaus.janino.Java$ThisReference,\ - org.apache.fury.shaded.org.codehaus.janino.IClass,\ - org.apache.fury.shaded.org.codehaus.janino.Java$ClassLiteral,\ org.apache.fury.resolver.ClassResolver$2,\ org.apache.fury.resolver.ClassInfo,\ org.apache.fury.meta.ClassDef,\ org.apache.fury.meta.ClassDef,\ org.apache.fury.meta.ClassDef$FieldInfo,\ org.apache.fury.meta.Encoders,\ - org.apache.fury.shaded.org.codehaus.janino.Parser$1,\ - org.apache.fury.shaded.org.codehaus.janino.Java$BinaryOperation,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Crement,\ - org.apache.fury.shaded.org.codehaus.janino.Java$ReturnStatement,\ - org.apache.fury.shaded.org.codehaus.janino.Java$WhileStatement,\ - org.apache.fury.shaded.org.codehaus.janino.Java$FunctionDeclarator,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Atom,\ - org.apache.fury.shaded.org.codehaus.janino.Java$SimpleType,\ - org.apache.fury.shaded.org.codehaus.janino.Java$FieldAccessExpression,\ - org.apache.fury.shaded.org.codehaus.janino.Java$AbstractTypeBodyDeclaration,\ - org.apache.fury.shaded.org.codehaus.janino.Parser,\ - org.apache.fury.shaded.org.codehaus.janino.Java$QualifiedThisReference,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Assignment,\ - org.apache.fury.shaded.org.codehaus.janino.Java$NullLiteral,\ - org.apache.fury.shaded.org.codehaus.janino.Java$ParenthesizedExpression,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Statement,\ - org.apache.fury.shaded.org.codehaus.janino.IClassLoader$1,\ - org.apache.fury.shaded.org.codehaus.janino.Java$VariableDeclarator,\ - org.apache.fury.shaded.org.codehaus.janino.Java$AbstractCompilationUnit$SingleTypeImportDeclaration,\ - org.apache.fury.shaded.org.codehaus.janino.Java$MethodDeclarator,\ com.google.common.base.FinalizableReferenceQueue,\ - org.apache.fury.shaded.org.codehaus.janino.Java$AbstractCompilationUnit$ImportDeclaration,\ org.apache.fury.codegen.JaninoUtils,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Invocation,\ - org.apache.fury.shaded.org.codehaus.janino.ReflectionIClass,\ org.apache.fury.util.record.RecordUtils,\ org.apache.fury.logging.FuryLogger,\ org.apache.fury.logging.LoggerFactory,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Literal,\ - org.apache.fury.shaded.org.codehaus.janino.IClassLoader,\ - org.apache.fury.shaded.org.codehaus.janino.Java$PrimitiveType,\ - org.apache.fury.shaded.org.codehaus.janino.CodeContext,\ org.apache.fury.serializer.collection.ImmutableCollectionSerializers,\ - org.apache.fury.shaded.org.codehaus.janino.IClass$2,\ com.google.common.collect.RegularImmutableMap,\ - org.apache.fury.shaded.org.codehaus.janino.Descriptor,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Located,\ - org.apache.fury.shaded.org.codehaus.janino.Java$ReferenceType,\ - org.apache.fury.shaded.org.codehaus.janino.Java$UnaryOperation,\ org.apache.fury.util.ClassLoaderUtils,\ - org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$39,\ - org.apache.fury.shaded.org.codehaus.janino.Java$IntegerLiteral,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Lvalue,\ - org.apache.fury.shaded.org.codehaus.janino.Java$PackageDeclaration,\ - org.apache.fury.shaded.org.codehaus.janino.Java$FieldAccess,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Block,\ org.apache.fury.builder.AccessorHelper,\ org.apache.fury.codegen.Expression$Literal,\ - org.apache.fury.shaded.org.codehaus.janino.Java$ContinuableStatement,\ - org.apache.fury.shaded.org.codehaus.janino.Java$IfStatement,\ com.google.common.collect.RegularImmutableBiMap,\ - org.apache.fury.shaded.org.codehaus.janino.Java$ConstructorDeclarator,\ - org.apache.fury.shaded.org.codehaus.janino.Java$SuperConstructorInvocation,\ - org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$44,\ - org.apache.fury.shaded.org.codehaus.janino.Java$AmbiguousName,\ - org.apache.fury.shaded.org.codehaus.janino.Scanner,\ - org.apache.fury.shaded.org.codehaus.janino.Java$FieldDeclaration,\ org.apache.fury.memory.BoundsChecking,\ - org.apache.fury.shaded.org.codehaus.janino.Java$Package,\ org.apache.fury.serializer.ArraySerializers,\ org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - org.apache.fury.shaded.org.codehaus.janino.Java$AccessModifier,\ org.apache.fury.util.ClassLoaderUtils$ParentClassLoader,\ com.google.common.collect.RegularImmutableSortedSet,\ org.apache.fury.type.Descriptor,\ @@ -178,4 +102,360 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.reflect.TypeRef$ClassOwnership$1,\ org.apache.fury.reflect.TypeRef$ClassOwnership$2,\ org.apache.fury.resolver.DisallowedList,\ - org.apache.fury.util.StringUtils + org.apache.fury.util.StringUtils,\ + java.util.Collections$SynchronizedList,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ + com.google.common.collect.RegularImmutableSet,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSetSerializer,\ + java.lang.ArrayIndexOutOfBoundsException,\ + java.net.URI,\ + org.apache.fury.serializer.Serializers$URISerializer,\ + java.lang.Boolean,\ + org.apache.fury.serializer.PrimitiveSerializers$BooleanSerializer,\ + java.util.Collections$SynchronizedCollection,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ + java.util.Collections$SynchronizedSortedSet,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ + com.google.common.collect.SingletonImmutableSet,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSetSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptySortedSet,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedSetSerializer,\ + java.util.Collections$EmptySet,\ + org.apache.fury.serializer.collection.CollectionSerializers$EmptySetSerializer,\ + java.util.concurrent.atomic.AtomicInteger,\ + org.apache.fury.serializer.Serializers$AtomicIntegerSerializer,\ + java.time.LocalTime,\ + org.apache.fury.serializer.TimeSerializers$LocalTimeSerializer,\ + java.util.HashMap,\ + org.apache.fury.serializer.collection.MapSerializers$HashMapSerializer,\ + java.math.BigDecimal,\ + org.apache.fury.serializer.Serializers$BigDecimalSerializer,\ + java.util.ImmutableCollections$Map1,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableMapSerializer,\ + java.time.MonthDay,\ + org.apache.fury.serializer.TimeSerializers$MonthDaySerializer,\ + java.sql.Timestamp,\ + org.apache.fury.serializer.TimeSerializers$TimestampSerializer,\ + java.util.concurrent.ConcurrentHashMap$KeySetView,\ + org.apache.fury.serializer.collection.CollectionSerializers$ConcurrentHashMapKeySetViewSerializer,\ + java.lang.Object,\ + org.apache.fury.serializer.Serializers$EmptyObjectSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$DoubleSerializer,\ + java.util.Collections$ReverseComparator,\ + org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ + java.util.Optional,\ + org.apache.fury.serializer.OptionalSerializers$OptionalSerializer,\ + java.util.concurrent.atomic.AtomicLong,\ + org.apache.fury.serializer.Serializers$AtomicLongSerializer,\ + java.util.BitSet,\ + org.apache.fury.serializer.collection.CollectionSerializers$BitSetSerializer,\ + org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ + java.util.Currency,\ + org.apache.fury.serializer.Serializers$CurrencySerializer,\ + org.apache.fury.serializer.ArraySerializers$CharArraySerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptySet,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSetSerializer,\ + org.apache.fury.serializer.ArraySerializers$BooleanArraySerializer,\ + java.util.Collections$SingletonMap,\ + org.apache.fury.serializer.collection.MapSerializers$SingletonMapSerializer,\ + java.nio.HeapByteBuffer,\ + org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ + java.lang.Void,\ + java.util.LinkedHashSet,\ + org.apache.fury.serializer.collection.CollectionSerializers$LinkedHashSetSerializer,\ + org.apache.fury.collection.LazyMap,\ + org.apache.fury.serializer.collection.MapSerializers$LazyMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptyBiMap,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableMapSerializer,\ + java.util.PriorityQueue,\ + org.apache.fury.serializer.collection.CollectionSerializers$PriorityQueueSerializer,\ + java.lang.NullPointerException,\ + java.lang.IndexOutOfBoundsException,\ + java.util.OptionalLong,\ + org.apache.fury.serializer.OptionalSerializers$OptionalLongSerializer,\ + java.util.HashSet,\ + org.apache.fury.serializer.collection.CollectionSerializers$HashSetSerializer,\ + java.time.Year,\ + org.apache.fury.serializer.TimeSerializers$YearSerializer,\ + org.apache.fury.serializer.LambdaSerializer$ReplaceStub,\ + org.apache.fury.serializer.LambdaSerializer,\ + java.lang.IllegalStateException,\ + java.time.OffsetDateTime,\ + org.apache.fury.serializer.TimeSerializers$OffsetDateTimeSerializer,\ + java.time.Duration,\ + org.apache.fury.serializer.TimeSerializers$DurationSerializer,\ + java.math.BigInteger,\ + org.apache.fury.serializer.Serializers$BigIntegerSerializer,\ + java.util.EnumMap,\ + org.apache.fury.serializer.collection.MapSerializers$EnumMapSerializer,\ + java.util.Collections$SynchronizedRandomAccessList,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ + org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$FloatSerializer,\ + java.time.Instant,\ + org.apache.fury.serializer.TimeSerializers$InstantSerializer,\ + java.sql.Date,\ + org.apache.fury.serializer.TimeSerializers$SqlDateSerializer,\ + com.google.common.collect.RegularImmutableBiMap,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableBiMapSerializer,\ + java.util.Arrays$ArrayList,\ + org.apache.fury.serializer.collection.CollectionSerializers$ArraysAsListSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$BooleanSerializer,\ + org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ + java.util.Collections$UnmodifiableSortedMap,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableMapSerializer,\ + java.lang.Throwable,\ + java.util.Collections$UnmodifiableCollection,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ + java.util.concurrent.ArrayBlockingQueue,\ + java.lang.StackTraceElement,\ + java.util.Collections$UnmodifiableMap,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableMapSerializer,\ + java.util.concurrent.CopyOnWriteArrayList,\ + org.apache.fury.serializer.collection.CollectionSerializers$CopyOnWriteArrayListSerializer,\ + java.time.YearMonth,\ + org.apache.fury.serializer.TimeSerializers$YearMonthSerializer,\ + com.google.common.collect.ImmutableSortedMap,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedMapSerializer,\ + java.util.ImmutableCollections$Set12,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableSetSerializer,\ + org.apache.fury.serializer.ArraySerializers$ShortArraySerializer,\ + java.lang.Float,\ + org.apache.fury.serializer.PrimitiveSerializers$FloatSerializer,\ + java.lang.Double,\ + org.apache.fury.serializer.PrimitiveSerializers$DoubleSerializer,\ + java.lang.Exception,\ + org.apache.fury.serializer.ArraySerializers$IntArraySerializer,\ + java.util.regex.Pattern,\ + org.apache.fury.serializer.Serializers$RegexSerializer,\ + java.util.Collections$EmptyList,\ + org.apache.fury.serializer.collection.CollectionSerializers$EmptyListSerializer,\ + java.util.TreeSet,\ + org.apache.fury.serializer.collection.CollectionSerializers$SortedSetSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$ByteSerializer,\ + java.time.OffsetTime,\ + org.apache.fury.serializer.TimeSerializers$OffsetTimeSerializer,\ + java.time.LocalDate,\ + org.apache.fury.serializer.TimeSerializers$LocalDateSerializer,\ + java.time.Period,\ + org.apache.fury.serializer.TimeSerializers$PeriodSerializer,\ + org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ + java.util.concurrent.ConcurrentHashMap,\ + org.apache.fury.serializer.collection.MapSerializers$ConcurrentHashMapSerializer,\ + java.util.ArrayList,\ + org.apache.fury.serializer.collection.CollectionSerializers$ArrayListSerializer,\ + java.lang.String,\ + org.apache.fury.serializer.StringSerializer,\ + java.util.ImmutableCollections$MapN,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableMapSerializer,\ + java.lang.Short,\ + org.apache.fury.serializer.PrimitiveSerializers$ShortSerializer,\ + java.util.concurrent.atomic.AtomicReference,\ + org.apache.fury.serializer.Serializers$AtomicReferenceSerializer,\ + java.util.concurrent.LinkedBlockingQueue,\ + java.util.Collections$SynchronizedMap,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedMapSerializer,\ + org.apache.fury.serializer.JdkProxySerializer$ReplaceStub,\ + org.apache.fury.serializer.JdkProxySerializer,\ + java.util.UUID,\ + org.apache.fury.serializer.Serializers$UUIDSerializer,\ + java.util.LinkedList,\ + org.apache.fury.serializer.collection.CollectionSerializer,\ + java.util.Collections$UnmodifiableList,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ + java.util.Collections$SingletonList,\ + org.apache.fury.serializer.collection.CollectionSerializers$CollectionsSingletonListSerializer,\ + java.util.ImmutableCollections$SubList,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableListSerializer,\ + java.util.concurrent.atomic.AtomicBoolean,\ + org.apache.fury.serializer.Serializers$AtomicBooleanSerializer,\ + java.util.Collections$UnmodifiableSortedSet,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ + com.google.common.collect.RegularImmutableSortedSet,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedSetSerializer,\ + org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ + java.util.OptionalDouble,\ + org.apache.fury.serializer.OptionalSerializers$OptionalDoubleSerializer,\ + org.apache.fury.serializer.ArraySerializers$DoubleArraySerializer,\ + java.lang.StringBuffer,\ + org.apache.fury.serializer.Serializers$StringBufferSerializer,\ + java.time.ZonedDateTime,\ + org.apache.fury.serializer.TimeSerializers$ZonedDateTimeSerializer,\ + java.util.Collections$SynchronizedSet,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ + java.lang.IllegalArgumentException,\ + java.util.Vector,\ + org.apache.fury.serializer.collection.CollectionSerializers$VectorSerializer,\ + java.util.Collections$SetFromMap,\ + org.apache.fury.serializer.collection.CollectionSerializers$SetFromMapSerializer,\ + org.apache.fury.serializer.ReplaceResolveSerializer$ReplaceStub,\ + org.apache.fury.serializer.ReplaceResolveSerializer,\ + java.lang.Class,\ + org.apache.fury.serializer.Serializers$ClassSerializer,\ + java.util.Locale,\ + org.apache.fury.serializer.LocaleSerializer,\ + java.util.concurrent.ConcurrentSkipListSet,\ + org.apache.fury.serializer.collection.CollectionSerializers$ConcurrentSkipListSetSerializer,\ + java.lang.RuntimeException,\ + org.apache.fury.serializer.PrimitiveSerializers$CharSerializer,\ + java.util.TreeMap,\ + org.apache.fury.serializer.collection.MapSerializers$SortedMapSerializer,\ + java.util.Collections$SynchronizedSortedMap,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedMapSerializer,\ + com.google.common.collect.RegularImmutableList,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$RegularImmutableListSerializer,\ + org.apache.fury.serializer.ArraySerializers$FloatArraySerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$LongSerializer,\ + java.util.Collections$UnmodifiableRandomAccessList,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ + com.google.common.collect.RegularImmutableMap,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableMapSerializer,\ + org.apache.fury.serializer.ArraySerializers$StringArraySerializer,\ + java.lang.StringBuilder,\ + org.apache.fury.serializer.Serializers$StringBuilderSerializer,\ + java.time.LocalDateTime,\ + org.apache.fury.serializer.TimeSerializers$LocalDateTimeSerializer,\ + java.util.Date,\ + org.apache.fury.serializer.TimeSerializers$DateSerializer,\ + java.util.LinkedHashMap,\ + org.apache.fury.serializer.collection.MapSerializers$LinkedHashMapSerializer,\ + java.util.RegularEnumSet,\ + org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$ShortSerializer,\ + java.util.ImmutableCollections$List12,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableListSerializer,\ + org.apache.fury.serializer.ArraySerializers$LongArraySerializer,\ + java.util.ImmutableCollections$SetN,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableSetSerializer,\ + java.io.IOException,\ + java.util.concurrent.ConcurrentSkipListMap,\ + org.apache.fury.serializer.collection.MapSerializers$ConcurrentSkipListMapSerializer,\ + org.apache.fury.serializer.ArraySerializers$ByteArraySerializer,\ + java.util.Collections$UnmodifiableNavigableMap$EmptyNavigableMap,\ + org.apache.fury.serializer.collection.MapSerializers$EmptySortedMapSerializer,\ + java.util.Collections$EmptyMap,\ + org.apache.fury.serializer.collection.MapSerializers$EmptyMapSerializer,\ + org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$IntSerializer,\ + java.util.Collections$UnmodifiableSet,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ + org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ + java.lang.Byte,\ + org.apache.fury.serializer.PrimitiveSerializers$ByteSerializer,\ + java.nio.DirectByteBuffer,\ + com.google.common.collect.SingletonImmutableBiMap,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableBiMapSerializer,\ + java.lang.Character,\ + org.apache.fury.serializer.PrimitiveSerializers$CharSerializer,\ + java.util.Comparators$NaturalOrderComparator,\ + com.google.common.collect.SingletonImmutableList,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableListSerializer,\ + java.util.Collections$SingletonSet,\ + org.apache.fury.serializer.collection.CollectionSerializers$CollectionsSingletonSetSerializer,\ + java.util.Collections$UnmodifiableNavigableSet$EmptyNavigableSet,\ + org.apache.fury.serializer.collection.CollectionSerializers$EmptySortedSetSerializer,\ + java.util.ArrayDeque,\ + org.apache.fury.serializer.collection.CollectionSerializers$ArrayDequeSerializer,\ + java.time.ZoneOffset,\ + org.apache.fury.serializer.TimeSerializers$ZoneOffsetSerializer,\ + java.lang.Long,\ + org.apache.fury.serializer.PrimitiveSerializers$LongSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptySortedMap,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedMapSerializer,\ + java.util.OptionalInt,\ + org.apache.fury.serializer.OptionalSerializers$OptionalIntSerializer,\ + java.sql.Time,\ + org.apache.fury.serializer.TimeSerializers$SqlTimeSerializer,\ + java.lang.Integer,\ + org.apache.fury.serializer.PrimitiveSerializers$IntSerializer,\ + java.util.ImmutableCollections$ListN,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableListSerializer,\ + org.apache.fury.serializer.collection.FuryArrayAsListSerializer,\ + org.apache.fury.util.DelayedRef,\ + org.apache.fury.util.LoaderBinding$1,\ + org.apache.fury.type.Generics,\ + com.google.common.cache.LocalCache$1,\ + com.google.common.cache.LocalCache$2,\ + com.google.common.cache.LocalCache$Segment,\ + com.google.common.cache.LocalCache$EntrySet,\ + com.google.common.cache.LocalCache$EntryFactory$1,\ + com.google.common.cache.LocalCache$EntryFactory$2,\ + com.google.common.cache.LocalCache$EntryFactory$3,\ + com.google.common.cache.LocalCache$EntryFactory$4,\ + com.google.common.cache.LocalCache$EntryFactory$5,\ + com.google.common.cache.LocalCache$EntryFactory$6,\ + com.google.common.cache.LocalCache$EntryFactory$7,\ + com.google.common.cache.LocalCache$EntryFactory$8,\ + com.google.common.cache.LocalCache$Strength$1,\ + com.google.common.cache.LocalCache$Strength$2,\ + com.google.common.cache.LocalCache$Strength$3,\ + com.google.common.cache.LocalCache$StrongEntry,com.google.common.cache.LocalCache$WeakEntry,\ + org.apache.fury.util.record.RecordComponent,com.google.common.cache.LocalCache$EntryFactory$2,\ + org.apache.fury.resolver.SerializationContext,\ + org.apache.fury.resolver.MetaContext,\ + org.apache.fury.reflect.ReflectionUtils$2,\ + org.apache.fury.serializer.NonexistentClassSerializers$NonexistentClassSerializer,\ + org.apache.fury.resolver.FieldResolver,\ + org.apache.fury.resolver.FieldResolver$FieldInfo,\ + org.apache.fury.resolver.FieldResolver$MapFieldInfo,\ + org.apache.fury.resolver.FieldResolver$CollectionFieldInfo,\ + org.apache.fury.meta.MetaStringDecoder,\ + org.apache.fury.meta.ClassDef,\ + org.apache.fury.meta.ClassDefDecoder,\ + org.apache.fury.meta.ClassDefEncoder,\ + org.apache.fury.meta.ClassSpec,\ + org.apache.fury.meta.DeflaterMetaCompressor,\ + org.apache.fury.meta.Encoders,\ + org.apache.fury.meta.MetaCompressor,\ + org.apache.fury.meta.MetaString,\ + org.apache.fury.meta.MetaStringDecoder,\ + org.apache.fury.meta.MetaStringEncoder,\ + org.apache.fury.meta.TypeEqualMetaCompressor,\ + org.apache.fury.meta.ClassDef$RegisteredFieldType,\ + org.apache.fury.meta.ClassDef$FieldInfo,\ + org.apache.fury.meta.ClassDef$FieldType,\ + org.apache.fury.meta.ClassDef$RegisteredFieldType,\ + org.apache.fury.meta.ClassDef$CollectionFieldType,\ + org.apache.fury.meta.ClassDef$MapFieldType,\ + org.apache.fury.meta.ClassDef$EnumFieldType,\ + org.apache.fury.meta.ClassDef$ArrayFieldType,\ + org.apache.fury.meta.ClassDef$ObjectFieldType,\ + org.apache.fury.shaded.org.codehaus.janino.IClass$1,\ + org.codehaus.janino.IType,\ + org.codehaus.commons.compiler.util.resource.Resource,\ + org.apache.fury.reflect.TypeRef$TypeVariableKey,\ + org.apache.fury.reflect.TypeRef,\ + org.apache.fury.resolver.ClassInfoHolder,\ + org.apache.fury.resolver.ClassResolver$ExtRegistry,\ + org.apache.fury.resolver.MetaStringResolver,\ + org.apache.fury.resolver.NoRefResolver,\ + org.apache.fury.resolver.ClassInfo,\ + org.apache.fury.util.unsafe._JDKAccess$1,\ + org.apache.fury.util.record.RecordUtils$1,\ + org.apache.fury.util.record.RecordUtils$2,\ + org.apache.fury.util.record.RecordUtils$3,\ + org.apache.fury.type.Descriptor$1,\ + com.google.common.cache.LocalCache$LocalManualCache,\ + com.google.common.collect.NaturalOrdering,\ + org.apache.fury.builder.JITContext,\ + org.apache.fury.codegen.Expression$Reference,\ + org.apache.fury.collection.IdentityMap,\ + org.apache.fury.collection.ObjectMap,\ + org.apache.fury.collection.Tuple2,\ + org.apache.fury.config.Config,\ + org.apache.fury.config.Language,\ + org.apache.fury.config.LongEncoding,\ + org.apache.fury.meta.MetaStringEncoder,\ + org.apache.fury.resolver.MetaStringBytes,\ + org.apache.fury.config.CompatibleMode,\ + org.apache.fury.meta.DeflaterMetaCompressor,\ + com.google.common.base.Equivalence,\ + com.google.common.base.Equivalence$Equals,\ + com.google.common.base.Equivalence$Identity,\ + com.google.common.cache.CacheBuilder$1,\ + com.google.common.cache.CacheBuilder$2,\ + com.google.common.cache.CacheBuilder$3,\ + com.google.common.cache.CacheBuilder$NullListener,\ + com.google.common.cache.CacheBuilder$OneWeigher,\ + com.google.common.base.Ticker$1,\ + org.apache.fury.resolver.ClassChecker From 33df929a0eab1de85a1cdfb444b15347c023f200 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Sun, 22 Sep 2024 16:18:40 +0800 Subject: [PATCH 11/28] fix class init --- .../apache/fury/resolver/ClassResolver.java | 41 +++++++++++++++---- .../fury-core/native-image.properties | 18 ++++++++ 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java index 8ee93a3806..304be112aa 100644 --- a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java +++ b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java @@ -425,6 +425,11 @@ public void register(Class cls, boolean createSerializer) { } buildMetaSharedClassInfo(Tuple2.of(classDef, null), classDef); } + if (GraalvmSupport.isGraalBuildtime()) { + // Instance for generated class should be hold at graalvm runtime only. + getGraalvmClassRegistry().serializerClassMap.put(cls, classInfo.serializer.getClass()); + classInfo.serializer = null; + } } } @@ -1915,33 +1920,52 @@ public Fury getFury() { return fury; } - private static final ConcurrentMap> GRAALVM_REGISTRY = + private static final ConcurrentMap GRAALVM_REGISTRY = new ConcurrentHashMap<>(); // CHECKSTYLE.OFF:MethodName public static void _addGraalvmClassRegistry(int furyConfigHash, ClassResolver classResolver) { // CHECKSTYLE.ON:MethodName if (GraalvmSupport.isGraalBuildtime()) { - List resolvers = - GRAALVM_REGISTRY.computeIfAbsent( - furyConfigHash, k -> Collections.synchronizedList(new ArrayList<>())); - resolvers.add(classResolver); + GraalvmClassRegistry registry = + GRAALVM_REGISTRY.computeIfAbsent(furyConfigHash, k -> new GraalvmClassRegistry()); + registry.resolvers.add(classResolver); + } + } + + private static class GraalvmClassRegistry { + private final List resolvers; + private final Map, Class> serializerClassMap; + + private GraalvmClassRegistry() { + resolvers = Collections.synchronizedList(new ArrayList<>()); + serializerClassMap = new ConcurrentHashMap<>(); } } + private GraalvmClassRegistry getGraalvmClassRegistry() { + return GRAALVM_REGISTRY.computeIfAbsent( + fury.getConfig().getConfigHash(), k -> new GraalvmClassRegistry()); + } + private Class getSerializerClassFromGraalvmRegistry(Class cls) { - List classResolvers = GRAALVM_REGISTRY.get(fury.getConfig().getConfigHash()); + GraalvmClassRegistry registry = getGraalvmClassRegistry(); + List classResolvers = registry.resolvers; if (classResolvers == null || classResolvers.isEmpty()) { return null; } for (ClassResolver classResolver : classResolvers) { if (classResolver != this) { ClassInfo classInfo = classResolver.classInfoMap.get(cls); - if (classInfo != null) { + if (classInfo != null && classInfo.serializer != null) { return classInfo.serializer.getClass(); } } } + Class serializerClass = registry.serializerClassMap.get(cls); + if (serializerClass != null) { + return serializerClass; + } if (GraalvmSupport.isGraalRuntime()) { if (Functions.isLambda(cls) || ReflectionUtils.isJdkProxy(cls)) { return null; @@ -1953,7 +1977,8 @@ private Class getSerializerClassFromGraalvmRegistry(Class< private Class getMetaSharedDeserializerClassFromGraalvmRegistry( Class cls, ClassDef classDef) { - List classResolvers = GRAALVM_REGISTRY.get(fury.getConfig().getConfigHash()); + GraalvmClassRegistry registry = getGraalvmClassRegistry(); + List classResolvers = registry.resolvers; if (classResolvers == null || classResolvers.isEmpty()) { return null; } diff --git a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties index 99ce05761d..8c585e9d1f 100644 --- a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties +++ b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties @@ -458,4 +458,22 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ com.google.common.cache.CacheBuilder$NullListener,\ com.google.common.cache.CacheBuilder$OneWeigher,\ com.google.common.base.Ticker$1,\ + org.apache.fury.serializer.collection.FuryArrayAsListSerializer$ArrayAsList,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$GuavaCollectionSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedSetSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$GuavaMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableBiMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$1,\ + org.apache.fury.reflect.FieldAccessor$GeneratedAccessor,\ + org.apache.fury.serializer.ReplaceResolveSerializer$1,\ + org.apache.fury.reflect.ReflectionUtils$1,\ + org.apache.fury.serializer.JavaSerializer$1,\ + org.apache.fury.serializer.JavaSerializer$2,\ + org.apache.fury.serializer.JavaSerializer$3,\ + org.apache.fury.serializer.JavaSerializer$4,\ + org.apache.fury.serializer.NonexistentClassSerializers$ClassFieldsInfo,\ + org.apache.fury.serializer.NonexistentClassSerializers$NonexistentEnumClassSerializer,\ + org.apache.fury.resolver.ClassResolver.GraalvmClassRegistry,\ org.apache.fury.resolver.ClassChecker From b616d3e7d06d445941ee00918ebabcd56f4b1119 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Sun, 22 Sep 2024 16:39:06 +0800 Subject: [PATCH 12/28] fix class init --- .../apache/fury/resolver/ClassResolver.java | 18 ++++++++++++++++-- .../fury-core/native-image.properties | 13 ++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java index 304be112aa..1c6a98ed3a 100644 --- a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java +++ b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java @@ -418,17 +418,24 @@ public void register(Class cls, boolean createSerializer) { register(cls); if (createSerializer) { ClassInfo classInfo = getClassInfo(cls); + ClassInfo deserializationClassInfo = null; if (metaContextShareEnabled && needToWriteClassDef(classInfo.serializer)) { ClassDef classDef = classInfo.classDef; if (classDef == null) { classDef = buildClassDef(classInfo); } - buildMetaSharedClassInfo(Tuple2.of(classDef, null), classDef); + deserializationClassInfo = buildMetaSharedClassInfo(Tuple2.of(classDef, null), classDef); } if (GraalvmSupport.isGraalBuildtime()) { // Instance for generated class should be hold at graalvm runtime only. getGraalvmClassRegistry().serializerClassMap.put(cls, classInfo.serializer.getClass()); classInfo.serializer = null; + if (deserializationClassInfo != null) { + getGraalvmClassRegistry() + .deserializerClassMap + .put(cls, deserializationClassInfo.serializer.getClass()); + deserializationClassInfo.serializer = null; + } } } } @@ -1936,10 +1943,12 @@ public static void _addGraalvmClassRegistry(int furyConfigHash, ClassResolver cl private static class GraalvmClassRegistry { private final List resolvers; private final Map, Class> serializerClassMap; + private final Map, Class> deserializerClassMap; private GraalvmClassRegistry() { resolvers = Collections.synchronizedList(new ArrayList<>()); serializerClassMap = new ConcurrentHashMap<>(); + deserializerClassMap = new ConcurrentHashMap<>(); } } @@ -1986,11 +1995,16 @@ private Class getMetaSharedDeserializerClassFromGraalvmReg if (classResolver != this) { Tuple2 tuple2 = classResolver.extRegistry.classIdToDef.get(classDef.getId()); - if (tuple2 != null && tuple2.f1 != null) { + if (tuple2 != null && tuple2.f1 != null && tuple2.f1.serializer != null) { return tuple2.f1.serializer.getClass(); } } } + Class deserializerClass = registry.deserializerClassMap.get(cls); + // noinspection Duplicates + if (deserializerClass != null) { + return deserializerClass; + } if (GraalvmSupport.isGraalRuntime()) { if (Functions.isLambda(cls) || ReflectionUtils.isJdkProxy(cls)) { return null; diff --git a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties index 8c585e9d1f..010aa27615 100644 --- a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties +++ b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties @@ -442,6 +442,7 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.collection.IdentityMap,\ org.apache.fury.collection.ObjectMap,\ org.apache.fury.collection.Tuple2,\ + org.apache.fury.collection.Tuple3,\ org.apache.fury.config.Config,\ org.apache.fury.config.Language,\ org.apache.fury.config.LongEncoding,\ @@ -475,5 +476,15 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.serializer.JavaSerializer$4,\ org.apache.fury.serializer.NonexistentClassSerializers$ClassFieldsInfo,\ org.apache.fury.serializer.NonexistentClassSerializers$NonexistentEnumClassSerializer,\ - org.apache.fury.resolver.ClassResolver.GraalvmClassRegistry,\ + org.apache.fury.resolver.ClassResolver$GraalvmClassRegistry,\ + org.apache.fury.collection.FuryObjectMap,\ + org.apache.fury.collection.ObjectArray,\ + org.apache.fury.collection.ObjectIntMap,\ + org.apache.fury.collection.LongMap,\ + org.apache.fury.collection.IntArray,\ + org.apache.fury.collection.IdentityMap,\ + org.apache.fury.collection.IdentityObjectIntMap,\ + org.apache.fury.collection.FuryObjectMap,\ + org.apache.fury.codegen.CompileState,\ + org.apache.fury.codegen.CodeGenerator.DefineState,\ org.apache.fury.resolver.ClassChecker From 569a2a26554faed09a0a5bc8feaedc8bb9d8561c Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Sun, 22 Sep 2024 17:03:38 +0800 Subject: [PATCH 13/28] refine native-image.properties --- .../fury-core/native-image.properties | 809 ++++++++---------- 1 file changed, 374 insertions(+), 435 deletions(-) diff --git a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties index 010aa27615..1e8762c88d 100644 --- a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties +++ b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties @@ -14,370 +14,22 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. - # https://www.graalvm.org/latest/reference-manual/native-image/dynamic-features/Reflection/#unsafe-accesses : # The unsafe offset get on build time may be different from runtime Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ - org.apache.fury.util.GraalvmSupport,\ - org.apache.fury.serializer.collection.UnmodifiableSerializers$Offset,\ - org.apache.fury.serializer.collection.SynchronizedSerializers$Offset,\ - org.apache.fury.serializer.collection.CollectionSerializers$ArraysAsListSerializer,\ - org.apache.fury.serializer.collection.CollectionSerializers$SetFromMapSerializer,\ - org.apache.fury.serializer.collection.MapSerializers$EnumMapSerializer,\ - org.apache.fury.serializer.JdkProxySerializer,\ - org.apache.fury.serializer.StringSerializer$Offset,\ - org.apache.fury.serializer.StringSerializer,\ - org.apache.fury.serializer.Serializers,\ - org.apache.fury.serializer.shim.ShimDispatcher,\ - org.apache.fury.memory.Platform,\ - org.apache.fury.util.unsafe._Lookup,\ - org.apache.fury.util.unsafe._JDKAccess,\ - org.apache.fury.type.Type,\ - org.apache.fury.type.TypeUtils,\ - org.apache.fury.Fury,\ - org.apache.fury.type.Type,\ - org.apache.fury.serializer.JavaSerializer,\ - org.apache.fury.reflect.ReflectionUtils,\ - org.apache.fury.builder.ObjectCodecBuilder,\ - org.apache.fury.serializer.LocaleSerializer,\ - com.google.common.util.concurrent.SettableFuture,\ - org.apache.fury.config.FuryBuilder,\ - org.apache.fury.util.unsafe._Lookup,\ - com.google.common.base.internal.Finalizer,\ - org.apache.fury.serializer.ReplaceResolveSerializer,\ - com.google.common.primitives.Primitives,\ - org.apache.fury.type.GenericType,\ - org.apache.fury.resolver.ClassResolver$2,\ - org.apache.fury.resolver.ClassInfo,\ - org.apache.fury.meta.ClassDef,\ - org.apache.fury.meta.ClassDef,\ - org.apache.fury.meta.ClassDef$FieldInfo,\ - org.apache.fury.meta.Encoders,\ - com.google.common.base.FinalizableReferenceQueue,\ - org.apache.fury.codegen.JaninoUtils,\ - org.apache.fury.util.record.RecordUtils,\ - org.apache.fury.logging.FuryLogger,\ - org.apache.fury.logging.LoggerFactory,\ - org.apache.fury.serializer.collection.ImmutableCollectionSerializers,\ - com.google.common.collect.RegularImmutableMap,\ - org.apache.fury.util.ClassLoaderUtils,\ - org.apache.fury.builder.AccessorHelper,\ - org.apache.fury.codegen.Expression$Literal,\ - com.google.common.collect.RegularImmutableBiMap,\ - org.apache.fury.memory.BoundsChecking,\ - org.apache.fury.serializer.ArraySerializers,\ - org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - org.apache.fury.util.ClassLoaderUtils$ParentClassLoader,\ - com.google.common.collect.RegularImmutableSortedSet,\ - org.apache.fury.type.Descriptor,\ - org.apache.fury.serializer.PrimitiveSerializers$1,\ - org.apache.fury.collection.MultiKeyWeakMap,\ - org.apache.fury.serializer.collection.UnmodifiableSerializers,\ - org.apache.fury.codegen.CompileUnit,\ - org.apache.fury.serializer.StringSerializer,\ - com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper,\ - org.apache.fury.memory.MemoryBuffer,\ - com.google.common.math.IntMath$1,\ - org.apache.fury.resolver.ClassResolver,\ - org.apache.fury.codegen.CodegenContext,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers,\ - org.apache.fury.util.unsafe._JDKAccess,\ - org.apache.fury.codegen.CodeGenerator,\ - org.apache.fury.serializer.collection.SynchronizedSerializers,\ - org.apache.fury.util.ClassLoaderUtils$ByteArrayClassLoader,\ - com.google.common.collect.AbstractIterator$1,\ - com.google.common.cache.LocalCache,\ - org.apache.fury.serializer.LambdaSerializer,\ - com.google.common.collect.ImmutableSortedMap,\ - org.apache.fury.memory.MemoryUtils,\ - org.apache.fury.type.DescriptorGrouper,\ - sun.misc.Unsafe,\ - com.google.common.collect.Platform,\ - org.apache.fury.meta.MetaString,\ - org.apache.fury.meta.MetaStringDecoder$1,\ - org.apache.fury.meta.MetaStringEncoder$1,\ - org.apache.fury.meta.MetaString$Encoding,\ - org.apache.fury.meta.Encoders,\ - org.apache.fury.reflect.TypeRef$ClassOwnership,\ - org.apache.fury.reflect.TypeRef$ClassOwnership$1,\ - org.apache.fury.reflect.TypeRef$ClassOwnership$2,\ - org.apache.fury.resolver.DisallowedList,\ - org.apache.fury.util.StringUtils,\ - java.util.Collections$SynchronizedList,\ - org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ - com.google.common.collect.RegularImmutableSet,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSetSerializer,\ - java.lang.ArrayIndexOutOfBoundsException,\ - java.net.URI,\ - org.apache.fury.serializer.Serializers$URISerializer,\ - java.lang.Boolean,\ - org.apache.fury.serializer.PrimitiveSerializers$BooleanSerializer,\ - java.util.Collections$SynchronizedCollection,\ - org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ - java.util.Collections$SynchronizedSortedSet,\ - org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ - com.google.common.collect.SingletonImmutableSet,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSetSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptySortedSet,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedSetSerializer,\ - java.util.Collections$EmptySet,\ - org.apache.fury.serializer.collection.CollectionSerializers$EmptySetSerializer,\ - java.util.concurrent.atomic.AtomicInteger,\ - org.apache.fury.serializer.Serializers$AtomicIntegerSerializer,\ - java.time.LocalTime,\ - org.apache.fury.serializer.TimeSerializers$LocalTimeSerializer,\ - java.util.HashMap,\ - org.apache.fury.serializer.collection.MapSerializers$HashMapSerializer,\ - java.math.BigDecimal,\ - org.apache.fury.serializer.Serializers$BigDecimalSerializer,\ - java.util.ImmutableCollections$Map1,\ - org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableMapSerializer,\ - java.time.MonthDay,\ - org.apache.fury.serializer.TimeSerializers$MonthDaySerializer,\ - java.sql.Timestamp,\ - org.apache.fury.serializer.TimeSerializers$TimestampSerializer,\ - java.util.concurrent.ConcurrentHashMap$KeySetView,\ - org.apache.fury.serializer.collection.CollectionSerializers$ConcurrentHashMapKeySetViewSerializer,\ - java.lang.Object,\ - org.apache.fury.serializer.Serializers$EmptyObjectSerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$DoubleSerializer,\ - java.util.Collections$ReverseComparator,\ - org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - java.util.Optional,\ - org.apache.fury.serializer.OptionalSerializers$OptionalSerializer,\ - java.util.concurrent.atomic.AtomicLong,\ - org.apache.fury.serializer.Serializers$AtomicLongSerializer,\ - java.util.BitSet,\ - org.apache.fury.serializer.collection.CollectionSerializers$BitSetSerializer,\ - org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - java.util.Currency,\ - org.apache.fury.serializer.Serializers$CurrencySerializer,\ - org.apache.fury.serializer.ArraySerializers$CharArraySerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptySet,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSetSerializer,\ - org.apache.fury.serializer.ArraySerializers$BooleanArraySerializer,\ - java.util.Collections$SingletonMap,\ - org.apache.fury.serializer.collection.MapSerializers$SingletonMapSerializer,\ - java.nio.HeapByteBuffer,\ - org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - java.lang.Void,\ - java.util.LinkedHashSet,\ - org.apache.fury.serializer.collection.CollectionSerializers$LinkedHashSetSerializer,\ - org.apache.fury.collection.LazyMap,\ - org.apache.fury.serializer.collection.MapSerializers$LazyMapSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptyBiMap,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableMapSerializer,\ - java.util.PriorityQueue,\ - org.apache.fury.serializer.collection.CollectionSerializers$PriorityQueueSerializer,\ - java.lang.NullPointerException,\ - java.lang.IndexOutOfBoundsException,\ - java.util.OptionalLong,\ - org.apache.fury.serializer.OptionalSerializers$OptionalLongSerializer,\ - java.util.HashSet,\ - org.apache.fury.serializer.collection.CollectionSerializers$HashSetSerializer,\ - java.time.Year,\ - org.apache.fury.serializer.TimeSerializers$YearSerializer,\ - org.apache.fury.serializer.LambdaSerializer$ReplaceStub,\ - org.apache.fury.serializer.LambdaSerializer,\ - java.lang.IllegalStateException,\ - java.time.OffsetDateTime,\ - org.apache.fury.serializer.TimeSerializers$OffsetDateTimeSerializer,\ - java.time.Duration,\ - org.apache.fury.serializer.TimeSerializers$DurationSerializer,\ - java.math.BigInteger,\ - org.apache.fury.serializer.Serializers$BigIntegerSerializer,\ - java.util.EnumMap,\ - org.apache.fury.serializer.collection.MapSerializers$EnumMapSerializer,\ - java.util.Collections$SynchronizedRandomAccessList,\ - org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ - org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$FloatSerializer,\ - java.time.Instant,\ - org.apache.fury.serializer.TimeSerializers$InstantSerializer,\ - java.sql.Date,\ - org.apache.fury.serializer.TimeSerializers$SqlDateSerializer,\ - com.google.common.collect.RegularImmutableBiMap,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableBiMapSerializer,\ - java.util.Arrays$ArrayList,\ - org.apache.fury.serializer.collection.CollectionSerializers$ArraysAsListSerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$BooleanSerializer,\ - org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - java.util.Collections$UnmodifiableSortedMap,\ - org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableMapSerializer,\ - java.lang.Throwable,\ - java.util.Collections$UnmodifiableCollection,\ - org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ - java.util.concurrent.ArrayBlockingQueue,\ - java.lang.StackTraceElement,\ - java.util.Collections$UnmodifiableMap,\ - org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableMapSerializer,\ - java.util.concurrent.CopyOnWriteArrayList,\ - org.apache.fury.serializer.collection.CollectionSerializers$CopyOnWriteArrayListSerializer,\ - java.time.YearMonth,\ - org.apache.fury.serializer.TimeSerializers$YearMonthSerializer,\ - com.google.common.collect.ImmutableSortedMap,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedMapSerializer,\ - java.util.ImmutableCollections$Set12,\ - org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableSetSerializer,\ - org.apache.fury.serializer.ArraySerializers$ShortArraySerializer,\ - java.lang.Float,\ - org.apache.fury.serializer.PrimitiveSerializers$FloatSerializer,\ - java.lang.Double,\ - org.apache.fury.serializer.PrimitiveSerializers$DoubleSerializer,\ - java.lang.Exception,\ - org.apache.fury.serializer.ArraySerializers$IntArraySerializer,\ - java.util.regex.Pattern,\ - org.apache.fury.serializer.Serializers$RegexSerializer,\ - java.util.Collections$EmptyList,\ - org.apache.fury.serializer.collection.CollectionSerializers$EmptyListSerializer,\ - java.util.TreeSet,\ - org.apache.fury.serializer.collection.CollectionSerializers$SortedSetSerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$ByteSerializer,\ - java.time.OffsetTime,\ - org.apache.fury.serializer.TimeSerializers$OffsetTimeSerializer,\ - java.time.LocalDate,\ - org.apache.fury.serializer.TimeSerializers$LocalDateSerializer,\ - java.time.Period,\ - org.apache.fury.serializer.TimeSerializers$PeriodSerializer,\ - org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - java.util.concurrent.ConcurrentHashMap,\ - org.apache.fury.serializer.collection.MapSerializers$ConcurrentHashMapSerializer,\ - java.util.ArrayList,\ - org.apache.fury.serializer.collection.CollectionSerializers$ArrayListSerializer,\ - java.lang.String,\ - org.apache.fury.serializer.StringSerializer,\ - java.util.ImmutableCollections$MapN,\ - org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableMapSerializer,\ - java.lang.Short,\ - org.apache.fury.serializer.PrimitiveSerializers$ShortSerializer,\ - java.util.concurrent.atomic.AtomicReference,\ - org.apache.fury.serializer.Serializers$AtomicReferenceSerializer,\ - java.util.concurrent.LinkedBlockingQueue,\ - java.util.Collections$SynchronizedMap,\ - org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedMapSerializer,\ - org.apache.fury.serializer.JdkProxySerializer$ReplaceStub,\ - org.apache.fury.serializer.JdkProxySerializer,\ - java.util.UUID,\ - org.apache.fury.serializer.Serializers$UUIDSerializer,\ - java.util.LinkedList,\ - org.apache.fury.serializer.collection.CollectionSerializer,\ - java.util.Collections$UnmodifiableList,\ - org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ - java.util.Collections$SingletonList,\ - org.apache.fury.serializer.collection.CollectionSerializers$CollectionsSingletonListSerializer,\ - java.util.ImmutableCollections$SubList,\ - org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableListSerializer,\ - java.util.concurrent.atomic.AtomicBoolean,\ - org.apache.fury.serializer.Serializers$AtomicBooleanSerializer,\ - java.util.Collections$UnmodifiableSortedSet,\ - org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ - com.google.common.collect.RegularImmutableSortedSet,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedSetSerializer,\ - org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - java.util.OptionalDouble,\ - org.apache.fury.serializer.OptionalSerializers$OptionalDoubleSerializer,\ - org.apache.fury.serializer.ArraySerializers$DoubleArraySerializer,\ - java.lang.StringBuffer,\ - org.apache.fury.serializer.Serializers$StringBufferSerializer,\ - java.time.ZonedDateTime,\ - org.apache.fury.serializer.TimeSerializers$ZonedDateTimeSerializer,\ - java.util.Collections$SynchronizedSet,\ - org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ - java.lang.IllegalArgumentException,\ - java.util.Vector,\ - org.apache.fury.serializer.collection.CollectionSerializers$VectorSerializer,\ - java.util.Collections$SetFromMap,\ - org.apache.fury.serializer.collection.CollectionSerializers$SetFromMapSerializer,\ - org.apache.fury.serializer.ReplaceResolveSerializer$ReplaceStub,\ - org.apache.fury.serializer.ReplaceResolveSerializer,\ - java.lang.Class,\ - org.apache.fury.serializer.Serializers$ClassSerializer,\ - java.util.Locale,\ - org.apache.fury.serializer.LocaleSerializer,\ - java.util.concurrent.ConcurrentSkipListSet,\ - org.apache.fury.serializer.collection.CollectionSerializers$ConcurrentSkipListSetSerializer,\ - java.lang.RuntimeException,\ - org.apache.fury.serializer.PrimitiveSerializers$CharSerializer,\ - java.util.TreeMap,\ - org.apache.fury.serializer.collection.MapSerializers$SortedMapSerializer,\ - java.util.Collections$SynchronizedSortedMap,\ - org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedMapSerializer,\ - com.google.common.collect.RegularImmutableList,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$RegularImmutableListSerializer,\ - org.apache.fury.serializer.ArraySerializers$FloatArraySerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$LongSerializer,\ - java.util.Collections$UnmodifiableRandomAccessList,\ - org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ - com.google.common.collect.RegularImmutableMap,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableMapSerializer,\ - org.apache.fury.serializer.ArraySerializers$StringArraySerializer,\ - java.lang.StringBuilder,\ - org.apache.fury.serializer.Serializers$StringBuilderSerializer,\ - java.time.LocalDateTime,\ - org.apache.fury.serializer.TimeSerializers$LocalDateTimeSerializer,\ - java.util.Date,\ - org.apache.fury.serializer.TimeSerializers$DateSerializer,\ - java.util.LinkedHashMap,\ - org.apache.fury.serializer.collection.MapSerializers$LinkedHashMapSerializer,\ - java.util.RegularEnumSet,\ - org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$ShortSerializer,\ - java.util.ImmutableCollections$List12,\ - org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableListSerializer,\ - org.apache.fury.serializer.ArraySerializers$LongArraySerializer,\ - java.util.ImmutableCollections$SetN,\ - org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableSetSerializer,\ - java.io.IOException,\ - java.util.concurrent.ConcurrentSkipListMap,\ - org.apache.fury.serializer.collection.MapSerializers$ConcurrentSkipListMapSerializer,\ - org.apache.fury.serializer.ArraySerializers$ByteArraySerializer,\ - java.util.Collections$UnmodifiableNavigableMap$EmptyNavigableMap,\ - org.apache.fury.serializer.collection.MapSerializers$EmptySortedMapSerializer,\ - java.util.Collections$EmptyMap,\ - org.apache.fury.serializer.collection.MapSerializers$EmptyMapSerializer,\ - org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - org.apache.fury.serializer.PrimitiveSerializers$IntSerializer,\ - java.util.Collections$UnmodifiableSet,\ - org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ - org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ - java.lang.Byte,\ - org.apache.fury.serializer.PrimitiveSerializers$ByteSerializer,\ - java.nio.DirectByteBuffer,\ - com.google.common.collect.SingletonImmutableBiMap,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableBiMapSerializer,\ - java.lang.Character,\ - org.apache.fury.serializer.PrimitiveSerializers$CharSerializer,\ - java.util.Comparators$NaturalOrderComparator,\ - com.google.common.collect.SingletonImmutableList,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableListSerializer,\ - java.util.Collections$SingletonSet,\ - org.apache.fury.serializer.collection.CollectionSerializers$CollectionsSingletonSetSerializer,\ - java.util.Collections$UnmodifiableNavigableSet$EmptyNavigableSet,\ - org.apache.fury.serializer.collection.CollectionSerializers$EmptySortedSetSerializer,\ - java.util.ArrayDeque,\ - org.apache.fury.serializer.collection.CollectionSerializers$ArrayDequeSerializer,\ - java.time.ZoneOffset,\ - org.apache.fury.serializer.TimeSerializers$ZoneOffsetSerializer,\ - java.lang.Long,\ - org.apache.fury.serializer.PrimitiveSerializers$LongSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptySortedMap,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedMapSerializer,\ - java.util.OptionalInt,\ - org.apache.fury.serializer.OptionalSerializers$OptionalIntSerializer,\ - java.sql.Time,\ - org.apache.fury.serializer.TimeSerializers$SqlTimeSerializer,\ - java.lang.Integer,\ - org.apache.fury.serializer.PrimitiveSerializers$IntSerializer,\ - java.util.ImmutableCollections$ListN,\ - org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableListSerializer,\ - org.apache.fury.serializer.collection.FuryArrayAsListSerializer,\ - org.apache.fury.util.DelayedRef,\ - org.apache.fury.util.LoaderBinding$1,\ - org.apache.fury.type.Generics,\ + com.google.common.base.Equivalence$Equals,\ + com.google.common.base.Equivalence$Identity,\ + com.google.common.base.Equivalence,\ + com.google.common.base.FinalizableReferenceQueue,\ + com.google.common.base.Ticker$1,\ + com.google.common.base.internal.Finalizer,\ + com.google.common.cache.CacheBuilder$1,\ + com.google.common.cache.CacheBuilder$2,\ + com.google.common.cache.CacheBuilder$3,\ + com.google.common.cache.CacheBuilder$NullListener,\ + com.google.common.cache.CacheBuilder$OneWeigher,\ com.google.common.cache.LocalCache$1,\ com.google.common.cache.LocalCache$2,\ - com.google.common.cache.LocalCache$Segment,\ - com.google.common.cache.LocalCache$EntrySet,\ com.google.common.cache.LocalCache$EntryFactory$1,\ com.google.common.cache.LocalCache$EntryFactory$2,\ com.google.common.cache.LocalCache$EntryFactory$3,\ @@ -386,20 +38,191 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ com.google.common.cache.LocalCache$EntryFactory$6,\ com.google.common.cache.LocalCache$EntryFactory$7,\ com.google.common.cache.LocalCache$EntryFactory$8,\ + com.google.common.cache.LocalCache$EntrySet,\ + com.google.common.cache.LocalCache$LocalManualCache,\ + com.google.common.cache.LocalCache$Segment,\ + com.google.common.cache.LocalCache$SoftValueReference,\ com.google.common.cache.LocalCache$Strength$1,\ com.google.common.cache.LocalCache$Strength$2,\ com.google.common.cache.LocalCache$Strength$3,\ - com.google.common.cache.LocalCache$StrongEntry,com.google.common.cache.LocalCache$WeakEntry,\ - org.apache.fury.util.record.RecordComponent,com.google.common.cache.LocalCache$EntryFactory$2,\ - org.apache.fury.resolver.SerializationContext,\ - org.apache.fury.resolver.MetaContext,\ - org.apache.fury.reflect.ReflectionUtils$2,\ - org.apache.fury.serializer.NonexistentClassSerializers$NonexistentClassSerializer,\ - org.apache.fury.resolver.FieldResolver,\ - org.apache.fury.resolver.FieldResolver$FieldInfo,\ - org.apache.fury.resolver.FieldResolver$MapFieldInfo,\ - org.apache.fury.resolver.FieldResolver$CollectionFieldInfo,\ - org.apache.fury.meta.MetaStringDecoder,\ + com.google.common.cache.LocalCache$StrongEntry,\ + com.google.common.cache.LocalCache$StrongValueReference,\ + com.google.common.cache.LocalCache$WeakEntry,\ + com.google.common.cache.LocalCache$WeakValueReference,\ + com.google.common.cache.LocalCache,\ + com.google.common.collect.AbstractIterator$1,\ + com.google.common.collect.ImmutableSortedMap,\ + com.google.common.collect.NaturalOrdering,\ + com.google.common.collect.Platform,\ + com.google.common.collect.RegularImmutableBiMap,\ + com.google.common.collect.RegularImmutableList,\ + com.google.common.collect.RegularImmutableMap,\ + com.google.common.collect.RegularImmutableSet,\ + com.google.common.collect.RegularImmutableSortedSet,\ + com.google.common.collect.SingletonImmutableBiMap,\ + com.google.common.collect.SingletonImmutableList,\ + com.google.common.collect.SingletonImmutableSet,\ + com.google.common.math.IntMath$1,\ + com.google.common.primitives.Primitives,\ + com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper,\ + com.google.common.util.concurrent.SettableFuture,\ + java.io.IOException,\ + java.lang.ArrayIndexOutOfBoundsException,\ + java.lang.Boolean,\ + java.lang.Byte,\ + java.lang.Character,\ + java.lang.Class,\ + java.lang.Double,\ + java.lang.Exception,\ + java.lang.Float,\ + java.lang.IllegalArgumentException,\ + java.lang.IllegalStateException,\ + java.lang.IndexOutOfBoundsException,\ + java.lang.Integer,\ + java.lang.Long,\ + java.lang.NullPointerException,\ + java.lang.Object,\ + java.lang.RuntimeException,\ + java.lang.Short,\ + java.lang.StackTraceElement,\ + java.lang.String,\ + java.lang.StringBuffer,\ + java.lang.StringBuilder,\ + java.lang.Throwable,\ + java.lang.Void,\ + java.math.BigDecimal,\ + java.math.BigInteger,\ + java.net.URI,\ + java.nio.DirectByteBuffer,\ + java.nio.HeapByteBuffer,\ + java.sql.Date,\ + java.sql.Time,\ + java.sql.Timestamp,\ + java.time.Duration,\ + java.time.Instant,\ + java.time.LocalDate,\ + java.time.LocalDateTime,\ + java.time.LocalTime,\ + java.time.MonthDay,\ + java.time.OffsetDateTime,\ + java.time.OffsetTime,\ + java.time.Period,\ + java.time.Year,\ + java.time.YearMonth,\ + java.time.ZoneOffset,\ + java.time.ZonedDateTime,\ + java.util.ArrayDeque,\ + java.util.ArrayList,\ + java.util.Arrays$ArrayList,\ + java.util.BitSet,\ + java.util.Collections$EmptyList,\ + java.util.Collections$EmptyMap,\ + java.util.Collections$EmptySet,\ + java.util.Collections$ReverseComparator,\ + java.util.Collections$SetFromMap,\ + java.util.Collections$SingletonList,\ + java.util.Collections$SingletonMap,\ + java.util.Collections$SingletonSet,\ + java.util.Collections$SynchronizedCollection,\ + java.util.Collections$SynchronizedList,\ + java.util.Collections$SynchronizedMap,\ + java.util.Collections$SynchronizedRandomAccessList,\ + java.util.Collections$SynchronizedSet,\ + java.util.Collections$SynchronizedSortedMap,\ + java.util.Collections$SynchronizedSortedSet,\ + java.util.Collections$UnmodifiableCollection,\ + java.util.Collections$UnmodifiableList,\ + java.util.Collections$UnmodifiableMap,\ + java.util.Collections$UnmodifiableNavigableMap$EmptyNavigableMap,\ + java.util.Collections$UnmodifiableNavigableSet$EmptyNavigableSet,\ + java.util.Collections$UnmodifiableRandomAccessList,\ + java.util.Collections$UnmodifiableSet,\ + java.util.Collections$UnmodifiableSortedMap,\ + java.util.Collections$UnmodifiableSortedSet,\ + java.util.Comparators$NaturalOrderComparator,\ + java.util.Currency,\ + java.util.Date,\ + java.util.EnumMap,\ + java.util.HashMap,\ + java.util.HashSet,\ + java.util.ImmutableCollections$List12,\ + java.util.ImmutableCollections$ListN,\ + java.util.ImmutableCollections$Map1,\ + java.util.ImmutableCollections$MapN,\ + java.util.ImmutableCollections$Set12,\ + java.util.ImmutableCollections$SetN,\ + java.util.ImmutableCollections$SubList,\ + java.util.LinkedHashMap,\ + java.util.LinkedHashSet,\ + java.util.LinkedList,\ + java.util.Locale,\ + java.util.Optional,\ + java.util.OptionalDouble,\ + java.util.OptionalInt,\ + java.util.OptionalLong,\ + java.util.PriorityQueue,\ + java.util.RegularEnumSet,\ + java.util.TreeMap,\ + java.util.TreeSet,\ + java.util.UUID,\ + java.util.Vector,\ + java.util.concurrent.ArrayBlockingQueue,\ + java.util.concurrent.ConcurrentHashMap$KeySetView,\ + java.util.concurrent.ConcurrentHashMap,\ + java.util.concurrent.ConcurrentSkipListMap,\ + java.util.concurrent.ConcurrentSkipListSet,\ + java.util.concurrent.CopyOnWriteArrayList,\ + java.util.concurrent.LinkedBlockingQueue,\ + java.util.concurrent.atomic.AtomicBoolean,\ + java.util.concurrent.atomic.AtomicInteger,\ + java.util.concurrent.atomic.AtomicLong,\ + java.util.concurrent.atomic.AtomicReference,\ + java.util.regex.Pattern,\ + org.apache.fury.Fury,\ + org.apache.fury.ThreadLocalFury,\ + org.apache.fury.builder.AccessorHelper,\ + org.apache.fury.builder.JITContext,\ + org.apache.fury.builder.ObjectCodecBuilder,\ + org.apache.fury.codegen.CodeGenerator$DefineState,\ + org.apache.fury.codegen.CodeGenerator,\ + org.apache.fury.codegen.CodegenContext,\ + org.apache.fury.codegen.CompileState,\ + org.apache.fury.codegen.CompileUnit,\ + org.apache.fury.codegen.Expression$Literal,\ + org.apache.fury.codegen.Expression$Reference,\ + org.apache.fury.codegen.JaninoUtils,\ + org.apache.fury.collection.FuryObjectMap,\ + org.apache.fury.collection.IdentityMap,\ + org.apache.fury.collection.IdentityObjectIntMap,\ + org.apache.fury.collection.IntArray,\ + org.apache.fury.collection.LazyMap,\ + org.apache.fury.collection.LongMap,\ + org.apache.fury.collection.MapStatistics,\ + org.apache.fury.collection.MultiKeyWeakMap,\ + org.apache.fury.collection.ObjectArray,\ + org.apache.fury.collection.ObjectIntMap,\ + org.apache.fury.collection.ObjectMap,\ + org.apache.fury.collection.Tuple2,\ + org.apache.fury.collection.Tuple3,\ + org.apache.fury.config.CompatibleMode,\ + org.apache.fury.config.Config,\ + org.apache.fury.config.FuryBuilder,\ + org.apache.fury.config.Language,\ + org.apache.fury.config.LongEncoding,\ + org.apache.fury.logging.FuryLogger,\ + org.apache.fury.logging.LoggerFactory,\ + org.apache.fury.memory.BoundsChecking,\ + org.apache.fury.memory.MemoryBuffer,\ + org.apache.fury.memory.MemoryUtils,\ + org.apache.fury.memory.Platform,\ + org.apache.fury.meta.ClassDef$ArrayFieldType,\ + org.apache.fury.meta.ClassDef$CollectionFieldType,\ + org.apache.fury.meta.ClassDef$EnumFieldType,\ + org.apache.fury.meta.ClassDef$FieldInfo,\ + org.apache.fury.meta.ClassDef$FieldType,\ + org.apache.fury.meta.ClassDef$MapFieldType,\ + org.apache.fury.meta.ClassDef$ObjectFieldType,\ + org.apache.fury.meta.ClassDef$RegisteredFieldType,\ org.apache.fury.meta.ClassDef,\ org.apache.fury.meta.ClassDefDecoder,\ org.apache.fury.meta.ClassDefEncoder,\ @@ -407,84 +230,200 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.meta.DeflaterMetaCompressor,\ org.apache.fury.meta.Encoders,\ org.apache.fury.meta.MetaCompressor,\ + org.apache.fury.meta.MetaString$Encoding,\ org.apache.fury.meta.MetaString,\ + org.apache.fury.meta.MetaStringDecoder$1,\ org.apache.fury.meta.MetaStringDecoder,\ + org.apache.fury.meta.MetaStringEncoder$1,\ org.apache.fury.meta.MetaStringEncoder,\ org.apache.fury.meta.TypeEqualMetaCompressor,\ - org.apache.fury.meta.ClassDef$RegisteredFieldType,\ - org.apache.fury.meta.ClassDef$FieldInfo,\ - org.apache.fury.meta.ClassDef$FieldType,\ - org.apache.fury.meta.ClassDef$RegisteredFieldType,\ - org.apache.fury.meta.ClassDef$CollectionFieldType,\ - org.apache.fury.meta.ClassDef$MapFieldType,\ - org.apache.fury.meta.ClassDef$EnumFieldType,\ - org.apache.fury.meta.ClassDef$ArrayFieldType,\ - org.apache.fury.meta.ClassDef$ObjectFieldType,\ - org.apache.fury.shaded.org.codehaus.janino.IClass$1,\ - org.codehaus.janino.IType,\ - org.codehaus.commons.compiler.util.resource.Resource,\ + org.apache.fury.pool.ClassLoaderFuryPooled,\ + org.apache.fury.pool.FuryPooledObjectFactory,\ + org.apache.fury.pool.ThreadPoolFury,\ + org.apache.fury.reflect.FieldAccessor$GeneratedAccessor,\ + org.apache.fury.reflect.ReflectionUtils$1,\ + org.apache.fury.reflect.ReflectionUtils$2,\ + org.apache.fury.reflect.ReflectionUtils,\ + org.apache.fury.reflect.TypeRef$ClassOwnership$1,\ + org.apache.fury.reflect.TypeRef$ClassOwnership$2,\ + org.apache.fury.reflect.TypeRef$ClassOwnership,\ org.apache.fury.reflect.TypeRef$TypeVariableKey,\ org.apache.fury.reflect.TypeRef,\ + org.apache.fury.resolver.ClassChecker,\ + org.apache.fury.resolver.ClassInfo,\ org.apache.fury.resolver.ClassInfoHolder,\ + org.apache.fury.resolver.ClassResolver$2,\ org.apache.fury.resolver.ClassResolver$ExtRegistry,\ + org.apache.fury.resolver.ClassResolver$GraalvmClassRegistry,\ + org.apache.fury.resolver.ClassResolver,\ + org.apache.fury.resolver.DisallowedList,\ + org.apache.fury.resolver.FieldResolver$CollectionFieldInfo,\ + org.apache.fury.resolver.FieldResolver$FieldInfo,\ + org.apache.fury.resolver.FieldResolver$MapFieldInfo,\ + org.apache.fury.resolver.FieldResolver,\ + org.apache.fury.resolver.MetaContext,\ + org.apache.fury.resolver.MetaStringBytes,\ org.apache.fury.resolver.MetaStringResolver,\ org.apache.fury.resolver.NoRefResolver,\ - org.apache.fury.resolver.ClassInfo,\ - org.apache.fury.util.unsafe._JDKAccess$1,\ - org.apache.fury.util.record.RecordUtils$1,\ - org.apache.fury.util.record.RecordUtils$2,\ - org.apache.fury.util.record.RecordUtils$3,\ - org.apache.fury.type.Descriptor$1,\ - com.google.common.cache.LocalCache$LocalManualCache,\ - com.google.common.collect.NaturalOrdering,\ - org.apache.fury.builder.JITContext,\ - org.apache.fury.codegen.Expression$Reference,\ - org.apache.fury.collection.IdentityMap,\ - org.apache.fury.collection.ObjectMap,\ - org.apache.fury.collection.Tuple2,\ - org.apache.fury.collection.Tuple3,\ - org.apache.fury.config.Config,\ - org.apache.fury.config.Language,\ - org.apache.fury.config.LongEncoding,\ - org.apache.fury.meta.MetaStringEncoder,\ - org.apache.fury.resolver.MetaStringBytes,\ - org.apache.fury.config.CompatibleMode,\ - org.apache.fury.meta.DeflaterMetaCompressor,\ - com.google.common.base.Equivalence,\ - com.google.common.base.Equivalence$Equals,\ - com.google.common.base.Equivalence$Identity,\ - com.google.common.cache.CacheBuilder$1,\ - com.google.common.cache.CacheBuilder$2,\ - com.google.common.cache.CacheBuilder$3,\ - com.google.common.cache.CacheBuilder$NullListener,\ - com.google.common.cache.CacheBuilder$OneWeigher,\ - com.google.common.base.Ticker$1,\ - org.apache.fury.serializer.collection.FuryArrayAsListSerializer$ArrayAsList,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$GuavaCollectionSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedSetSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$GuavaMapSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableMapSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableBiMapSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedMapSerializer,\ - org.apache.fury.serializer.collection.GuavaCollectionSerializers$1,\ - org.apache.fury.reflect.FieldAccessor$GeneratedAccessor,\ - org.apache.fury.serializer.ReplaceResolveSerializer$1,\ - org.apache.fury.reflect.ReflectionUtils$1,\ + org.apache.fury.resolver.SerializationContext,\ + org.apache.fury.serializer.ArraySerializers$BooleanArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$ByteArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$CharArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$DoubleArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$FloatArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$IntArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$LongArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$ObjectArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$ShortArraySerializer,\ + org.apache.fury.serializer.ArraySerializers$StringArraySerializer,\ + org.apache.fury.serializer.ArraySerializers,\ org.apache.fury.serializer.JavaSerializer$1,\ org.apache.fury.serializer.JavaSerializer$2,\ org.apache.fury.serializer.JavaSerializer$3,\ org.apache.fury.serializer.JavaSerializer$4,\ + org.apache.fury.serializer.JavaSerializer,\ + org.apache.fury.serializer.JdkProxySerializer$ReplaceStub,\ + org.apache.fury.serializer.JdkProxySerializer,\ + org.apache.fury.serializer.LambdaSerializer$ReplaceStub,\ + org.apache.fury.serializer.LambdaSerializer,\ + org.apache.fury.serializer.LocaleSerializer,\ org.apache.fury.serializer.NonexistentClassSerializers$ClassFieldsInfo,\ + org.apache.fury.serializer.NonexistentClassSerializers$NonexistentClassSerializer,\ org.apache.fury.serializer.NonexistentClassSerializers$NonexistentEnumClassSerializer,\ - org.apache.fury.resolver.ClassResolver$GraalvmClassRegistry,\ - org.apache.fury.collection.FuryObjectMap,\ - org.apache.fury.collection.ObjectArray,\ - org.apache.fury.collection.ObjectIntMap,\ - org.apache.fury.collection.LongMap,\ - org.apache.fury.collection.IntArray,\ - org.apache.fury.collection.IdentityMap,\ - org.apache.fury.collection.IdentityObjectIntMap,\ - org.apache.fury.collection.FuryObjectMap,\ - org.apache.fury.codegen.CompileState,\ - org.apache.fury.codegen.CodeGenerator.DefineState,\ - org.apache.fury.resolver.ClassChecker + org.apache.fury.serializer.OptionalSerializers$OptionalDoubleSerializer,\ + org.apache.fury.serializer.OptionalSerializers$OptionalIntSerializer,\ + org.apache.fury.serializer.OptionalSerializers$OptionalLongSerializer,\ + org.apache.fury.serializer.OptionalSerializers$OptionalSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$1,\ + org.apache.fury.serializer.PrimitiveSerializers$BooleanSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$ByteSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$CharSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$DoubleSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$FloatSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$IntSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$LongSerializer,\ + org.apache.fury.serializer.PrimitiveSerializers$ShortSerializer,\ + org.apache.fury.serializer.ReplaceResolveSerializer$1,\ + org.apache.fury.serializer.ReplaceResolveSerializer$ReplaceStub,\ + org.apache.fury.serializer.ReplaceResolveSerializer,\ + org.apache.fury.serializer.Serializers$AtomicBooleanSerializer,\ + org.apache.fury.serializer.Serializers$AtomicIntegerSerializer,\ + org.apache.fury.serializer.Serializers$AtomicLongSerializer,\ + org.apache.fury.serializer.Serializers$AtomicReferenceSerializer,\ + org.apache.fury.serializer.Serializers$BigDecimalSerializer,\ + org.apache.fury.serializer.Serializers$BigIntegerSerializer,\ + org.apache.fury.serializer.Serializers$ClassSerializer,\ + org.apache.fury.serializer.Serializers$CurrencySerializer,\ + org.apache.fury.serializer.Serializers$EmptyObjectSerializer,\ + org.apache.fury.serializer.Serializers$RegexSerializer,\ + org.apache.fury.serializer.Serializers$StringBufferSerializer,\ + org.apache.fury.serializer.Serializers$StringBuilderSerializer,\ + org.apache.fury.serializer.Serializers$URISerializer,\ + org.apache.fury.serializer.Serializers$UUIDSerializer,\ + org.apache.fury.serializer.Serializers,\ + org.apache.fury.serializer.StringSerializer$Offset,\ + org.apache.fury.serializer.StringSerializer,\ + org.apache.fury.serializer.TimeSerializers$DateSerializer,\ + org.apache.fury.serializer.TimeSerializers$DurationSerializer,\ + org.apache.fury.serializer.TimeSerializers$InstantSerializer,\ + org.apache.fury.serializer.TimeSerializers$LocalDateSerializer,\ + org.apache.fury.serializer.TimeSerializers$LocalDateTimeSerializer,\ + org.apache.fury.serializer.TimeSerializers$LocalTimeSerializer,\ + org.apache.fury.serializer.TimeSerializers$MonthDaySerializer,\ + org.apache.fury.serializer.TimeSerializers$OffsetDateTimeSerializer,\ + org.apache.fury.serializer.TimeSerializers$OffsetTimeSerializer,\ + org.apache.fury.serializer.TimeSerializers$PeriodSerializer,\ + org.apache.fury.serializer.TimeSerializers$SqlDateSerializer,\ + org.apache.fury.serializer.TimeSerializers$SqlTimeSerializer,\ + org.apache.fury.serializer.TimeSerializers$TimestampSerializer,\ + org.apache.fury.serializer.TimeSerializers$YearMonthSerializer,\ + org.apache.fury.serializer.TimeSerializers$YearSerializer,\ + org.apache.fury.serializer.TimeSerializers$ZoneOffsetSerializer,\ + org.apache.fury.serializer.TimeSerializers$ZonedDateTimeSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$ArrayDequeSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$ArrayListSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$ArraysAsListSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$BitSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$CollectionsSingletonListSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$CollectionsSingletonSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$ConcurrentHashMapKeySetViewSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$ConcurrentSkipListSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$CopyOnWriteArrayListSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$EmptyListSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$EmptySetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$EmptySortedSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$HashSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$LinkedHashSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$PriorityQueueSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$SetFromMapSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$SortedSetSerializer,\ + org.apache.fury.serializer.collection.CollectionSerializers$VectorSerializer,\ + org.apache.fury.serializer.collection.FuryArrayAsListSerializer$ArrayAsList,\ + org.apache.fury.serializer.collection.FuryArrayAsListSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$1,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptyBiMap,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptySet,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptySortedMap,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$1GuavaEmptySortedSet,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$GuavaCollectionSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$GuavaMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableBiMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableListSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSetSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedMapSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$ImmutableSortedSetSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers$RegularImmutableListSerializer,\ + org.apache.fury.serializer.collection.GuavaCollectionSerializers,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableListSerializer,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableMapSerializer,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers$ImmutableSetSerializer,\ + org.apache.fury.serializer.collection.ImmutableCollectionSerializers,\ + org.apache.fury.serializer.collection.MapSerializers$ConcurrentHashMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$ConcurrentSkipListMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$EmptyMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$EmptySortedMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$EnumMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$HashMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$LazyMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$LinkedHashMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$SingletonMapSerializer,\ + org.apache.fury.serializer.collection.MapSerializers$SortedMapSerializer,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$Offset,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedCollectionSerializer,\ + org.apache.fury.serializer.collection.SynchronizedSerializers$SynchronizedMapSerializer,\ + org.apache.fury.serializer.collection.SynchronizedSerializers,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$Offset,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableCollectionSerializer,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers$UnmodifiableMapSerializer,\ + org.apache.fury.serializer.collection.UnmodifiableSerializers,\ + org.apache.fury.serializer.shim.ShimDispatcher,\ + org.apache.fury.shaded.org.codehaus.janino.IClass$1,\ + org.apache.fury.type.Descriptor$1,\ + org.apache.fury.type.Descriptor,\ + org.apache.fury.type.DescriptorGrouper,\ + org.apache.fury.type.GenericType,\ + org.apache.fury.type.Generics,\ + org.apache.fury.type.Type,\ + org.apache.fury.type.TypeUtils,\ + org.apache.fury.util.ClassLoaderUtils$ByteArrayClassLoader,\ + org.apache.fury.util.ClassLoaderUtils$ParentClassLoader,\ + org.apache.fury.util.ClassLoaderUtils,\ + org.apache.fury.util.DelayedRef,\ + org.apache.fury.util.GraalvmSupport,\ + org.apache.fury.util.LoaderBinding$1,\ + org.apache.fury.util.LoaderBinding$StagingType,\ + org.apache.fury.util.LoaderBinding,\ + org.apache.fury.util.StringUtils,\ + org.apache.fury.util.record.RecordComponent,\ + org.apache.fury.util.record.RecordUtils$1,\ + org.apache.fury.util.record.RecordUtils$2,\ + org.apache.fury.util.record.RecordUtils$3,\ + org.apache.fury.util.record.RecordUtils,\ + org.apache.fury.util.unsafe._JDKAccess$1,\ + org.apache.fury.util.unsafe._JDKAccess,\ + org.apache.fury.util.unsafe._Lookup,\ + org.codehaus.commons.compiler.util.resource.Resource,\ + org.codehaus.janino.IType,\ + sun.misc.Unsafe From 5e845e7dc8794749bc24ef6720ade56db8fdd4f4 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Sun, 22 Sep 2024 17:20:35 +0800 Subject: [PATCH 14/28] fix graalvm init --- .../java/org/apache/fury/graalvm/CompatibleExample.java | 8 ++++++++ .../src/main/java/org/apache/fury/ThreadLocalFury.java | 3 --- .../main/java/org/apache/fury/resolver/ClassResolver.java | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java index 060d82f1be..696af0bef5 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java @@ -38,6 +38,14 @@ public class CompatibleExample { public static void main(String[] args) { Example.test(fury); + // Test new created Fury at runtime + fury = + Fury.builder() + .requireClassRegistration(true) + .withCompatibleMode(CompatibleMode.COMPATIBLE) + .withScopedMetaShare(false) + .build(); + Example.test(fury); System.out.println("CompatibleExample succeed"); } } diff --git a/java/fury-core/src/main/java/org/apache/fury/ThreadLocalFury.java b/java/fury-core/src/main/java/org/apache/fury/ThreadLocalFury.java index e4fae2ae74..d742650d94 100644 --- a/java/fury-core/src/main/java/org/apache/fury/ThreadLocalFury.java +++ b/java/fury-core/src/main/java/org/apache/fury/ThreadLocalFury.java @@ -29,7 +29,6 @@ import org.apache.fury.io.FuryReadableChannel; import org.apache.fury.memory.MemoryBuffer; import org.apache.fury.memory.MemoryUtils; -import org.apache.fury.resolver.ClassResolver; import org.apache.fury.serializer.BufferCallback; import org.apache.fury.util.LoaderBinding; import org.apache.fury.util.LoaderBinding.StagingType; @@ -65,8 +64,6 @@ public ThreadLocalFury(Function furyFactory) { // in a process load some classes which is not cheap. // 2. Make fury generate code at graalvm build time. Fury fury = bindingThreadLocal.get().get(); - ClassResolver._addGraalvmClassRegistry( - fury.getConfig().getConfigHash(), fury.getClassResolver()); } @Override diff --git a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java index 1c6a98ed3a..f35257f412 100644 --- a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java +++ b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java @@ -266,6 +266,7 @@ public ClassResolver(Fury fury) { extRegistry = new ExtRegistry(); extRegistry.objectGenericType = buildGenericType(OBJECT_TYPE); shimDispatcher = new ShimDispatcher(fury); + ClassResolver._addGraalvmClassRegistry(fury.getConfig().getConfigHash(), this); } public void initialize() { From 25ca9189fced9705b1a14b6f0da7200584f580ce Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Sun, 22 Sep 2024 17:41:12 +0800 Subject: [PATCH 15/28] fix meta shared deserializer --- .../fury/graalvm/CompatibleExample.java | 21 +++++++++++++------ .../record/CompatibleRecordExample.java | 17 ++++++++++----- .../apache/fury/resolver/ClassResolver.java | 21 +++++++++++-------- 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java index 696af0bef5..2242aa8bea 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java @@ -21,19 +21,25 @@ import org.apache.fury.Fury; import org.apache.fury.config.CompatibleMode; +import org.apache.fury.graalvm.record.RecordExample; public class CompatibleExample { static Fury fury; static { - fury = - Fury.builder() - .requireClassRegistration(true) - .withCompatibleMode(CompatibleMode.COMPATIBLE) - .withScopedMetaShare(false) - .build(); + fury = createFury(); + } + + private static Fury createFury() { + Fury fury = + Fury.builder() + .requireClassRegistration(true) + .withCompatibleMode(CompatibleMode.COMPATIBLE) + .withScopedMetaShare(false) + .build(); // register and generate serializer code. fury.register(Foo.class, true); + return fury; } public static void main(String[] args) { @@ -45,6 +51,9 @@ public static void main(String[] args) { .withCompatibleMode(CompatibleMode.COMPATIBLE) .withScopedMetaShare(false) .build(); + fury.register(Foo.class, true); + Example.test(fury); + fury = createFury(); Example.test(fury); System.out.println("CompatibleExample succeed"); } diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/CompatibleRecordExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/CompatibleRecordExample.java index ef4bfc9f12..a8cc25e558 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/CompatibleRecordExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/CompatibleRecordExample.java @@ -26,16 +26,23 @@ public class CompatibleRecordExample { static Fury fury; static { - fury = - Fury.builder() - .requireClassRegistration(true) - .withCompatibleMode(CompatibleMode.COMPATIBLE) - .build(); + fury = createFury(); + } + + private static Fury createFury() { + Fury fury = + Fury.builder() + .requireClassRegistration(true) + .withCompatibleMode(CompatibleMode.COMPATIBLE) + .build(); // register and generate serializer code. fury.register(RecordExample.Record.class, true); + return fury; } public static void main(String[] args) { + RecordExample.test(fury); + fury = createFury(); RecordExample.test(fury); System.out.println("CompatibleRecordExample succeed"); } diff --git a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java index f35257f412..1a3d450730 100644 --- a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java +++ b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java @@ -426,17 +426,17 @@ public void register(Class cls, boolean createSerializer) { classDef = buildClassDef(classInfo); } deserializationClassInfo = buildMetaSharedClassInfo(Tuple2.of(classDef, null), classDef); + if (deserializationClassInfo != null && GraalvmSupport.isGraalBuildtime()) { + getGraalvmClassRegistry() + .deserializerClassMap + .put(classDef.getId(), deserializationClassInfo.serializer.getClass()); + deserializationClassInfo.serializer = null; + } } if (GraalvmSupport.isGraalBuildtime()) { // Instance for generated class should be hold at graalvm runtime only. getGraalvmClassRegistry().serializerClassMap.put(cls, classInfo.serializer.getClass()); classInfo.serializer = null; - if (deserializationClassInfo != null) { - getGraalvmClassRegistry() - .deserializerClassMap - .put(cls, deserializationClassInfo.serializer.getClass()); - deserializationClassInfo.serializer = null; - } } } } @@ -1369,7 +1369,9 @@ private ClassInfo readClassInfoWithMetaShare(MemoryBuffer buffer, MetaContext me ObjectArray readClassDefs = metaContext.readClassDefs; ClassDef classDef = readClassDefs.get(id); Tuple2 classDefTuple = extRegistry.classIdToDef.get(classDef.getId()); - if (classDefTuple == null || classDefTuple.f1 == null) { + if (classDefTuple == null + || classDefTuple.f1 == null + || classDefTuple.f1.serializer == null) { classInfo = buildMetaSharedClassInfo(classDefTuple, classDef); } else { classInfo = classDefTuple.f1; @@ -1944,7 +1946,7 @@ public static void _addGraalvmClassRegistry(int furyConfigHash, ClassResolver cl private static class GraalvmClassRegistry { private final List resolvers; private final Map, Class> serializerClassMap; - private final Map, Class> deserializerClassMap; + private final Map> deserializerClassMap; private GraalvmClassRegistry() { resolvers = Collections.synchronizedList(new ArrayList<>()); @@ -2001,7 +2003,8 @@ private Class getMetaSharedDeserializerClassFromGraalvmReg } } } - Class deserializerClass = registry.deserializerClassMap.get(cls); + Class deserializerClass = + registry.deserializerClassMap.get(classDef.getId()); // noinspection Duplicates if (deserializerClass != null) { return deserializerClass; From c0abbd503ac8b36395f4c7d214c3a1e13aeaf61b Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Sun, 22 Sep 2024 18:00:13 +0800 Subject: [PATCH 16/28] fix creating getters --- .../apache/fury/util/function/Functions.java | 46 ++++++++++++------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/java/fury-core/src/main/java/org/apache/fury/util/function/Functions.java b/java/fury-core/src/main/java/org/apache/fury/util/function/Functions.java index 3169fb5114..00ad66d053 100644 --- a/java/fury-core/src/main/java/org/apache/fury/util/function/Functions.java +++ b/java/fury-core/src/main/java/org/apache/fury/util/function/Functions.java @@ -26,6 +26,8 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.WeakHashMap; import java.util.function.Predicate; import org.apache.fury.collection.Tuple2; import org.apache.fury.reflect.ReflectionUtils; @@ -73,27 +75,37 @@ public static Object makeGetterFunction(Class cls, String methodName) { } } + private static final Map, Object> map = new WeakHashMap(); + public static Object makeGetterFunction(Method method) { - MethodHandles.Lookup lookup = _JDKAccess._trustedLookup(method.getDeclaringClass()); - try { - // Why `lookup.findGetter` doesn't work? - // MethodHandle handle = lookup.findGetter(field.getDeclaringClass(), field.getName(), - // field.getType()); - MethodHandle handle = lookup.unreflect(method); - return _JDKAccess.makeGetterFunction(lookup, handle, method.getReturnType()); - } catch (IllegalAccessException ex) { - throw new RuntimeException(ex); - } + return map.computeIfAbsent( + Tuple2.of(method, Object.class), + k -> { + MethodHandles.Lookup lookup = _JDKAccess._trustedLookup(method.getDeclaringClass()); + try { + // Why `lookup.findGetter` doesn't work? + // MethodHandle handle = lookup.findGetter(field.getDeclaringClass(), field.getName(), + // field.getType()); + MethodHandle handle = lookup.unreflect(method); + return _JDKAccess.makeGetterFunction(lookup, handle, method.getReturnType()); + } catch (IllegalAccessException ex) { + throw new RuntimeException(ex); + } + }); } public static Object makeGetterFunction(Method method, Class returnType) { - MethodHandles.Lookup lookup = _JDKAccess._trustedLookup(method.getDeclaringClass()); - try { - MethodHandle handle = lookup.unreflect(method); - return _JDKAccess.makeGetterFunction(lookup, handle, returnType); - } catch (IllegalAccessException ex) { - throw new RuntimeException(ex); - } + return map.computeIfAbsent( + Tuple2.of(method, returnType), + k -> { + MethodHandles.Lookup lookup = _JDKAccess._trustedLookup(method.getDeclaringClass()); + try { + MethodHandle handle = lookup.unreflect(method); + return _JDKAccess.makeGetterFunction(lookup, handle, returnType); + } catch (IllegalAccessException ex) { + throw new RuntimeException(ex); + } + }); } public static Tuple2, String> getterMethodInfo(Class type) { From d2d36e9e513e1154c0ed920540e8d2719d6e5289 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 12:57:17 +0800 Subject: [PATCH 17/28] revert child first classloader for janino --- .../org/apache/fury/codegen/JaninoUtils.java | 77 +++++-------------- .../apache/fury/util/ClassLoaderUtils.java | 62 --------------- 2 files changed, 18 insertions(+), 121 deletions(-) diff --git a/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java b/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java index d8608398be..ced6e3cc51 100644 --- a/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java +++ b/java/fury-core/src/main/java/org/apache/fury/codegen/JaninoUtils.java @@ -24,8 +24,6 @@ import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -40,8 +38,6 @@ import org.apache.fury.logging.Logger; import org.apache.fury.logging.LoggerFactory; import org.apache.fury.reflect.ReflectionUtils; -import org.apache.fury.util.ClassLoaderUtils; -import org.apache.fury.util.GraalvmSupport; import org.apache.fury.util.StringUtils; import org.codehaus.commons.compiler.util.reflect.ByteArrayClassLoader; import org.codehaus.commons.compiler.util.resource.MapResourceCreator; @@ -49,7 +45,6 @@ import org.codehaus.commons.compiler.util.resource.Resource; import org.codehaus.janino.ClassLoaderIClassLoader; import org.codehaus.janino.Compiler; -import org.codehaus.janino.IType; import org.codehaus.janino.util.ClassFile; /** A util to compile code to bytecode and create classloader to load generated class. */ @@ -80,10 +75,11 @@ public static Map toBytecode( public static Map toBytecode( ClassLoader parentClassLoader, String codeDir, CompileUnit... compileUnits) { - Map codeMap = new HashMap<>(); + MapResourceFinder sourceFinder = new MapResourceFinder(); for (CompileUnit unit : compileUnits) { String stubFileName = unit.pkg.replace(".", "/") + "/" + unit.mainClassName + ".java"; - codeMap.put(stubFileName, unit.getCode()); + sourceFinder.addResource(stubFileName, unit.getCode()); + if (StringUtils.isNotBlank(codeDir)) { Path path = Paths.get(codeDir, stubFileName).toAbsolutePath(); try { @@ -99,20 +95,30 @@ public static Map toBytecode( } } } + long startTime = System.nanoTime(); + // Storage for generated bytecode + final Map classes = new HashMap<>(); + // Set up the compiler. + ClassLoaderIClassLoader classLoader = new ClassLoaderIClassLoader(parentClassLoader); + Compiler compiler = new Compiler(sourceFinder, classLoader); + compiler.setClassFileCreator(new MapResourceCreator(classes)); + compiler.setClassFileFinder(new MapResourceFinder(classes)); + + // set debug flag to get source file names and line numbers for debug and stacktrace. + // this is also the default behaviour for javac. + compiler.setDebugSource(true); + compiler.setDebugLines(true); + // Compile all sources try { - Map result = - GraalvmSupport.isGraalBuildtime() - ? toBytecodeGraal(parentClassLoader, codeMap) - : toBytecodeInternal(parentClassLoader, codeMap); + compiler.compile(sourceFinder.resources().toArray(new Resource[0])); long durationMs = (System.nanoTime() - startTime) / 1000_000; String classNames = Arrays.stream(compileUnits) .map(unit -> unit.mainClassName) .collect(Collectors.joining(", ", "[", "]")); LOG.info("Compile {} take {} ms", classNames, durationMs); - return result; } catch (Exception e) { StringBuilder msgBuilder = new StringBuilder("Compile error: \n"); for (int i = 0; i < compileUnits.length; i++) { @@ -126,59 +132,12 @@ public static Map toBytecode( } throw new CodegenException(msgBuilder.toString(), e); } - } - - private static Map toBytecodeInternal( - ClassLoader parentClassLoader, Map codeMap) { - MapResourceFinder sourceFinder = new MapResourceFinder(); - codeMap.forEach(sourceFinder::addResource); - // Storage for generated bytecode - final Map classes = new HashMap<>(); - // Set up the compiler. - ClassLoaderIClassLoader classLoader = new ClassLoaderIClassLoader(parentClassLoader); - Compiler compiler = new Compiler(sourceFinder, classLoader); - compiler.setClassFileCreator(new MapResourceCreator(classes)); - compiler.setClassFileFinder(new MapResourceFinder(classes)); - - // set debug flag to get source file names and line numbers for debug and stacktrace. - // this is also the default behaviour for javac. - compiler.setDebugSource(true); - compiler.setDebugLines(true); - - // Compile all sources - try { - compiler.compile(sourceFinder.resources().toArray(new Resource[0])); - } catch (Exception e) { - throw new RuntimeException(e); - } // See https://github.com/janino-compiler/janino/issues/173 ReflectionUtils.setObjectFieldValue(classLoader, "classLoader", null); ReflectionUtils.setObjectFieldValue(classLoader, "loadedIClasses", new HashMap<>()); return classes; } - private static Map toBytecodeGraal( - ClassLoader parentClassLoader, Map codeMap) { - try (ClassLoaderUtils.SelectedChildFirstURLClassLoader loader = - new ClassLoaderUtils.SelectedChildFirstURLClassLoader( - new URL[] { - Resource.class.getProtectionDomain().getCodeSource().getLocation(), - IType.class.getProtectionDomain().getCodeSource().getLocation(), - JaninoUtils.class.getProtectionDomain().getCodeSource().getLocation() - }, - parentClassLoader, - c -> c.toLowerCase().contains("janino"))) { - Method toBytecodeInternal = - loader - .loadClass(JaninoUtils.class.getName()) - .getDeclaredMethod("toBytecodeInternal", ClassLoader.class, Map.class); - toBytecodeInternal.setAccessible(true); - return (Map) toBytecodeInternal.invoke(null, parentClassLoader, codeMap); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - public static class CodeStats { public final Map methodsSize; public final int constPoolSize; diff --git a/java/fury-core/src/main/java/org/apache/fury/util/ClassLoaderUtils.java b/java/fury-core/src/main/java/org/apache/fury/util/ClassLoaderUtils.java index 63431b547b..8ebb09d8c4 100644 --- a/java/fury-core/src/main/java/org/apache/fury/util/ClassLoaderUtils.java +++ b/java/fury-core/src/main/java/org/apache/fury/util/ClassLoaderUtils.java @@ -32,7 +32,6 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Predicate; import java.util.stream.Collectors; import org.apache.fury.logging.Logger; import org.apache.fury.logging.LoggerFactory; @@ -116,67 +115,6 @@ public void addURL(URL url) { } } - /** - * A mutable class loader that gives preference to its own URLs and selected classes over the - * parent class loader when loading classes and resources. - */ - public static class SelectedChildFirstURLClassLoader extends URLClassLoader { - - static { - registerAsParallelCapable(); - } - - private final ParentClassLoader parent; - private final Predicate childClassloaderFirst; - - public SelectedChildFirstURLClassLoader( - URL[] urls, ClassLoader parent, Predicate childClassloaderFirst) { - super(urls, null); - this.parent = new ParentClassLoader(parent); - this.childClassloaderFirst = childClassloaderFirst; - } - - @Override - public Class loadClass(String name, boolean resolve) throws ClassNotFoundException { - if (!childClassloaderFirst.test(name)) { - return parent.loadClass(name, resolve); - } - try { - return super.loadClass(name, resolve); - } catch (ClassNotFoundException cnf) { - return parent.loadClass(name, resolve); - } - } - - @Override - public Enumeration getResources(String name) throws IOException { - if (!childClassloaderFirst.test(name)) { - return parent.getResources(name); - } - ArrayList urls = Collections.list(super.getResources(name)); - urls.addAll(Collections.list(parent.getResources(name))); - return Collections.enumeration(urls); - } - - @Override - public URL getResource(String name) { - if (!childClassloaderFirst.test(name)) { - return parent.getResource(name); - } - URL url = super.getResource(name); - if (url != null) { - return url; - } else { - return parent.getResource(name); - } - } - - @Override - public void addURL(URL url) { - super.addURL(url); - } - } - /** * A class loader that gives preference to its contained classloaders over the parent class loader * when loading classes and resources. From 3d6b4c36eeef6a113810887fd6a6664291116e3d Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 12:57:29 +0800 Subject: [PATCH 18/28] add janino init classes --- .../fury-core/native-image.properties | 338 ++++++++++++++++++ 1 file changed, 338 insertions(+) diff --git a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties index 1e8762c88d..bd731acd2d 100644 --- a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties +++ b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties @@ -424,6 +424,344 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.util.unsafe._JDKAccess$1,\ org.apache.fury.util.unsafe._JDKAccess,\ org.apache.fury.util.unsafe._Lookup,\ + org.apache.fury.codegen.JaninoUtils$CodeStats,\ org.codehaus.commons.compiler.util.resource.Resource,\ org.codehaus.janino.IType,\ + org.codehaus.janino.Access,\ + org.codehaus.janino.ClassFileIClass,\ + org.codehaus.janino.ClassLoaderIClassLoader,\ + org.codehaus.janino.CodeContext,\ + org.codehaus.janino.CodeContext$1,\ + org.codehaus.janino.CodeContext$BasicBlock,\ + org.codehaus.janino.CodeContext$Branch,\ + org.codehaus.janino.CodeContext$ExceptionTableEntry,\ + org.codehaus.janino.CodeContext$FixUp,\ + org.codehaus.janino.CodeContext$FourByteOffset,\ + org.codehaus.janino.CodeContext$Inserter,\ + org.codehaus.janino.CodeContext$LineNumberOffset,\ + org.codehaus.janino.CodeContext$LocalScope,\ + org.codehaus.janino.CodeContext$Offset,\ + org.codehaus.janino.CodeContext$OffsetBranch,\ + org.codehaus.janino.CodeContext$Relocatable,\ + org.codehaus.janino.Compiler,\ + org.codehaus.janino.Compiler$2,\ + org.codehaus.janino.Compiler$CompilerIClassLoader,\ + org.codehaus.janino.Descriptor,\ + org.codehaus.janino.IClass,\ + org.codehaus.janino.IClass$1,\ + org.codehaus.janino.IClass$2,\ + org.codehaus.janino.IClass$IAnnotation,\ + org.codehaus.janino.IClass$IConstructor,\ + org.codehaus.janino.IClass$IField,\ + org.codehaus.janino.IClass$IInvocable,\ + org.codehaus.janino.IClass$IMember,\ + org.codehaus.janino.IClass$IMethod,\ + org.codehaus.janino.IClass$PrimitiveIClass,\ + org.codehaus.janino.IClassLoader,\ + org.codehaus.janino.IClassLoader$1,\ + org.codehaus.janino.IParameterizedType,\ + org.codehaus.janino.IType,\ + org.codehaus.janino.ITypeVariable,\ + org.codehaus.janino.ITypeVariableOrIClass,\ + org.codehaus.janino.JaninoOption,\ + org.codehaus.janino.Java,\ + org.codehaus.janino.Java$AbstractAnnotation,\ + org.codehaus.janino.Java$AbstractClassDeclaration,\ + org.codehaus.janino.Java$AbstractCompilationUnit,\ + org.codehaus.janino.Java$AbstractCompilationUnit$ImportDeclaration,\ + org.codehaus.janino.Java$AbstractCompilationUnit$SingleStaticImportDeclaration,\ + org.codehaus.janino.Java$AbstractCompilationUnit$SingleTypeImportDeclaration,\ + org.codehaus.janino.Java$AbstractCompilationUnit$StaticImportOnDemandDeclaration,\ + org.codehaus.janino.Java$AbstractCompilationUnit$TypeImportOnDemandDeclaration,\ + org.codehaus.janino.Java$AbstractTypeBodyDeclaration,\ + org.codehaus.janino.Java$AbstractTypeDeclaration,\ + org.codehaus.janino.Java$AccessModifier,\ + org.codehaus.janino.Java$AlternateConstructorInvocation,\ + org.codehaus.janino.Java$AmbiguousName,\ + org.codehaus.janino.Java$Annotatable,\ + org.codehaus.janino.Java$Annotation,\ + org.codehaus.janino.Java$AnnotationTypeDeclaration,\ + org.codehaus.janino.Java$AnonymousClassDeclaration,\ + org.codehaus.janino.Java$ArrayAccessExpression,\ + org.codehaus.janino.Java$ArrayCreationReference,\ + org.codehaus.janino.Java$ArrayInitializerOrRvalue,\ + org.codehaus.janino.Java$ArrayLength,\ + org.codehaus.janino.Java$ArrayType,\ + org.codehaus.janino.Java$AssertStatement,\ + org.codehaus.janino.Java$Assignment,\ + org.codehaus.janino.Java$Atom,\ + org.codehaus.janino.Java$BinaryOperation,\ + org.codehaus.janino.Java$Block,\ + org.codehaus.janino.Java$BlockStatement,\ + org.codehaus.janino.Java$BooleanLiteral,\ + org.codehaus.janino.Java$BooleanRvalue,\ + org.codehaus.janino.Java$BreakStatement,\ + org.codehaus.janino.Java$BreakableStatement,\ + org.codehaus.janino.Java$Cast,\ + org.codehaus.janino.Java$CatchClause,\ + org.codehaus.janino.Java$CatchParameter,\ + org.codehaus.janino.Java$CharacterLiteral,\ + org.codehaus.janino.Java$ClassDeclaration,\ + org.codehaus.janino.Java$ClassInstanceCreationReference,\ + org.codehaus.janino.Java$ClassLiteral,\ + org.codehaus.janino.Java$CompilationUnit,\ + org.codehaus.janino.Java$ConditionalExpression,\ + org.codehaus.janino.Java$ConstructorDeclarator,\ + org.codehaus.janino.Java$ConstructorInvocation,\ + org.codehaus.janino.Java$ContinuableStatement,\ + org.codehaus.janino.Java$ContinueStatement,\ + org.codehaus.janino.Java$Crement,\ + org.codehaus.janino.Java$DoStatement,\ + org.codehaus.janino.Java$DocCommentable,\ + org.codehaus.janino.Java$ElementValue,\ + org.codehaus.janino.Java$EmptyStatement,\ + org.codehaus.janino.Java$EnclosingScopeOfTypeDeclaration,\ + org.codehaus.janino.Java$EnumConstant,\ + org.codehaus.janino.Java$EnumDeclaration,\ + org.codehaus.janino.Java$ExpressionStatement,\ + org.codehaus.janino.Java$FieldAccess,\ + org.codehaus.janino.Java$FieldAccessExpression,\ + org.codehaus.janino.Java$FieldDeclaration,\ + org.codehaus.janino.Java$FieldDeclarationOrInitializer,\ + org.codehaus.janino.Java$FloatingPointLiteral,\ + org.codehaus.janino.Java$ForEachStatement,\ + org.codehaus.janino.Java$ForStatement,\ + org.codehaus.janino.Java$FunctionDeclarator,\ + org.codehaus.janino.Java$FunctionDeclarator$FormalParameter,\ + org.codehaus.janino.Java$FunctionDeclarator$FormalParameters,\ + org.codehaus.janino.Java$IfStatement,\ + org.codehaus.janino.Java$Initializer,\ + org.codehaus.janino.Java$InnerClassDeclaration,\ + org.codehaus.janino.Java$Instanceof,\ + org.codehaus.janino.Java$IntegerLiteral,\ + org.codehaus.janino.Java$InterfaceDeclaration,\ + org.codehaus.janino.Java$Invocation,\ + org.codehaus.janino.Java$LabeledStatement,\ + org.codehaus.janino.Java$LambdaBody,\ + org.codehaus.janino.Java$LambdaExpression,\ + org.codehaus.janino.Java$LambdaParameters,\ + org.codehaus.janino.Java$Literal,\ + org.codehaus.janino.Java$LocalClassDeclaration,\ + org.codehaus.janino.Java$LocalClassDeclarationStatement,\ + org.codehaus.janino.Java$LocalVariable,\ + org.codehaus.janino.Java$LocalVariableAccess,\ + org.codehaus.janino.Java$LocalVariableDeclarationStatement,\ + org.codehaus.janino.Java$LocalVariableSlot,\ + org.codehaus.janino.Java$Locatable,\ + org.codehaus.janino.Java$Located,\ + org.codehaus.janino.Java$Located$1,\ + org.codehaus.janino.Java$Lvalue,\ + org.codehaus.janino.Java$MarkerAnnotation,\ + org.codehaus.janino.Java$MemberAnnotationTypeDeclaration,\ + org.codehaus.janino.Java$MemberClassDeclaration,\ + org.codehaus.janino.Java$MemberEnumDeclaration,\ + org.codehaus.janino.Java$MemberInterfaceDeclaration,\ + org.codehaus.janino.Java$MemberTypeDeclaration,\ + org.codehaus.janino.Java$MethodDeclarator,\ + org.codehaus.janino.Java$MethodInvocation,\ + org.codehaus.janino.Java$MethodReference,\ + org.codehaus.janino.Java$Modifier,\ + org.codehaus.janino.Java$ModularCompilationUnit,\ + org.codehaus.janino.Java$ModuleDirective,\ + org.codehaus.janino.Java$NamedClassDeclaration,\ + org.codehaus.janino.Java$NamedTypeDeclaration,\ + org.codehaus.janino.Java$NewAnonymousClassInstance,\ + org.codehaus.janino.Java$NewArray,\ + org.codehaus.janino.Java$NewClassInstance,\ + org.codehaus.janino.Java$NewInitializedArray,\ + org.codehaus.janino.Java$NullLiteral,\ + org.codehaus.janino.Java$Package,\ + org.codehaus.janino.Java$PackageDeclaration,\ + org.codehaus.janino.Java$PackageMemberAnnotationTypeDeclaration,\ + org.codehaus.janino.Java$PackageMemberClassDeclaration,\ + org.codehaus.janino.Java$PackageMemberEnumDeclaration,\ + org.codehaus.janino.Java$PackageMemberInterfaceDeclaration,\ + org.codehaus.janino.Java$PackageMemberTypeDeclaration,\ + org.codehaus.janino.Java$ParameterAccess,\ + org.codehaus.janino.Java$ParenthesizedExpression,\ + org.codehaus.janino.Java$Primitive,\ + org.codehaus.janino.Java$PrimitiveType,\ + org.codehaus.janino.Java$QualifiedThisReference,\ + org.codehaus.janino.Java$ReferenceType,\ + org.codehaus.janino.Java$ReturnStatement,\ + org.codehaus.janino.Java$Rvalue,\ + org.codehaus.janino.Java$Rvalue$1,\ + org.codehaus.janino.Java$Rvalue$2,\ + org.codehaus.janino.Java$RvalueMemberType,\ + org.codehaus.janino.Java$Scope,\ + org.codehaus.janino.Java$SimpleConstant,\ + org.codehaus.janino.Java$SimpleType,\ + org.codehaus.janino.Java$Statement,\ + org.codehaus.janino.Java$StringLiteral,\ + org.codehaus.janino.Java$SuperConstructorInvocation,\ + org.codehaus.janino.Java$SuperclassFieldAccessExpression,\ + org.codehaus.janino.Java$SuperclassMethodInvocation,\ + org.codehaus.janino.Java$SwitchStatement,\ + org.codehaus.janino.Java$SwitchStatement$SwitchBlockStatementGroup,\ + org.codehaus.janino.Java$SynchronizedStatement,\ + org.codehaus.janino.Java$ThisReference,\ + org.codehaus.janino.Java$ThrowStatement,\ + org.codehaus.janino.Java$TryStatement,\ + org.codehaus.janino.Java$TryStatement$LocalVariableDeclaratorResource,\ + org.codehaus.janino.Java$TryStatement$Resource,\ + org.codehaus.janino.Java$TryStatement$VariableAccessResource,\ + org.codehaus.janino.Java$Type,\ + org.codehaus.janino.Java$TypeArgument,\ + org.codehaus.janino.Java$TypeBodyDeclaration,\ + org.codehaus.janino.Java$TypeDeclaration,\ + org.codehaus.janino.Java$UnaryOperation,\ + org.codehaus.janino.Java$VariableDeclarator,\ + org.codehaus.janino.Java$WhileStatement,\ + org.codehaus.janino.MethodDescriptor,\ + org.codehaus.janino.Mod,\ + org.codehaus.janino.Parser,\ + org.codehaus.janino.Parser$1,\ + org.codehaus.janino.Parser$ClassDeclarationContext,\ + org.codehaus.janino.Parser$MethodDeclarationContext,\ + org.codehaus.janino.ReflectionIClass,\ + org.codehaus.janino.ReflectionIClass$3,\ + org.codehaus.janino.ReflectionIClass$ReflectionIConstructor,\ + org.codehaus.janino.ReflectionIClass$ReflectionIField,\ + org.codehaus.janino.ReflectionIClass$ReflectionIMethod,\ + org.codehaus.janino.ResourceFinderIClassLoader,\ + org.codehaus.janino.Scanner,\ + org.codehaus.janino.StackMap,\ + org.codehaus.janino.Token,\ + org.codehaus.janino.TokenStream,\ + org.codehaus.janino.TokenStreamImpl,\ + org.codehaus.janino.TokenStreamImpl$1,\ + org.codehaus.janino.TokenType,\ + org.codehaus.janino.UnicodeUnescapeException,\ + org.codehaus.janino.UnicodeUnescapeReader,\ + org.codehaus.janino.UnitCompiler,\ + org.codehaus.janino.UnitCompiler$11,\ + org.codehaus.janino.UnitCompiler$12,\ + org.codehaus.janino.UnitCompiler$13,\ + org.codehaus.janino.UnitCompiler$14,\ + org.codehaus.janino.UnitCompiler$14$1,\ + org.codehaus.janino.UnitCompiler$15,\ + org.codehaus.janino.UnitCompiler$15$1,\ + org.codehaus.janino.UnitCompiler$16,\ + org.codehaus.janino.UnitCompiler$16$1,\ + org.codehaus.janino.UnitCompiler$17,\ + org.codehaus.janino.UnitCompiler$17$1,\ + org.codehaus.janino.UnitCompiler$17$2,\ + org.codehaus.janino.UnitCompiler$19,\ + org.codehaus.janino.UnitCompiler$19$1,\ + org.codehaus.janino.UnitCompiler$2,\ + org.codehaus.janino.UnitCompiler$20,\ + org.codehaus.janino.UnitCompiler$22,\ + org.codehaus.janino.UnitCompiler$23,\ + org.codehaus.janino.UnitCompiler$24,\ + org.codehaus.janino.UnitCompiler$25,\ + org.codehaus.janino.UnitCompiler$26,\ + org.codehaus.janino.UnitCompiler$28,\ + org.codehaus.janino.UnitCompiler$28$1,\ + org.codehaus.janino.UnitCompiler$28$2,\ + org.codehaus.janino.UnitCompiler$28$2$1,\ + org.codehaus.janino.UnitCompiler$29,\ + org.codehaus.janino.UnitCompiler$3,\ + org.codehaus.janino.UnitCompiler$30,\ + org.codehaus.janino.UnitCompiler$32,\ + org.codehaus.janino.UnitCompiler$33,\ + org.codehaus.janino.UnitCompiler$34,\ + org.codehaus.janino.UnitCompiler$35,\ + org.codehaus.janino.UnitCompiler$36,\ + org.codehaus.janino.UnitCompiler$37,\ + org.codehaus.janino.UnitCompiler$38,\ + org.codehaus.janino.UnitCompiler$39,\ + org.codehaus.janino.UnitCompiler$40,\ + org.codehaus.janino.UnitCompiler$41,\ + org.codehaus.janino.UnitCompiler$42,\ + org.codehaus.janino.UnitCompiler$43,\ + org.codehaus.janino.UnitCompiler$44,\ + org.codehaus.janino.UnitCompiler$6,\ + org.codehaus.janino.UnitCompiler$7,\ + org.codehaus.janino.UnitCompiler$8,\ + org.codehaus.janino.UnitCompiler$ClassFileConsumer,\ + org.codehaus.janino.UnitCompiler$Compilable2,\ + org.codehaus.janino.UnitCompiler$SimpleIField,\ + org.codehaus.janino.UnitCompiler$SwitchKind,\ + org.codehaus.janino.Visitor$AbstractCompilationUnitVisitor,\ + org.codehaus.janino.Visitor$AnnotationVisitor,\ + org.codehaus.janino.Visitor$ArrayInitializerOrRvalueVisitor,\ + org.codehaus.janino.Visitor$AtomVisitor,\ + org.codehaus.janino.Visitor$BlockStatementVisitor,\ + org.codehaus.janino.Visitor$ConstructorInvocationVisitor,\ + org.codehaus.janino.Visitor$ElementValueVisitor,\ + org.codehaus.janino.Visitor$FieldDeclarationOrInitializerVisitor,\ + org.codehaus.janino.Visitor$FunctionDeclaratorVisitor,\ + org.codehaus.janino.Visitor$ImportVisitor,\ + org.codehaus.janino.Visitor$LvalueVisitor,\ + org.codehaus.janino.Visitor$RvalueVisitor,\ + org.codehaus.janino.Visitor$TryStatementResourceVisitor,\ + org.codehaus.janino.Visitor$TypeBodyDeclarationVisitor,\ + org.codehaus.janino.Visitor$TypeDeclarationVisitor,\ + org.codehaus.janino.Visitor$TypeVisitor,\ + org.codehaus.janino.util.AbstractTraverser,\ + org.codehaus.janino.util.AbstractTraverser$1,\ + org.codehaus.janino.util.AbstractTraverser$10,\ + org.codehaus.janino.util.AbstractTraverser$11,\ + org.codehaus.janino.util.AbstractTraverser$2,\ + org.codehaus.janino.util.AbstractTraverser$3,\ + org.codehaus.janino.util.AbstractTraverser$4,\ + org.codehaus.janino.util.AbstractTraverser$4$1,\ + org.codehaus.janino.util.AbstractTraverser$5,\ + org.codehaus.janino.util.AbstractTraverser$6,\ + org.codehaus.janino.util.AbstractTraverser$7,\ + org.codehaus.janino.util.AbstractTraverser$7$1,\ + org.codehaus.janino.util.AbstractTraverser$8,\ + org.codehaus.janino.util.AbstractTraverser$9,\ + org.codehaus.janino.util.Annotatable,\ + org.codehaus.janino.util.ClassFile,\ + org.codehaus.janino.util.ClassFile$1,\ + org.codehaus.janino.util.ClassFile$AnnotationDefaultAttribute,\ + org.codehaus.janino.util.ClassFile$AttributeInfo,\ + org.codehaus.janino.util.ClassFile$ClassFileException,\ + org.codehaus.janino.util.ClassFile$CodeAttribute,\ + org.codehaus.janino.util.ClassFile$CodeAttribute$ExceptionTableEntry,\ + org.codehaus.janino.util.ClassFile$ConstantClassInfo,\ + org.codehaus.janino.util.ClassFile$ConstantDoubleInfo,\ + org.codehaus.janino.util.ClassFile$ConstantFieldrefInfo,\ + org.codehaus.janino.util.ClassFile$ConstantFloatInfo,\ + org.codehaus.janino.util.ClassFile$ConstantIntegerInfo,\ + org.codehaus.janino.util.ClassFile$ConstantInterfaceMethodrefInfo,\ + org.codehaus.janino.util.ClassFile$ConstantInvokeDynamicInfo,\ + org.codehaus.janino.util.ClassFile$ConstantLongInfo,\ + org.codehaus.janino.util.ClassFile$ConstantMethodHandleInfo,\ + org.codehaus.janino.util.ClassFile$ConstantMethodTypeInfo,\ + org.codehaus.janino.util.ClassFile$ConstantMethodrefInfo,\ + org.codehaus.janino.util.ClassFile$ConstantNameAndTypeInfo,\ + org.codehaus.janino.util.ClassFile$ConstantPoolInfo,\ + org.codehaus.janino.util.ClassFile$ConstantStringInfo,\ + org.codehaus.janino.util.ClassFile$ConstantUtf8Info,\ + org.codehaus.janino.util.ClassFile$ConstantValuePoolInfo,\ + org.codehaus.janino.util.ClassFile$DeprecatedAttribute,\ + org.codehaus.janino.util.ClassFile$ElementValue,\ + org.codehaus.janino.util.ClassFile$ExceptionsAttribute,\ + org.codehaus.janino.util.ClassFile$FieldInfo,\ + org.codehaus.janino.util.ClassFile$LineNumberTableAttribute,\ + org.codehaus.janino.util.ClassFile$LineNumberTableAttribute$Entry,\ + org.codehaus.janino.util.ClassFile$MethodInfo,\ + org.codehaus.janino.util.ClassFile$SourceFileAttribute,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$1,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$2,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$3,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$4,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$5,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$6,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$7,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$AppendFrame,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$ChopFrame,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$FullFrame,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$ObjectVariableInfo,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameFrame,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameFrameExtended,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameLocals1StackItemFrame,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameLocals1StackItemFrameExtended,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$StackMapFrame,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$UninitializedVariableInfo,\ + org.codehaus.janino.util.ClassFile$StackMapTableAttribute$VerificationTypeInfo,\ + org.codehaus.janino.util.Traverser,\ sun.misc.Unsafe From 707efe20be634ed0466ece2fcbf823ad5bf852b8 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 13:01:39 +0800 Subject: [PATCH 19/28] fix shaded janino init classes --- .../fury-core/native-image.properties | 676 +++++++++--------- 1 file changed, 338 insertions(+), 338 deletions(-) diff --git a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties index bd731acd2d..b11796a613 100644 --- a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties +++ b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties @@ -426,342 +426,342 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.util.unsafe._Lookup,\ org.apache.fury.codegen.JaninoUtils$CodeStats,\ org.codehaus.commons.compiler.util.resource.Resource,\ - org.codehaus.janino.IType,\ - org.codehaus.janino.Access,\ - org.codehaus.janino.ClassFileIClass,\ - org.codehaus.janino.ClassLoaderIClassLoader,\ - org.codehaus.janino.CodeContext,\ - org.codehaus.janino.CodeContext$1,\ - org.codehaus.janino.CodeContext$BasicBlock,\ - org.codehaus.janino.CodeContext$Branch,\ - org.codehaus.janino.CodeContext$ExceptionTableEntry,\ - org.codehaus.janino.CodeContext$FixUp,\ - org.codehaus.janino.CodeContext$FourByteOffset,\ - org.codehaus.janino.CodeContext$Inserter,\ - org.codehaus.janino.CodeContext$LineNumberOffset,\ - org.codehaus.janino.CodeContext$LocalScope,\ - org.codehaus.janino.CodeContext$Offset,\ - org.codehaus.janino.CodeContext$OffsetBranch,\ - org.codehaus.janino.CodeContext$Relocatable,\ - org.codehaus.janino.Compiler,\ - org.codehaus.janino.Compiler$2,\ - org.codehaus.janino.Compiler$CompilerIClassLoader,\ - org.codehaus.janino.Descriptor,\ - org.codehaus.janino.IClass,\ - org.codehaus.janino.IClass$1,\ - org.codehaus.janino.IClass$2,\ - org.codehaus.janino.IClass$IAnnotation,\ - org.codehaus.janino.IClass$IConstructor,\ - org.codehaus.janino.IClass$IField,\ - org.codehaus.janino.IClass$IInvocable,\ - org.codehaus.janino.IClass$IMember,\ - org.codehaus.janino.IClass$IMethod,\ - org.codehaus.janino.IClass$PrimitiveIClass,\ - org.codehaus.janino.IClassLoader,\ - org.codehaus.janino.IClassLoader$1,\ - org.codehaus.janino.IParameterizedType,\ - org.codehaus.janino.IType,\ - org.codehaus.janino.ITypeVariable,\ - org.codehaus.janino.ITypeVariableOrIClass,\ - org.codehaus.janino.JaninoOption,\ - org.codehaus.janino.Java,\ - org.codehaus.janino.Java$AbstractAnnotation,\ - org.codehaus.janino.Java$AbstractClassDeclaration,\ - org.codehaus.janino.Java$AbstractCompilationUnit,\ - org.codehaus.janino.Java$AbstractCompilationUnit$ImportDeclaration,\ - org.codehaus.janino.Java$AbstractCompilationUnit$SingleStaticImportDeclaration,\ - org.codehaus.janino.Java$AbstractCompilationUnit$SingleTypeImportDeclaration,\ - org.codehaus.janino.Java$AbstractCompilationUnit$StaticImportOnDemandDeclaration,\ - org.codehaus.janino.Java$AbstractCompilationUnit$TypeImportOnDemandDeclaration,\ - org.codehaus.janino.Java$AbstractTypeBodyDeclaration,\ - org.codehaus.janino.Java$AbstractTypeDeclaration,\ - org.codehaus.janino.Java$AccessModifier,\ - org.codehaus.janino.Java$AlternateConstructorInvocation,\ - org.codehaus.janino.Java$AmbiguousName,\ - org.codehaus.janino.Java$Annotatable,\ - org.codehaus.janino.Java$Annotation,\ - org.codehaus.janino.Java$AnnotationTypeDeclaration,\ - org.codehaus.janino.Java$AnonymousClassDeclaration,\ - org.codehaus.janino.Java$ArrayAccessExpression,\ - org.codehaus.janino.Java$ArrayCreationReference,\ - org.codehaus.janino.Java$ArrayInitializerOrRvalue,\ - org.codehaus.janino.Java$ArrayLength,\ - org.codehaus.janino.Java$ArrayType,\ - org.codehaus.janino.Java$AssertStatement,\ - org.codehaus.janino.Java$Assignment,\ - org.codehaus.janino.Java$Atom,\ - org.codehaus.janino.Java$BinaryOperation,\ - org.codehaus.janino.Java$Block,\ - org.codehaus.janino.Java$BlockStatement,\ - org.codehaus.janino.Java$BooleanLiteral,\ - org.codehaus.janino.Java$BooleanRvalue,\ - org.codehaus.janino.Java$BreakStatement,\ - org.codehaus.janino.Java$BreakableStatement,\ - org.codehaus.janino.Java$Cast,\ - org.codehaus.janino.Java$CatchClause,\ - org.codehaus.janino.Java$CatchParameter,\ - org.codehaus.janino.Java$CharacterLiteral,\ - org.codehaus.janino.Java$ClassDeclaration,\ - org.codehaus.janino.Java$ClassInstanceCreationReference,\ - org.codehaus.janino.Java$ClassLiteral,\ - org.codehaus.janino.Java$CompilationUnit,\ - org.codehaus.janino.Java$ConditionalExpression,\ - org.codehaus.janino.Java$ConstructorDeclarator,\ - org.codehaus.janino.Java$ConstructorInvocation,\ - org.codehaus.janino.Java$ContinuableStatement,\ - org.codehaus.janino.Java$ContinueStatement,\ - org.codehaus.janino.Java$Crement,\ - org.codehaus.janino.Java$DoStatement,\ - org.codehaus.janino.Java$DocCommentable,\ - org.codehaus.janino.Java$ElementValue,\ - org.codehaus.janino.Java$EmptyStatement,\ - org.codehaus.janino.Java$EnclosingScopeOfTypeDeclaration,\ - org.codehaus.janino.Java$EnumConstant,\ - org.codehaus.janino.Java$EnumDeclaration,\ - org.codehaus.janino.Java$ExpressionStatement,\ - org.codehaus.janino.Java$FieldAccess,\ - org.codehaus.janino.Java$FieldAccessExpression,\ - org.codehaus.janino.Java$FieldDeclaration,\ - org.codehaus.janino.Java$FieldDeclarationOrInitializer,\ - org.codehaus.janino.Java$FloatingPointLiteral,\ - org.codehaus.janino.Java$ForEachStatement,\ - org.codehaus.janino.Java$ForStatement,\ - org.codehaus.janino.Java$FunctionDeclarator,\ - org.codehaus.janino.Java$FunctionDeclarator$FormalParameter,\ - org.codehaus.janino.Java$FunctionDeclarator$FormalParameters,\ - org.codehaus.janino.Java$IfStatement,\ - org.codehaus.janino.Java$Initializer,\ - org.codehaus.janino.Java$InnerClassDeclaration,\ - org.codehaus.janino.Java$Instanceof,\ - org.codehaus.janino.Java$IntegerLiteral,\ - org.codehaus.janino.Java$InterfaceDeclaration,\ - org.codehaus.janino.Java$Invocation,\ - org.codehaus.janino.Java$LabeledStatement,\ - org.codehaus.janino.Java$LambdaBody,\ - org.codehaus.janino.Java$LambdaExpression,\ - org.codehaus.janino.Java$LambdaParameters,\ - org.codehaus.janino.Java$Literal,\ - org.codehaus.janino.Java$LocalClassDeclaration,\ - org.codehaus.janino.Java$LocalClassDeclarationStatement,\ - org.codehaus.janino.Java$LocalVariable,\ - org.codehaus.janino.Java$LocalVariableAccess,\ - org.codehaus.janino.Java$LocalVariableDeclarationStatement,\ - org.codehaus.janino.Java$LocalVariableSlot,\ - org.codehaus.janino.Java$Locatable,\ - org.codehaus.janino.Java$Located,\ - org.codehaus.janino.Java$Located$1,\ - org.codehaus.janino.Java$Lvalue,\ - org.codehaus.janino.Java$MarkerAnnotation,\ - org.codehaus.janino.Java$MemberAnnotationTypeDeclaration,\ - org.codehaus.janino.Java$MemberClassDeclaration,\ - org.codehaus.janino.Java$MemberEnumDeclaration,\ - org.codehaus.janino.Java$MemberInterfaceDeclaration,\ - org.codehaus.janino.Java$MemberTypeDeclaration,\ - org.codehaus.janino.Java$MethodDeclarator,\ - org.codehaus.janino.Java$MethodInvocation,\ - org.codehaus.janino.Java$MethodReference,\ - org.codehaus.janino.Java$Modifier,\ - org.codehaus.janino.Java$ModularCompilationUnit,\ - org.codehaus.janino.Java$ModuleDirective,\ - org.codehaus.janino.Java$NamedClassDeclaration,\ - org.codehaus.janino.Java$NamedTypeDeclaration,\ - org.codehaus.janino.Java$NewAnonymousClassInstance,\ - org.codehaus.janino.Java$NewArray,\ - org.codehaus.janino.Java$NewClassInstance,\ - org.codehaus.janino.Java$NewInitializedArray,\ - org.codehaus.janino.Java$NullLiteral,\ - org.codehaus.janino.Java$Package,\ - org.codehaus.janino.Java$PackageDeclaration,\ - org.codehaus.janino.Java$PackageMemberAnnotationTypeDeclaration,\ - org.codehaus.janino.Java$PackageMemberClassDeclaration,\ - org.codehaus.janino.Java$PackageMemberEnumDeclaration,\ - org.codehaus.janino.Java$PackageMemberInterfaceDeclaration,\ - org.codehaus.janino.Java$PackageMemberTypeDeclaration,\ - org.codehaus.janino.Java$ParameterAccess,\ - org.codehaus.janino.Java$ParenthesizedExpression,\ - org.codehaus.janino.Java$Primitive,\ - org.codehaus.janino.Java$PrimitiveType,\ - org.codehaus.janino.Java$QualifiedThisReference,\ - org.codehaus.janino.Java$ReferenceType,\ - org.codehaus.janino.Java$ReturnStatement,\ - org.codehaus.janino.Java$Rvalue,\ - org.codehaus.janino.Java$Rvalue$1,\ - org.codehaus.janino.Java$Rvalue$2,\ - org.codehaus.janino.Java$RvalueMemberType,\ - org.codehaus.janino.Java$Scope,\ - org.codehaus.janino.Java$SimpleConstant,\ - org.codehaus.janino.Java$SimpleType,\ - org.codehaus.janino.Java$Statement,\ - org.codehaus.janino.Java$StringLiteral,\ - org.codehaus.janino.Java$SuperConstructorInvocation,\ - org.codehaus.janino.Java$SuperclassFieldAccessExpression,\ - org.codehaus.janino.Java$SuperclassMethodInvocation,\ - org.codehaus.janino.Java$SwitchStatement,\ - org.codehaus.janino.Java$SwitchStatement$SwitchBlockStatementGroup,\ - org.codehaus.janino.Java$SynchronizedStatement,\ - org.codehaus.janino.Java$ThisReference,\ - org.codehaus.janino.Java$ThrowStatement,\ - org.codehaus.janino.Java$TryStatement,\ - org.codehaus.janino.Java$TryStatement$LocalVariableDeclaratorResource,\ - org.codehaus.janino.Java$TryStatement$Resource,\ - org.codehaus.janino.Java$TryStatement$VariableAccessResource,\ - org.codehaus.janino.Java$Type,\ - org.codehaus.janino.Java$TypeArgument,\ - org.codehaus.janino.Java$TypeBodyDeclaration,\ - org.codehaus.janino.Java$TypeDeclaration,\ - org.codehaus.janino.Java$UnaryOperation,\ - org.codehaus.janino.Java$VariableDeclarator,\ - org.codehaus.janino.Java$WhileStatement,\ - org.codehaus.janino.MethodDescriptor,\ - org.codehaus.janino.Mod,\ - org.codehaus.janino.Parser,\ - org.codehaus.janino.Parser$1,\ - org.codehaus.janino.Parser$ClassDeclarationContext,\ - org.codehaus.janino.Parser$MethodDeclarationContext,\ - org.codehaus.janino.ReflectionIClass,\ - org.codehaus.janino.ReflectionIClass$3,\ - org.codehaus.janino.ReflectionIClass$ReflectionIConstructor,\ - org.codehaus.janino.ReflectionIClass$ReflectionIField,\ - org.codehaus.janino.ReflectionIClass$ReflectionIMethod,\ - org.codehaus.janino.ResourceFinderIClassLoader,\ - org.codehaus.janino.Scanner,\ - org.codehaus.janino.StackMap,\ - org.codehaus.janino.Token,\ - org.codehaus.janino.TokenStream,\ - org.codehaus.janino.TokenStreamImpl,\ - org.codehaus.janino.TokenStreamImpl$1,\ - org.codehaus.janino.TokenType,\ - org.codehaus.janino.UnicodeUnescapeException,\ - org.codehaus.janino.UnicodeUnescapeReader,\ - org.codehaus.janino.UnitCompiler,\ - org.codehaus.janino.UnitCompiler$11,\ - org.codehaus.janino.UnitCompiler$12,\ - org.codehaus.janino.UnitCompiler$13,\ - org.codehaus.janino.UnitCompiler$14,\ - org.codehaus.janino.UnitCompiler$14$1,\ - org.codehaus.janino.UnitCompiler$15,\ - org.codehaus.janino.UnitCompiler$15$1,\ - org.codehaus.janino.UnitCompiler$16,\ - org.codehaus.janino.UnitCompiler$16$1,\ - org.codehaus.janino.UnitCompiler$17,\ - org.codehaus.janino.UnitCompiler$17$1,\ - org.codehaus.janino.UnitCompiler$17$2,\ - org.codehaus.janino.UnitCompiler$19,\ - org.codehaus.janino.UnitCompiler$19$1,\ - org.codehaus.janino.UnitCompiler$2,\ - org.codehaus.janino.UnitCompiler$20,\ - org.codehaus.janino.UnitCompiler$22,\ - org.codehaus.janino.UnitCompiler$23,\ - org.codehaus.janino.UnitCompiler$24,\ - org.codehaus.janino.UnitCompiler$25,\ - org.codehaus.janino.UnitCompiler$26,\ - org.codehaus.janino.UnitCompiler$28,\ - org.codehaus.janino.UnitCompiler$28$1,\ - org.codehaus.janino.UnitCompiler$28$2,\ - org.codehaus.janino.UnitCompiler$28$2$1,\ - org.codehaus.janino.UnitCompiler$29,\ - org.codehaus.janino.UnitCompiler$3,\ - org.codehaus.janino.UnitCompiler$30,\ - org.codehaus.janino.UnitCompiler$32,\ - org.codehaus.janino.UnitCompiler$33,\ - org.codehaus.janino.UnitCompiler$34,\ - org.codehaus.janino.UnitCompiler$35,\ - org.codehaus.janino.UnitCompiler$36,\ - org.codehaus.janino.UnitCompiler$37,\ - org.codehaus.janino.UnitCompiler$38,\ - org.codehaus.janino.UnitCompiler$39,\ - org.codehaus.janino.UnitCompiler$40,\ - org.codehaus.janino.UnitCompiler$41,\ - org.codehaus.janino.UnitCompiler$42,\ - org.codehaus.janino.UnitCompiler$43,\ - org.codehaus.janino.UnitCompiler$44,\ - org.codehaus.janino.UnitCompiler$6,\ - org.codehaus.janino.UnitCompiler$7,\ - org.codehaus.janino.UnitCompiler$8,\ - org.codehaus.janino.UnitCompiler$ClassFileConsumer,\ - org.codehaus.janino.UnitCompiler$Compilable2,\ - org.codehaus.janino.UnitCompiler$SimpleIField,\ - org.codehaus.janino.UnitCompiler$SwitchKind,\ - org.codehaus.janino.Visitor$AbstractCompilationUnitVisitor,\ - org.codehaus.janino.Visitor$AnnotationVisitor,\ - org.codehaus.janino.Visitor$ArrayInitializerOrRvalueVisitor,\ - org.codehaus.janino.Visitor$AtomVisitor,\ - org.codehaus.janino.Visitor$BlockStatementVisitor,\ - org.codehaus.janino.Visitor$ConstructorInvocationVisitor,\ - org.codehaus.janino.Visitor$ElementValueVisitor,\ - org.codehaus.janino.Visitor$FieldDeclarationOrInitializerVisitor,\ - org.codehaus.janino.Visitor$FunctionDeclaratorVisitor,\ - org.codehaus.janino.Visitor$ImportVisitor,\ - org.codehaus.janino.Visitor$LvalueVisitor,\ - org.codehaus.janino.Visitor$RvalueVisitor,\ - org.codehaus.janino.Visitor$TryStatementResourceVisitor,\ - org.codehaus.janino.Visitor$TypeBodyDeclarationVisitor,\ - org.codehaus.janino.Visitor$TypeDeclarationVisitor,\ - org.codehaus.janino.Visitor$TypeVisitor,\ - org.codehaus.janino.util.AbstractTraverser,\ - org.codehaus.janino.util.AbstractTraverser$1,\ - org.codehaus.janino.util.AbstractTraverser$10,\ - org.codehaus.janino.util.AbstractTraverser$11,\ - org.codehaus.janino.util.AbstractTraverser$2,\ - org.codehaus.janino.util.AbstractTraverser$3,\ - org.codehaus.janino.util.AbstractTraverser$4,\ - org.codehaus.janino.util.AbstractTraverser$4$1,\ - org.codehaus.janino.util.AbstractTraverser$5,\ - org.codehaus.janino.util.AbstractTraverser$6,\ - org.codehaus.janino.util.AbstractTraverser$7,\ - org.codehaus.janino.util.AbstractTraverser$7$1,\ - org.codehaus.janino.util.AbstractTraverser$8,\ - org.codehaus.janino.util.AbstractTraverser$9,\ - org.codehaus.janino.util.Annotatable,\ - org.codehaus.janino.util.ClassFile,\ - org.codehaus.janino.util.ClassFile$1,\ - org.codehaus.janino.util.ClassFile$AnnotationDefaultAttribute,\ - org.codehaus.janino.util.ClassFile$AttributeInfo,\ - org.codehaus.janino.util.ClassFile$ClassFileException,\ - org.codehaus.janino.util.ClassFile$CodeAttribute,\ - org.codehaus.janino.util.ClassFile$CodeAttribute$ExceptionTableEntry,\ - org.codehaus.janino.util.ClassFile$ConstantClassInfo,\ - org.codehaus.janino.util.ClassFile$ConstantDoubleInfo,\ - org.codehaus.janino.util.ClassFile$ConstantFieldrefInfo,\ - org.codehaus.janino.util.ClassFile$ConstantFloatInfo,\ - org.codehaus.janino.util.ClassFile$ConstantIntegerInfo,\ - org.codehaus.janino.util.ClassFile$ConstantInterfaceMethodrefInfo,\ - org.codehaus.janino.util.ClassFile$ConstantInvokeDynamicInfo,\ - org.codehaus.janino.util.ClassFile$ConstantLongInfo,\ - org.codehaus.janino.util.ClassFile$ConstantMethodHandleInfo,\ - org.codehaus.janino.util.ClassFile$ConstantMethodTypeInfo,\ - org.codehaus.janino.util.ClassFile$ConstantMethodrefInfo,\ - org.codehaus.janino.util.ClassFile$ConstantNameAndTypeInfo,\ - org.codehaus.janino.util.ClassFile$ConstantPoolInfo,\ - org.codehaus.janino.util.ClassFile$ConstantStringInfo,\ - org.codehaus.janino.util.ClassFile$ConstantUtf8Info,\ - org.codehaus.janino.util.ClassFile$ConstantValuePoolInfo,\ - org.codehaus.janino.util.ClassFile$DeprecatedAttribute,\ - org.codehaus.janino.util.ClassFile$ElementValue,\ - org.codehaus.janino.util.ClassFile$ExceptionsAttribute,\ - org.codehaus.janino.util.ClassFile$FieldInfo,\ - org.codehaus.janino.util.ClassFile$LineNumberTableAttribute,\ - org.codehaus.janino.util.ClassFile$LineNumberTableAttribute$Entry,\ - org.codehaus.janino.util.ClassFile$MethodInfo,\ - org.codehaus.janino.util.ClassFile$SourceFileAttribute,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$1,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$2,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$3,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$4,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$5,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$6,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$7,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$AppendFrame,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$ChopFrame,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$FullFrame,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$ObjectVariableInfo,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameFrame,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameFrameExtended,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameLocals1StackItemFrame,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameLocals1StackItemFrameExtended,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$StackMapFrame,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$UninitializedVariableInfo,\ - org.codehaus.janino.util.ClassFile$StackMapTableAttribute$VerificationTypeInfo,\ - org.codehaus.janino.util.Traverser,\ + org.apache.fury.shaded.org.codehaus.janino.IType,\ + org.apache.fury.shaded.org.codehaus.janino.Access,\ + org.apache.fury.shaded.org.codehaus.janino.ClassFileIClass,\ + org.apache.fury.shaded.org.codehaus.janino.ClassLoaderIClassLoader,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$1,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$BasicBlock,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$Branch,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$ExceptionTableEntry,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$FixUp,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$FourByteOffset,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$Inserter,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$LineNumberOffset,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$LocalScope,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$Offset,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$OffsetBranch,\ + org.apache.fury.shaded.org.codehaus.janino.CodeContext$Relocatable,\ + org.apache.fury.shaded.org.codehaus.janino.Compiler,\ + org.apache.fury.shaded.org.codehaus.janino.Compiler$2,\ + org.apache.fury.shaded.org.codehaus.janino.Compiler$CompilerIClassLoader,\ + org.apache.fury.shaded.org.codehaus.janino.Descriptor,\ + org.apache.fury.shaded.org.codehaus.janino.IClass,\ + org.apache.fury.shaded.org.codehaus.janino.IClass$1,\ + org.apache.fury.shaded.org.codehaus.janino.IClass$2,\ + org.apache.fury.shaded.org.codehaus.janino.IClass$IAnnotation,\ + org.apache.fury.shaded.org.codehaus.janino.IClass$IConstructor,\ + org.apache.fury.shaded.org.codehaus.janino.IClass$IField,\ + org.apache.fury.shaded.org.codehaus.janino.IClass$IInvocable,\ + org.apache.fury.shaded.org.codehaus.janino.IClass$IMember,\ + org.apache.fury.shaded.org.codehaus.janino.IClass$IMethod,\ + org.apache.fury.shaded.org.codehaus.janino.IClass$PrimitiveIClass,\ + org.apache.fury.shaded.org.codehaus.janino.IClassLoader,\ + org.apache.fury.shaded.org.codehaus.janino.IClassLoader$1,\ + org.apache.fury.shaded.org.codehaus.janino.IParameterizedType,\ + org.apache.fury.shaded.org.codehaus.janino.IType,\ + org.apache.fury.shaded.org.codehaus.janino.ITypeVariable,\ + org.apache.fury.shaded.org.codehaus.janino.ITypeVariableOrIClass,\ + org.apache.fury.shaded.org.codehaus.janino.JaninoOption,\ + org.apache.fury.shaded.org.codehaus.janino.Java,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AbstractAnnotation,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AbstractClassDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AbstractCompilationUnit,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AbstractCompilationUnit$ImportDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AbstractCompilationUnit$SingleStaticImportDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AbstractCompilationUnit$SingleTypeImportDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AbstractCompilationUnit$StaticImportOnDemandDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AbstractCompilationUnit$TypeImportOnDemandDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AbstractTypeBodyDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AbstractTypeDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AccessModifier,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AlternateConstructorInvocation,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AmbiguousName,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Annotatable,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Annotation,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AnnotationTypeDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AnonymousClassDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ArrayAccessExpression,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ArrayCreationReference,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ArrayInitializerOrRvalue,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ArrayLength,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ArrayType,\ + org.apache.fury.shaded.org.codehaus.janino.Java$AssertStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Assignment,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Atom,\ + org.apache.fury.shaded.org.codehaus.janino.Java$BinaryOperation,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Block,\ + org.apache.fury.shaded.org.codehaus.janino.Java$BlockStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$BooleanLiteral,\ + org.apache.fury.shaded.org.codehaus.janino.Java$BooleanRvalue,\ + org.apache.fury.shaded.org.codehaus.janino.Java$BreakStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$BreakableStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Cast,\ + org.apache.fury.shaded.org.codehaus.janino.Java$CatchClause,\ + org.apache.fury.shaded.org.codehaus.janino.Java$CatchParameter,\ + org.apache.fury.shaded.org.codehaus.janino.Java$CharacterLiteral,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ClassDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ClassInstanceCreationReference,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ClassLiteral,\ + org.apache.fury.shaded.org.codehaus.janino.Java$CompilationUnit,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ConditionalExpression,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ConstructorDeclarator,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ConstructorInvocation,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ContinuableStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ContinueStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Crement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$DoStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$DocCommentable,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ElementValue,\ + org.apache.fury.shaded.org.codehaus.janino.Java$EmptyStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$EnclosingScopeOfTypeDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$EnumConstant,\ + org.apache.fury.shaded.org.codehaus.janino.Java$EnumDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ExpressionStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$FieldAccess,\ + org.apache.fury.shaded.org.codehaus.janino.Java$FieldAccessExpression,\ + org.apache.fury.shaded.org.codehaus.janino.Java$FieldDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$FieldDeclarationOrInitializer,\ + org.apache.fury.shaded.org.codehaus.janino.Java$FloatingPointLiteral,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ForEachStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ForStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$FunctionDeclarator,\ + org.apache.fury.shaded.org.codehaus.janino.Java$FunctionDeclarator$FormalParameter,\ + org.apache.fury.shaded.org.codehaus.janino.Java$FunctionDeclarator$FormalParameters,\ + org.apache.fury.shaded.org.codehaus.janino.Java$IfStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Initializer,\ + org.apache.fury.shaded.org.codehaus.janino.Java$InnerClassDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Instanceof,\ + org.apache.fury.shaded.org.codehaus.janino.Java$IntegerLiteral,\ + org.apache.fury.shaded.org.codehaus.janino.Java$InterfaceDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Invocation,\ + org.apache.fury.shaded.org.codehaus.janino.Java$LabeledStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$LambdaBody,\ + org.apache.fury.shaded.org.codehaus.janino.Java$LambdaExpression,\ + org.apache.fury.shaded.org.codehaus.janino.Java$LambdaParameters,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Literal,\ + org.apache.fury.shaded.org.codehaus.janino.Java$LocalClassDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$LocalClassDeclarationStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$LocalVariable,\ + org.apache.fury.shaded.org.codehaus.janino.Java$LocalVariableAccess,\ + org.apache.fury.shaded.org.codehaus.janino.Java$LocalVariableDeclarationStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$LocalVariableSlot,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Locatable,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Located,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Located$1,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Lvalue,\ + org.apache.fury.shaded.org.codehaus.janino.Java$MarkerAnnotation,\ + org.apache.fury.shaded.org.codehaus.janino.Java$MemberAnnotationTypeDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$MemberClassDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$MemberEnumDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$MemberInterfaceDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$MemberTypeDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$MethodDeclarator,\ + org.apache.fury.shaded.org.codehaus.janino.Java$MethodInvocation,\ + org.apache.fury.shaded.org.codehaus.janino.Java$MethodReference,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Modifier,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ModularCompilationUnit,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ModuleDirective,\ + org.apache.fury.shaded.org.codehaus.janino.Java$NamedClassDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$NamedTypeDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$NewAnonymousClassInstance,\ + org.apache.fury.shaded.org.codehaus.janino.Java$NewArray,\ + org.apache.fury.shaded.org.codehaus.janino.Java$NewClassInstance,\ + org.apache.fury.shaded.org.codehaus.janino.Java$NewInitializedArray,\ + org.apache.fury.shaded.org.codehaus.janino.Java$NullLiteral,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Package,\ + org.apache.fury.shaded.org.codehaus.janino.Java$PackageDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$PackageMemberAnnotationTypeDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$PackageMemberClassDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$PackageMemberEnumDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$PackageMemberInterfaceDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$PackageMemberTypeDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ParameterAccess,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ParenthesizedExpression,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Primitive,\ + org.apache.fury.shaded.org.codehaus.janino.Java$PrimitiveType,\ + org.apache.fury.shaded.org.codehaus.janino.Java$QualifiedThisReference,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ReferenceType,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ReturnStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Rvalue,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Rvalue$1,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Rvalue$2,\ + org.apache.fury.shaded.org.codehaus.janino.Java$RvalueMemberType,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Scope,\ + org.apache.fury.shaded.org.codehaus.janino.Java$SimpleConstant,\ + org.apache.fury.shaded.org.codehaus.janino.Java$SimpleType,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Statement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$StringLiteral,\ + org.apache.fury.shaded.org.codehaus.janino.Java$SuperConstructorInvocation,\ + org.apache.fury.shaded.org.codehaus.janino.Java$SuperclassFieldAccessExpression,\ + org.apache.fury.shaded.org.codehaus.janino.Java$SuperclassMethodInvocation,\ + org.apache.fury.shaded.org.codehaus.janino.Java$SwitchStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$SwitchStatement$SwitchBlockStatementGroup,\ + org.apache.fury.shaded.org.codehaus.janino.Java$SynchronizedStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ThisReference,\ + org.apache.fury.shaded.org.codehaus.janino.Java$ThrowStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$TryStatement,\ + org.apache.fury.shaded.org.codehaus.janino.Java$TryStatement$LocalVariableDeclaratorResource,\ + org.apache.fury.shaded.org.codehaus.janino.Java$TryStatement$Resource,\ + org.apache.fury.shaded.org.codehaus.janino.Java$TryStatement$VariableAccessResource,\ + org.apache.fury.shaded.org.codehaus.janino.Java$Type,\ + org.apache.fury.shaded.org.codehaus.janino.Java$TypeArgument,\ + org.apache.fury.shaded.org.codehaus.janino.Java$TypeBodyDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$TypeDeclaration,\ + org.apache.fury.shaded.org.codehaus.janino.Java$UnaryOperation,\ + org.apache.fury.shaded.org.codehaus.janino.Java$VariableDeclarator,\ + org.apache.fury.shaded.org.codehaus.janino.Java$WhileStatement,\ + org.apache.fury.shaded.org.codehaus.janino.MethodDescriptor,\ + org.apache.fury.shaded.org.codehaus.janino.Mod,\ + org.apache.fury.shaded.org.codehaus.janino.Parser,\ + org.apache.fury.shaded.org.codehaus.janino.Parser$1,\ + org.apache.fury.shaded.org.codehaus.janino.Parser$ClassDeclarationContext,\ + org.apache.fury.shaded.org.codehaus.janino.Parser$MethodDeclarationContext,\ + org.apache.fury.shaded.org.codehaus.janino.ReflectionIClass,\ + org.apache.fury.shaded.org.codehaus.janino.ReflectionIClass$3,\ + org.apache.fury.shaded.org.codehaus.janino.ReflectionIClass$ReflectionIConstructor,\ + org.apache.fury.shaded.org.codehaus.janino.ReflectionIClass$ReflectionIField,\ + org.apache.fury.shaded.org.codehaus.janino.ReflectionIClass$ReflectionIMethod,\ + org.apache.fury.shaded.org.codehaus.janino.ResourceFinderIClassLoader,\ + org.apache.fury.shaded.org.codehaus.janino.Scanner,\ + org.apache.fury.shaded.org.codehaus.janino.StackMap,\ + org.apache.fury.shaded.org.codehaus.janino.Token,\ + org.apache.fury.shaded.org.codehaus.janino.TokenStream,\ + org.apache.fury.shaded.org.codehaus.janino.TokenStreamImpl,\ + org.apache.fury.shaded.org.codehaus.janino.TokenStreamImpl$1,\ + org.apache.fury.shaded.org.codehaus.janino.TokenType,\ + org.apache.fury.shaded.org.codehaus.janino.UnicodeUnescapeException,\ + org.apache.fury.shaded.org.codehaus.janino.UnicodeUnescapeReader,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$11,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$12,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$13,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$14,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$14$1,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$15,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$15$1,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$16,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$16$1,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$17,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$17$1,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$17$2,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$19,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$19$1,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$2,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$20,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$22,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$23,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$24,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$25,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$26,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$28,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$28$1,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$28$2,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$28$2$1,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$29,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$3,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$30,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$32,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$33,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$34,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$35,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$36,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$37,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$38,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$39,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$40,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$41,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$42,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$43,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$44,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$6,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$7,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$8,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$ClassFileConsumer,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$Compilable2,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$SimpleIField,\ + org.apache.fury.shaded.org.codehaus.janino.UnitCompiler$SwitchKind,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$AbstractCompilationUnitVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$AnnotationVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$ArrayInitializerOrRvalueVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$AtomVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$BlockStatementVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$ConstructorInvocationVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$ElementValueVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$FieldDeclarationOrInitializerVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$FunctionDeclaratorVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$ImportVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$LvalueVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$RvalueVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$TryStatementResourceVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$TypeBodyDeclarationVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$TypeDeclarationVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.Visitor$TypeVisitor,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$1,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$10,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$11,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$2,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$3,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$4,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$4$1,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$5,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$6,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$7,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$7$1,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$8,\ + org.apache.fury.shaded.org.codehaus.janino.util.AbstractTraverser$9,\ + org.apache.fury.shaded.org.codehaus.janino.util.Annotatable,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$1,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$AnnotationDefaultAttribute,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$AttributeInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ClassFileException,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$CodeAttribute,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$CodeAttribute$ExceptionTableEntry,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantClassInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantDoubleInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantFieldrefInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantFloatInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantIntegerInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantInterfaceMethodrefInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantInvokeDynamicInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantLongInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantMethodHandleInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantMethodTypeInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantMethodrefInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantNameAndTypeInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantPoolInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantStringInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantUtf8Info,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ConstantValuePoolInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$DeprecatedAttribute,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ElementValue,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$ExceptionsAttribute,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$FieldInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$LineNumberTableAttribute,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$LineNumberTableAttribute$Entry,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$MethodInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$SourceFileAttribute,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$1,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$2,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$3,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$4,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$5,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$6,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$7,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$AppendFrame,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$ChopFrame,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$FullFrame,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$ObjectVariableInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameFrame,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameFrameExtended,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameLocals1StackItemFrame,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$SameLocals1StackItemFrameExtended,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$StackMapFrame,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$UninitializedVariableInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.ClassFile$StackMapTableAttribute$VerificationTypeInfo,\ + org.apache.fury.shaded.org.codehaus.janino.util.Traverser,\ sun.misc.Unsafe From 793c3c27166cbe5130b3c9d29f9cd9d444dc913f Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 13:35:19 +0800 Subject: [PATCH 20/28] fix graalvm init classes --- .../org.apache.fury/fury-core/native-image.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties index b11796a613..ab123ebc19 100644 --- a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties +++ b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties @@ -411,6 +411,7 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.util.ClassLoaderUtils$ParentClassLoader,\ org.apache.fury.util.ClassLoaderUtils,\ org.apache.fury.util.DelayedRef,\ + org.apache.fury.util.function.Functions,\ org.apache.fury.util.GraalvmSupport,\ org.apache.fury.util.LoaderBinding$1,\ org.apache.fury.util.LoaderBinding$StagingType,\ @@ -425,7 +426,7 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.util.unsafe._JDKAccess,\ org.apache.fury.util.unsafe._Lookup,\ org.apache.fury.codegen.JaninoUtils$CodeStats,\ - org.codehaus.commons.compiler.util.resource.Resource,\ + org.apache.fury.shaded.org.codehaus.commons.compiler.Location,\ org.apache.fury.shaded.org.codehaus.janino.IType,\ org.apache.fury.shaded.org.codehaus.janino.Access,\ org.apache.fury.shaded.org.codehaus.janino.ClassFileIClass,\ From 6aa6fa078597cee220ff61dc62680b596575063d Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 13:35:46 +0800 Subject: [PATCH 21/28] fix conflict classes --- .../fury/graalvm/CollectionExample.java | 6 +++++- .../fury/graalvm/CompatibleExample.java | 19 +++++-------------- .../graalvm/CompatibleThreadSafeExample.java | 1 + .../java/org/apache/fury/graalvm/Example.java | 2 +- .../org/apache/fury/graalvm/ProxyExample.java | 6 +++++- .../fury/graalvm/ScopedCompatibleExample.java | 12 ++++++++++-- .../fury/graalvm/ThreadSafeExample.java | 6 +++++- .../record/CompatibleRecordExample.java | 9 +++++---- .../fury/graalvm/record/RecordExample.java | 6 +++++- .../fury/graalvm/record/RecordExample2.java | 6 +++++- .../java/org/apache/fury/config/Config.java | 11 ++++++++++- .../org/apache/fury/config/FuryBuilder.java | 7 +++++++ 12 files changed, 64 insertions(+), 27 deletions(-) diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CollectionExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CollectionExample.java index 3a53d5f524..222cc4714d 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CollectionExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CollectionExample.java @@ -32,7 +32,11 @@ public class CollectionExample { static Fury fury; static { - fury = Fury.builder().requireClassRegistration(true).build(); + fury = + Fury.builder() + .withName(CollectionExample.class.getName()) + .requireClassRegistration(true) + .build(); } static void test(Fury fury) { diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java index 2242aa8bea..9fb2ac742c 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java @@ -21,7 +21,6 @@ import org.apache.fury.Fury; import org.apache.fury.config.CompatibleMode; -import org.apache.fury.graalvm.record.RecordExample; public class CompatibleExample { static Fury fury; @@ -32,11 +31,11 @@ public class CompatibleExample { private static Fury createFury() { Fury fury = - Fury.builder() - .requireClassRegistration(true) - .withCompatibleMode(CompatibleMode.COMPATIBLE) - .withScopedMetaShare(false) - .build(); + Fury.builder() + .requireClassRegistration(true) + .withCompatibleMode(CompatibleMode.COMPATIBLE) + .withScopedMetaShare(false) + .build(); // register and generate serializer code. fury.register(Foo.class, true); return fury; @@ -45,14 +44,6 @@ private static Fury createFury() { public static void main(String[] args) { Example.test(fury); // Test new created Fury at runtime - fury = - Fury.builder() - .requireClassRegistration(true) - .withCompatibleMode(CompatibleMode.COMPATIBLE) - .withScopedMetaShare(false) - .build(); - fury.register(Foo.class, true); - Example.test(fury); fury = createFury(); Example.test(fury); System.out.println("CompatibleExample succeed"); diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleThreadSafeExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleThreadSafeExample.java index 9ddb489238..d7b8c484f9 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleThreadSafeExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleThreadSafeExample.java @@ -33,6 +33,7 @@ public class CompatibleThreadSafeExample { classLoader -> { Fury f = Fury.builder() + .withName(CompatibleThreadSafeExample.class.getName()) .requireClassRegistration(true) .withCompatibleMode(CompatibleMode.COMPATIBLE) .build(); diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/Example.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/Example.java index 203c8c2e5e..bf2157429e 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/Example.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/Example.java @@ -28,7 +28,7 @@ public class Example { static Fury fury; static { - fury = Fury.builder().requireClassRegistration(true).build(); + fury = Fury.builder().withName(Example.class.getName()).requireClassRegistration(true).build(); // register and generate serializer code. fury.register(Foo.class, true); } diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ProxyExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ProxyExample.java index 43afc8bcd8..43288ae8d1 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ProxyExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ProxyExample.java @@ -39,7 +39,11 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl static Fury fury; static { - fury = Fury.builder().requireClassRegistration(true).build(); + fury = + Fury.builder() + .withName(ProxyExample.class.getName()) + .requireClassRegistration(true) + .build(); // register and generate serializer code. fury.register(TestInvocationHandler.class, true); } diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ScopedCompatibleExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ScopedCompatibleExample.java index 48883fbe72..af2e80fae8 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ScopedCompatibleExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ScopedCompatibleExample.java @@ -23,20 +23,28 @@ import org.apache.fury.config.CompatibleMode; public class ScopedCompatibleExample { - static Fury fury; + private static Fury fury; static { - fury = + fury = createFury(); + } + + private static Fury createFury() { + Fury fury = Fury.builder() + .withName(ScopedCompatibleExample.class.getName()) .requireClassRegistration(true) .withCompatibleMode(CompatibleMode.COMPATIBLE) .withScopedMetaShare(true) .build(); // register and generate serializer code. fury.register(Foo.class, true); + return fury; } public static void main(String[] args) { + Example.test(fury); + fury = createFury(); Example.test(fury); System.out.println("CompatibleExample succeed"); } diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ThreadSafeExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ThreadSafeExample.java index 150dc16e7c..1a0b1125c1 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ThreadSafeExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ThreadSafeExample.java @@ -37,7 +37,11 @@ public class ThreadSafeExample { fury = new ThreadLocalFury( classLoader -> { - Fury f = Fury.builder().requireClassRegistration(true).build(); + Fury f = + Fury.builder() + .withName(ThreadSafeExample.class.getName()) + .requireClassRegistration(true) + .build(); // register and generate serializer code. f.register(Foo.class, true); return f; diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/CompatibleRecordExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/CompatibleRecordExample.java index a8cc25e558..94e3a7ebc1 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/CompatibleRecordExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/CompatibleRecordExample.java @@ -31,10 +31,11 @@ public class CompatibleRecordExample { private static Fury createFury() { Fury fury = - Fury.builder() - .requireClassRegistration(true) - .withCompatibleMode(CompatibleMode.COMPATIBLE) - .build(); + Fury.builder() + .withName(CompatibleRecordExample.class.getName()) + .requireClassRegistration(true) + .withCompatibleMode(CompatibleMode.COMPATIBLE) + .build(); // register and generate serializer code. fury.register(RecordExample.Record.class, true); return fury; diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java index 1202d226b4..8c0347e2f7 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java @@ -30,7 +30,11 @@ public record Record(int f1, String f2, List f3, Map f4) { static Fury fury; static { - fury = Fury.builder().requireClassRegistration(true).build(); + fury = + Fury.builder() + .withName(RecordExample.class.getName()) + .requireClassRegistration(true) + .build(); // register and generate serializer code. fury.register(Record.class, true); } diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java index 8fa9fa4247..5f0f66d1db 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java @@ -30,7 +30,11 @@ private record Record(int f1, String f2, List f3, Map f4) static Fury fury; static { - fury = Fury.builder().requireClassRegistration(true).build(); + fury = + Fury.builder() + .withName(RecordExample2.class.getName()) + .requireClassRegistration(true) + .build(); // register and generate serializer code. fury.register(Record.class, true); fury.register(Foo.class, true); diff --git a/java/fury-core/src/main/java/org/apache/fury/config/Config.java b/java/fury-core/src/main/java/org/apache/fury/config/Config.java index fad9d3957d..98422d7372 100644 --- a/java/fury-core/src/main/java/org/apache/fury/config/Config.java +++ b/java/fury-core/src/main/java/org/apache/fury/config/Config.java @@ -33,6 +33,7 @@ /** Config for fury, all {@link Fury} related config can be found here. */ @SuppressWarnings({"rawtypes"}) public class Config implements Serializable { + private final String name; private final Language language; private final boolean trackingRef; private final boolean basicTypesRefIgnored; @@ -61,6 +62,7 @@ public class Config implements Serializable { private final boolean deserializeNonexistentEnumValueAsNull; public Config(FuryBuilder builder) { + name = builder.name; language = builder.language; trackingRef = builder.trackingRef; basicTypesRefIgnored = !trackingRef || builder.basicTypesRefIgnored; @@ -93,6 +95,11 @@ public Config(FuryBuilder builder) { deserializeNonexistentEnumValueAsNull = builder.deserializeNonexistentEnumValueAsNull; } + /** Returns the name for Fury serialization. */ + public String getName() { + return name; + } + public Language getLanguage() { return language; } @@ -257,7 +264,8 @@ public boolean equals(Object o) { return false; } Config config = (Config) o; - return trackingRef == config.trackingRef + return name == config.name + && trackingRef == config.trackingRef && basicTypesRefIgnored == config.basicTypesRefIgnored && stringRefIgnored == config.stringRefIgnored && timeRefIgnored == config.timeRefIgnored @@ -286,6 +294,7 @@ public boolean equals(Object o) { @Override public int hashCode() { return Objects.hash( + name, language, trackingRef, basicTypesRefIgnored, diff --git a/java/fury-core/src/main/java/org/apache/fury/config/FuryBuilder.java b/java/fury-core/src/main/java/org/apache/fury/config/FuryBuilder.java index ebd9fb8bf7..1210c7515d 100644 --- a/java/fury-core/src/main/java/org/apache/fury/config/FuryBuilder.java +++ b/java/fury-core/src/main/java/org/apache/fury/config/FuryBuilder.java @@ -56,6 +56,7 @@ public final class FuryBuilder { ENABLE_CLASS_REGISTRATION_FORCIBLY = "true".equals(flagValue) || "1".equals(flagValue); } + String name; boolean checkClassVersion = false; Language language = Language.JAVA; boolean trackingRef = false; @@ -318,6 +319,12 @@ public FuryBuilder withScalaOptimizationEnabled(boolean enableScalaOptimization) return this; } + /** Set name for Fury serialization. */ + public FuryBuilder withName(String name) { + this.name = name; + return this; + } + private void finish() { if (classLoader == null) { classLoader = Thread.currentThread().getContextClassLoader(); From 8c4e7e0870cf0ef51c6913261f9c637f20e36513 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 13:40:11 +0800 Subject: [PATCH 22/28] refine graalvm tests --- .../org/apache/fury/graalvm/ProxyExample.java | 10 +++++++++- .../apache/fury/graalvm/record/RecordExample.java | 9 ++++++++- .../fury/graalvm/record/RecordExample2.java | 15 +++++++++++++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ProxyExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ProxyExample.java index 43288ae8d1..a3a48248c3 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ProxyExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ProxyExample.java @@ -39,13 +39,18 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl static Fury fury; static { - fury = + fury = createFury(); + } + + private static Fury createFury() { + Fury fury = Fury.builder() .withName(ProxyExample.class.getName()) .requireClassRegistration(true) .build(); // register and generate serializer code. fury.register(TestInvocationHandler.class, true); + return fury; } public static void main(String[] args) { @@ -55,6 +60,9 @@ public static void main(String[] args) { fury.getClassLoader(), new Class[] {Function.class}, new TestInvocationHandler()); Function deserializedFunction = (Function) fury.deserialize(fury.serialize(function)); Preconditions.checkArgument(deserializedFunction.apply(null).equals(1)); + fury = createFury(); + deserializedFunction = (Function) fury.deserialize(fury.serialize(function)); + Preconditions.checkArgument(deserializedFunction.apply(null).equals(1)); System.out.println("Proxy tests pass"); } } diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java index 8c0347e2f7..27c8ca4f4a 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java @@ -30,13 +30,18 @@ public record Record(int f1, String f2, List f3, Map f4) { static Fury fury; static { - fury = + fury = createFury(); + } + + private static Fury createFury() { + Fury fury = Fury.builder() .withName(RecordExample.class.getName()) .requireClassRegistration(true) .build(); // register and generate serializer code. fury.register(Record.class, true); + return fury; } static void test(Fury fury) { @@ -49,6 +54,8 @@ static void test(Fury fury) { } public static void main(String[] args) { + test(fury); + fury = createFury(); test(fury); System.out.println("RecordExample succeed"); } diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java index 5f0f66d1db..9fb7a9cd48 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java @@ -30,7 +30,11 @@ private record Record(int f1, String f2, List f3, Map f4) static Fury fury; static { - fury = + fury = createFury(); + } + + private static Fury createFury() { + Fury fury = Fury.builder() .withName(RecordExample2.class.getName()) .requireClassRegistration(true) @@ -38,9 +42,10 @@ private record Record(int f1, String f2, List f3, Map f4) // register and generate serializer code. fury.register(Record.class, true); fury.register(Foo.class, true); + return fury; } - public static void main(String[] args) { + public static void test(Fury fury) { Record record = new Record(10, "abc", List.of("str1", "str2"), Map.of("k1", 10L, "k2", 20L)); byte[] bytes = fury.serialize(record); Object o = fury.deserialize(bytes); @@ -48,6 +53,12 @@ public static void main(String[] args) { Foo foo = new Foo(10, "abc", List.of("str1", "str2"), Map.of("k1", 10L, "k2", 20L)); Object o2 = fury.deserialize(fury.serialize(foo)); Preconditions.checkArgument(foo.equals(o2)); + } + + public static void main(String[] args) { + test(fury); + fury = createFury(); + test(fury); System.out.println("RecordExample2 succeed"); } } From 2a791f10cdbaa1ab6c9c3b7c946a02e28d2d4f7f Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 13:41:55 +0800 Subject: [PATCH 23/28] revert debug ci --- .github/workflows/ci.yml | 203 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 196 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1f1827c73..cec90a08d6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,23 +39,212 @@ on: types: ["opened", "reopened", "synchronize"] jobs: - graalvm: - name: GraalVM CI + java: + name: Java CI runs-on: ubuntu-latest + env: + MY_VAR: "PATH" strategy: matrix: - java-version: ["17", "21", "22"] + java-version: ["8", "11", "17", "21"] steps: - uses: actions/checkout@v4 - - uses: graalvm/setup-graalvm@v1 + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java-version }} + distribution: "temurin" + - name: Install bazel + run: ./ci/run_ci.sh install_bazel + - name: Install python + run: ./ci/run_ci.sh install_python + - name: Install pyfury + run: ./ci/run_ci.sh install_pyfury + - name: Run CI with Maven + run: ./ci/run_ci.sh java${{ matrix.java-version }} + openj9: + name: Openj9 Java CI + runs-on: ubuntu-latest + env: + MY_VAR: "PATH" + strategy: + matrix: + # String in openj9 1.8 share byte array by offset, fury doesn't allow it. + java-version: ["21"] + steps: + - uses: actions/checkout@v4 + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v4 with: java-version: ${{ matrix.java-version }} + distribution: "adopt-openj9" + - name: Install bazel + run: ./ci/run_ci.sh install_bazel + - name: Install python + run: ./ci/run_ci.sh install_python + - name: Install pyfury + run: ./ci/run_ci.sh install_pyfury + - name: Run CI with Maven + run: ./ci/run_ci.sh java${{ matrix.java-version }} + graalvm: + name: GraalVM CI + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: graalvm/setup-graalvm@v1 + with: + java-version: "21" distribution: "graalvm" github-token: ${{ secrets.GITHUB_TOKEN }} native-image-job-reports: "true" - - uses: actions/checkout@v4 - - name: Setup tmate session - uses: mxschmitt/action-tmate@v3 - name: Build native image and run run: ./ci/run_ci.sh graalvm_test + scala: + name: Scala CI + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up JDK8 + uses: actions/setup-java@v4 + with: + java-version: 8 + distribution: "temurin" + - name: Install fury java + run: cd java && mvn -T10 --no-transfer-progress clean install -DskipTests && cd - + - name: Test + run: | + # Avoid sbt download jackson-databind error + rm -rf /home/runner/.m2/repository/com/fasterxml/jackson/ + cd scala && sbt +test && cd - + + integration_tests: + name: Integration Tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up JDK8 + uses: actions/setup-java@v4 + with: + java-version: 8 + distribution: "temurin" + - name: Run CI + run: ./ci/run_ci.sh integration_tests + + javascript: + name: JavaScript CI + strategy: + matrix: + node-version: [14.x, 16.x, 18.x, 20.x] + os: [ubuntu-latest, macos-13, windows-2022] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + - name: Upgrade npm + run: npm install -g npm@8 + # node-gyp needs to use python and relies on the distutils module. + # The distutils module has been removed starting from python 3.12 + # (see https://docs.python.org/3.10/library/distutils.html). Some + # OS (such as macos -latest) uses python3.12 by default, so python 3.8 + # is used here to avoid this problem. + - name: Set up Python3.8 + uses: actions/setup-python@v5 + with: + python-version: 3.8 + - name: Run CI with NodeJS + run: python ./ci/run_ci.py javascript + + rust: + name: Rust CI + strategy: + matrix: + os: [ubuntu-latest, macos-12, macos-14] # macos-12: x86, macos-14: arm64 + runs-on: ${{ matrix.os }} + timeout-minutes: 45 + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + - name: Run Rust CI + run: python ./ci/run_ci.py rust + + cpp: + name: C++ CI + strategy: + matrix: + os: [ubuntu-latest, macos-12, macos-14] # macos-12: x86, macos-14: arm64 + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + - name: Run C++ CI with Bazel + run: python ./ci/run_ci.py cpp + python: + name: Python CI + # Fix python 3.6 install issue, see + # https://github.com/rwth-i6/returnn/commit/38ecab17d781c4b74db6a174c8097187380b4ddc + runs-on: ubuntu-20.04 + strategy: + matrix: + python-version: [3.7, 3.12] + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install bazel + run: ./ci/run_ci.sh install_bazel + - name: Run Python CI + run: ./ci/run_ci.sh python + + go: + name: Golang CI + runs-on: ubuntu-latest + strategy: + matrix: + go-version: ["1.13", "1.18"] + steps: + - uses: actions/checkout@v4 + - name: Setup Go ${{ matrix.go-version }} + uses: actions/setup-go@v4 + with: + go-version: ${{ matrix.go-version }} + - name: Display Go version + run: go version + - name: Install bazel + run: ./ci/run_ci.sh install_bazel + - name: Install python + run: ./ci/run_ci.sh install_python + - name: Install pyfury + run: ./ci/run_ci.sh install_pyfury + - name: Run Golang CI + run: ./ci/run_ci.sh go + + lint: + name: Code Style Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v4 + with: + java-version: 21 + distribution: "oracle" + - name: Check License Header + uses: korandoru/hawkeye@v3 + - name: Set up Python 3.8 + uses: actions/setup-python@v5 + with: + python-version: 3.8 + - name: Check code style + run: ./ci/run_ci.sh format From 2a2813c2ba52a4f4e9f211b82c9b6352f4c1bff9 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 13:47:47 +0800 Subject: [PATCH 24/28] fix ci --- .github/workflows/ci.yml | 5 ++++- .../org.apache.fury/fury-core/native-image.properties | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cec90a08d6..002b66e2c0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -89,11 +89,14 @@ jobs: graalvm: name: GraalVM CI runs-on: ubuntu-latest + strategy: + matrix: + java-version: ["17", "21", "22"] steps: - uses: actions/checkout@v4 - uses: graalvm/setup-graalvm@v1 with: - java-version: "21" + java-version: ${{ matrix.java-version }} distribution: "graalvm" github-token: ${{ secrets.GITHUB_TOKEN }} native-image-job-reports: "true" diff --git a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties index ab123ebc19..7b991287f9 100644 --- a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties +++ b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties @@ -427,6 +427,12 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ org.apache.fury.util.unsafe._Lookup,\ org.apache.fury.codegen.JaninoUtils$CodeStats,\ org.apache.fury.shaded.org.codehaus.commons.compiler.Location,\ + org.apache.fury.shaded.org.codehaus.commons.compiler.util.iterator.Iterables,\ + org.apache.fury.shaded.org.codehaus.commons.compiler.util.iterator.Iterables$1,\ + org.apache.fury.shaded.org.codehaus.commons.compiler.util.iterator.Iterables$2,\ + org.apache.fury.shaded.org.codehaus.commons.compiler.util.iterator.Iterables$3,\ + org.apache.fury.shaded.org.codehaus.commons.compiler.util.iterator.Iterables$4,\ + org.apache.fury.shaded.org.codehaus.commons.compiler.util.iterator.Iterables$5,\ org.apache.fury.shaded.org.codehaus.janino.IType,\ org.apache.fury.shaded.org.codehaus.janino.Access,\ org.apache.fury.shaded.org.codehaus.janino.ClassFileIClass,\ From ebe456a88a918d4909d20bbf219c326628ee7cc3 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 13:49:24 +0800 Subject: [PATCH 25/28] fix header --- .../org.apache.fury/graalvm_tests/native-image.properties | 1 + .../org.apache.fury/fury-core/native-image.properties | 1 + 2 files changed, 2 insertions(+) diff --git a/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties b/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties index 748540f018..c71c593f3a 100644 --- a/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties +++ b/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties @@ -14,6 +14,7 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. + # https://www.graalvm.org/latest/reference-manual/native-image/dynamic-features/Reflection/#unsafe-accesses : # The unsafe offset get on build time may be different from runtime Args=-H:+ReportExceptionStackTraces \ diff --git a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties index 7b991287f9..5f3338f5b8 100644 --- a/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties +++ b/java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties @@ -14,6 +14,7 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. + # https://www.graalvm.org/latest/reference-manual/native-image/dynamic-features/Reflection/#unsafe-accesses : # The unsafe offset get on build time may be different from runtime Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\ From 5dbe324362e7d67626b9686a886aaf5a0333f70b Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 13:55:49 +0800 Subject: [PATCH 26/28] debug ci --- .github/workflows/ci.yml | 198 +-------------------------------------- 1 file changed, 3 insertions(+), 195 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 002b66e2c0..d1f1827c73 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,53 +39,6 @@ on: types: ["opened", "reopened", "synchronize"] jobs: - java: - name: Java CI - runs-on: ubuntu-latest - env: - MY_VAR: "PATH" - strategy: - matrix: - java-version: ["8", "11", "17", "21"] - steps: - - uses: actions/checkout@v4 - - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v4 - with: - java-version: ${{ matrix.java-version }} - distribution: "temurin" - - name: Install bazel - run: ./ci/run_ci.sh install_bazel - - name: Install python - run: ./ci/run_ci.sh install_python - - name: Install pyfury - run: ./ci/run_ci.sh install_pyfury - - name: Run CI with Maven - run: ./ci/run_ci.sh java${{ matrix.java-version }} - openj9: - name: Openj9 Java CI - runs-on: ubuntu-latest - env: - MY_VAR: "PATH" - strategy: - matrix: - # String in openj9 1.8 share byte array by offset, fury doesn't allow it. - java-version: ["21"] - steps: - - uses: actions/checkout@v4 - - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v4 - with: - java-version: ${{ matrix.java-version }} - distribution: "adopt-openj9" - - name: Install bazel - run: ./ci/run_ci.sh install_bazel - - name: Install python - run: ./ci/run_ci.sh install_python - - name: Install pyfury - run: ./ci/run_ci.sh install_pyfury - - name: Run CI with Maven - run: ./ci/run_ci.sh java${{ matrix.java-version }} graalvm: name: GraalVM CI runs-on: ubuntu-latest @@ -100,154 +53,9 @@ jobs: distribution: "graalvm" github-token: ${{ secrets.GITHUB_TOKEN }} native-image-job-reports: "true" + - uses: actions/checkout@v4 + - name: Setup tmate session + uses: mxschmitt/action-tmate@v3 - name: Build native image and run run: ./ci/run_ci.sh graalvm_test - scala: - name: Scala CI - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Set up JDK8 - uses: actions/setup-java@v4 - with: - java-version: 8 - distribution: "temurin" - - name: Install fury java - run: cd java && mvn -T10 --no-transfer-progress clean install -DskipTests && cd - - - name: Test - run: | - # Avoid sbt download jackson-databind error - rm -rf /home/runner/.m2/repository/com/fasterxml/jackson/ - cd scala && sbt +test && cd - - - integration_tests: - name: Integration Tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Set up JDK8 - uses: actions/setup-java@v4 - with: - java-version: 8 - distribution: "temurin" - - name: Run CI - run: ./ci/run_ci.sh integration_tests - - javascript: - name: JavaScript CI - strategy: - matrix: - node-version: [14.x, 16.x, 18.x, 20.x] - os: [ubuntu-latest, macos-13, windows-2022] - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - name: Upgrade npm - run: npm install -g npm@8 - # node-gyp needs to use python and relies on the distutils module. - # The distutils module has been removed starting from python 3.12 - # (see https://docs.python.org/3.10/library/distutils.html). Some - # OS (such as macos -latest) uses python3.12 by default, so python 3.8 - # is used here to avoid this problem. - - name: Set up Python3.8 - uses: actions/setup-python@v5 - with: - python-version: 3.8 - - name: Run CI with NodeJS - run: python ./ci/run_ci.py javascript - - rust: - name: Rust CI - strategy: - matrix: - os: [ubuntu-latest, macos-12, macos-14] # macos-12: x86, macos-14: arm64 - runs-on: ${{ matrix.os }} - timeout-minutes: 45 - steps: - - uses: actions/checkout@v4 - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: 3.11 - - name: Run Rust CI - run: python ./ci/run_ci.py rust - - cpp: - name: C++ CI - strategy: - matrix: - os: [ubuntu-latest, macos-12, macos-14] # macos-12: x86, macos-14: arm64 - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: 3.11 - - name: Run C++ CI with Bazel - run: python ./ci/run_ci.py cpp - python: - name: Python CI - # Fix python 3.6 install issue, see - # https://github.com/rwth-i6/returnn/commit/38ecab17d781c4b74db6a174c8097187380b4ddc - runs-on: ubuntu-20.04 - strategy: - matrix: - python-version: [3.7, 3.12] - steps: - - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Install bazel - run: ./ci/run_ci.sh install_bazel - - name: Run Python CI - run: ./ci/run_ci.sh python - - go: - name: Golang CI - runs-on: ubuntu-latest - strategy: - matrix: - go-version: ["1.13", "1.18"] - steps: - - uses: actions/checkout@v4 - - name: Setup Go ${{ matrix.go-version }} - uses: actions/setup-go@v4 - with: - go-version: ${{ matrix.go-version }} - - name: Display Go version - run: go version - - name: Install bazel - run: ./ci/run_ci.sh install_bazel - - name: Install python - run: ./ci/run_ci.sh install_python - - name: Install pyfury - run: ./ci/run_ci.sh install_pyfury - - name: Run Golang CI - run: ./ci/run_ci.sh go - - lint: - name: Code Style Check - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v4 - with: - java-version: 21 - distribution: "oracle" - - name: Check License Header - uses: korandoru/hawkeye@v3 - - name: Set up Python 3.8 - uses: actions/setup-python@v5 - with: - python-version: 3.8 - - name: Check code style - run: ./ci/run_ci.sh format From bc8e36c5b25e3837589cb89a548768c657b0c43c Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 14:04:09 +0800 Subject: [PATCH 27/28] fix graalvm test --- .github/workflows/ci.yml | 198 +++++++++++++++++- .../fury/graalvm/CompatibleExample.java | 2 + .../fury/graalvm/ScopedCompatibleExample.java | 4 +- .../fury/graalvm/record/RecordExample.java | 2 + .../fury/graalvm/record/RecordExample2.java | 2 + .../graalvm_tests/native-image.properties | 2 + 6 files changed, 206 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1f1827c73..002b66e2c0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,6 +39,53 @@ on: types: ["opened", "reopened", "synchronize"] jobs: + java: + name: Java CI + runs-on: ubuntu-latest + env: + MY_VAR: "PATH" + strategy: + matrix: + java-version: ["8", "11", "17", "21"] + steps: + - uses: actions/checkout@v4 + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java-version }} + distribution: "temurin" + - name: Install bazel + run: ./ci/run_ci.sh install_bazel + - name: Install python + run: ./ci/run_ci.sh install_python + - name: Install pyfury + run: ./ci/run_ci.sh install_pyfury + - name: Run CI with Maven + run: ./ci/run_ci.sh java${{ matrix.java-version }} + openj9: + name: Openj9 Java CI + runs-on: ubuntu-latest + env: + MY_VAR: "PATH" + strategy: + matrix: + # String in openj9 1.8 share byte array by offset, fury doesn't allow it. + java-version: ["21"] + steps: + - uses: actions/checkout@v4 + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java-version }} + distribution: "adopt-openj9" + - name: Install bazel + run: ./ci/run_ci.sh install_bazel + - name: Install python + run: ./ci/run_ci.sh install_python + - name: Install pyfury + run: ./ci/run_ci.sh install_pyfury + - name: Run CI with Maven + run: ./ci/run_ci.sh java${{ matrix.java-version }} graalvm: name: GraalVM CI runs-on: ubuntu-latest @@ -53,9 +100,154 @@ jobs: distribution: "graalvm" github-token: ${{ secrets.GITHUB_TOKEN }} native-image-job-reports: "true" - - uses: actions/checkout@v4 - - name: Setup tmate session - uses: mxschmitt/action-tmate@v3 - name: Build native image and run run: ./ci/run_ci.sh graalvm_test + scala: + name: Scala CI + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up JDK8 + uses: actions/setup-java@v4 + with: + java-version: 8 + distribution: "temurin" + - name: Install fury java + run: cd java && mvn -T10 --no-transfer-progress clean install -DskipTests && cd - + - name: Test + run: | + # Avoid sbt download jackson-databind error + rm -rf /home/runner/.m2/repository/com/fasterxml/jackson/ + cd scala && sbt +test && cd - + + integration_tests: + name: Integration Tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up JDK8 + uses: actions/setup-java@v4 + with: + java-version: 8 + distribution: "temurin" + - name: Run CI + run: ./ci/run_ci.sh integration_tests + + javascript: + name: JavaScript CI + strategy: + matrix: + node-version: [14.x, 16.x, 18.x, 20.x] + os: [ubuntu-latest, macos-13, windows-2022] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + - name: Upgrade npm + run: npm install -g npm@8 + # node-gyp needs to use python and relies on the distutils module. + # The distutils module has been removed starting from python 3.12 + # (see https://docs.python.org/3.10/library/distutils.html). Some + # OS (such as macos -latest) uses python3.12 by default, so python 3.8 + # is used here to avoid this problem. + - name: Set up Python3.8 + uses: actions/setup-python@v5 + with: + python-version: 3.8 + - name: Run CI with NodeJS + run: python ./ci/run_ci.py javascript + + rust: + name: Rust CI + strategy: + matrix: + os: [ubuntu-latest, macos-12, macos-14] # macos-12: x86, macos-14: arm64 + runs-on: ${{ matrix.os }} + timeout-minutes: 45 + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + - name: Run Rust CI + run: python ./ci/run_ci.py rust + + cpp: + name: C++ CI + strategy: + matrix: + os: [ubuntu-latest, macos-12, macos-14] # macos-12: x86, macos-14: arm64 + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + - name: Run C++ CI with Bazel + run: python ./ci/run_ci.py cpp + python: + name: Python CI + # Fix python 3.6 install issue, see + # https://github.com/rwth-i6/returnn/commit/38ecab17d781c4b74db6a174c8097187380b4ddc + runs-on: ubuntu-20.04 + strategy: + matrix: + python-version: [3.7, 3.12] + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install bazel + run: ./ci/run_ci.sh install_bazel + - name: Run Python CI + run: ./ci/run_ci.sh python + + go: + name: Golang CI + runs-on: ubuntu-latest + strategy: + matrix: + go-version: ["1.13", "1.18"] + steps: + - uses: actions/checkout@v4 + - name: Setup Go ${{ matrix.go-version }} + uses: actions/setup-go@v4 + with: + go-version: ${{ matrix.go-version }} + - name: Display Go version + run: go version + - name: Install bazel + run: ./ci/run_ci.sh install_bazel + - name: Install python + run: ./ci/run_ci.sh install_python + - name: Install pyfury + run: ./ci/run_ci.sh install_pyfury + - name: Run Golang CI + run: ./ci/run_ci.sh go + + lint: + name: Code Style Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v4 + with: + java-version: 21 + distribution: "oracle" + - name: Check License Header + uses: korandoru/hawkeye@v3 + - name: Set up Python 3.8 + uses: actions/setup-python@v5 + with: + python-version: 3.8 + - name: Check code style + run: ./ci/run_ci.sh format diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java index 9fb2ac742c..37c92fe6d3 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/CompatibleExample.java @@ -42,7 +42,9 @@ private static Fury createFury() { } public static void main(String[] args) { + System.out.println("CompatibleExample started"); Example.test(fury); + System.out.println("CompatibleExample succeed 1/2"); // Test new created Fury at runtime fury = createFury(); Example.test(fury); diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ScopedCompatibleExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ScopedCompatibleExample.java index af2e80fae8..1085da0ce2 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ScopedCompatibleExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/ScopedCompatibleExample.java @@ -43,9 +43,11 @@ private static Fury createFury() { } public static void main(String[] args) { + System.out.println("ScopedCompatibleExample started"); Example.test(fury); + System.out.println("ScopedCompatibleExample succeed 1/2"); fury = createFury(); Example.test(fury); - System.out.println("CompatibleExample succeed"); + System.out.println("ScopedCompatibleExample succeed"); } } diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java index 27c8ca4f4a..90ece86b53 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample.java @@ -54,7 +54,9 @@ static void test(Fury fury) { } public static void main(String[] args) { + System.out.println("RecordExample started"); test(fury); + System.out.println("RecordExample succeed 1/2"); fury = createFury(); test(fury); System.out.println("RecordExample succeed"); diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java index 9fb7a9cd48..d6f5dd10ce 100644 --- a/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java +++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fury/graalvm/record/RecordExample2.java @@ -56,7 +56,9 @@ public static void test(Fury fury) { } public static void main(String[] args) { + System.out.println("RecordExample started"); test(fury); + System.out.println("RecordExample succeed 1/2"); fury = createFury(); test(fury); System.out.println("RecordExample2 succeed"); diff --git a/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties b/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties index c71c593f3a..5af8a7a624 100644 --- a/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties +++ b/integration_tests/graalvm_tests/src/main/resources/META-INF/native-image/org.apache.fury/graalvm_tests/native-image.properties @@ -20,10 +20,12 @@ Args=-H:+ReportExceptionStackTraces \ --initialize-at-build-time=org.apache.fury.graalvm.Example,\ org.apache.fury.graalvm.CompatibleExample,\ + org.apache.fury.graalvm.ScopedCompatibleExample,\ org.apache.fury.graalvm.record.RecordExample,\ org.apache.fury.graalvm.record.CompatibleRecordExample,\ org.apache.fury.graalvm.record.RecordExample2,\ org.apache.fury.graalvm.ThreadSafeExample,\ org.apache.fury.graalvm.CompatibleThreadSafeExample,\ org.apache.fury.graalvm.ProxyExample,\ + org.apache.fury.graalvm.CollectionExample,\ org.apache.fury.graalvm.Benchmark From fe14a85dcf3a794d8309bdd58ea8e1c949db5b32 Mon Sep 17 00:00:00 2001 From: chaokunyang Date: Mon, 23 Sep 2024 14:16:09 +0800 Subject: [PATCH 28/28] fix makeGetterFunction cache --- .../main/java/org/apache/fury/resolver/ClassResolver.java | 2 +- .../main/java/org/apache/fury/util/function/Functions.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java index 1a3d450730..1fba168007 100644 --- a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java +++ b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java @@ -419,7 +419,7 @@ public void register(Class cls, boolean createSerializer) { register(cls); if (createSerializer) { ClassInfo classInfo = getClassInfo(cls); - ClassInfo deserializationClassInfo = null; + ClassInfo deserializationClassInfo; if (metaContextShareEnabled && needToWriteClassDef(classInfo.serializer)) { ClassDef classDef = classInfo.classDef; if (classDef == null) { diff --git a/java/fury-core/src/main/java/org/apache/fury/util/function/Functions.java b/java/fury-core/src/main/java/org/apache/fury/util/function/Functions.java index 00ad66d053..55ca8395ad 100644 --- a/java/fury-core/src/main/java/org/apache/fury/util/function/Functions.java +++ b/java/fury-core/src/main/java/org/apache/fury/util/function/Functions.java @@ -28,9 +28,11 @@ import java.util.List; import java.util.Map; import java.util.WeakHashMap; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; import org.apache.fury.collection.Tuple2; import org.apache.fury.reflect.ReflectionUtils; +import org.apache.fury.util.GraalvmSupport; import org.apache.fury.util.Preconditions; import org.apache.fury.util.unsafe._JDKAccess; @@ -75,7 +77,8 @@ public static Object makeGetterFunction(Class cls, String methodName) { } } - private static final Map, Object> map = new WeakHashMap(); + private static final Map>, Object> map = + GraalvmSupport.isGraalBuildtime() ? new ConcurrentHashMap<>() : new WeakHashMap<>(); public static Object makeGetterFunction(Method method) { return map.computeIfAbsent(