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

org.snapscript.core.platform.PlatformBuilder Maven / Gradle / Ivy

package org.snapscript.core.platform;

import java.lang.reflect.Constructor;
import java.util.concurrent.atomic.AtomicReference;

import org.snapscript.core.convert.proxy.ProxyWrapper;
import org.snapscript.core.function.index.FunctionIndexer;
import org.snapscript.core.stack.ThreadStack;
import org.snapscript.core.type.TypeExtractor;

public class PlatformBuilder {
   
   private final AtomicReference reference;
   private final PlatformClassLoader loader;
   private final FunctionIndexer resolver;
   private final ProxyWrapper wrapper;
   private final Platform partial;
   
   public PlatformBuilder(TypeExtractor extractor, ProxyWrapper wrapper, ThreadStack stack) {
      this.resolver = new FunctionIndexer(extractor, stack);
      this.loader = new PlatformClassLoader();
      this.partial = new PartialPlatform();
      this.reference = new AtomicReference();
      this.wrapper = wrapper;
   }

   public synchronized Platform create() {
      Platform platform = reference.get(); // make sure only one created
      
      if(platform == null) {
         try {
            Constructor constructor = loader.loadConstructor();
            Object instance = constructor.newInstance(resolver, wrapper);
            
            reference.set((Platform)instance);
         }catch(Exception e) {
            reference.set(partial); 
         }
      }
      return reference.get();
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy