[java-inspections] UnrollLoopAction: track class conflicts (IDEA-331850)

GitOrigin-RevId: 314a8f32ca768b18f337bc584b1a8bfe3941248e
This commit is contained in:
Tagir Valeev
2023-09-18 17:35:23 +02:00
committed by intellij-monorepo-bot
parent b45abaca53
commit 7c7e99ab98
5 changed files with 34 additions and 4 deletions

View File

@@ -256,12 +256,17 @@ public class UnrollLoopAction extends PsiUpdateModCommandAction<PsiLoopStatement
if (statement instanceof PsiDeclarationStatement declaration) {
if (expressions.size() > 1) return false;
for (PsiElement element : declaration.getDeclaredElements()) {
PsiResolveHelper resolveHelper = PsiResolveHelper.getInstance(block.getProject());
if (element instanceof PsiVariable variable) {
String name = variable.getName();
if (name != null) {
if (PsiResolveHelper.getInstance(block.getProject()).resolveReferencedVariable(name, parentBlock) != null) {
return false;
}
if (name != null && resolveHelper.resolveReferencedVariable(name, parentBlock) != null) {
return false;
}
}
if (element instanceof PsiClass psiClass) {
String name = psiClass.getName();
if (name != null && resolveHelper.resolveReferencedClass(name, parentBlock) != null) {
return false;
}
}
}

View File

@@ -0,0 +1,11 @@
// "Unroll loop" "true-preview"
class X {
void test() {
{
class Y {
int a = 1;
}
}
class Y {}
}
}

View File

@@ -2,6 +2,8 @@
class X {
void test() {
int y = 1 + 1;
class Y {
}
System.out.println(y);
}
}

View File

@@ -0,0 +1,11 @@
// "Unroll loop" "true-preview"
class X {
void test() {
<caret>for (int x : new int[]{1}) {
class Y {
int a = x;
}
}
class Y {}
}
}

View File

@@ -3,6 +3,7 @@ class X {
void test() {
<caret>for (int x : new int[]{1}) {
int y = x + 1;
class Y{}
System.out.println(y);
}
}