Skip to content

Commit c633f55

Browse files
committed
Abstracting away common part for plugin and build file #SCL-21374
1 parent af09862 commit c633f55

File tree

4 files changed

+42
-52
lines changed

4 files changed

+42
-52
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ newclassorfile.menu.action.sbt.description=Create new Sbt File
4949

5050
error.package.already.contains.build.sbt=''build.sbt'' already exists for package ''{0}''
5151
error.package.already.contains.plugin.sbt=''plugin.sbt'' already exists for package ''{0}''
52+
error.title.package.already.contains.file=Cannot Create File
5253

5354
### org/jetbrains/plugins/scala/actions/ShowTypeInfoAction.scala
5455
type.info.text=Type Info
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.jetbrains.plugins.scala.actions
2+
3+
import com.intellij.ide.IdeView
4+
import com.intellij.ide.fileTemplates.actions.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.openapi.util.NlsActions
10+
import com.intellij.psi.PsiDirectory
11+
import org.jetbrains.plugins.scala.ScalaBundle
12+
import org.jetbrains.plugins.scala.extensions.PsiNamedElementExt
13+
14+
import javax.swing.Icon
15+
16+
abstract class NewPredefinedSbtFileAction(@NlsActions.ActionText title: String, @NlsActions.ActionDescription description: String, icon: Icon, fileName: String) extends CreateFromTemplateActionBase(title, description, icon) {
17+
18+
override def getTemplate(project: Project, dir: PsiDirectory): FileTemplate = FileTemplateManager.getDefaultInstance.getInternalTemplate(ScalaBundle.message("newclassorfile.menu.action.sbt.text"))
19+
20+
override def getTargetDirectory(dataContext: DataContext, view: IdeView): PsiDirectory = {
21+
val directories: Array[PsiDirectory] = view.getDirectories
22+
directories.find(directory => directory.findFile(fileName + ".sbt") != null).exists(dir => {
23+
Messages.showErrorDialog(CommonDataKeys.PROJECT.getData(dataContext),
24+
ScalaBundle.message("error.package.already.contains.build.sbt", dir.name),
25+
ScalaBundle.message("error.title.package.already.contains.file", dir.name))
26+
return null
27+
}
28+
)
29+
super.getTargetDirectory(dataContext, view)
30+
}
31+
}
Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,15 @@
11
package org.jetbrains.plugins.scala.actions
22

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
3+
import com.intellij.ide.fileTemplates.actions.AttributesDefaults
4+
import com.intellij.openapi.actionSystem.DataContext
115
import org.jetbrains.plugins.scala.ScalaBundle
126
import org.jetbrains.sbt.icons.Icons
137

14-
final class NewSbtBuildFileAction extends CreateFromTemplateActionBase(
8+
final class NewSbtBuildFileAction extends NewPredefinedSbtFileAction(
159
ScalaBundle.message("newclassorfile.menu.action.build.sbt.text"),
1610
ScalaBundle.message("newclassorfile.menu.action.sbt.description"),
17-
Icons.SBT_FILE
11+
Icons.SBT_FILE,
12+
ScalaBundle.message("newclassorfile.menu.action.build.sbt.defaultName")
1813
) {
19-
20-
override def getTemplate(project: Project, dir: PsiDirectory): FileTemplate = FileTemplateManager.getDefaultInstance.getInternalTemplate(ScalaBundle.message("newclassorfile.menu.action.sbt.text"))
21-
2214
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-
}
3615
}
Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,15 @@
11
package org.jetbrains.plugins.scala.actions
22

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
3+
import com.intellij.ide.fileTemplates.actions.AttributesDefaults
4+
import com.intellij.openapi.actionSystem.DataContext
105
import org.jetbrains.plugins.scala.ScalaBundle
11-
import org.jetbrains.plugins.scala.extensions.PsiNamedElementExt
126
import org.jetbrains.sbt.icons.Icons
137

14-
final class NewSbtPluginFileAction extends CreateFromTemplateActionBase(
8+
final class NewSbtPluginFileAction extends NewPredefinedSbtFileAction(
159
ScalaBundle.message("newclassorfile.menu.action.plugin.sbt.text"),
1610
ScalaBundle.message("newclassorfile.menu.action.sbt.description"),
17-
Icons.SBT_FILE
11+
Icons.SBT_FILE,
12+
ScalaBundle.message("newclassorfile.menu.action.plugin.sbt.defaultName")
1813
) {
19-
20-
override def getTemplate(project: Project, dir: PsiDirectory): FileTemplate = FileTemplateManager.getDefaultInstance.getInternalTemplate(ScalaBundle.message("newclassorfile.menu.action.sbt.text"))
21-
2214
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-
}
3615
}

0 commit comments

Comments
 (0)