mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
IDEA-355836 Create new Java class / new Kotlin class actions should not be available on the top project level
(cherry picked from commit 6a042e1dfc0b3920af39b70561f3d508757975e0) IJ-CR-162668 GitOrigin-RevId: b68122ec616646c84ba65d0abf72631ac0d74c2a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
65cab71d0c
commit
da9f0d478e
@@ -0,0 +1,50 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.java.ide.actions
|
||||
|
||||
import com.intellij.ide.IdeView
|
||||
import com.intellij.ide.actions.CreateClassAction
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.actionSystem.DataContext
|
||||
import com.intellij.openapi.actionSystem.LangDataKeys
|
||||
import com.intellij.openapi.actionSystem.ex.ActionUtil.updateAction
|
||||
import com.intellij.openapi.actionSystem.impl.SimpleDataContext
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.roots.ModuleRootManager
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiDirectory
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.testFramework.TestActionEvent
|
||||
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
|
||||
|
||||
class CreateClassActionAvailabilityTest: JavaCodeInsightFixtureTestCase() {
|
||||
|
||||
fun testCreateClassActionAvailability() {
|
||||
val srcRoot = myFixture.tempDirFixture.findOrCreateDir("newContentRoot/src")
|
||||
val contentRoot = srcRoot.parent
|
||||
ApplicationManager.getApplication().runWriteAction {
|
||||
ModuleRootManager.getInstance(myFixture.module).modifiableModel.apply {
|
||||
addContentEntry(contentRoot.url).addSourceFolder(srcRoot, false)
|
||||
commit()
|
||||
}
|
||||
}
|
||||
|
||||
assertFalse(isEnabledAndVisibleFor(contentRoot))
|
||||
assertTrue(isEnabledAndVisibleFor(srcRoot))
|
||||
}
|
||||
|
||||
private fun isEnabledAndVisibleFor(baseDir: VirtualFile): Boolean {
|
||||
val projectDir = PsiManager.getInstance(project).findDirectory(baseDir)!!
|
||||
val action = CreateClassAction()
|
||||
val e: AnActionEvent = TestActionEvent.createTestEvent(context(projectDir))
|
||||
updateAction(action, e)
|
||||
val enabledAndVisible = e.presentation.isEnabledAndVisible
|
||||
return enabledAndVisible
|
||||
}
|
||||
|
||||
private fun context(projectDir: PsiDirectory): DataContext {
|
||||
return SimpleDataContext.builder().add(LangDataKeys.IDE_VIEW, object : IdeView {
|
||||
override fun getDirectories(): Array<out PsiDirectory> = arrayOf(projectDir)
|
||||
override fun getOrChooseDirectory(): PsiDirectory? = projectDir
|
||||
}).add(LangDataKeys.PROJECT, this.project).build()
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,6 @@ import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -146,17 +145,12 @@ public abstract class CreateTemplateInPackageAction<T extends PsiElement> extend
|
||||
|
||||
public static boolean isInContentRoot(VirtualFile file, ProjectFileIndex index) {
|
||||
return file.equals(index.getContentRootForFile(file)) &&
|
||||
projectHasNoSourceRoots(file, index);
|
||||
noSourceRootConfigured(file, index);
|
||||
}
|
||||
|
||||
private static boolean projectHasNoSourceRoots(VirtualFile file, ProjectFileIndex index) {
|
||||
private static boolean noSourceRootConfigured(VirtualFile file, ProjectFileIndex index) {
|
||||
Module module = index.getModuleForFile(file);
|
||||
if (module != null) {
|
||||
return ContainerUtil.or(ModuleManager.getInstance(module.getProject()).getModules(), m -> {
|
||||
return ModuleRootManager.getInstance(module).getSourceRoots().length > 0;
|
||||
});
|
||||
}
|
||||
return false;
|
||||
return module != null && ModuleRootManager.getInstance(module).getSourceRoots().length == 0;
|
||||
}
|
||||
|
||||
protected abstract boolean checkPackageExists(PsiDirectory directory);
|
||||
|
||||
Reference in New Issue
Block a user