Java: fix safe delete on for loop initializer with multiple declarations (IDEA-379589)

GitOrigin-RevId: 9a4d5e48fe41362f2a4c34d2d1bb709b6174648f
This commit is contained in:
Bas Leijdekkers
2025-09-19 17:27:37 +00:00
committed by intellij-monorepo-bot
parent 99dc01d75a
commit 76599bec44
4 changed files with 24 additions and 31 deletions
@@ -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.psi.impl.source.tree.java;
import com.intellij.lang.ASTNode;
@@ -103,7 +103,7 @@ public class PsiLocalVariableImpl extends CompositePsiElement implements PsiLoca
}
@Override
public boolean hasModifierProperty(@NotNull String name) {
public boolean hasModifierProperty(@PsiModifier.ModifierConstant @NotNull String name) {
final PsiModifierList modifierList = getModifierList();
return modifierList != null && modifierList.hasModifierProperty(name);
}
@@ -150,7 +150,7 @@ public class PsiLocalVariableImpl extends CompositePsiElement implements PsiLoca
final PsiElement psiElement = SourceTreeToPsiMap.treeElementToPsi(statement);
final PsiElement[] variables = psiElement instanceof PsiDeclarationStatement
? ((PsiDeclarationStatement)psiElement).getDeclaredElements() : PsiElement.EMPTY_ARRAY;
if (variables.length > 1) {
if (variables.length > 1 && !(statement.getTreeParent() instanceof PsiForStatement)) {
final PsiModifierList modifierList = getModifierList();
final PsiTypeElement typeElement = getTypeElement();
assert modifierList != null : getText();
@@ -316,7 +316,7 @@ public class PsiLocalVariableImpl extends CompositePsiElement implements PsiLoca
}
@Override
public Icon getElementIcon(final int flags) {
public Icon getElementIcon(int flags) {
IconManager iconManager = IconManager.getInstance();
RowIcon baseIcon = iconManager.createLayeredIcon(this, iconManager.getPlatformIcon(PlatformIcons.Variable),
ElementPresentationUtil.getFlags(this, false));
@@ -0,0 +1,6 @@
class C {
void x() {
for (int deleteMe<caret> = 0, i = 0; i < 10; i++) {}
}
}
@@ -0,0 +1,6 @@
class C {
void x() {
for (int i = 0; i < 10; i++) {}
}
}
@@ -419,33 +419,14 @@ public class SafeDeleteTest extends MultiFileTestCase {
});
}
public void testDeepDeleteFieldAndInitializerMethod() {
doSingleFileTest();
}
public void testDeleteMethodCascadeWithField() {
doSingleFileTest();
}
public void testForInitExpr() {
doSingleFileTest();
}
public void testForInitList() {
doSingleFileTest();
}
public void testForUpdateExpr() {
doSingleFileTest();
}
public void testForUpdateList() {
doSingleFileTest();
}
public void testUpdateContractOnParameterRemoval() {
doSingleFileTest();
}
public void testDeepDeleteFieldAndInitializerMethod() { doSingleFileTest(); }
public void testDeleteMethodCascadeWithField() { doSingleFileTest(); }
public void testForInitExpr() { doSingleFileTest(); }
public void testForInitList() { doSingleFileTest(); }
public void testForInitDeclaration() { doSingleFileTest(); }
public void testForUpdateExpr() { doSingleFileTest(); }
public void testForUpdateList() { doSingleFileTest(); }
public void testUpdateContractOnParameterRemoval() { doSingleFileTest(); }
public void testSealedParent() {
IdeaTestUtil.setModuleLanguageLevel(getModule(), LanguageLevel.JDK_17, getTestRootDisposable());