mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-refactoring] IJ-CR-122503 IDEA-340596 Unable to rename file with implicit class
- check identifier GitOrigin-RevId: 143e8d34a9eae594133c3f9ff66b18affa60ed53
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a4329cbe15
commit
fab280de6b
+2
-3
@@ -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()
|
||||
|
||||
+1
-1
@@ -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
-1
@@ -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
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
<error descr="Implicitly declared class's file name is not a valid identifier">void main() {}</error>
|
||||
+5
@@ -32,6 +32,11 @@ class ImplicitClassHighlightingTest : LightJavaCodeInsightFixtureTestCase() {
|
||||
doTest()
|
||||
}
|
||||
|
||||
fun testIncorrectImplicitClassName() {
|
||||
myFixture.configureByFile( "Incorrect.implicit.class.name.java")
|
||||
myFixture.checkHighlighting()
|
||||
}
|
||||
|
||||
fun testNestedReferenceHighlighting() {
|
||||
doTest()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user