class TagParser extends AbstractParser<TagAST> {
	private static final Set<String> ALLOWED_NAMES = OpcodeUtil.getTagNames();

	@Override
	public TagAST visit(int lineNo, String line) throws ASTParseException {<FILL_FUNCTION_BODY>}

	@Override
	public List<String> suggest(ParseResult<RootAST> lastParse, String text) {
		String trim = text.trim();
		return ALLOWED_NAMES.stream().filter(n -> n.startsWith(trim)).collect(Collectors.toList());
	}

}

		try {
			String trim = line.trim().toUpperCase();
			if(!ALLOWED_NAMES.contains(trim))
				throw new ASTParseException(lineNo, "Illegal tag '" + trim + "'");
			int start = line.indexOf(trim);
			return new TagAST(lineNo, getOffset() + start, trim);
		} catch(Exception ex) {
			throw new ASTParseException(ex, lineNo, "Bad format for tag");
		}
	
<methods>public void <init>() ,public void <init>(AbstractParser#RAW) ,public int getOffset() ,public void setOffset(int) ,public List<java.lang.String> suggest(ParseResult<me.coley.recaf.parse.bytecode.ast.RootAST>, java.lang.String) ,public abstract me.coley.recaf.parse.bytecode.ast.TagAST visit(int, java.lang.String) throws me.coley.recaf.parse.bytecode.exception.ASTParseException<variables>private int offset,protected final non-sealed AbstractParser#RAW parent