IDEA-172425 Fix bug when array.length marked as inaccessible appcode/182.1579
authorVitaliy.Bibaev <vitaliy.bibaev@jetbrains.com>
Thu, 12 Apr 2018 15:03:21 +0000 (18:03 +0300)
committerVitaliy.Bibaev <vitaliy.bibaev@jetbrains.com>
Thu, 12 Apr 2018 15:03:21 +0000 (18:03 +0300)
java/java-impl/src/com/intellij/refactoring/extractMethodObject/reflect/PsiReflectionAccessUtil.java

index 1519682bc574129d05f8637ea05063c9110bc87f..781fa229d037d2ac7cdd3d864d11ce799d266a2f 100644 (file)
@@ -1,6 +1,8 @@
 // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.refactoring.extractMethodObject.reflect;
 
+import com.intellij.codeInsight.PsiEquivalenceUtil;
+import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.psi.*;
 import com.intellij.psi.util.PsiUtil;
@@ -24,6 +26,9 @@ class PsiReflectionAccessUtil {
   @Contract("null -> false")
   public static boolean isAccessible(@Nullable PsiClass psiClass) {
     if (psiClass == null) return false;
+
+    // currently, we use dummy psi class "_Array_" to represent arrays which is an inner of package-private _Dummy_ class.
+    if (isArrayClass(psiClass)) return true;
     while (psiClass != null) {
       if (!psiClass.hasModifierProperty(PsiModifier.PUBLIC)) {
         return false;
@@ -95,4 +100,10 @@ class PsiReflectionAccessUtil {
 
     return name;
   }
+
+  private static boolean isArrayClass(@NotNull PsiClass psiClass) {
+    Project project = psiClass.getProject();
+    PsiClass arrayClass = JavaPsiFacade.getElementFactory(project).getArrayClass(PsiUtil.getLanguageLevel(psiClass));
+    return PsiEquivalenceUtil.areElementsEquivalent(psiClass, arrayClass);
+  }
 }