Skip to content

Commit af09862

Browse files
committed
Adding predefined plugin.sbt and build.sbt files #SCL-21374
1 parent b1ca3b2 commit af09862

File tree

5 files changed

+89
-4
lines changed

5 files changed

+89
-4
lines changed

scala/scala-impl/resources/META-INF/scala-plugin-common.xml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1983,9 +1983,15 @@
19831983
class="org.jetbrains.plugins.scala.components.TypeAwareWidgetFactory$Listener"/>
19841984
</projectListeners>
19851985
<actions>
1986-
<action id="Scala.NewSbtFileAction" class="org.jetbrains.plugins.scala.actions.NewSbtFileAction">
1987-
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFromTemplate"/>
1988-
</action>
1986+
1987+
<group id="SbtFileAction" icon="org.jetbrains.sbt.icons.Icons.SBT_FILE" popup="true" text="Sbt File">
1988+
<separator/>
1989+
<action id="Scala.NewSbtFileAction" class="org.jetbrains.plugins.scala.actions.NewSbtFileAction"/>
1990+
<action id="Scala.NewSbtBuildFileAction" class="org.jetbrains.plugins.scala.actions.NewSbtBuildFileAction"/>
1991+
<action id="Scala.NewSbtPluginFileAction" class="org.jetbrains.plugins.scala.actions.NewSbtPluginFileAction"/>
1992+
<add-to-group group-id="NewGroup" anchor="last"/>
1993+
</group>
1994+
19891995
<action id="Scala.NewClass" class="org.jetbrains.plugins.scala.actions.NewScalaFileAction">
19901996
<add-to-group group-id="NewGroup" anchor="after" relative-to-action="NewGroup1"/>
19911997
</action>

scala/scala-impl/resources/messages/ScalaBundle.properties

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,15 @@ create.new.scala.class.or.file=Create New Scala Class/File
4141
this.is.not.a.valid.scala.qualified.name=This is not a valid Scala qualified name
4242

4343
newclassorfile.menu.action.sbt.text=Sbt File
44+
newclassorfile.menu.action.build.sbt.text=Sbt Build File
45+
newclassorfile.menu.action.build.sbt.defaultName=build
46+
newclassorfile.menu.action.plugin.sbt.text=Sbt Plugin File
47+
newclassorfile.menu.action.plugin.sbt.defaultName=plugin
4448
newclassorfile.menu.action.sbt.description=Create new Sbt File
4549

50+
error.package.already.contains.build.sbt=''build.sbt'' already exists for package ''{0}''
51+
error.package.already.contains.plugin.sbt=''plugin.sbt'' already exists for package ''{0}''
52+
4653
### org/jetbrains/plugins/scala/actions/ShowTypeInfoAction.scala
4754
type.info.text=Type Info
4855
type.info.description=Show Type Info
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.jetbrains.plugins.scala.actions
2+
3+
import com.intellij.ide.IdeView
4+
import com.intellij.ide.fileTemplates.actions.{AttributesDefaults, CreateFromTemplateActionBase}
5+
import com.intellij.ide.fileTemplates.{FileTemplate, FileTemplateManager}
6+
import com.intellij.openapi.actionSystem.{CommonDataKeys, DataContext}
7+
import com.intellij.openapi.project.Project
8+
import com.intellij.openapi.ui.Messages
9+
import com.intellij.psi.PsiDirectory
10+
import org.jetbrains.plugins.scala.extensions.PsiNamedElementExt
11+
import org.jetbrains.plugins.scala.ScalaBundle
12+
import org.jetbrains.sbt.icons.Icons
13+
14+
final class NewSbtBuildFileAction extends CreateFromTemplateActionBase(
15+
ScalaBundle.message("newclassorfile.menu.action.build.sbt.text"),
16+
ScalaBundle.message("newclassorfile.menu.action.sbt.description"),
17+
Icons.SBT_FILE
18+
) {
19+
20+
override def getTemplate(project: Project, dir: PsiDirectory): FileTemplate = FileTemplateManager.getDefaultInstance.getInternalTemplate(ScalaBundle.message("newclassorfile.menu.action.sbt.text"))
21+
22+
protected override def getAttributesDefaults(dataContext: DataContext): AttributesDefaults = new AttributesDefaults(ScalaBundle.message("newclassorfile.menu.action.build.sbt.defaultName")).withFixedName(true)
23+
24+
override def getTargetDirectory(dataContext: DataContext, view: IdeView): PsiDirectory = {
25+
val directories: Array[PsiDirectory] = view.getDirectories
26+
for (directory <- directories) {
27+
if (directory.findFile(ScalaBundle.message("newclassorfile.menu.action.build.sbt.defaultName") + ".sbt") != null) {
28+
Messages.showErrorDialog(CommonDataKeys.PROJECT.getData(dataContext),
29+
ScalaBundle.message("error.package.already.contains.build.sbt", directory.name),
30+
"Cannot Create File")
31+
return null
32+
}
33+
}
34+
super.getTargetDirectory(dataContext, view)
35+
}
36+
}

scala/scala-impl/src/org/jetbrains/plugins/scala/actions/NewSbtFileAction.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ final class NewSbtFileAction extends CreateFromTemplateActionBase(
1313
Icons.SBT_FILE
1414
) {
1515

16-
override def getTemplate(project: Project, dir: PsiDirectory): FileTemplate = FileTemplateManager.getDefaultInstance.getInternalTemplate("Sbt File")
16+
override def getTemplate(project: Project, dir: PsiDirectory): FileTemplate = FileTemplateManager.getDefaultInstance.getInternalTemplate(ScalaBundle.message("newclassorfile.menu.action.sbt.text"))
1717

1818
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.jetbrains.plugins.scala.actions
2+
3+
import com.intellij.ide.IdeView
4+
import com.intellij.ide.fileTemplates.actions.{AttributesDefaults, CreateFromTemplateActionBase}
5+
import com.intellij.ide.fileTemplates.{FileTemplate, FileTemplateManager}
6+
import com.intellij.openapi.actionSystem.{CommonDataKeys, DataContext}
7+
import com.intellij.openapi.project.Project
8+
import com.intellij.openapi.ui.Messages
9+
import com.intellij.psi.PsiDirectory
10+
import org.jetbrains.plugins.scala.ScalaBundle
11+
import org.jetbrains.plugins.scala.extensions.PsiNamedElementExt
12+
import org.jetbrains.sbt.icons.Icons
13+
14+
final class NewSbtPluginFileAction extends CreateFromTemplateActionBase(
15+
ScalaBundle.message("newclassorfile.menu.action.plugin.sbt.text"),
16+
ScalaBundle.message("newclassorfile.menu.action.sbt.description"),
17+
Icons.SBT_FILE
18+
) {
19+
20+
override def getTemplate(project: Project, dir: PsiDirectory): FileTemplate = FileTemplateManager.getDefaultInstance.getInternalTemplate(ScalaBundle.message("newclassorfile.menu.action.sbt.text"))
21+
22+
protected override def getAttributesDefaults(dataContext: DataContext): AttributesDefaults = new AttributesDefaults(ScalaBundle.message("newclassorfile.menu.action.plugin.sbt.defaultName")).withFixedName(true)
23+
24+
override def getTargetDirectory(dataContext: DataContext, view: IdeView): PsiDirectory = {
25+
val directories: Array[PsiDirectory] = view.getDirectories
26+
for (directory <- directories) {
27+
if (directory.findFile(ScalaBundle.message("newclassorfile.menu.action.plugin.sbt.defaultName") + ".sbt") != null) {
28+
Messages.showErrorDialog(CommonDataKeys.PROJECT.getData(dataContext),
29+
ScalaBundle.message("error.package.already.contains.plugin.sbt", directory.name),
30+
"Cannot Create File")
31+
return null
32+
}
33+
}
34+
super.getTargetDirectory(dataContext, view)
35+
}
36+
}

0 commit comments

Comments
 (0)