|
3 | 3 | import com.intellij.ide.structureView.StructureViewTreeElement; |
4 | 4 | import com.intellij.ide.util.treeView.smartTree.SortableTreeElement; |
5 | 5 | import com.intellij.ide.util.treeView.smartTree.TreeElement; |
| 6 | +import com.intellij.lang.*; |
| 7 | +import com.intellij.lexer.Lexer; |
6 | 8 | import com.intellij.navigation.ItemPresentation; |
7 | 9 | import com.intellij.navigation.NavigationItem; |
| 10 | +import com.intellij.openapi.project.Project; |
8 | 11 | import com.intellij.psi.PsiElement; |
9 | | -import com.intellij.psi.PsiElementFactory; |
10 | 12 | import com.intellij.psi.PsiFile; |
| 13 | +import com.intellij.psi.PsiManager; |
11 | 14 | import com.intellij.psi.PsiNamedElement; |
| 15 | +import com.intellij.psi.impl.source.DummyHolder; |
| 16 | +import com.intellij.psi.impl.source.DummyHolderFactory; |
| 17 | +import com.intellij.psi.impl.source.tree.FileElement; |
| 18 | +import com.intellij.psi.tree.IElementType; |
12 | 19 | import com.intellij.psi.util.PsiTreeUtil; |
13 | 20 | import net.seesharpsoft.intellij.plugins.csv.psi.CsvField; |
14 | 21 | import net.seesharpsoft.intellij.plugins.csv.psi.CsvFile; |
@@ -85,8 +92,21 @@ public Icon getIcon(boolean unused) { |
85 | 92 | return element.getIcon(ICON_FLAG_VISIBILITY); |
86 | 93 | } |
87 | 94 |
|
| 95 | + // replaces PsiElementFactory.SERVICE.getInstance(element.getProject()).createDummyHolder("<undefined>", CsvTypes.FIELD, null); |
| 96 | + // https://github.com/SeeSharpSoft/intellij-csv-validator/issues/4 |
88 | 97 | protected PsiElement createEmptyPsiField() { |
89 | | - return PsiElementFactory.SERVICE.getInstance(element.getProject()).createDummyHolder("<undefined>", CsvTypes.FIELD, null); |
| 98 | + final String text = "<undefined>"; |
| 99 | + final IElementType type = CsvTypes.FIELD; |
| 100 | + final Project project = this.element.getProject(); |
| 101 | + final PsiManager psiManager = PsiManager.getInstance(project); |
| 102 | + final DummyHolder dummyHolder = DummyHolderFactory.createHolder(psiManager, null); |
| 103 | + final FileElement fileElement = dummyHolder.getTreeElement(); |
| 104 | + final ParserDefinition parserDefinition = LanguageParserDefinitions.INSTANCE.forLanguage(CsvLanguage.INSTANCE); |
| 105 | + final Lexer lexer = parserDefinition.createLexer(project); |
| 106 | + final PsiBuilder psiBuilder = PsiBuilderFactory.getInstance().createBuilder(project, fileElement, lexer, CsvLanguage.INSTANCE, text); |
| 107 | + final ASTNode node = parserDefinition.createParser(project).parse(type, psiBuilder); |
| 108 | + fileElement.rawAddChildren((com.intellij.psi.impl.source.tree.TreeElement)node); |
| 109 | + return node.getPsi(); |
90 | 110 | } |
91 | 111 |
|
92 | 112 | public static class File extends CsvStructureViewElement { |
|
0 commit comments