package org.develnext.jphp.core.common; import org.develnext.jphp.core.tokenizer.token.ColonToken; import org.develnext.jphp.core.tokenizer.token.SemicolonToken; import org.develnext.jphp.core.tokenizer.token.Token; import org.develnext.jphp.core.tokenizer.token.expr.BraceExprToken; import org.develnext.jphp.core.tokenizer.token.expr.CommaToken; import org.develnext.jphp.core.tokenizer.token.stmt.AsStmtToken; public enum Separator { COMMA, SEMICOLON, COLON, COMMA_OR_SEMICOLON, AS, ARRAY, ARRAY_BLOCK; public Class<Token>[] getTokenClass(){ switch (this) { case COLON: return new Class[] {ColonToken.class}; case SEMICOLON: return new Class[] {SemicolonToken.class}; case COMMA: return new Class[] {CommaToken.class}; case COMMA_OR_SEMICOLON: return new Class[] {CommaToken.class, SemicolonToken.class}; case AS: return new Class[] {AsStmtToken.class}; default: throw new IllegalStateException("Cannot get token class"); } } public boolean is(Token token) { switch (this) { case COLON: return token instanceof ColonToken; case SEMICOLON: return token instanceof SemicolonToken; case COMMA: return token instanceof CommaToken; case COMMA_OR_SEMICOLON: return token instanceof CommaToken || token instanceof SemicolonToken; case AS: return token instanceof AsStmtToken; case ARRAY_BLOCK: if (token instanceof BraceExprToken && ((BraceExprToken) token).isBlock()) { return true; } // to next check. case ARRAY: return token instanceof BraceExprToken && ((BraceExprToken) token).isArray(); } return false; } }