mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-05 01:50:56 +07:00
[java] Create index for unnamed classes
#IDEA-331209 GitOrigin-RevId: 938f5962a345939221baf00f237a8190a7d7dfa3
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7efe2b5431
commit
3a824750de
@@ -37,6 +37,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
// 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.psi.util.JavaUnnamedClassUtil
|
||||
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>() {
|
||||
private object UnnamedClassIndexer: DataIndexer<String, Void, FileContent> {
|
||||
override fun map(inputData: FileContent): MutableMap<String, Void?> {
|
||||
return when {
|
||||
JavaUnnamedClassUtil.isFileWithUnnamedClass(inputData.psiFile) -> {
|
||||
mutableMapOf(inputData.fileName to null)
|
||||
}
|
||||
else -> mutableMapOf()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getName(): ID<String, Void> = id
|
||||
|
||||
override fun getIndexer(): DataIndexer<String, Void, FileContent> = UnnamedClassIndexer
|
||||
|
||||
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
|
||||
}
|
||||
@@ -6,16 +6,23 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiJavaFile;
|
||||
import com.intellij.psi.PsiUnnamedClass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public final class JavaUnnamedClassUtil {
|
||||
public static boolean isFileWithUnnamedClass(@NotNull PsiFile file) {
|
||||
if (file instanceof PsiJavaFile) {
|
||||
PsiJavaFile javaFile = (PsiJavaFile)file;
|
||||
PsiClass[] classes = javaFile.getClasses();
|
||||
if (classes.length == 1 && classes[0] instanceof PsiUnnamedClass) {
|
||||
return true;
|
||||
}
|
||||
if (getUnnamedClassFor(javaFile) != null) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiUnnamedClass getUnnamedClassFor(PsiJavaFile javaFile) {
|
||||
PsiClass[] classes = javaFile.getClasses();
|
||||
if (classes.length == 1 && classes[0] instanceof PsiUnnamedClass) {
|
||||
return (PsiUnnamedClass)classes[0];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user