mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
[java] IJ-CR-162475 IDEA-360079 add simple source file
- rename to compact - add tests - restrict only by default packages GitOrigin-RevId: eff47e6f615f36b845659da8e84e5220d7b90cfe
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a5c75ad81d
commit
d04a07827e
@@ -240,7 +240,7 @@ node.exception.tooltip=Exception
|
||||
node.field.tooltip=Field
|
||||
node.final.flag.tooltip=Final
|
||||
node.interface.tooltip=Interface
|
||||
node.simple.source.file.tooltip=Simple source file
|
||||
node.simple.source.file.tooltip=Compact source file
|
||||
node.junit.test.tooltip=JUnit Test
|
||||
node.method.tooltip=Method
|
||||
node.record.tooltip=Record
|
||||
|
||||
@@ -8,9 +8,14 @@ import com.intellij.ide.fileTemplates.*;
|
||||
import com.intellij.ide.highlighter.JavaFileType;
|
||||
import com.intellij.java.JavaBundle;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.PackageIndex;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.ui.InputValidatorEx;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.java.JavaFeature;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
@@ -55,9 +60,12 @@ public class CreateClassAction extends JavaCreateTemplateInPackageAction<PsiClas
|
||||
JavaTemplateUtil.INTERNAL_EXCEPTION_TYPE_TEMPLATE_NAME);
|
||||
|
||||
if (JavaFeature.IMPLICIT_CLASSES.isSufficient(level)) {
|
||||
builder.addKind(JavaPsiBundle.message("node.simple.source.file.tooltip"),
|
||||
IconManager.getInstance().getPlatformIcon(com.intellij.ui.PlatformIcons.JavaFileType),
|
||||
JavaTemplateUtil.INTERNAL_SIMPLE_SOURCE_FILE);
|
||||
String packageNameByDirectory = PackageIndex.getInstance(project).getPackageNameByDirectory(directory.getVirtualFile());
|
||||
if("".equals(packageNameByDirectory)) {
|
||||
builder.addKind(JavaPsiBundle.message("node.simple.source.file.tooltip"),
|
||||
IconManager.getInstance().getPlatformIcon(com.intellij.ui.PlatformIcons.JavaFileType),
|
||||
JavaTemplateUtil.INTERNAL_SIMPLE_SOURCE_FILE);
|
||||
}
|
||||
}
|
||||
|
||||
PsiDirectory[] dirs = {directory};
|
||||
|
||||
@@ -3,20 +3,30 @@ package com.intellij.java.ide.actions
|
||||
|
||||
import com.intellij.ide.IdeView
|
||||
import com.intellij.ide.actions.CreateClassAction
|
||||
import com.intellij.ide.actions.CreateFileFromTemplateDialog
|
||||
import com.intellij.ide.actions.TestDialogBuilder
|
||||
import com.intellij.ide.fileTemplates.JavaTemplateUtil
|
||||
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.project.Project
|
||||
import com.intellij.openapi.roots.ModuleRootManager
|
||||
import com.intellij.openapi.util.NlsContexts
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.pom.java.JavaFeature
|
||||
import com.intellij.pom.java.LanguageLevel
|
||||
import com.intellij.psi.PsiDirectory
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.testFramework.IdeaTestUtil
|
||||
import com.intellij.testFramework.TestActionEvent
|
||||
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import javax.swing.Icon
|
||||
|
||||
class CreateClassActionAvailabilityTest: JavaCodeInsightFixtureTestCase() {
|
||||
class CreateClassActionAvailabilityTest : JavaCodeInsightFixtureTestCase() {
|
||||
|
||||
fun testCreateClassActionAvailability() {
|
||||
val srcRoot = myFixture.tempDirFixture.findOrCreateDir("newContentRoot/src")
|
||||
@@ -32,6 +42,55 @@ class CreateClassActionAvailabilityTest: JavaCodeInsightFixtureTestCase() {
|
||||
assertTrue(isEnabledAndVisibleFor(srcRoot))
|
||||
}
|
||||
|
||||
fun testCompactSourceClassAvailability() {
|
||||
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()
|
||||
}
|
||||
}
|
||||
val sourceLevel = myFixture.tempDirFixture.findOrCreateDir("")
|
||||
val sourceDirectory = PsiManager.getInstance(project).findDirectory(sourceLevel)
|
||||
|
||||
val dir = myFixture.tempDirFixture.findOrCreateDir("foo")
|
||||
val psiDirectory = PsiManager.getInstance(project).findDirectory(dir)
|
||||
|
||||
|
||||
val builder = object : CreateFileFromTemplateDialog.Builder by TestDialogBuilder(TestDialogBuilder.TestAnswers(null, null)) {
|
||||
val templateNames = hashSetOf<String>()
|
||||
override fun addKind(kind: @NlsContexts.ListItem String, icon: Icon?, templateName: @NonNls String): CreateFileFromTemplateDialog.Builder? {
|
||||
templateNames.add(templateName)
|
||||
return super.addKind(kind, icon, templateName)
|
||||
}
|
||||
}
|
||||
|
||||
val action = object : CreateClassAction() {
|
||||
public override fun buildDialog(project: Project, directory: PsiDirectory, builder: CreateFileFromTemplateDialog.Builder) {
|
||||
super.buildDialog(project, directory, builder)
|
||||
}
|
||||
}
|
||||
|
||||
IdeaTestUtil.withLevel(module, JavaFeature.IMPLICIT_CLASSES.minimumLevel) {
|
||||
|
||||
builder.templateNames.clear()
|
||||
action.buildDialog(project, sourceDirectory!!, builder)
|
||||
assertTrue(builder.templateNames.contains(JavaTemplateUtil.INTERNAL_SIMPLE_SOURCE_FILE))
|
||||
|
||||
builder.templateNames.clear()
|
||||
action.buildDialog(project, psiDirectory!!, builder)
|
||||
assertTrue(!builder.templateNames.contains(JavaTemplateUtil.INTERNAL_SIMPLE_SOURCE_FILE))
|
||||
}
|
||||
|
||||
IdeaTestUtil.withLevel(module, LanguageLevel.JDK_1_8) {
|
||||
|
||||
builder.templateNames.clear()
|
||||
action.buildDialog(project, sourceDirectory!!, builder)
|
||||
assertTrue(!builder.templateNames.contains(JavaTemplateUtil.INTERNAL_SIMPLE_SOURCE_FILE))
|
||||
}
|
||||
}
|
||||
|
||||
private fun isEnabledAndVisibleFor(baseDir: VirtualFile): Boolean {
|
||||
val projectDir = PsiManager.getInstance(project).findDirectory(baseDir)!!
|
||||
val action = CreateClassAction()
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.intellij.java.ide.actions
|
||||
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager
|
||||
import com.intellij.ide.fileTemplates.JavaTemplateUtil
|
||||
import com.intellij.psi.JavaDirectoryService
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
|
||||
@@ -31,4 +32,18 @@ class CreateClassActionTest: LightJavaCodeInsightFixtureTestCase() {
|
||||
val clazz = JavaDirectoryService.getInstance().createClass(psiDirectory!!, "Bar", template.name)
|
||||
assertEquals("public class Bar {\n Title\n}", clazz.text)
|
||||
}
|
||||
|
||||
fun testImplicitClassLiveTemplate() {
|
||||
val dir = myFixture.tempDirFixture.findOrCreateDir("")
|
||||
val psiDirectory = PsiManager.getInstance(project).findDirectory(dir)
|
||||
val expectedFileName = "Bar"
|
||||
val clazz = JavaDirectoryService.getInstance().createClass(psiDirectory!!, expectedFileName, JavaTemplateUtil.INTERNAL_SIMPLE_SOURCE_FILE)
|
||||
assertEquals("""
|
||||
void main() {
|
||||
|
||||
}
|
||||
""".trimIndent(), clazz.text)
|
||||
val fileName = clazz.containingFile.name
|
||||
assertEquals("$expectedFileName.java", fileName)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user