TextMateLexerState (@NotNull SyntaxNodeDescriptor syntaxNodeDescriptor, @NotNull StringWithId string, int byteOffset, int gosOffset, boolean matchBeginOfString, @NotNull TextMateWeigh.Priority priority, @NotNull TextMateScope currentScope) { TextMateLexerState resultState = TextMateLexerState.notMatched(syntaxNodeDescriptor); List<SyntaxNodeDescriptor> children = syntaxNodeDescriptor.getChildren(); for (SyntaxNodeDescriptor child : children) { resultState = moreImportantState(resultState, matchFirstChild(child, string, byteOffset, gosOffset, matchBeginOfString, priority, currentScope)); if (resultState.matchData.matched() && resultState.matchData.byteOffset().start == byteOffset) { // optimization. There cannot be anything more `important` than current state matched from the very beginning break; } } return moreImportantState(resultState, matchInjections(syntaxNodeDescriptor, string, byteOffset, gosOffset, matchBeginOfString, currentScope)); }