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

org.snapscript.core.NameFormatter Maven / Gradle / Ivy

package org.snapscript.core;

import org.snapscript.core.error.InternalArgumentException;

public class NameFormatter {
   
   private static final String[] DIMENSIONS = {"", "[]", "[][]", "[][][]" };     
   private static final String DIMENSION = "[]";
   
   public NameFormatter(){
      super();
   }
   
   public String formatFullName(Class type) {
      Class entry = type.getComponentType();
      
      if(entry != null) {
         return formatFullName(entry) + DIMENSION;
      }
      return type.getName();
   }
   
   public String formatShortName(Class type) {
      Class entry = type.getComponentType();
      
      if(entry != null) {
         return formatShortName(entry) + DIMENSION;
      }
      String name = type.getName();
      int index = name.lastIndexOf('.');
      int length = name.length();
      
      if(index > 0) {
         return name.substring(index+1, length);
      }
      return name;
   }
   
   public String formatShortName(String type) {
      int index = type.lastIndexOf('.');
      int length = type.length();
      
      if(index > 0) {
         return type.substring(index+1, length);
      }
      return type;
   }
   
   public String formatFullName(String module, String name) {
      if(name == null) {
         return module;
      }
      if(module != null) { // is a null module legal?
         int index = module.lastIndexOf(".");
         char first = module.charAt(index == -1 ? 0 : index + 1);
         
         if(Character.isUpperCase(first)) {
            return module + '$' + name; 
         }         
         return module + "." + name;
      }
      return name;
   }
   
   public String formatArrayName(String type, int size) {
      int limit = DIMENSIONS.length;
      
      if(size >= DIMENSIONS.length) {
         throw new InternalArgumentException("Maximum of " + limit + " dimensions exceeded");
      }
      return type + DIMENSIONS[size];
   }
   
   public String formatArrayName(String module, String name, int size) {
      int limit = DIMENSIONS.length;
      
      if(size >= DIMENSIONS.length) {
         throw new InternalArgumentException("Maximum of " + limit + " dimensions exceeded");
      }
      String bounds = DIMENSIONS[size];
      String type = formatFullName(module, name);
            
      return type + bounds;
   }
   
   public String formatOuterName(String type) {
      if(type != null) {
         int index = type.lastIndexOf('$');
         
         if(index > 0) {
            return type.substring(0, index);
         }
         return type;
      }
      return null;
   } 
   
   public String formatOuterName(String module, String name) {
      if(name != null) {
         int index = name.lastIndexOf('$');
         
         if(index > 0) {
            String parent = name.substring(0, index);
            int length = parent.length();
            
            if(length > 0) {
               return formatFullName(module, parent);
            }
         }
      }
      return null;
   }   
   
   public String formatInnerName(String type) {
      if(type != null) {
         String name = formatShortName(type);
         int index = name.lastIndexOf('$');
         int length = name.length();
         
         if(index > 0) {
            return name.substring(index + 1, length);
         }
         return name;
      }
      return null;
   }
   
   public String formatLocalName(String type) {
      if(type != null) {
         String name = formatTopName(type);
         int index = name.lastIndexOf('.');
         int length = name.length();
         
         if(index > 0) {
            return name.substring(index+1, length);
         }
         return name;
      }
      return null;
   }
   
   public String formatTopName(String type) {
      if(type != null) {
         int index = type.indexOf('$');
         
         if(index > 0) {
            return type.substring(0, index);
         }
         return type;
      }
      return null;
   }
   
   public String formatTopName(String module, String name) {
      if(name != null) {
         int index = name.indexOf('$');
         
         if(index > 0) {
            String parent = name.substring(0, index);
            int length = parent.length();
            
            if(length > 0) {
               return formatFullName(module, parent);
            }
         }
         return formatFullName(module, name);
      }
      return null;
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy