code: public synchronized ASTType getType(final TypeElement typeElement) {
          return new LazyASTType(buildPackageClass(typeElement), typeElement) {
              @Override
              public ASTType lazyLoad() {
                  if (!typeCache.containsKey(typeElement)) {
                      typeCache.put(typeElement, buildType(typeElement));
                  }
  
                  return typeCache.get(typeElement);
              }
          };
      }
docs: Build a ASTType from the provided TypeElement.
  
  @param typeElement required input Element
  @return ASTType constructed using teh input Element