使用Scala改写上次的HelloWorldAction
,以确认用Scala写插件会不会有什么问题。
首先需要到http://www.scala-lang.org上下载最新的scala安装包,并在IDEA中安装好Scala插件
首先打开项目属性,在"Facets"中添加Scala:
然后在Modules中选择PubEditor的module,添加上scala-library相应的依赖:
如果你对Idea下的scala配置不熟悉,需要多一些时间摸索,我也是连蒙带猜弄好的。
删除原来的HelloWorldAction.java
,新建一个HelloWorldAction.scala
,内容如下:
package com.thoughtworks.pli.pub_editor
import com.intellij.openapi.actionSystem.{CommonDataKeys, AnAction, AnActionEvent}
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.Messages
class HelloWorldAction extends AnAction {
def actionPerformed(event: AnActionEvent) {
val project = event.getData(CommonDataKeys.PROJECT)
val userName = askForName(project)
sayHello(project, userName)
}
private def askForName(project: Project) = {
Messages.showInputDialog(project, "What is your name?", "Input Your Name", Messages.getQuestionIcon)
}
private def sayHello(project: Project, userName: String) {
Messages.showMessageDialog(project,
s"Hello, $userName!\n Welcome to PubEditor.", "Information",
Messages.getInformationIcon)
}
}
可以看到代码跟以前很相似,有一个重要的不同是这一行:
val project = event.getData(CommonDataKeys.PROJECT)
以前的Java版是这样的:
Project project = event.getData(PlatformDataKeys.PROJECT);
其中PROJECT
的确是在CommonDataKeys
类中声明的,而PlatformDataKeys
继承了CommonDataKeys
。在Java中可以在子类中访问父类中的static
属性,而Scala中就不行。
运行方式跟上一篇一样,一切正常。通过这个尝试,发现的确可以用scala代替Java来写Idea插件。
本文所对应的tag为2_hello_world_scala
,源代码地址在:
https://github.com/freewind/PubEditor
下一篇我们将把'.pub'文件与我们的插件关联起来。