mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[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:
committed by
intellij-monorepo-bot
parent
6e9c57621a
commit
7da0863c33
+5
-37
@@ -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
-24
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user