diff --git a/java/java-impl/src/com/intellij/psi/impl/compiled/ClsStubBuilder.java b/java/java-impl/src/com/intellij/psi/impl/compiled/ClsStubBuilder.java index fbdcfd040a32..6f4960e8f769 100644 --- a/java/java-impl/src/com/intellij/psi/impl/compiled/ClsStubBuilder.java +++ b/java/java-impl/src/com/intellij/psi/impl/compiled/ClsStubBuilder.java @@ -66,7 +66,7 @@ public class ClsStubBuilder { final PsiJavaFileStubImpl file = new PsiJavaFileStubImpl("dont.know.yet", true); try { - final PsiClassStub result = buildClass(vFile, bytes, file, 0); + final PsiClassStub result = buildClass(vFile, bytes, file, Opcodes.ACC_STATIC); if (result == null) return null; file.setPackageName(getPackageName(result)); @@ -125,7 +125,7 @@ public class ClsStubBuilder { final String shortName = PsiNameHelper.getShortClassName(fqn); - final int flags = myAccess == 0 ? access : myAccess; + final int flags = myAccess | access; boolean isDeprecated = (flags & Opcodes.ACC_DEPRECATED) != 0; boolean isInterface = (flags & Opcodes.ACC_INTERFACE) != 0; @@ -228,11 +228,14 @@ public class ClsStubBuilder { if ((access & Opcodes.ACC_PRIVATE) != 0) { flags |= ModifierFlags.PRIVATE_MASK; - } else if ((access & Opcodes.ACC_PROTECTED) != 0) { + } + else if ((access & Opcodes.ACC_PROTECTED) != 0) { flags |= ModifierFlags.PROTECTED_MASK; - } else if ((access & Opcodes.ACC_PUBLIC) != 0) { + } + else if ((access & Opcodes.ACC_PUBLIC) != 0) { flags |= ModifierFlags.PUBLIC_MASK; - } else { + } + else { flags |= ModifierFlags.PACKAGE_LOCAL_MASK; } @@ -628,7 +631,8 @@ public class ClsStubBuilder { final double d = ((Double)value).doubleValue(); if (Double.isInfinite(d)) { return d > 0 ? "1.0 / 0.0" : "-1.0 / 0.0"; - } else if (Double.isNaN(d)) { + } + else if (Double.isNaN(d)) { return "0.0d / 0.0"; } return Double.toString(d); @@ -639,9 +643,11 @@ public class ClsStubBuilder { if (Float.isInfinite(v)) { return v > 0 ? "1.0f / 0.0" : "-1.0f / 0.0"; - } else if (Float.isNaN(v)) { + } + else if (Float.isNaN(v)) { return "0.0f / 0.0"; - } else { + } + else { return Float.toString(v) + "f"; } } diff --git a/java/java-impl/src/com/intellij/psi/impl/source/PsiModifierListImpl.java b/java/java-impl/src/com/intellij/psi/impl/source/PsiModifierListImpl.java index 4ca0df2642f1..a66bc09749ff 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/PsiModifierListImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/PsiModifierListImpl.java @@ -26,6 +26,7 @@ import com.intellij.psi.impl.java.stubs.JavaStubElementTypes; import com.intellij.psi.impl.java.stubs.PsiModifierListStub; import com.intellij.psi.impl.source.tree.CompositeElement; import com.intellij.psi.impl.source.tree.Factory; +import com.intellij.psi.impl.source.tree.JavaElementType; import com.intellij.psi.impl.source.tree.TreeElement; import com.intellij.psi.tree.IElementType; import com.intellij.util.IncorrectOperationException; @@ -38,21 +39,21 @@ import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.Map; -public class PsiModifierListImpl extends JavaStubPsiElement implements PsiModifierList, Constants { +public class PsiModifierListImpl extends JavaStubPsiElement implements PsiModifierList { private static final Map NAME_TO_KEYWORD_TYPE_MAP = new THashMap(); static{ - NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.PUBLIC, PUBLIC_KEYWORD); - NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.PROTECTED, PROTECTED_KEYWORD); - NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.PRIVATE, PRIVATE_KEYWORD); - NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.STATIC, STATIC_KEYWORD); - NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.ABSTRACT, ABSTRACT_KEYWORD); - NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.FINAL, FINAL_KEYWORD); - NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.NATIVE, NATIVE_KEYWORD); - NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.SYNCHRONIZED, SYNCHRONIZED_KEYWORD); - NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.STRICTFP, STRICTFP_KEYWORD); - NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.TRANSIENT, TRANSIENT_KEYWORD); - NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.VOLATILE, VOLATILE_KEYWORD); + NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.PUBLIC, JavaTokenType.PUBLIC_KEYWORD); + NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.PROTECTED, JavaTokenType.PROTECTED_KEYWORD); + NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.PRIVATE, JavaTokenType.PRIVATE_KEYWORD); + NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.STATIC, JavaTokenType.STATIC_KEYWORD); + NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.ABSTRACT, JavaTokenType.ABSTRACT_KEYWORD); + NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.FINAL, JavaTokenType.FINAL_KEYWORD); + NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.NATIVE, JavaTokenType.NATIVE_KEYWORD); + NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.SYNCHRONIZED, JavaTokenType.SYNCHRONIZED_KEYWORD); + NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.STRICTFP, JavaTokenType.STRICTFP_KEYWORD); + NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.TRANSIENT, JavaTokenType.TRANSIENT_KEYWORD); + NAME_TO_KEYWORD_TYPE_MAP.put(PsiModifier.VOLATILE, JavaTokenType.VOLATILE_KEYWORD); } public static final TObjectIntHashMap NAME_TO_MODIFIER_FLAG_MAP = new TObjectIntHashMap(); @@ -94,40 +95,40 @@ public class PsiModifierListImpl extends JavaStubPsiElement if (parent instanceof PsiClass){ PsiElement pparent = parent.getParent(); if (pparent instanceof PsiClass && ((PsiClass)pparent).isInterface()){ - if (type == PUBLIC_KEYWORD){ + if (type == JavaTokenType.PUBLIC_KEYWORD){ return true; } if (type == null){ // package local return false; } - if (type == STATIC_KEYWORD){ + if (type == JavaTokenType.STATIC_KEYWORD){ return true; } } if (((PsiClass)parent).isInterface()){ - if (type == ABSTRACT_KEYWORD){ + if (type == JavaTokenType.ABSTRACT_KEYWORD){ return true; } // nested interface is implicitly static if (pparent instanceof PsiClass) { - if (type == STATIC_KEYWORD){ + if (type == JavaTokenType.STATIC_KEYWORD){ return true; } } } if (((PsiClass)parent).isEnum()){ - if (type == STATIC_KEYWORD) { + if (type == JavaTokenType.STATIC_KEYWORD) { if (!(pparent instanceof PsiFile)) return true; } - else if (type == FINAL_KEYWORD) { + else if (type == JavaTokenType.FINAL_KEYWORD) { final PsiField[] fields = ((PsiClass)parent).getFields(); for (PsiField field : fields) { if (field instanceof PsiEnumConstant && ((PsiEnumConstant)field).getInitializingClass() != null) return false; } return true; } - else if (type == ABSTRACT_KEYWORD) { + else if (type == JavaTokenType.ABSTRACT_KEYWORD) { final PsiMethod[] methods = ((PsiClass)parent).getMethods(); for (PsiMethod method : methods) { if (method.hasModifierProperty(PsiModifier.ABSTRACT)) return true; @@ -139,34 +140,34 @@ public class PsiModifierListImpl extends JavaStubPsiElement else if (parent instanceof PsiMethod){ PsiClass aClass = ((PsiMethod)parent).getContainingClass(); if (aClass != null && aClass.isInterface()){ - if (type == PUBLIC_KEYWORD){ + if (type == JavaTokenType.PUBLIC_KEYWORD){ return true; } if (type == null){ // package local return false; } - if (type == ABSTRACT_KEYWORD){ + if (type == JavaTokenType.ABSTRACT_KEYWORD){ return true; } } } else if (parent instanceof PsiField){ if (parent instanceof PsiEnumConstant) { - return type == PUBLIC_KEYWORD || type == STATIC_KEYWORD || type == FINAL_KEYWORD; + return type == JavaTokenType.PUBLIC_KEYWORD || type == JavaTokenType.STATIC_KEYWORD || type == JavaTokenType.FINAL_KEYWORD; } else { PsiClass aClass = ((PsiField)parent).getContainingClass(); if (aClass != null && aClass.isInterface()){ - if (type == PUBLIC_KEYWORD){ + if (type == JavaTokenType.PUBLIC_KEYWORD){ return true; } if (type == null){ // package local return false; } - if (type == STATIC_KEYWORD){ + if (type == JavaTokenType.STATIC_KEYWORD){ return true; } - if (type == FINAL_KEYWORD){ + if (type == JavaTokenType.FINAL_KEYWORD){ return true; } } @@ -194,34 +195,34 @@ public class PsiModifierListImpl extends JavaStubPsiElement CompositeElement treeElement = (CompositeElement)getNode(); ASTNode parentTreeElement = treeElement.getTreeParent(); if (value){ - if (parentTreeElement.getElementType() == FIELD && - parentTreeElement.getTreeParent().getElementType() == CLASS && + if (parentTreeElement.getElementType() == JavaElementType.FIELD && + parentTreeElement.getTreeParent().getElementType() == JavaElementType.CLASS && ((PsiClass)SourceTreeToPsiMap.treeElementToPsi(parentTreeElement.getTreeParent())).isInterface()) { - if (type == PUBLIC_KEYWORD || type == STATIC_KEYWORD || type == FINAL_KEYWORD) return; + if (type == JavaTokenType.PUBLIC_KEYWORD || type == JavaTokenType.STATIC_KEYWORD || type == JavaTokenType.FINAL_KEYWORD) return; } - else if (parentTreeElement.getElementType() == METHOD && - parentTreeElement.getTreeParent().getElementType() == CLASS && + else if (parentTreeElement.getElementType() == JavaElementType.METHOD && + parentTreeElement.getTreeParent().getElementType() == JavaElementType.CLASS && ((PsiClass)SourceTreeToPsiMap.treeElementToPsi(parentTreeElement.getTreeParent())).isInterface()) { - if (type == PUBLIC_KEYWORD || type == ABSTRACT_KEYWORD) return; + if (type == JavaTokenType.PUBLIC_KEYWORD || type == JavaTokenType.ABSTRACT_KEYWORD) return; } - else if (parentTreeElement.getElementType() == CLASS && - parentTreeElement.getTreeParent().getElementType() == CLASS && + else if (parentTreeElement.getElementType() == JavaElementType.CLASS && + parentTreeElement.getTreeParent().getElementType() == JavaElementType.CLASS && ((PsiClass)SourceTreeToPsiMap.treeElementToPsi(parentTreeElement.getTreeParent())).isInterface()) { - if (type == PUBLIC_KEYWORD) return; + if (type == JavaTokenType.PUBLIC_KEYWORD) return; } - if (type == PUBLIC_KEYWORD - || type == PRIVATE_KEYWORD - || type == PROTECTED_KEYWORD + if (type == JavaTokenType.PUBLIC_KEYWORD + || type == JavaTokenType.PRIVATE_KEYWORD + || type == JavaTokenType.PROTECTED_KEYWORD || type == null /* package local */){ - if (type != PUBLIC_KEYWORD){ + if (type != JavaTokenType.PUBLIC_KEYWORD){ setModifierProperty(PsiModifier.PUBLIC, false); } - if (type != PRIVATE_KEYWORD){ + if (type != JavaTokenType.PRIVATE_KEYWORD){ setModifierProperty(PsiModifier.PRIVATE, false); } - if (type != PROTECTED_KEYWORD){ + if (type != JavaTokenType.PROTECTED_KEYWORD){ setModifierProperty(PsiModifier.PROTECTED, false); } if (type == null) return; @@ -231,7 +232,8 @@ public class PsiModifierListImpl extends JavaStubPsiElement TreeElement keyword = Factory.createSingleLeafElement(type, name, null, getManager()); treeElement.addInternal(keyword, keyword, null, null); } - if ((type == ABSTRACT_KEYWORD || type == NATIVE_KEYWORD) && parentTreeElement.getElementType() == METHOD){ + if ((type == JavaTokenType.ABSTRACT_KEYWORD || type == JavaTokenType.NATIVE_KEYWORD) && parentTreeElement.getElementType() == + JavaElementType.METHOD){ //Q: remove body? } } diff --git a/java/java-tests/testData/psi/cls/stubBuilder/Nullable.txt b/java/java-tests/testData/psi/cls/stubBuilder/Nullable.txt index 5ba11b57f95b..2cc8cf935c0e 100644 --- a/java/java-tests/testData/psi/cls/stubBuilder/Nullable.txt +++ b/java/java-tests/testData/psi/cls/stubBuilder/Nullable.txt @@ -1,6 +1,6 @@ PsiJavaFileStub [org.jetbrains.annotations] PsiClassStub[interface annotation name=Nullable fqn=org.jetbrains.annotations.Nullable] - PsiModifierListStub[mask=1025] + PsiModifierListStub[mask=1033] PsiAnnotationStub[@java.lang.annotation.Documented] PsiAnnotationStub[@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS)] PsiAnnotationStub[@java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD,java.lang.annotation.ElementType.FIELD,java.lang.annotation.ElementType.PARAMETER,java.lang.annotation.ElementType.LOCAL_VARIABLE})] diff --git a/java/java-tests/testData/psi/cls/stubBuilder/TestSuite.txt b/java/java-tests/testData/psi/cls/stubBuilder/TestSuite.txt index 1d1b22a070c2..0005377d49f7 100644 --- a/java/java-tests/testData/psi/cls/stubBuilder/TestSuite.txt +++ b/java/java-tests/testData/psi/cls/stubBuilder/TestSuite.txt @@ -1,6 +1,6 @@ PsiJavaFileStub [junit.framework] PsiClassStub[name=TestSuite fqn=junit.framework.TestSuite] - PsiModifierListStub[mask=1] + PsiModifierListStub[mask=9] PsiTypeParameterListStub PsiRefListStub[EXTENDS_LIST:] PsiRefListStub[IMPLEMENTS_LIST:junit.framework.Test] diff --git a/java/java-tests/testData/psi/cls/stubBuilder/TimeUnit.txt b/java/java-tests/testData/psi/cls/stubBuilder/TimeUnit.txt index 1141f3de91fc..a8e3299fcb30 100644 --- a/java/java-tests/testData/psi/cls/stubBuilder/TimeUnit.txt +++ b/java/java-tests/testData/psi/cls/stubBuilder/TimeUnit.txt @@ -1,6 +1,6 @@ PsiJavaFileStub [java.util.concurrent] PsiClassStub[enum name=TimeUnit fqn=java.util.concurrent.TimeUnit] - PsiModifierListStub[mask=17] + PsiModifierListStub[mask=25] PsiTypeParameterListStub PsiRefListStub[EXTENDS_LIST:java.lang.Enum] PsiRefListStub[IMPLEMENTS_LIST:] diff --git a/java/java-tests/testData/psi/cls/stubBuilder/UtilCollections.txt b/java/java-tests/testData/psi/cls/stubBuilder/UtilCollections.txt index d294d868a3e9..ccd8801879ab 100644 --- a/java/java-tests/testData/psi/cls/stubBuilder/UtilCollections.txt +++ b/java/java-tests/testData/psi/cls/stubBuilder/UtilCollections.txt @@ -1,6 +1,6 @@ PsiJavaFileStub [java.util] PsiClassStub[name=Collections fqn=java.util.Collections] - PsiModifierListStub[mask=1] + PsiModifierListStub[mask=9] PsiTypeParameterListStub PsiRefListStub[EXTENDS_LIST:] PsiRefListStub[IMPLEMENTS_LIST:] diff --git a/java/java-tests/testData/psi/cls/stubBuilder/UtilHashMap.txt b/java/java-tests/testData/psi/cls/stubBuilder/UtilHashMap.txt index 5c2b9d8f9cdd..de7327b8165c 100644 --- a/java/java-tests/testData/psi/cls/stubBuilder/UtilHashMap.txt +++ b/java/java-tests/testData/psi/cls/stubBuilder/UtilHashMap.txt @@ -1,6 +1,6 @@ PsiJavaFileStub [java.util] PsiClassStub[name=HashMap fqn=java.util.HashMap] - PsiModifierListStub[mask=1] + PsiModifierListStub[mask=9] PsiTypeParameterListStub PsiTypeParameter[K] PsiRefListStub[EXTENDS_BOUNDS_LIST:] diff --git a/java/java-tests/testData/psi/cls/stubBuilder/UtilList.txt b/java/java-tests/testData/psi/cls/stubBuilder/UtilList.txt index 5744cbe18cd1..3b17a0981812 100644 --- a/java/java-tests/testData/psi/cls/stubBuilder/UtilList.txt +++ b/java/java-tests/testData/psi/cls/stubBuilder/UtilList.txt @@ -1,6 +1,6 @@ PsiJavaFileStub [java.util] PsiClassStub[interface name=List fqn=java.util.List] - PsiModifierListStub[mask=1025] + PsiModifierListStub[mask=1033] PsiTypeParameterListStub PsiTypeParameter[E] PsiRefListStub[EXTENDS_BOUNDS_LIST:] diff --git a/java/java-tests/testData/psi/cls/stubBuilder/UtilMap.txt b/java/java-tests/testData/psi/cls/stubBuilder/UtilMap.txt index 2132f3b3a4a5..5c3488eb223d 100644 --- a/java/java-tests/testData/psi/cls/stubBuilder/UtilMap.txt +++ b/java/java-tests/testData/psi/cls/stubBuilder/UtilMap.txt @@ -1,6 +1,6 @@ PsiJavaFileStub [java.util] PsiClassStub[interface name=Map fqn=java.util.Map] - PsiModifierListStub[mask=1025] + PsiModifierListStub[mask=1033] PsiTypeParameterListStub PsiTypeParameter[K] PsiRefListStub[EXTENDS_BOUNDS_LIST:] diff --git a/java/java-tests/testSrc/com/intellij/psi/ClsBuilderTest.java b/java/java-tests/testSrc/com/intellij/psi/ClsBuilderTest.java index 925e2e492262..b0b951a6b623 100644 --- a/java/java-tests/testSrc/com/intellij/psi/ClsBuilderTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/ClsBuilderTest.java @@ -27,40 +27,39 @@ public class ClsBuilderTest extends LightIdeaTestCase { return JavaSdkImpl.getMockJdk15("1.5"); } - public void testSimple() throws Exception { - doTest("java/util/List.class", "UtilList.txt"); + public void testUtilList() throws Exception { + doTest("java/util/List.class"); } - public void testWithAnnotations() throws Exception { - doTest("org/jetbrains/annotations/Nullable.class", "Nullable.txt"); + public void testNullable() throws Exception { + doTest("org/jetbrains/annotations/Nullable.class"); } - public void testManyGenerics() throws Exception { - doTest("java/util/Collections.class", "UtilCollections.txt"); + public void testUtilCollections() throws Exception { + doTest("java/util/Collections.class"); } - public void testHashMap() throws Exception { - doTest("java/util/HashMap.class", "UtilHashMap.txt"); + public void testUtilHashMap() throws Exception { + doTest("java/util/HashMap.class"); } - public void testMap() throws Exception { - doTest("java/util/Map.class", "UtilMap.txt"); + public void testUtilMap() throws Exception { + doTest("java/util/Map.class"); } public void testTimeUnit() throws Exception { - doTest("java/util/concurrent/TimeUnit.class", "TimeUnit.txt"); + doTest("java/util/concurrent/TimeUnit.class"); } - public void testParameterNames() throws Exception { + public void testTestSuite() throws Exception { final String clsFilePath = JavaTestUtil.getJavaTestDataPath() + "/psi/cls/stubBuilder/TestSuite.class"; VirtualFile clsFile = LocalFileSystem.getInstance().findFileByPath(clsFilePath); doTest(clsFile, "TestSuite.txt"); } - private void doTest(final String classname, final String goldFile) throws IOException, ClsFormatException { + private void doTest(final String classname) throws IOException, ClsFormatException { VirtualFile vFile = findFile(classname); - - doTest(vFile, goldFile); + doTest(vFile, getTestName(false)+".txt"); } private static void doTest(VirtualFile vFile, String goldFile) throws ClsFormatException, IOException { diff --git a/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java b/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java index ced4a15f11ff..13d5329c75f0 100644 --- a/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java +++ b/platform/lang-impl/src/com/intellij/psi/stubs/StubUpdatingIndex.java @@ -50,7 +50,7 @@ public class StubUpdatingIndex extends CustomImplementationFileBasedIndexExtensi private static final Logger LOG = Logger.getInstance("#com.intellij.psi.stubs.StubUpdatingIndex"); public static final ID INDEX_ID = ID.create("Stubs"); - private static final int VERSION = 17; + private static final int VERSION = 18; private static final DataExternalizer KEY_EXTERNALIZER = new DataExternalizer() { public void save(final DataOutput out, final SerializedStubTree v) throws IOException { byte[] value = v.getBytes();