[java] Return correct JVM name for unnamed classes in ClassUtil

IJ-CR-115084

GitOrigin-RevId: 844a16051344f7e0ad591b2bc672e0f528447180
This commit is contained in:
Louis Vignier
2023-10-28 02:33:06 +02:00
committed by intellij-monorepo-bot
parent ff764c7aad
commit fccc651088
6 changed files with 12 additions and 31 deletions

View File

@@ -15,7 +15,7 @@ import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.jsp.JspFile;
import com.intellij.psi.util.JavaUnnamedClassUtil;
import com.intellij.psi.util.ClassUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
@@ -282,7 +282,7 @@ public final class JVMNameUtil {
return null;
}
if (aClass instanceof PsiUnnamedClass a) {
return JavaUnnamedClassUtil.getJvmName(a);
return ClassUtil.getJVMClassName(a);
}
String name = aClass.getName();
if (name == null) {

View File

@@ -11,7 +11,6 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.*;
import com.intellij.psi.util.JavaUnnamedClassUtil;
import com.intellij.psi.util.PsiMethodUtil;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
@@ -61,11 +60,9 @@ public abstract class AbstractApplicationConfigurationProducer<T extends Applica
private void setupConfiguration(T configuration, final PsiClass aClass, final ConfigurationContext context) {
if (aClass instanceof PsiUnnamedClass) {
configuration.setMainClassName(JavaUnnamedClassUtil.getJvmName(aClass.getContainingFile().getName()));
configuration.setUnnamedClassConfiguration(true);
} else {
configuration.setMainClassName(JavaExecutionUtil.getRuntimeQualifiedName(aClass));
}
configuration.setMainClassName(JavaExecutionUtil.getRuntimeQualifiedName(aClass));
configuration.setGeneratedName();
setupConfigurationModule(context, configuration);
}
@@ -80,9 +77,7 @@ public abstract class AbstractApplicationConfigurationProducer<T extends Applica
Location<?> singleClassLocation = JavaExecutionUtil.stepIntoSingleClass(location);
final PsiClass aClass = PsiTreeUtil.getParentOfType(singleClassLocation.getPsiElement(), PsiClass.class, false);
if (aClass != null) {
final String className = aClass instanceof PsiUnnamedClass
? JavaUnnamedClassUtil.getJvmName(aClass.getContainingFile().getName())
: JavaExecutionUtil.getRuntimeQualifiedName(aClass);
final String className = JavaExecutionUtil.getRuntimeQualifiedName(aClass);
if (!Objects.equals(className, appConfiguration.getMainClassName())) return false;
final PsiMethod method = PsiTreeUtil.getParentOfType(context.getPsiLocation(), PsiMethod.class, false);

View File

@@ -12,11 +12,9 @@ import com.intellij.openapi.ui.ValidationInfo;
import com.intellij.openapi.util.Predicates;
import com.intellij.psi.impl.java.stubs.index.JavaStubIndexKeys;
import com.intellij.psi.stubs.StubIndex;
import com.intellij.psi.util.JavaUnnamedClassUtil;
import com.intellij.ui.EditorTextField;
import com.intellij.ui.TextFieldWithAutoCompletion;
import com.intellij.ui.TextFieldWithAutoCompletion.StringsCompletionProvider;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.GridBag;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
@@ -102,10 +100,7 @@ public final class JavaApplicationSettingsEditor extends JavaSettingsEditorBase<
public @NotNull Collection<String> getItems(String prefix, boolean cached, CompletionParameters parameters) {
return DumbService.isDumb(getProject())
? List.of()
: ContainerUtil.map(
StubIndex.getInstance().getAllKeys(JavaStubIndexKeys.UNNAMED_CLASSES, getProject()),
JavaUnnamedClassUtil::getJvmName
);
: StubIndex.getInstance().getAllKeys(JavaStubIndexKeys.UNNAMED_CLASSES, getProject());
}
}, true, null);
CommonParameterFragments.setMonospaced(myUnnamedClassField);

View File

@@ -6,9 +6,9 @@ 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.JavaUnnamedClassUtil;
import com.intellij.psi.util.PsiMethodUtil;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -38,7 +38,7 @@ public final class HighlightUnnamedClassUtil {
if (!HighlightingFeature.UNNAMED_CLASSES.isAvailable(file)) return null;
PsiUnnamedClass unnamedClass = JavaUnnamedClassUtil.getUnnamedClassFor(file);
if (unnamedClass == null) return null;
String name = JavaUnnamedClassUtil.getJvmName(unnamedClass);
String name = ClassUtil.getJVMClassName(unnamedClass);
if (name == null) {
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR)
.range(file)

View File

@@ -17,6 +17,7 @@ import com.intellij.psi.scope.PsiScopeProcessor;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.util.JavaUnnamedClassUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -40,6 +41,10 @@ public class PsiUnnamedClassImpl extends JavaStubPsiElement<PsiClassStub<?>> imp
@Override
public @Nullable String getQualifiedName() {
PsiElement parent = getParent();
if (parent instanceof PsiJavaFile) {
return JavaUnnamedClassUtil.getJvmName(((PsiJavaFile)parent).getName());
}
return null;
}

View File

@@ -36,20 +36,6 @@ public final class JavaUnnamedClassUtil {
return null;
}
/**
* @return JVM name if the file name is a valid class identifier (e.g., contains no space)
*/
public static @Nullable String getJvmName(@NotNull PsiUnnamedClass unnamedClass) {
PsiFile containingFile = unnamedClass.getContainingFile();
if (containingFile == null) return null;
String name = containingFile.getName();
int extensionIndex = name.lastIndexOf(".java");
if (extensionIndex == -1) return null;
String jvmName = name.substring(0, extensionIndex);
if (!StringUtil.isJavaIdentifier(jvmName)) return null;
return jvmName;
}
/**
* @param name the name of the unnamed class (might include the ".java" extension)
* @return the JVM name of the unnamed class