Java: fix accessibility check when inlining superclass (IDEA-335158)

GitOrigin-RevId: ca48bfdfea8085fccedef9489b2c32ab82fcfcfb
This commit is contained in:
Bas Leijdekkers
2025-01-22 23:29:29 +00:00
committed by intellij-monorepo-bot
parent f27ac8953d
commit c482950f2e
9 changed files with 44 additions and 9 deletions
@@ -1,4 +1,4 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.refactoring.util;
import com.intellij.java.refactoring.JavaRefactoringBundle;
@@ -115,14 +115,14 @@ public final class RefactoringConflictsUtilImpl implements RefactoringConflictsU
}
public static void checkAccessibilityConflictsAfterMove(@NotNull PsiReference reference,
@NotNull PsiMember member,
@Nullable PsiModifierList modifierListCopy,
@Nullable PsiClass targetClass,
@NotNull Set<? extends PsiMember> membersToMove,
@NotNull MultiMap<PsiElement, @DialogMessage String> conflicts) {
JavaPsiFacade manager = JavaPsiFacade.getInstance(member.getProject());
@NotNull PsiMember member,
@Nullable PsiModifierList modifierListCopy,
@Nullable PsiClass targetClass,
@NotNull Set<? extends PsiMember> membersToMove,
@NotNull MultiMap<PsiElement, @DialogMessage String> conflicts) {
PsiElement ref = reference.getElement();
if (!RefactoringHierarchyUtil.willBeInTargetClass(ref, membersToMove, targetClass, false)) {
if (!RefactoringHierarchyUtil.willBeInTargetClass(ref, membersToMove, targetClass, true)) {
JavaPsiFacade manager = JavaPsiFacade.getInstance(member.getProject());
// check for target class accessibility
if (targetClass != null && !manager.getResolveHelper().isAccessible(targetClass, targetClass.getModifierList(), ref, null, null)) {
String message = JavaRefactoringBundle.message("0.is.1.and.will.not.be.accessible.from.2.in.the.target.class",
@@ -0,0 +1,9 @@
import p.Test;
public class Usage extends Test {
public void logSomething() {
if (Math.random() > 0.5) {
System.out.println(cool);
}
}
}
@@ -0,0 +1,5 @@
package p;
public class Test {
protected final String cool = "true";
}
@@ -0,0 +1,9 @@
import p.Test;
public class Usage extends Test {
public void logSomething() {
if (Math.random() > 0.5) {
System.out.println(cool);
}
}
}
@@ -0,0 +1,6 @@
package p;
import p1.Super;
public class Test extends Super {
}
@@ -0,0 +1,5 @@
package p1;
public class Super {
protected final String cool = "true";
}
@@ -1,4 +1,4 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.java.refactoring;
import com.intellij.JavaTestUtil;
@@ -41,6 +41,7 @@ public class InlineSuperClassTest extends LightMultiFileTestCase {
public void testClassInitializers() { doTest(); }
public void testStaticMembers() { doTest(); }
public void testSuperReference() { doTest(); }
public void testProtectedMember() { doTest(); }
public void testInnerClassReference() { doTest(); }
public void testStaticImport() { doTest(); }
public void testNewArrayInitializerExpr() { doTest(); }