SyntaxNodeDescriptor (@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); }