fix java stub-PSI mismatch when typing "class"

This commit is contained in:
peter
2017-07-18 10:06:19 +02:00
parent b1e59918d7
commit aed46fcdd6
2 changed files with 16 additions and 8 deletions
@@ -23,17 +23,12 @@ import com.intellij.psi.impl.cache.RecordUtil;
import com.intellij.psi.impl.java.stubs.impl.PsiModifierListStubImpl;
import com.intellij.psi.impl.source.PsiModifierListImpl;
import com.intellij.psi.impl.source.tree.java.ModifierListElement;
import com.intellij.psi.stubs.IndexSink;
import com.intellij.psi.stubs.StubElement;
import com.intellij.psi.stubs.StubInputStream;
import com.intellij.psi.stubs.StubOutputStream;
import com.intellij.psi.stubs.*;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import static com.intellij.psi.impl.source.tree.JavaElementType.*;
/**
* @author max
*/
@@ -82,7 +77,7 @@ public class JavaModifierListElementType extends JavaStubElementType<PsiModifier
}
private static boolean shouldCreateStub(IElementType parentType) {
return parentType != null && parentType != LOCAL_VARIABLE && parentType != RESOURCE_VARIABLE && parentType != RESOURCE_LIST;
return parentType instanceof IStubElementType;
}
@NotNull
@@ -20,6 +20,7 @@ import com.intellij.codeInspection.dataFlow.ControlFlowAnalyzer
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.ReadAction
import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.editor.Document
import com.intellij.psi.*
import com.intellij.psi.impl.source.PsiClassImpl
import com.intellij.psi.impl.source.PsiFileImpl
@@ -29,7 +30,6 @@ import com.intellij.psi.search.searches.ClassInheritorsSearch
import com.intellij.psi.util.PsiUtil
import com.intellij.testFramework.PsiTestUtil
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
import com.siyeh.ig.style.LambdaBodyCanBeCodeBlockInspection
import java.util.concurrent.Callable
@@ -208,4 +208,17 @@ class Foo {
PsiTestUtil.checkStubsMatchText(file)
}
}
void "test inserting class keyword"() {
String text = "class Foo { void foo() { return; } }"
PsiFile psiFile = myFixture.addFileToProject("a.java", text)
Document document = psiFile.getViewProvider().getDocument()
WriteCommandAction.runWriteCommandAction(project) {
document.insertString(text.indexOf("return"), "class ")
}
PsiDocumentManager.getInstance(getProject()).commitAllDocuments()
PsiTestUtil.checkStubsMatchText(psiFile)
}
}