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

org.snapscript.core.function.InvocationFunction Maven / Gradle / Ivy

package org.snapscript.core.function;

import static java.util.Collections.EMPTY_LIST;
import static org.snapscript.core.ModifierType.FUNCTION;

import java.util.ArrayList;
import java.util.List;

import org.snapscript.core.annotation.Annotation;
import org.snapscript.core.constraint.Constraint;
import org.snapscript.core.convert.proxy.FunctionProxy;
import org.snapscript.core.type.Type;

public class InvocationFunction implements Function {

   private final FunctionDescription description;
   private final List annotations;
   private final Invocation invocation;
   private final Constraint constraint;
   private final FunctionProxy proxy;
   private final Signature signature;
   private final Type source;
   private final String name;
   private final int modifiers;

   public InvocationFunction(Signature signature, Invocation invocation, Type source, Constraint constraint, String name){
      this(signature, invocation, source, constraint, name, 0);
   }
   
   public InvocationFunction(Signature signature, Invocation invocation, Type source, Constraint constraint, String name, int modifiers){
      this(signature, invocation, source, constraint, name, modifiers, 0);
   }
   
   public InvocationFunction(Signature signature, Invocation invocation, Type source, Constraint constraint, String name, int modifiers, int start){
      this.description = new FunctionDescription(signature, source, name, start);
      this.annotations = new ArrayList();
      this.proxy = new FunctionProxy(this);
      this.constraint = constraint;
      this.invocation = invocation;
      this.signature = signature;
      this.modifiers = modifiers;
      this.source = source;
      this.name = name;
   }
   
   @Override
   public int getModifiers(){
      return modifiers | FUNCTION.mask;
   }
   
   @Override
   public Type getSource() {
      return source;
   }
   
   @Override
   public Type getHandle() {
      return signature.getDefinition();
   }
   
   @Override
   public Object getProxy(Class type) {
      return proxy.getProxy(type);
   }
   
   @Override
   public Object getProxy() {
      return proxy.getProxy();
   }
   
   @Override
   public Constraint getConstraint() {
      return constraint;
   }
   
   @Override
   public String getName(){
      return name;
   }
   
   @Override
   public Signature getSignature(){
      return signature;
   }
   
   @Override
   public List getGenerics() {
      return signature.getGenerics();
   }
   
   @Override
   public List getAnnotations() {
      return annotations;
   }
   
   @Override
   public Invocation getInvocation(){
      return invocation;
   }
   
   @Override
   public String getDescription() {
      return description.getDescription();
   }
   
   @Override
   public String toString(){
      return description.toString();
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy