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

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

package org.snapscript.core.function;

import java.util.List;

import org.snapscript.core.Entity;
import org.snapscript.core.constraint.Constraint;
import org.snapscript.core.scope.Scope;
import org.snapscript.core.type.Type;

public class SignatureDescription {

   private final Signature signature;
   private final Entity entity;
   private final int start;
   
   public SignatureDescription(Signature signature, Entity entity) {
      this(signature, entity, 0);
   }
  
   public SignatureDescription(Signature signature, Entity entity, int start) {
      this.signature = signature;
      this.entity = entity;
      this.start = start;
   }

   public String getDescription() {
      StringBuilder builder = new StringBuilder();

      builder.append("(");
      
      if(signature != null) {
         List parameters = signature.getParameters();
         Scope scope = entity.getScope();
         int size = parameters.size();
         
         for(int i = start; i < size; i++) {
            Parameter parameter = parameters.get(i);
            Constraint constraint = parameter.getConstraint();
            Type type = constraint.getType(scope);
            String name = parameter.getName();
            
            if(i > start) {
               builder.append(", ");
            }
            builder.append(name);
            
            if(parameter.isVariable()) {
               builder.append("...");
            }
            if(type != null) {
               String qualifier = type.getName();
               
               builder.append(": ");
               builder.append(qualifier);
            }
         }
      }
      builder.append(")");
      return builder.toString();
   }
   
   @Override
   public String toString() {
      return getDescription();
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy