/*
 * JBoss, Home of Professional Open Source.
 * Copyright 2018 Red Hat, Inc., and individual contributors
 * as indicated by the @author tags.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jboss.threads;

import javax.management.ObjectInstance;

import com.oracle.svm.core.annotate.Alias;
import com.oracle.svm.core.annotate.Substitute;
import com.oracle.svm.core.annotate.TargetClass;

final class Substitutions {
    @TargetClass(ThreadLocalResettingRunnable.Resetter.class)
    @Substitute
    static final class Target_ThreadLocalResettingRunnable_Resetter {
        @Substitute
        static void run() {
            Target_java_lang_Thread thread = Target_java_lang_Thread.class.cast(Thread.currentThread());
            thread.threadLocals = null;
            thread.inheritableThreadLocals = null;
        }
    }

    @TargetClass(Thread.class)
    static final class Target_java_lang_Thread {
        @Alias
        Target_java_lang_ThreadLocal_ThreadLocalMap threadLocals;
        @Alias
        Target_java_lang_ThreadLocal_ThreadLocalMap inheritableThreadLocals;
    }

    @TargetClass(className = "java.lang.ThreadLocal$ThreadLocalMap")
    static final class Target_java_lang_ThreadLocal_ThreadLocalMap {
    }

    @TargetClass(EnhancedQueueExecutor.MBeanRegisterAction.class)
    static final class Target_EnhancedQueueExecutor_MBeanRegisterAction {

        @Substitute
        public ObjectInstance run() {
            return null;
        }
    }
}

@@ -774,51 +774,8 @@
 e;%0A%0A
-import com.oracle.svm.core.annotate.Alias;%0A
 impo
@@ -900,822 +900,8 @@
 s %7B%0A
-    @TargetClass(ThreadLocalResettingRunnable.Resetter.class)%0A    @Substitute%0A    static final class Target_ThreadLocalResettingRunnable_Resetter %7B%0A        @Substitute%0A        static void run() %7B%0A            Target_java_lang_Thread thread = Target_java_lang_Thread.class.cast(Thread.currentThread());%0A            thread.threadLocals = null;%0A            thread.inheritableThreadLocals = null;%0A        %7D%0A    %7D%0A%0A    @TargetClass(Thread.class)%0A    static final class Target_java_lang_Thread %7B%0A        @Alias%0A        Target_java_lang_ThreadLocal_ThreadLocalMap threadLocals;%0A        @Alias%0A        Target_java_lang_ThreadLocal_ThreadLocalMap inheritableThreadLocals;%0A    %7D%0A%0A    @TargetClass(className = %22java.lang.ThreadLocal$ThreadLocalMap%22)%0A    static final class Target_java_lang_ThreadLocal_ThreadLocalMap %7B%0A    %7D%0A%0A
     

Use Unsafe on GraalVM