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

org.snapscript.core.type.TypeCache Maven / Gradle / Ivy

package org.snapscript.core.type;

import org.snapscript.common.LazyBuilder;
import org.snapscript.common.LazyCache;
import org.snapscript.core.NameFormatter;
import org.snapscript.core.type.index.TypeIndexer;

public class TypeCache {
   
   private final NameFormatter formatter;
   private final StringResolver strings;
   private final ClassResolver classes;
   
   public TypeCache(TypeIndexer indexer){
      this.strings = new StringResolver(indexer);
      this.classes = new ClassResolver(indexer);
      this.formatter = new NameFormatter();
   }
   
   public Type fetch(String module, String name) {
      String type = formatter.formatFullName(module, name);
      return strings.resolve(type);
   } 
   
   public Type fetch(String type) {
      return strings.resolve(type);
   } 
   
   public Type fetch(Class type) {
      return classes.resolve(type);
   } 

   private static class StringResolver implements LazyBuilder {

      private final LazyCache cache;
      private final TypeIndexer indexer;
      
      public StringResolver(TypeIndexer indexer) {
         this.cache = new LazyCache(this);
         this.indexer = indexer;
      }
      
      public Type resolve(String name) {
         return cache.fetch(name);
      }
      
      @Override
      public Type create(String type) {
         return indexer.loadType(type);
      }
   }
   
   private static class ClassResolver implements LazyBuilder {

      private final LazyCache cache;
      private final TypeIndexer indexer;
      
      public ClassResolver(TypeIndexer indexer) {
         this.cache = new LazyCache(this);
         this.indexer = indexer;
      }
      
      public Type resolve(Class type) {
         return cache.fetch(type);
      }
      
      @Override
      public Type create(Class type) {
         return indexer.loadType(type);
      }
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy