diff --git a/scala/scala-impl/resources/META-INF/scala-plugin-common.xml b/scala/scala-impl/resources/META-INF/scala-plugin-common.xml index a771e85916d..59dcb7cee9f 100644 --- a/scala/scala-impl/resources/META-INF/scala-plugin-common.xml +++ b/scala/scala-impl/resources/META-INF/scala-plugin-common.xml @@ -311,6 +311,7 @@ + @@ -1982,6 +1983,15 @@ class="org.jetbrains.plugins.scala.components.TypeAwareWidgetFactory$Listener"/> + + + + + + + + + diff --git a/scala/scala-impl/resources/fileTemplates/internal/Sbt File.sbt.ft b/scala/scala-impl/resources/fileTemplates/internal/Sbt File.sbt.ft new file mode 100644 index 00000000000..e69de29bb2d diff --git a/scala/scala-impl/resources/fileTemplates/internal/Sbt File.sbt.html b/scala/scala-impl/resources/fileTemplates/internal/Sbt File.sbt.html new file mode 100644 index 00000000000..8abada1f17e --- /dev/null +++ b/scala/scala-impl/resources/fileTemplates/internal/Sbt File.sbt.html @@ -0,0 +1,14 @@ + + + + + + + This is a built-in template used by IntelliJ IDEA each time you create a + Sbt File + + + + + + diff --git a/scala/scala-impl/resources/messages/ScalaBundle.properties b/scala/scala-impl/resources/messages/ScalaBundle.properties index 06ca1194fea..711d585bd28 100644 --- a/scala/scala-impl/resources/messages/ScalaBundle.properties +++ b/scala/scala-impl/resources/messages/ScalaBundle.properties @@ -40,6 +40,17 @@ newclassorfile.menu.action.description=Creates new Scala Class or File create.new.scala.class.or.file=Create New Scala Class/File this.is.not.a.valid.scala.qualified.name=This is not a valid Scala qualified name +newclassorfile.menu.action.sbt.text=Sbt File +newclassorfile.menu.action.build.sbt.text=Sbt Build File +newclassorfile.menu.action.build.sbt.defaultName=build +newclassorfile.menu.action.plugin.sbt.text=Sbt Plugin File +newclassorfile.menu.action.plugin.sbt.defaultName=plugin +newclassorfile.menu.action.sbt.description=Create new Sbt File + +error.package.already.contains.build.sbt=''build.sbt'' already exists for package ''{0}'' +error.package.already.contains.plugin.sbt=''plugin.sbt'' already exists for package ''{0}'' +error.title.package.already.contains.file=Cannot Create File + ### org/jetbrains/plugins/scala/actions/ShowTypeInfoAction.scala type.info.text=Type Info type.info.description=Show Type Info diff --git a/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewPredefinedSbtFileAction.scala b/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewPredefinedSbtFileAction.scala new file mode 100644 index 00000000000..f62d326c6b5 --- /dev/null +++ b/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewPredefinedSbtFileAction.scala @@ -0,0 +1,31 @@ +package org.jetbrains.plugins.scala.actions + +import com.intellij.ide.IdeView +import com.intellij.ide.fileTemplates.actions.CreateFromTemplateActionBase +import com.intellij.ide.fileTemplates.{FileTemplate, FileTemplateManager} +import com.intellij.openapi.actionSystem.{CommonDataKeys, DataContext} +import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.Messages +import com.intellij.openapi.util.NlsActions +import com.intellij.psi.PsiDirectory +import org.jetbrains.plugins.scala.ScalaBundle +import org.jetbrains.plugins.scala.extensions.PsiNamedElementExt + +import javax.swing.Icon + +abstract class NewPredefinedSbtFileAction(@NlsActions.ActionText title: String, @NlsActions.ActionDescription description: String, icon: Icon, fileName: String) extends CreateFromTemplateActionBase(title, description, icon) { + + override def getTemplate(project: Project, dir: PsiDirectory): FileTemplate = FileTemplateManager.getDefaultInstance.getInternalTemplate(ScalaBundle.message("newclassorfile.menu.action.sbt.text")) + + override def getTargetDirectory(dataContext: DataContext, view: IdeView): PsiDirectory = { + val directories: Array[PsiDirectory] = view.getDirectories + directories.find(directory => directory.findFile(fileName + ".sbt") != null).exists(dir => { + Messages.showErrorDialog(CommonDataKeys.PROJECT.getData(dataContext), + ScalaBundle.message("error.package.already.contains.build.sbt", dir.name), + ScalaBundle.message("error.title.package.already.contains.file", dir.name)) + return null + } + ) + super.getTargetDirectory(dataContext, view) + } +} diff --git a/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewSbtBuildFileAction.scala b/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewSbtBuildFileAction.scala new file mode 100644 index 00000000000..a31d82e279f --- /dev/null +++ b/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewSbtBuildFileAction.scala @@ -0,0 +1,15 @@ +package org.jetbrains.plugins.scala.actions + +import com.intellij.ide.fileTemplates.actions.AttributesDefaults +import com.intellij.openapi.actionSystem.DataContext +import org.jetbrains.plugins.scala.ScalaBundle +import org.jetbrains.sbt.icons.Icons + +final class NewSbtBuildFileAction extends NewPredefinedSbtFileAction( + ScalaBundle.message("newclassorfile.menu.action.build.sbt.text"), + ScalaBundle.message("newclassorfile.menu.action.sbt.description"), + Icons.SBT_FILE, + ScalaBundle.message("newclassorfile.menu.action.build.sbt.defaultName") +) { + protected override def getAttributesDefaults(dataContext: DataContext): AttributesDefaults = new AttributesDefaults(ScalaBundle.message("newclassorfile.menu.action.build.sbt.defaultName")).withFixedName(true) +} diff --git a/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewSbtFileAction.scala b/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewSbtFileAction.scala new file mode 100644 index 00000000000..73a0bb00492 --- /dev/null +++ b/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewSbtFileAction.scala @@ -0,0 +1,18 @@ +package org.jetbrains.plugins.scala.actions + +import com.intellij.ide.fileTemplates.actions.CreateFromTemplateActionBase +import com.intellij.ide.fileTemplates.{FileTemplate, FileTemplateManager} +import com.intellij.openapi.project.Project +import com.intellij.psi.PsiDirectory +import org.jetbrains.sbt.icons.Icons +import org.jetbrains.plugins.scala.ScalaBundle + +final class NewSbtFileAction extends CreateFromTemplateActionBase( + ScalaBundle.message("newclassorfile.menu.action.sbt.text"), + ScalaBundle.message("newclassorfile.menu.action.sbt.description"), + Icons.SBT_FILE +) { + + override def getTemplate(project: Project, dir: PsiDirectory): FileTemplate = FileTemplateManager.getDefaultInstance.getInternalTemplate(ScalaBundle.message("newclassorfile.menu.action.sbt.text")) + +} diff --git a/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewSbtPluginFileAction.scala b/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewSbtPluginFileAction.scala new file mode 100644 index 00000000000..53efce98048 --- /dev/null +++ b/scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewSbtPluginFileAction.scala @@ -0,0 +1,15 @@ +package org.jetbrains.plugins.scala.actions + +import com.intellij.ide.fileTemplates.actions.AttributesDefaults +import com.intellij.openapi.actionSystem.DataContext +import org.jetbrains.plugins.scala.ScalaBundle +import org.jetbrains.sbt.icons.Icons + +final class NewSbtPluginFileAction extends NewPredefinedSbtFileAction( + ScalaBundle.message("newclassorfile.menu.action.plugin.sbt.text"), + ScalaBundle.message("newclassorfile.menu.action.sbt.description"), + Icons.SBT_FILE, + ScalaBundle.message("newclassorfile.menu.action.plugin.sbt.defaultName") +) { + protected override def getAttributesDefaults(dataContext: DataContext): AttributesDefaults = new AttributesDefaults(ScalaBundle.message("newclassorfile.menu.action.plugin.sbt.defaultName")).withFixedName(true) +}