[java] Remove JavaUnnamedClassIndex

The index made tests fail, reverting until a better solution is found.

IJ-CR-115084

GitOrigin-RevId: 5b4ca90aa8059e70c656d3e9ff80868940670736
This commit is contained in:
Louis Vignier
2023-09-19 05:49:03 +00:00
committed by intellij-monorepo-bot
parent 6e9c57621a
commit 7da0863c33
4 changed files with 9 additions and 110 deletions
@@ -23,7 +23,6 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.options.SettingsEditorGroup;
import com.intellij.openapi.project.IndexNotReadyException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.openapi.util.io.FileUtilRt;
@@ -32,16 +31,10 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiJavaFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.java.JavaUnnamedClassIndexKt;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.JavaUnnamedClassUtil;
import com.intellij.psi.util.PsiMethodUtil;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.util.PathUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.indexing.FileBasedIndex;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -191,40 +184,15 @@ public class ApplicationConfiguration extends JavaRunConfigurationBase
@NotNull
public JavaRunConfigurationModule checkClass() throws RuntimeConfigurationException {
final JavaRunConfigurationModule configurationModule = getConfigurationModule();
String mainClassName = getMainClassName();
try {
PsiClass psiClass = getOptions().isUnnamedClassConfiguration()
? checkUnnammedClassConfiguration(configurationModule, mainClassName)
: configurationModule.checkModuleAndClassName(getMainClassName(), ExecutionBundle.message("no.main.class.specified.error.text"));
if (getOptions().isUnnamedClassConfiguration()) {
// TODO: Check Unnamed class index
} else {
final PsiClass psiClass = configurationModule.checkModuleAndClassName(getMainClassName(), ExecutionBundle.message("no.main.class.specified.error.text"));
if (psiClass == null || !PsiMethodUtil.hasMainMethod(psiClass)) {
throw new RuntimeConfigurationWarning(ExecutionBundle.message("main.method.not.found.in.class.error.message", getMainClassName()));
}
} catch (IndexNotReadyException ignored) {}
return configurationModule;
}
@Nullable
private PsiClass checkUnnammedClassConfiguration(JavaRunConfigurationModule configurationModule, String mainClassName)
throws RuntimeConfigurationException, IndexNotReadyException {
configurationModule.checkForWarning();
if (mainClassName != null) {
var virtualFileIterator = FileBasedIndex.getInstance().getContainingFiles(
JavaUnnamedClassIndexKt.getId(),
mainClassName + ".java",
GlobalSearchScope.allScope(getProject())
).iterator();
if (virtualFileIterator.hasNext()) {
var virtualFile = virtualFileIterator.next();
var psiFile = PsiManager.getInstance(getProject()).findFile(virtualFile);
if (psiFile instanceof PsiJavaFile javaFile) {
return JavaUnnamedClassUtil.getUnnamedClassFor(javaFile);
}
}
}
return null;
return configurationModule;
}
@Override
@@ -4,18 +4,11 @@ package com.intellij.execution.application;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.configurations.RuntimeConfigurationException;
import com.intellij.execution.ui.*;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.ui.ValidationInfo;
import com.intellij.openapi.util.Predicates;
import com.intellij.psi.impl.java.JavaUnnamedClassIndexKt;
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.indexing.FileBasedIndex;
import com.intellij.ui.components.JBTextField;
import com.intellij.util.ui.GridBag;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
@@ -74,7 +67,7 @@ public final class JavaApplicationSettingsEditor extends JavaSettingsEditorBase<
private class MainClassPanel extends JPanel {
private final ClassEditorField myClassEditorField;
private final TextFieldWithAutoCompletion<String> myUnnamedClassField;
private final JBTextField myUnnamedClassField;
private boolean myIsUnnamedClassConfiguration;
private MainClassPanel(ModuleClasspathCombo classpathCombo) {
@@ -95,24 +88,11 @@ public final class JavaApplicationSettingsEditor extends JavaSettingsEditorBase<
GridBag constraints = new GridBag().setDefaultFill(GridBagConstraints.HORIZONTAL).setDefaultWeightX(1.0);
add(myClassEditorField, constraints.nextLine());
myUnnamedClassField = new TextFieldWithAutoCompletion<>(
getProject(),
new StringsCompletionProvider(
DumbService.isDumb(getProject())
? List.of()
: ContainerUtil.map(
FileBasedIndex.getInstance().getAllKeys(JavaUnnamedClassIndexKt.getId(), getProject()),
fileName -> JavaUnnamedClassUtil.trimExtension(fileName)
),
AllIcons.RunConfigurations.Application
),
true,
""
);
myUnnamedClassField = new JBTextField();
CommonParameterFragments.setMonospaced(myUnnamedClassField);
String unnamedClassPlaceholder = ExecutionBundle.message("application.configuration.main.unnamed.class.placeholder");
myUnnamedClassField.setVisible(myIsUnnamedClassConfiguration);
myUnnamedClassField.setPlaceholder(unnamedClassPlaceholder);
myUnnamedClassField.getEmptyText().setText(unnamedClassPlaceholder);
myUnnamedClassField.getAccessibleContext().setAccessibleName(unnamedClassPlaceholder);
setMinimumWidth(myUnnamedClassField, 300);
add(myUnnamedClassField, constraints.nextLine());
@@ -37,7 +37,6 @@
<fileBasedIndex implementation="com.intellij.psi.impl.java.stubs.index.JavaSourceModuleNameIndex"/>
<fileBasedIndex implementation="com.intellij.psi.impl.search.JavaNullMethodArgumentIndex"/>
<fileBasedIndex implementation="com.intellij.psi.impl.java.JavaFunctionalExpressionIndex"/>
<fileBasedIndex implementation="com.intellij.psi.impl.java.JavaUnnamedClassIndex"/>
<stubIndex implementation="com.intellij.psi.impl.java.stubs.index.JavaModuleNameIndex"/>
<stubIndex implementation="com.intellij.psi.impl.java.stubs.index.JavaMethodParameterTypesIndex"/>
<stubIndex implementation="com.intellij.psi.impl.java.stubs.index.JavaSuperClassNameOccurenceIndex"/>
@@ -1,48 +0,0 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.psi.impl.java
import com.intellij.ide.highlighter.JavaFileType
import com.intellij.lang.LighterASTNode
import com.intellij.psi.impl.java.stubs.JavaStubElementTypes
import com.intellij.psi.impl.source.JavaFileElementType
import com.intellij.psi.impl.source.tree.RecursiveLighterASTNodeWalkingVisitor
import com.intellij.util.indexing.*
import com.intellij.util.io.KeyDescriptor
import java.io.DataInput
import java.io.DataOutput
val id: ID<String, Void> = ID.create("java.unnamed.class")
class JavaUnnamedClassIndex: ScalarIndexExtension<String>() {
override fun getName(): ID<String, Void> = id
override fun getIndexer(): DataIndexer<String, Void, FileContent> = DataIndexer { inputData ->
val result: MutableMap<String, Void?> = mutableMapOf()
val lightAST = inputData.psiFile.node.lighterAST
object: RecursiveLighterASTNodeWalkingVisitor(lightAST) {
override fun visitNode(element: LighterASTNode) {
when (element.tokenType) {
is JavaFileElementType -> super.visitNode(element)
JavaStubElementTypes.UNNAMED_CLASS -> result[inputData.fileName] = null
}
}
}.visitNode(lightAST.getRoot())
return@DataIndexer result
}
override fun getKeyDescriptor(): KeyDescriptor<String> = object: KeyDescriptor<String> {
override fun isEqual(val1: String?, val2: String?): Boolean = val1 == val2
override fun getHashCode(value: String?): Int = value.hashCode()
override fun save(out: DataOutput, value: String?) { if (value != null) { out.writeUTF(value) } }
override fun read(`in`: DataInput): String = `in`.readUTF()
}
override fun getVersion(): Int = 0
override fun getInputFilter(): FileBasedIndex.InputFilter = DefaultFileTypeSpecificInputFilter(JavaFileType.INSTANCE)
override fun dependsOnFileContent(): Boolean = true
}