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

org.snapscript.core.convert.proxy.ScopeProxyHandler Maven / Gradle / Ivy

package org.snapscript.core.convert.proxy;

import java.lang.reflect.Method;

import org.snapscript.core.error.InternalStateException;
import org.snapscript.core.function.resolve.FunctionCall;
import org.snapscript.core.function.resolve.FunctionResolver;
import org.snapscript.core.scope.Scope;

public class ScopeProxyHandler implements ProxyHandler {
   
   private final ProxyArgumentExtractor extractor;
   private final FunctionResolver resolver;
   private final ProxyWrapper wrapper;
   private final Scope scope;
   
   public ScopeProxyHandler(ProxyWrapper wrapper, FunctionResolver resolver, Scope scope) {
      this.extractor = new ProxyArgumentExtractor(wrapper);
      this.resolver = resolver;
      this.wrapper = wrapper;
      this.scope = scope;
   }
   
   @Override
   public Object invoke(Object proxy, Method method, Object[] arguments) throws Throwable {
      String name = method.getName();
      Object[] convert = extractor.extract(arguments);
      FunctionCall call = resolver.resolveInstance(scope, scope, name, convert); // here arguments can be null!!!
      
      if(call == null) {
         throw new InternalStateException("Method '" + name + "' not found");
      }
      Object result = call.invoke(scope, scope, convert);
      
      if(result != null) {
         return wrapper.toProxy(result);
      }
      return null;
   }
   
   @Override
   public Scope extract() {
      return scope;
   }   
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy