mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
KTIJ-19876 [kotlin] Hide java class action in pure kotlin source roots
Signed-off-by: Vladimir Dolzhenko <vladimir.dolzhenko@jetbrains.com> GitOrigin-RevId: e1bdd7e3a885d263d051dd469473a6e5dfdc6572
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b49b8aac7d
commit
413115d66b
@@ -383,4 +383,9 @@
|
||||
<synonym key="action.DevKit.Bootstrap.synonym"/>
|
||||
</action>
|
||||
</actions>
|
||||
|
||||
<extensionPoints>
|
||||
<extensionPoint qualifiedName="com.intellij.java.class.action.suppressor"
|
||||
interface="com.intellij.ide.actions.JavaClassActionSuppressor" dynamic="true"/>
|
||||
</extensionPoints>
|
||||
</idea-plugin>
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.intellij.ide.fileTemplates.JavaCreateFromTemplateHandler;
|
||||
import com.intellij.ide.fileTemplates.JavaTemplateUtil;
|
||||
import com.intellij.ide.highlighter.JavaFileType;
|
||||
import com.intellij.java.JavaBundle;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.PackageIndex;
|
||||
@@ -36,6 +37,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
@@ -56,6 +58,19 @@ public class CreateClassAction extends JavaCreateTemplateInPackageAction<PsiClas
|
||||
super(text, description, icon, rootTypes);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isAvailable(@NotNull DataContext dataContext) {
|
||||
if (!super.isAvailable(dataContext)) return false;
|
||||
|
||||
List<JavaClassActionSuppressor> list = JavaClassActionSuppressor.EP_NAME.getExtensionList();
|
||||
for (JavaClassActionSuppressor suppressor : list) {
|
||||
if (suppressor.isSuppressed(dataContext)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void buildDialog(@NotNull Project project, @NotNull PsiDirectory directory,
|
||||
@NotNull CreateFileFromTemplateDialog.Builder builder) {
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.ide.actions;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public interface JavaClassActionSuppressor {
|
||||
ExtensionPointName<JavaClassActionSuppressor> EP_NAME = ExtensionPointName.create("com.intellij.java.class.action.suppressor");
|
||||
|
||||
boolean isSuppressed(@NotNull DataContext dataContext);
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.core
|
||||
|
||||
import com.intellij.ide.actions.JavaClassActionSuppressor
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys
|
||||
import com.intellij.openapi.actionSystem.DataContext
|
||||
import com.intellij.openapi.actionSystem.LangDataKeys
|
||||
import com.intellij.openapi.roots.ProjectRootManager
|
||||
import com.intellij.psi.PsiDirectory
|
||||
import org.jetbrains.kotlin.idea.base.util.KOTLIN_SOURCE_ROOT_TYPES
|
||||
import org.jetbrains.kotlin.idea.facet.KotlinFacet
|
||||
|
||||
internal class KotlinJavaClassActionSuppressor: JavaClassActionSuppressor {
|
||||
override fun isSuppressed(dataContext: DataContext): Boolean {
|
||||
val ideView = LangDataKeys.IDE_VIEW.getData(dataContext) ?: return false
|
||||
val project = CommonDataKeys.PROJECT.getData(dataContext) ?: return false
|
||||
val projectFileIndex = ProjectRootManager.getInstance(project).fileIndex
|
||||
|
||||
return ideView.directories.any { directory: PsiDirectory ->
|
||||
val virtualFile = directory.virtualFile
|
||||
val module = projectFileIndex.getModuleForFile(virtualFile) ?: return@any false
|
||||
val kotlinFacet = KotlinFacet.get(module)
|
||||
val kotlinSourceFolders = kotlinFacet?.configuration?.settings?.pureKotlinSourceFolders
|
||||
val kotlinSourceRootOfType =
|
||||
projectFileIndex.isUnderSourceRootOfType(virtualFile, KOTLIN_SOURCE_ROOT_TYPES) ||
|
||||
(kotlinSourceFolders?.let { virtualFile.toNioPath().toString() in it } ?: false)
|
||||
kotlinSourceRootOfType
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -357,6 +357,8 @@
|
||||
language="kotlin"
|
||||
implementationClass="org.jetbrains.kotlin.idea.highlighter.KotlinTestRunLineMarkerContributor"/>
|
||||
|
||||
<java.class.action.suppressor implementation="org.jetbrains.kotlin.idea.core.KotlinJavaClassActionSuppressor"/>
|
||||
|
||||
<lang.inspectionSuppressor language="kotlin" implementationClass="org.jetbrains.kotlin.idea.inspections.suppress.KotlinInspectionSuppressor"/>
|
||||
<optionController implementation="org.jetbrains.kotlin.idea.configuration.KotlinCompilerPluginProvider"/>
|
||||
<optionController implementation="org.jetbrains.kotlin.idea.configuration.KotlinDependencyProvider"/>
|
||||
|
||||
Reference in New Issue
Block a user