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

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

package org.snapscript.core.function;

import java.lang.reflect.Member;
import java.util.List;

import org.snapscript.core.constraint.Constraint;
import org.snapscript.core.module.Module;
import org.snapscript.core.type.Type;

public class FunctionSignature implements Signature {
   
   private final List parameters;
   private final List constraints;
   private final SignatureDescription description;
   private final SignatureMatcher matcher;   
   private final Type definition;
   private final Member source;
   private final Origin origin;
   private final boolean absolute;
   private final boolean variable;

   public FunctionSignature(List parameters, List constraints, Module module, Member source, Origin origin, boolean absolute){
      this(parameters, constraints, module, source, origin, absolute, false);
   }
   
   public FunctionSignature(List parameters, List constraints, Module module, Member source, Origin origin, boolean absolute, boolean variable){
      this.description = new SignatureDescription(this, module);
      this.matcher = new SignatureMatcher(this, module);
      this.definition = new FunctionType(this, module);
      this.constraints = constraints;
      this.parameters = parameters;
      this.absolute = absolute;
      this.variable = variable;
      this.source = source;
      this.origin = origin;
   }
   
   @Override
   public ArgumentConverter getConverter() {
      return matcher.getConverter();
   }
   
   @Override
   public List getGenerics() {
      return constraints;
   }
   
   @Override
   public List getParameters(){
      return parameters;
   }
   
   @Override
   public Type getDefinition() {
      return definition;
   }
   
   @Override
   public Member getSource() {
      return source;
   }
   
   @Override
   public Origin getOrigin() {
      return origin;
   }
   
   @Override
   public boolean isVariable() {
      return variable;
   }
   
   @Override
   public boolean isAbsolute() {
      return absolute; // array parameters are not absolute
   }
   
   @Override
   public String toString() {
      return description.toString();
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy