package com.dci.intellij.dbn.language.common.element.parser.impl;
import com.dci.intellij.dbn.language.common.ParseException;
import com.dci.intellij.dbn.language.common.element.BlockElementType;
import com.dci.intellij.dbn.language.common.element.parser.ParseResult;
import com.dci.intellij.dbn.language.common.element.parser.ParseResultType;
import com.dci.intellij.dbn.language.common.element.parser.ParserBuilder;
import com.dci.intellij.dbn.language.common.element.parser.ParserContext;
import com.dci.intellij.dbn.language.common.element.path.ParsePathNode;
import com.intellij.lang.PsiBuilder;
import org.jetbrains.annotations.NotNull;
public class BlockElementTypeParser extends SequenceElementTypeParser<BlockElementType>{
public BlockElementTypeParser(BlockElementType elementType) {
super(elementType);
}
public ParseResult parse(@NotNull ParsePathNode parentNode, boolean optional, int depth, ParserContext context) throws ParseException {
ParserBuilder builder = context.getBuilder();
PsiBuilder.Marker marker = builder.mark(null);
ParseResult result = super.parse(parentNode, optional, depth, context);
if (result.getType() == ParseResultType.NO_MATCH) {
builder.markerDrop(marker);
} else {
builder.markerDone(marker, getElementType());
}
return result.getType() == ParseResultType.NO_MATCH ?
ParseResult.createNoMatchResult() :
ParseResult.createFullMatchResult(result.getMatchedTokens());
}
}