private SyntaxNodeDescriptor loadProxyNode(@NotNull Plist plist,
                                             @NotNull SyntaxNodeDescriptor result,
                                             @NotNull Interner<CharSequence> interner) {
    String include = plist.getPlistValue(Constants.INCLUDE_KEY, "").getString();
    if (!include.isEmpty() && include.charAt(0) == '#') {
      return new SyntaxRuleProxyDescriptor(getRuleId(include.substring(1)), result);
    }
    else if (Constants.INCLUDE_SELF_VALUE.equalsIgnoreCase(include) || Constants.INCLUDE_BASE_VALUE.equalsIgnoreCase(include)) {
      return new SyntaxRootProxyDescriptor(result);
    }
    int i = include.indexOf('#');
    CharSequence scope = i >= 0 ? include.subSequence(0, i) : include;
    String ruleId = i >= 0 ? include.substring(i + 1) : "";
    return new SyntaxScopeProxyDescriptor(interner.intern(scope), ruleId.isEmpty() ? -1 : getRuleId(ruleId), this, result);
  }
private SyntaxNodeDescriptor loadProxyNode(@NotNull Plist plist,
                                             @NotNull SyntaxNodeDescriptor result,
                                             @NotNull Interner<CharSequence> interner)