private static ITypeManifold findJavascriptManifold( String fileExt ) { ITypeManifold tm = RuntimeManifoldHost.get().getSingleModule().getTypeManifolds().stream() .filter( e -> e.handlesFileExtension( fileExt ) ) .findFirst().orElse( null ); if( tm == null ) { throw new IllegalStateException( "Could not find type manifold for extension: " + fileExt ); } return tm; } }
public static void bootstrap() { get().bootstrap( Collections.emptyList(), Collections.emptyList() ); }
private ClassLoader findClassLoader( String host ) { int identityHash = Integer.parseInt( host ); ClassLoader loader = RuntimeManifoldHost.get().getActualClassLoader(); while( loader != null ) { if( System.identityHashCode( loader ) == identityHash ) { return loader; } loader = loader.getParent(); } throw new IllegalStateException( "Can't find ClassLoader with identity hash: " + identityHash ); }
Set<ITypeManifold> sps = RuntimeManifoldHost.get().getSingleModule().findTypeManifoldsFor( strType ); if( !sps.isEmpty() ) Pair<JavaFileObject, String> pair = RuntimeManifoldHost.get().getJavaParser().findJavaSource( strType, new DiagnosticCollector<>() ); if( pair != null )
private byte[] compileProxyClass( String source ) { long before = System.nanoTime(); try { DiagnosticCollector<JavaFileObject> errorHandler = new DiagnosticCollector<>(); StringJavaFileObject fileObj = new StringJavaFileObject( _javaFqn, source ); InMemoryClassJavaFileObject cls = RuntimeManifoldHost.get().getJavaParser().compile( fileObj, _javaFqn, Arrays.asList( "-source", "8", "-g", "-nowarn", "-Xlint:none", "-proc:none", "-parameters" ), errorHandler ); if( cls != null ) { return cls.getBytes(); } throw new JavaCompileIssuesException( _javaFqn, errorHandler ); } finally { PerfLogUtil.log( "compileProxyClass() " + _javaFqn, before ); } }
private static boolean hasCallHandlerFromExtension( Class rootClass ) { Boolean isCallHandler = ICALL_HANDLER_MAP.get( rootClass ); if( isCallHandler != null ) { return isCallHandler; } String fqn = rootClass.getCanonicalName(); BasicJavacTask javacTask = RuntimeManifoldHost.get().getJavaParser().getJavacTask(); Pair<Symbol.ClassSymbol, JCTree.JCCompilationUnit> classSymbol = ClassSymbols.instance( RuntimeManifoldHost.get().getSingleModule() ).getClassSymbol( javacTask, fqn ); Pair<Symbol.ClassSymbol, JCTree.JCCompilationUnit> callHandlerSymbol = ClassSymbols.instance( RuntimeManifoldHost.get().getSingleModule() ).getClassSymbol( javacTask, ICallHandler.class.getCanonicalName() ); if( Types.instance( javacTask.getContext() ).isAssignable( classSymbol.getFirst().asType(), callHandlerSymbol.getFirst().asType() ) ) { // Nominally implements ICallHandler isCallHandler = true; } else { // Structurally implements ICallHandler isCallHandler = hasCallMethod( javacTask, classSymbol.getFirst() ); } ICALL_HANDLER_MAP.put( rootClass, isCallHandler ); return isCallHandler; }
private byte[] compileJavaClass() { long before = System.nanoTime(); try { if( _javaSrcFile instanceof ISelfCompiledFile && ((ISelfCompiledFile)_javaSrcFile).isSelfCompile() ) { return ((ISelfCompiledFile)_javaSrcFile).compile(); } else { DiagnosticCollector<JavaFileObject> errorHandler = new DiagnosticCollector<>(); InMemoryClassJavaFileObject cls = RuntimeManifoldHost.get().getJavaParser().compile( _javaFqn, Arrays.asList( "-source", "8", "-g", "-nowarn", "-Xlint:none", "-proc:none", "-parameters" ), errorHandler ); if( cls != null ) { return cls.getBytes(); } throw new JavaCompileIssuesException( _javaFqn, errorHandler ); } } catch( Throwable t ) { t.printStackTrace(); throw t; } finally { PerfLogUtil.log( "compileJavaClass() " + _javaFqn, before ); } }
private static boolean hasCallHandlerFromExtension( Class rootClass ) { Boolean isCallHandler = ICALL_HANDLER_MAP.get( rootClass ); if( isCallHandler != null ) { return isCallHandler; } String fqn = rootClass.getCanonicalName(); BasicJavacTask javacTask = RuntimeManifoldHost.get().getJavaParser().getJavacTask(); Pair<Symbol.ClassSymbol, JCTree.JCCompilationUnit> classSymbol = ClassSymbols.instance( RuntimeManifoldHost.get().getSingleModule() ).getClassSymbol( javacTask, fqn ); Pair<Symbol.ClassSymbol, JCTree.JCCompilationUnit> callHandlerSymbol = ClassSymbols.instance( RuntimeManifoldHost.get().getSingleModule() ).getClassSymbol( javacTask, ICallHandler.class.getCanonicalName() ); if( Types.instance( javacTask.getContext() ).isAssignable( classSymbol.getFirst().asType(), callHandlerSymbol.getFirst().asType() ) ) { // Nominally implements ICallHandler isCallHandler = true; } else { // Structurally implements ICallHandler isCallHandler = hasCallMethod( javacTask, classSymbol.getFirst() ); } ICALL_HANDLER_MAP.put( rootClass, isCallHandler ); return isCallHandler; }
private static ITypeManifold findJavascriptManifold( String fileExt ) { ITypeManifold tm = RuntimeManifoldHost.get().getSingleModule().getTypeManifolds().stream() .filter( e -> e.handlesFileExtension( fileExt ) ) .findFirst().orElse( null ); if( tm == null ) { throw new IllegalStateException( "Could not find type manifold for extension: " + fileExt ); } return tm; } }
private static boolean canWrapChain() { return CAN_WRAP == null ? CAN_WRAP = canWrapChain( RuntimeManifoldHost.get().getActualClassLoader() ) : CAN_WRAP; }
private Symbol.ClassSymbol getRootClassSymbol() { if( _rootClassSymbol == null ) { ClassSymbols classSymbols = ClassSymbols.instance( RuntimeManifoldHost.get().getSingleModule() ); BasicJavacTask javacTask = classSymbols.getJavacTask_PlainFileMgr(); _rootClassSymbol = classSymbols.getClassSymbol( javacTask, _rootClass.getCanonicalName() ).getFirst(); } return _rootClassSymbol; }
public synchronized static boolean init() { if( _busy ) { return false; } _busy = true; try { if( addOurProtocolPackage() ) { RuntimeManifoldHost.bootstrap(); } ClassLoader loader = RuntimeManifoldHost.get().getActualClassLoader(); if( loader != null ) { setupLoaderChainWithManifoldUrl( loader ); return true; } return false; } finally { _busy = false; } }
private Symbol.ClassSymbol getRootClassSymbol() { if( _rootClassSymbol == null ) { ClassSymbols classSymbols = ClassSymbols.instance( RuntimeManifoldHost.get().getSingleModule() ); BasicJavacTask javacTask = classSymbols.getJavacTask_PlainFileMgr(); _rootClassSymbol = classSymbols.getClassSymbol( javacTask, _rootClass.getCanonicalName() ).getFirst(); } return _rootClassSymbol; }