All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.qt.internal.RetroHelper Maven / Gradle / Ivy

There is a newer version: 6.8.2
Show newest version
/****************************************************************************
**
** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved.
**
** This file is part of Qt Jambi.
**
** ** $BEGIN_LICENSE$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
** $END_LICENSE$
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/

package io.qt.internal;

import java.lang.reflect.AnnotatedType;
import java.net.MalformedURLException;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import java.util.function.IntFunction;
import java.util.function.Supplier;

final class RetroHelper {
	private RetroHelper() {throw new RuntimeException();}
    private static final StackWalker stackWalker = StackWalker.getInstance(java.util.Collections.singleton(StackWalker.Option.RETAIN_CLASS_REFERENCE));
    private static final Supplier> callerClassProvider = stackWalker::getCallerClass;
    private static final IntFunction callerClassProvider2 = number->{
    	if(number>0) {
	        Optional stackFrame = stackWalker.walk(stream->stream.limit(number).skip(number-1).findFirst());
	        if(stackFrame.isPresent()) {
	            return new io.qt.InternalAccess.CallerContext(
	                stackFrame.get().getDeclaringClass(),
	                stackFrame.get().getMethodName(), 
	                stackFrame.get().getLineNumber());
	        }
        }
        return null;
    };
    
    static AnnotatedType getAnnotatedOwnerType(AnnotatedType actualType) {
        return actualType.getAnnotatedOwnerType();
    }
    
    static Supplier> callerClassProvider(){
        return callerClassProvider;
    }
    
    static IntFunction classAccessChecker(){
        return callerClassProvider2;
    }
    
    static String processName() {
    	return ""+ProcessHandle.current().pid();
    }
    
    static Set classLoaders(){
    	Set result = new HashSet<>();
    	result.add(Thread.currentThread().getContextClassLoader());
    	result.add(RetroHelper.class.getClassLoader());
    	result.add(ClassLoader.getSystemClassLoader());
    	result.add(ClassLoader.getPlatformClassLoader());
    	return result;
    }
    
    static void findModules(Set modules) throws MalformedURLException{
    	for(Module module : ModuleLayer.boot().modules()) {
    		modules.add(new java.net.URL("jrt:/"+module.getName()+"/"));
    	}
    }
    
    static Thread newShutdownThread(Runnable r, String name) {
    	return new Thread(null, r, name, 0, false);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy