From 21f3a61991cccdce6bf82ac5ed2f3bd5fd331b5f Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 7 Jan 2016 15:33:27 +0100 Subject: [PATCH] [java] inner class detection corrected; early exit added --- .../com/intellij/psi/ClassFileViewProvider.java | 8 ++++---- .../psi/cls/mirror/pkg/KindaInner$Class$1.class | Bin 0 -> 369 bytes .../psi/cls/mirror/pkg/KindaInner$Class.class | Bin 210 -> 363 bytes .../cls/mirror/src/pkg/KindaInner$Class.java | 6 +++++- 4 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/psi/cls/mirror/pkg/KindaInner$Class$1.class diff --git a/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java b/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java index 970bd06075f0..d319ab58b2f6 100644 --- a/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java +++ b/java/java-psi-impl/src/com/intellij/psi/ClassFileViewProvider.java @@ -83,19 +83,19 @@ public class ClassFileViewProvider extends SingleRootFileViewProvider { @Override public void visitOuterClass(String owner, String name, String desc) { ref.set(Boolean.TRUE); + throw new ProcessCanceledException(); } @Override public void visitInnerClass(String name, String outer, String inner, int access) { - if (inner == null || childName.equals(inner) && outer != null && parentName.equals(outer.substring(outer.lastIndexOf('/') + 1))) { + if ((inner == null || childName.equals(inner)) && outer != null && parentName.equals(outer.substring(outer.lastIndexOf('/') + 1))) { ref.set(Boolean.TRUE); + throw new ProcessCanceledException(); } } }, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); } - catch (ProcessCanceledException e) { - throw e; - } + catch (ProcessCanceledException ignored) { } catch (Exception e) { Logger.getInstance(ClassFileViewProvider.class).warn(file.getPath(), e); } diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/KindaInner$Class$1.class b/java/java-tests/testData/psi/cls/mirror/pkg/KindaInner$Class$1.class new file mode 100644 index 0000000000000000000000000000000000000000..18d442a2f9cc859f818925a1322de9c987af60c4 GIT binary patch literal 369 zcmZutK}*9h7=2&cwXQ~2bscyU>0z6o4t7(#3+`~WAxf^(Fx%p3a}U8fZ&%aZIg3CZ~FSOJiF5-mAA&IBAH~; z+6z`(YNN|5!ePHzGMEv(NuDY~XR3{Q*sSNOc#`vscf!YfQ!LbtuA2D2{pquOlYH&k zEVA5cv%FX3Do+Kvhy_~k1p>qzt|?nGB8WO`9aULEw@F8!HNouHvZHpbYxpN?}!{~ACVxL*a=Po0UKanj<&j0`b literal 0 HcmV?d00001 diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/KindaInner$Class.class b/java/java-tests/testData/psi/cls/mirror/pkg/KindaInner$Class.class index ba7b88b931aae8120e8b92b13d226975ba65b269..f3f6bfe59b9aaf9b957d6f71739c0bce135871c0 100644 GIT binary patch literal 363 zcmZvYK}!QM6olvPw!6BnwrUkT2p)>G9$W-(ikE^Q7Ck5xkJ&bq)NLxet^doDpx_Vi zM~Rah6r_RVeasu?CHeY({{(P~R)RViLq_tn`AwsVv9|#_44))W2Q(7#J8#7Ia(8MxUQcqZy-O^i}yW?^8RxIoL1L4kn@CnF^a?cAz diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/KindaInner$Class.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/KindaInner$Class.java index 84a0dde32da6..e3e1d14db3fc 100644 --- a/java/java-tests/testData/psi/cls/mirror/src/pkg/KindaInner$Class.java +++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/KindaInner$Class.java @@ -1,3 +1,7 @@ package pkg; -class KindaInner$Class { } \ No newline at end of file +class KindaInner$Class { + void m() { + new KindaInner$Class() { }; + } +} \ No newline at end of file