Don't create stub for modifier list of resource variable

This commit is contained in:
Roman Shevchenko
2011-02-24 22:01:18 +01:00
parent e4eacc4451
commit e2302efffc
3 changed files with 38 additions and 30 deletions
@@ -78,12 +78,6 @@ public class JavaModifierListElementType extends JavaStubElementType<PsiModifier
return node.getTreeParent().getElementType() != JavaElementType.LOCAL_VARIABLE;
}
@Override
public boolean shouldCreateStub(final LighterAST tree, final LighterASTNode node, final StubElement parentStub) {
final LighterASTNode parent = tree.getParent(node);
return parent != null && parent.getTokenType() != JavaElementType.LOCAL_VARIABLE;
}
public PsiModifierListStub deserialize(final StubInputStream dataStream, final StubElement parentStub) throws IOException {
return new PsiModifierListStubImpl(parentStub, dataStream.readVarInt());
}
@@ -49,7 +49,7 @@ public class JavaLightStubBuilder extends LightStubBuilder {
@Override
public boolean skipChildProcessingWhenBuildingStubs(final IElementType nodeType, final IElementType childType) {
return childType == JavaElementType.PARAMETER_LIST && nodeType != JavaElementType.METHOD && nodeType != JavaElementType.ANNOTATION_METHOD ||
childType == JavaElementType.PARAMETER && nodeType != JavaElementType.PARAMETER_LIST;
return childType == JavaElementType.PARAMETER && nodeType != JavaElementType.PARAMETER_LIST ||
childType == JavaElementType.MODIFIER_LIST && (nodeType == JavaElementType.LOCAL_VARIABLE || nodeType == JavaElementType.RESOURCE_VARIABLE);
}
}
@@ -17,6 +17,9 @@ package com.intellij.psi;
import com.intellij.lang.FileASTNode;
import com.intellij.openapi.application.ex.PathManagerEx;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.impl.DebugUtil;
@@ -39,6 +42,12 @@ public class JavaStubBuilderTest extends LightIdeaTestCase {
public void setUp() throws Exception {
super.setUp();
doTest("@interface A { int i() default 42; }\n class C { void m(int p) throws E { } }", null); // warm up
LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_1_7);
}
@Override
protected Sdk getProjectJDK() {
return JavaSdkImpl.getMockJdk17();
}
public void testEmpty() {
@@ -255,6 +264,9 @@ public class JavaStubBuilderTest extends LightIdeaTestCase {
" int local = 0;\n" +
" for (int loop = 0; loop < 10; loop++) ;\n" +
" try (Resource r = new Resource()) { }\n" +
" try (Resource r = new Resource() {\n" +
" public void close() { }\n" +
" }) { }\n" +
" }\n" +
"}",
@@ -269,32 +281,34 @@ public class JavaStubBuilderTest extends LightIdeaTestCase {
" MODIFIER_LIST:PsiModifierListStub[mask=4096]\n" +
" TYPE_PARAMETER_LIST:PsiTypeParameterListStub\n" +
" PARAMETER_LIST:PsiParameterListStub\n" +
" THROWS_LIST:PsiRefListStub[THROWS_LIST:]\n");
" THROWS_LIST:PsiRefListStub[THROWS_LIST:]\n" +
" ANONYMOUS_CLASS:PsiClassStub[anonymous name=null fqn=null baseref=Resource]\n" +
" METHOD:PsiMethodStub[close:void]\n" +
" MODIFIER_LIST:PsiModifierListStub[mask=1]\n" +
" TYPE_PARAMETER_LIST:PsiTypeParameterListStub\n" +
" PARAMETER_LIST:PsiParameterListStub\n" +
" THROWS_LIST:PsiRefListStub[THROWS_LIST:]\n");
}
public void testNonListParameters() {
withLevel(LanguageLevel.JDK_1_7, new Runnable() {
@Override public void run() {
doTest("class C {\n" +
" {\n" +
" for (int i : arr) ;\n" +
" try { }\n" +
" catch (Throwable t) { }\n" +
" catch (E1|E2 e) { }\n" +
" }\n" +
"}",
doTest("class C {\n" +
" {\n" +
" for (int i : arr) ;\n" +
" try { }\n" +
" catch (Throwable t) { }\n" +
" catch (E1|E2 e) { }\n" +
" }\n" +
"}",
"PsiJavaFileStub []\n" +
" IMPORT_LIST:PsiImportListStub\n" +
" CLASS:PsiClassStub[name=C fqn=C]\n" +
" MODIFIER_LIST:PsiModifierListStub[mask=4096]\n" +
" TYPE_PARAMETER_LIST:PsiTypeParameterListStub\n" +
" EXTENDS_LIST:PsiRefListStub[EXTENDS_LIST:]\n" +
" IMPLEMENTS_LIST:PsiRefListStub[IMPLEMENTS_LIST:]\n" +
" CLASS_INITIALIZER:PsiClassInitializerStub\n" +
" MODIFIER_LIST:PsiModifierListStub[mask=4096]\n");
}
});
"PsiJavaFileStub []\n" +
" IMPORT_LIST:PsiImportListStub\n" +
" CLASS:PsiClassStub[name=C fqn=C]\n" +
" MODIFIER_LIST:PsiModifierListStub[mask=4096]\n" +
" TYPE_PARAMETER_LIST:PsiTypeParameterListStub\n" +
" EXTENDS_LIST:PsiRefListStub[EXTENDS_LIST:]\n" +
" IMPLEMENTS_LIST:PsiRefListStub[IMPLEMENTS_LIST:]\n" +
" CLASS_INITIALIZER:PsiClassInitializerStub\n" +
" MODIFIER_LIST:PsiModifierListStub[mask=4096]\n");
}
public void testSOEProof() {