From 301b5e71cfb071bc673f8d7d726dc947c3060a2e Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Sat, 24 May 2014 21:43:53 +0400 Subject: [PATCH] java: injected methods excluded from enum stub --- .../psi/impl/compiled/ClassFileStubBuilder.java | 2 +- .../psi/impl/compiled/StubBuildingVisitor.java | 6 ++++++ .../java-tests/testData/psi/cls/mirror/EmptyEnum.txt | 4 ---- .../testData/psi/cls/mirror/EnumWithFields.txt | 4 ---- .../testData/psi/cls/mirror/SimpleEnum.txt | 4 ---- .../psi/cls/stubBuilder/AnnotatedEnumConstructor.txt | 12 ------------ .../testData/psi/cls/stubBuilder/TimeUnit.txt | 12 ------------ 7 files changed, 7 insertions(+), 37 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClassFileStubBuilder.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClassFileStubBuilder.java index 4f91aea55686..7026f7c94c94 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClassFileStubBuilder.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClassFileStubBuilder.java @@ -40,7 +40,7 @@ import static com.intellij.psi.compiled.ClassFileDecompilers.Full; public class ClassFileStubBuilder implements BinaryFileStubBuilder { private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.compiled.ClassFileStubBuilder"); - public static final int STUB_VERSION = 10; + public static final int STUB_VERSION = 11; @Override public boolean acceptsFile(@NotNull VirtualFile file) { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java index 041e51d33931..c49da3341e46 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java @@ -408,6 +408,12 @@ public class StubBuildingVisitor extends ClassVisitor { if (SYNTHETIC_CLASS_INIT_METHOD.equals(name)) return null; + // skip semi-synthetic enum methods + if (myResult.isEnum()) { + if ("values".equals(name) && desc.startsWith("()")) return null; + if ("valueOf".equals(name) && desc.startsWith("(Ljava/lang/String;)")) return null; + } + boolean isDeprecated = (access & Opcodes.ACC_DEPRECATED) != 0; boolean isConstructor = SYNTHETIC_INIT_METHOD.equals(name); boolean isVarargs = (access & Opcodes.ACC_VARARGS) != 0; diff --git a/java/java-tests/testData/psi/cls/mirror/EmptyEnum.txt b/java/java-tests/testData/psi/cls/mirror/EmptyEnum.txt index 808cc55b2079..4ee8f64bb39f 100644 --- a/java/java-tests/testData/psi/cls/mirror/EmptyEnum.txt +++ b/java/java-tests/testData/psi/cls/mirror/EmptyEnum.txt @@ -7,9 +7,5 @@ package pkg; enum EmptyEnum { ; - public static pkg.EmptyEnum[] values() { /* compiled code */ } - - public static pkg.EmptyEnum valueOf(java.lang.String s) { /* compiled code */ } - private EmptyEnum() { /* compiled code */ } } \ No newline at end of file diff --git a/java/java-tests/testData/psi/cls/mirror/EnumWithFields.txt b/java/java-tests/testData/psi/cls/mirror/EnumWithFields.txt index 8823f103c25d..caff9a6e7a2d 100644 --- a/java/java-tests/testData/psi/cls/mirror/EnumWithFields.txt +++ b/java/java-tests/testData/psi/cls/mirror/EnumWithFields.txt @@ -10,9 +10,5 @@ public enum EnumWithFields { private boolean f1; static boolean f2; - public static pkg.EnumWithFields[] values() { /* compiled code */ } - - public static pkg.EnumWithFields valueOf(java.lang.String s) { /* compiled code */ } - private EnumWithFields() { /* compiled code */ } } \ No newline at end of file diff --git a/java/java-tests/testData/psi/cls/mirror/SimpleEnum.txt b/java/java-tests/testData/psi/cls/mirror/SimpleEnum.txt index 654770a05777..6ed2d93c1aa5 100644 --- a/java/java-tests/testData/psi/cls/mirror/SimpleEnum.txt +++ b/java/java-tests/testData/psi/cls/mirror/SimpleEnum.txt @@ -7,9 +7,5 @@ package pkg; public enum SimpleEnum { E1, E2; - public static pkg.SimpleEnum[] values() { /* compiled code */ } - - public static pkg.SimpleEnum valueOf(java.lang.String s) { /* compiled code */ } - private SimpleEnum() { /* compiled code */ } } \ No newline at end of file diff --git a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.txt b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.txt index 2ed8f00b29c0..89cd6e786467 100644 --- a/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.txt +++ b/java/java-tests/testData/psi/cls/stubBuilder/AnnotatedEnumConstructor.txt @@ -10,18 +10,6 @@ PsiJavaFileStub [] PsiModifierListStub[mask=25] PsiFieldStub[enumconst C:AnnotatedEnumConstructor] PsiModifierListStub[mask=25] - PsiMethodStub[values:AnnotatedEnumConstructor[]] - PsiModifierListStub[mask=9] - PsiTypeParameterListStub - PsiParameterListStub - PsiRefListStub[THROWS_LIST:] - PsiMethodStub[valueOf:AnnotatedEnumConstructor] - PsiModifierListStub[mask=9] - PsiTypeParameterListStub - PsiParameterListStub - PsiParameterStub[name:java.lang.String] - PsiModifierListStub[mask=0] - PsiRefListStub[THROWS_LIST:] PsiMethodStub[cons varargs AnnotatedEnumConstructor:void] PsiModifierListStub[mask=2] PsiTypeParameterListStub diff --git a/java/java-tests/testData/psi/cls/stubBuilder/TimeUnit.txt b/java/java-tests/testData/psi/cls/stubBuilder/TimeUnit.txt index ffbba35b14a6..800f747bb1c5 100644 --- a/java/java-tests/testData/psi/cls/stubBuilder/TimeUnit.txt +++ b/java/java-tests/testData/psi/cls/stubBuilder/TimeUnit.txt @@ -18,18 +18,6 @@ PsiJavaFileStub [java.util.concurrent] PsiModifierListStub[mask=26] PsiFieldStub[overflows:long[]] PsiModifierListStub[mask=26] - PsiMethodStub[values:java.util.concurrent.TimeUnit[]] - PsiModifierListStub[mask=25] - PsiTypeParameterListStub - PsiParameterListStub - PsiRefListStub[THROWS_LIST:] - PsiMethodStub[valueOf:java.util.concurrent.TimeUnit] - PsiModifierListStub[mask=9] - PsiTypeParameterListStub - PsiParameterListStub - PsiParameterStub[p1:java.lang.String] - PsiModifierListStub[mask=0] - PsiRefListStub[THROWS_LIST:] PsiMethodStub[cons TimeUnit:void] PsiModifierListStub[mask=2] PsiTypeParameterListStub