[java-refactoring] IJ-CR-122503 IDEA-340596 Unable to rename file with implicit class

- check identifier

GitOrigin-RevId: 143e8d34a9eae594133c3f9ff66b18affa60ed53
This commit is contained in:
Mikhail Pyltsin
2023-12-19 13:34:28 +00:00
committed by intellij-monorepo-bot
parent a4329cbe15
commit fab280de6b
5 changed files with 12 additions and 5 deletions
@@ -6,7 +6,6 @@ import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.codeInsight.daemon.impl.HighlightInfoType;
import com.intellij.codeInsight.intention.QuickFixFactory;
import com.intellij.psi.*;
import com.intellij.psi.util.ClassUtil;
import com.intellij.psi.util.JavaImplicitClassUtil;
import com.intellij.psi.util.PsiMethodUtil;
import com.intellij.util.containers.ContainerUtil;
@@ -38,8 +37,8 @@ public final class HighlightImplicitClassUtil {
if (!HighlightingFeature.IMPLICIT_CLASSES.isAvailable(file)) return null;
PsiImplicitClass implicitClass = JavaImplicitClassUtil.getImplicitClassFor(file);
if (implicitClass == null) return null;
String name = ClassUtil.getJVMClassName(implicitClass);
if (!PsiNameHelper.getInstance(file.getProject()).isQualifiedName(name)) {
String name = implicitClass.getQualifiedName();
if (!PsiNameHelper.getInstance(file.getProject()).isIdentifier(name)) {
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR)
.range(file)
.fileLevelAnnotation()
@@ -55,7 +55,7 @@ public class RenameJavaImplicitClassProcessor extends RenamePsiFileProcessor {
protected void canRun() throws ConfigurationException {
String name = super.getNewName();
if (Comparing.strEqual(name, myImplicitClass.getQualifiedName())) throw new ConfigurationException(null);
if (!PsiNameHelper.getInstance(myImplicitClass.getProject()).isQualifiedName(name)) {
if (!PsiNameHelper.getInstance(myImplicitClass.getProject()).isIdentifier(name)) {
throw new ConfigurationException(LangBundle.message("dialog.message.valid.identifier", getNewName()));
}
}
@@ -3,6 +3,7 @@ package com.intellij.refactoring.rename;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
@@ -15,6 +16,7 @@ import org.jetbrains.annotations.TestOnly;
public class RenameJavaImplicitClassRenamer implements RenameHandler {
private final RenameJavaImplicitClassProcessor myProcessor = new RenameJavaImplicitClassProcessor();
private static final Logger LOG = Logger.getInstance(RenameJavaImplicitClassRenamer.class);
@Override
public boolean isAvailableOnDataContext(@NotNull DataContext dataContext) {
@@ -37,7 +39,7 @@ public class RenameJavaImplicitClassRenamer implements RenameHandler {
@Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file, DataContext dataContext) {
//do nothing, it is not expected to be call from editor
LOG.error("Must not be called, because implicit classes are not available from editor");
}
@Override
@@ -0,0 +1 @@
<error descr="Implicitly declared class's file name is not a valid identifier">void main() {}</error>
@@ -32,6 +32,11 @@ class ImplicitClassHighlightingTest : LightJavaCodeInsightFixtureTestCase() {
doTest()
}
fun testIncorrectImplicitClassName() {
myFixture.configureByFile( "Incorrect.implicit.class.name.java")
myFixture.checkHighlighting()
}
fun testNestedReferenceHighlighting() {
doTest()
}