From b8c17d996ea514afd0b0667d61516e5c79bba235 Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Tue, 16 Jun 2026 09:15:37 +0200 Subject: [PATCH] KTIJ-19876 [kotlin] Fixed source root condition check, added advanced setting Signed-off-by: Vladimir Dolzhenko IJ-CR-208625 GitOrigin-RevId: a74ef78743de476137bcad6f5aa43f191b049336 --- .../java-backend/resources/META-INF/JavaPlugin.xml | 2 ++ .../intellij/ide/actions/CreateClassAction.java | 14 +++++++------- .../resources/messages/JavaBundle.properties | 1 + .../idea/core/KotlinJavaClassActionSuppressor.kt | 4 +++- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/java/java-backend/resources/META-INF/JavaPlugin.xml b/java/java-backend/resources/META-INF/JavaPlugin.xml index e6adc3bbf07c..be81bd31d06d 100644 --- a/java/java-backend/resources/META-INF/JavaPlugin.xml +++ b/java/java-backend/resources/META-INF/JavaPlugin.xml @@ -1214,6 +1214,8 @@ + diff --git a/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java b/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java index 566ccc0fe8ea..022945f29a3e 100644 --- a/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java +++ b/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java @@ -13,6 +13,7 @@ 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.options.advanced.AdvancedSettings; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.PackageIndex; @@ -32,6 +33,7 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.ui.IconManager; import com.intellij.util.IncorrectOperationException; import com.intellij.util.PlatformIcons; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.module.JpsModuleSourceRootType; @@ -62,13 +64,11 @@ public class CreateClassAction extends JavaCreateTemplateInPackageAction list = JavaClassActionSuppressor.EP_NAME.getExtensionList(); - for (JavaClassActionSuppressor suppressor : list) { - if (suppressor.isSuppressed(dataContext)) { - return false; - } - } - return true; + if (AdvancedSettings.getBoolean("java.show.new.class.in.irrelevant.java.source.roots")) return true; + + List suppressors = JavaClassActionSuppressor.EP_NAME.getExtensionList(); + return !ContainerUtil.exists(suppressors, + suppressor -> suppressor.isSuppressed(dataContext)); } @Override diff --git a/java/openapi/resources/messages/JavaBundle.properties b/java/openapi/resources/messages/JavaBundle.properties index 2185723296a4..8ca5c7745bb0 100644 --- a/java/openapi/resources/messages/JavaBundle.properties +++ b/java/openapi/resources/messages/JavaBundle.properties @@ -2003,6 +2003,7 @@ command.completion.generate.no.args.constructor.text=No-Args Constructor command.completion.generate.all.args.constructor.text=All-Args Constructor advanced.setting.java.show.irrelevant.templates.in.source.roots=Show irrelevant New File templates in Java source roots +advanced.setting.java.show.new.class.in.irrelevant.java.source.roots=Show New Class in irrelevant Java source roots java.test.use.wall.time=Use Wall Time java.test.overall.time=Overall time: {0} java.test.sum.time=Sum time: {0} diff --git a/plugins/kotlin/base/code-insight/src/org/jetbrains/kotlin/idea/core/KotlinJavaClassActionSuppressor.kt b/plugins/kotlin/base/code-insight/src/org/jetbrains/kotlin/idea/core/KotlinJavaClassActionSuppressor.kt index a2f4e1fd0c6a..fc2637ca71e9 100644 --- a/plugins/kotlin/base/code-insight/src/org/jetbrains/kotlin/idea/core/KotlinJavaClassActionSuppressor.kt +++ b/plugins/kotlin/base/code-insight/src/org/jetbrains/kotlin/idea/core/KotlinJavaClassActionSuppressor.kt @@ -23,7 +23,9 @@ internal class KotlinJavaClassActionSuppressor: JavaClassActionSuppressor { val kotlinSourceFolders = kotlinFacet?.configuration?.settings?.pureKotlinSourceFolders val kotlinSourceRootOfType = projectFileIndex.isUnderSourceRootOfType(virtualFile, KOTLIN_SOURCE_ROOT_TYPES) || - (kotlinSourceFolders?.let { virtualFile.toNioPath().toString() in it } ?: false) + (kotlinSourceFolders?.let { + projectFileIndex.getSourceRootForFile(virtualFile)?.toNioPath()?.toString() in it + } ?: false) kotlinSourceRootOfType } }