001/*-------------------------------------------------------------------------+
002|                                                                          |
003| Copyright (c) 2009-2019 CQSE GmbH                                        |
004|                                                                          |
005+-------------------------------------------------------------------------*/
006package eu.cqse.check.framework.shallowparser.languages.javascript;
007
008import static eu.cqse.check.framework.scanner.ETokenType.IDENTIFIER;
009import static eu.cqse.check.framework.scanner.ETokenType.LPAREN;
010import static eu.cqse.check.framework.scanner.ETokenType.LT;
011
012import java.util.List;
013
014import eu.cqse.check.framework.scanner.IToken;
015import eu.cqse.check.framework.shallowparser.TokenStreamUtils;
016import eu.cqse.check.framework.shallowparser.framework.ParserState;
017import eu.cqse.check.framework.shallowparser.framework.RecognizerBase;
018import eu.cqse.check.framework.shallowparser.languages.javascript.JavaScriptShallowParser.EJavaScriptParserStates;
019
020/**
021 * This recognizer matches method definitions whose names are user-defined. In
022 * Typescript, method names may include get, set, import, etc
023 */
024public class MethodNameIsUserDefinedRecognizer extends RecognizerBase<EJavaScriptParserStates> {
025
026        /** {@inheritDoc} */
027        @Override
028        protected int matchesLocally(ParserState<EJavaScriptParserStates> parserState, List<IToken> tokens,
029                        int startOffset) {
030                int index = TokenStreamUtils.firstTokenOfTypeSequence(tokens, startOffset, IDENTIFIER, LT);
031                if (index == NO_MATCH) {
032                        return TokenStreamUtils.firstTokenOfTypeSequence(tokens, startOffset, IDENTIFIER, LPAREN);
033                }
034
035                return NO_MATCH;
036        }
037
038}