mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
static flag for top level classes
This commit is contained in:
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PsiModifierListStub> implements PsiModifierList, Constants {
|
||||
public class PsiModifierListImpl extends JavaStubPsiElement<PsiModifierListStub> implements PsiModifierList {
|
||||
private static final Map<String, IElementType> NAME_TO_KEYWORD_TYPE_MAP = new THashMap<String, IElementType>();
|
||||
|
||||
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<String> NAME_TO_MODIFIER_FLAG_MAP = new TObjectIntHashMap<String>();
|
||||
@@ -94,40 +95,40 @@ public class PsiModifierListImpl extends JavaStubPsiElement<PsiModifierListStub>
|
||||
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<PsiModifierListStub>
|
||||
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<PsiModifierListStub>
|
||||
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<PsiModifierListStub>
|
||||
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?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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})]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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<java.util.concurrent.TimeUnit>]
|
||||
PsiRefListStub[IMPLEMENTS_LIST:]
|
||||
|
||||
@@ -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:]
|
||||
|
||||
@@ -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:]
|
||||
|
||||
@@ -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:]
|
||||
|
||||
@@ -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:]
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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<Integer, SerializedStubTree> INDEX_ID = ID.create("Stubs");
|
||||
private static final int VERSION = 17;
|
||||
private static final int VERSION = 18;
|
||||
private static final DataExternalizer<SerializedStubTree> KEY_EXTERNALIZER = new DataExternalizer<SerializedStubTree>() {
|
||||
public void save(final DataOutput out, final SerializedStubTree v) throws IOException {
|
||||
byte[] value = v.getBytes();
|
||||
|
||||
Reference in New Issue
Block a user