mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 22:51:17 +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.field.tooltip=Field
|
||||||
node.final.flag.tooltip=Final
|
node.final.flag.tooltip=Final
|
||||||
node.interface.tooltip=Interface
|
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.junit.test.tooltip=JUnit Test
|
||||||
node.method.tooltip=Method
|
node.method.tooltip=Method
|
||||||
node.record.tooltip=Record
|
node.record.tooltip=Record
|
||||||
|
|||||||
@@ -8,9 +8,14 @@ import com.intellij.ide.fileTemplates.*;
|
|||||||
import com.intellij.ide.highlighter.JavaFileType;
|
import com.intellij.ide.highlighter.JavaFileType;
|
||||||
import com.intellij.java.JavaBundle;
|
import com.intellij.java.JavaBundle;
|
||||||
import com.intellij.openapi.project.DumbAware;
|
import com.intellij.openapi.project.DumbAware;
|
||||||
|
import com.intellij.openapi.project.DumbService;
|
||||||
import com.intellij.openapi.project.Project;
|
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.ui.InputValidatorEx;
|
||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.pom.java.JavaFeature;
|
import com.intellij.pom.java.JavaFeature;
|
||||||
import com.intellij.pom.java.LanguageLevel;
|
import com.intellij.pom.java.LanguageLevel;
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.*;
|
||||||
@@ -55,10 +60,13 @@ public class CreateClassAction extends JavaCreateTemplateInPackageAction<PsiClas
|
|||||||
JavaTemplateUtil.INTERNAL_EXCEPTION_TYPE_TEMPLATE_NAME);
|
JavaTemplateUtil.INTERNAL_EXCEPTION_TYPE_TEMPLATE_NAME);
|
||||||
|
|
||||||
if (JavaFeature.IMPLICIT_CLASSES.isSufficient(level)) {
|
if (JavaFeature.IMPLICIT_CLASSES.isSufficient(level)) {
|
||||||
|
String packageNameByDirectory = PackageIndex.getInstance(project).getPackageNameByDirectory(directory.getVirtualFile());
|
||||||
|
if("".equals(packageNameByDirectory)) {
|
||||||
builder.addKind(JavaPsiBundle.message("node.simple.source.file.tooltip"),
|
builder.addKind(JavaPsiBundle.message("node.simple.source.file.tooltip"),
|
||||||
IconManager.getInstance().getPlatformIcon(com.intellij.ui.PlatformIcons.JavaFileType),
|
IconManager.getInstance().getPlatformIcon(com.intellij.ui.PlatformIcons.JavaFileType),
|
||||||
JavaTemplateUtil.INTERNAL_SIMPLE_SOURCE_FILE);
|
JavaTemplateUtil.INTERNAL_SIMPLE_SOURCE_FILE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PsiDirectory[] dirs = {directory};
|
PsiDirectory[] dirs = {directory};
|
||||||
for (FileTemplate template : FileTemplateManager.getInstance(project).getAllTemplates()) {
|
for (FileTemplate template : FileTemplateManager.getInstance(project).getAllTemplates()) {
|
||||||
|
|||||||
@@ -3,20 +3,30 @@ package com.intellij.java.ide.actions
|
|||||||
|
|
||||||
import com.intellij.ide.IdeView
|
import com.intellij.ide.IdeView
|
||||||
import com.intellij.ide.actions.CreateClassAction
|
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.AnActionEvent
|
||||||
import com.intellij.openapi.actionSystem.DataContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.intellij.openapi.actionSystem.LangDataKeys
|
import com.intellij.openapi.actionSystem.LangDataKeys
|
||||||
import com.intellij.openapi.actionSystem.ex.ActionUtil.updateAction
|
import com.intellij.openapi.actionSystem.ex.ActionUtil.updateAction
|
||||||
import com.intellij.openapi.actionSystem.impl.SimpleDataContext
|
import com.intellij.openapi.actionSystem.impl.SimpleDataContext
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.ModuleRootManager
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
|
import com.intellij.openapi.util.NlsContexts
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
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.PsiDirectory
|
||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
|
import com.intellij.testFramework.IdeaTestUtil
|
||||||
import com.intellij.testFramework.TestActionEvent
|
import com.intellij.testFramework.TestActionEvent
|
||||||
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
|
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
|
||||||
|
import org.jetbrains.annotations.NonNls
|
||||||
|
import javax.swing.Icon
|
||||||
|
|
||||||
class CreateClassActionAvailabilityTest: JavaCodeInsightFixtureTestCase() {
|
class CreateClassActionAvailabilityTest : JavaCodeInsightFixtureTestCase() {
|
||||||
|
|
||||||
fun testCreateClassActionAvailability() {
|
fun testCreateClassActionAvailability() {
|
||||||
val srcRoot = myFixture.tempDirFixture.findOrCreateDir("newContentRoot/src")
|
val srcRoot = myFixture.tempDirFixture.findOrCreateDir("newContentRoot/src")
|
||||||
@@ -32,6 +42,55 @@ class CreateClassActionAvailabilityTest: JavaCodeInsightFixtureTestCase() {
|
|||||||
assertTrue(isEnabledAndVisibleFor(srcRoot))
|
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 {
|
private fun isEnabledAndVisibleFor(baseDir: VirtualFile): Boolean {
|
||||||
val projectDir = PsiManager.getInstance(project).findDirectory(baseDir)!!
|
val projectDir = PsiManager.getInstance(project).findDirectory(baseDir)!!
|
||||||
val action = CreateClassAction()
|
val action = CreateClassAction()
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
package com.intellij.java.ide.actions
|
package com.intellij.java.ide.actions
|
||||||
|
|
||||||
import com.intellij.ide.fileTemplates.FileTemplateManager
|
import com.intellij.ide.fileTemplates.FileTemplateManager
|
||||||
|
import com.intellij.ide.fileTemplates.JavaTemplateUtil
|
||||||
import com.intellij.psi.JavaDirectoryService
|
import com.intellij.psi.JavaDirectoryService
|
||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
|
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
|
||||||
@@ -31,4 +32,18 @@ class CreateClassActionTest: LightJavaCodeInsightFixtureTestCase() {
|
|||||||
val clazz = JavaDirectoryService.getInstance().createClass(psiDirectory!!, "Bar", template.name)
|
val clazz = JavaDirectoryService.getInstance().createClass(psiDirectory!!, "Bar", template.name)
|
||||||
assertEquals("public class Bar {\n Title\n}", clazz.text)
|
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