@Override protected ASTNode doParseContents(@NotNull ASTNode chameleon, @NotNull PsiElement psi) { Project project = psi.getProject(); Language languageForParser = getLanguageForParser(psi); PsiBuilder builder = PsiBuilderFactory.getInstance() .createBuilder(project, chameleon, null, languageForParser, chameleon.getChars()); return JetParser.parseExpressionCodeFragment(builder).getFirstChildNode(); }
private void doSingleTest(String suffix, String path) throws Throwable { final String text = FileUtil.loadFile(new File(path, suffix), true); final StringBuilder result = new StringBuilder(); for (String line : StringUtil.splitByLines(text)) { if (result.length() > 0) result.append("------\n"); final AngularJSParserDefinition definition = new AngularJSParserDefinition(); final PsiBuilder builder = PsiBuilderFactory.getInstance().createBuilder(definition, new AngularJSLexer(), line); final ASTNode root = definition.createParser(getProject()).parse(JSStubElementTypes.FILE, builder); result.append(DebugUtil.psiToString(root.getPsi(), false, false)); } assertEquals( FileUtil.loadFile(new File(path, suffix.replace("js", "txt")), true), result.toString()); }
@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; }