Beispiel #1
0
  @Override
  public FoldingBuilder forLanguage(Language l) {
    FoldingBuilder cached = l.getUserData(getLanguageCache());
    if (cached != null) return cached;

    List<FoldingBuilder> extensions = forKey(l);
    FoldingBuilder result;
    if (extensions.isEmpty()) {

      Language base = l.getBaseLanguage();
      if (base != null) {
        result = forLanguage(base);
      } else {
        result = getDefaultImplementation();
      }
    } else {
      return (extensions.size() == 1)
          ? extensions.get(0)
          : myBuilder == null ? myBuilder = new CompositeFoldingBuilder(extensions) : myBuilder;
    }

    l.putUserData(getLanguageCache(), result);
    return result;
  }