@NotNull @Override public PsiElement createDummyHolder( @NotNull final String text, @NotNull final IElementType type, @Nullable final PsiElement context) { final DummyHolder result = DummyHolderFactory.createHolder(myManager, context); final FileElement holder = result.getTreeElement(); final Language language = type.getLanguage(); final ParserDefinition parserDefinition = LanguageParserDefinitions.INSTANCE.forLanguage(language); assert parserDefinition != null : "No parser definition for language " + language; final Project project = myManager.getProject(); final Lexer lexer = parserDefinition.createLexer(project); final PsiBuilder builder = PsiBuilderFactory.getInstance().createBuilder(project, holder, lexer, language, text); final ASTNode node = parserDefinition.createParser(project).parse(type, builder); holder.rawAddChildren((TreeElement) node); final PsiElement psi = node.getPsi(); assert psi != null : text; return psi; }
private static void doFailTest( @NonNls final String text, final Parser parser, @NonNls final String expected) { final PrintStream std = System.err; //noinspection IOResourceOpenedButNotSafelyClosed System.setErr(new PrintStream(new NullStream())); try { try { ParserDefinition parserDefinition = new ParserDefinition() { @NotNull @Override public Lexer createLexer(Project project) { return null; } @Override public PsiParser createParser(Project project) { return null; } @Override public IFileElementType getFileNodeType() { return null; } @NotNull @Override public TokenSet getWhitespaceTokens() { return TokenSet.EMPTY; } @NotNull @Override public TokenSet getCommentTokens() { return TokenSet.EMPTY; } @NotNull @Override public TokenSet getStringLiteralElements() { return null; } @NotNull @Override public PsiElement createElement(ASTNode node) { return null; } @Override public PsiFile createFile(FileViewProvider viewProvider) { return null; } @Override public SpaceRequirements spaceExistanceTypeBetweenTokens( ASTNode left, ASTNode right) { return null; } }; final PsiBuilder builder = PsiBuilderFactory.getInstance() .createBuilder(parserDefinition, new MyTestLexer(), text); builder.setDebugMode(true); parser.parse(builder); builder.getLightTree(); fail("should fail"); } catch (AssertionError e) { assertEquals(expected, e.getMessage()); } } finally { System.setErr(std); } }