如何导航Grails核心源代码以更好地理解框架?

时间:2014-01-10 15:43:42

标签: grails grails-controller grails-2.3

通常在Spring Source Tool Suite IDE或Eclipse Maven项目中,如果我想查看框架/库方法在幕后做什么,我可以按住Ctrl键并单击方法名称,它将带我到源代码。我知道很多Grails方法是在运行时动态添加的,因此IDE并不总是能够知道如何获取它们。否则,我可以在Google,Github或API文档中搜索该类。使用Grails核心源来更好地理解框架的最佳方法是什么?

例如,我想查看控制器中的响应方法是什么样的,以及当索引方法如下时,它如何将一个名为“clubInstanceList”的参数返回到我的club / index gsp:

def index(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    respond clubService.list(params), model:[clubInstanceCount: clubService.count()]
}

ctrl + click在IDE中不起作用,因为此方法是在运行时添加的。我在github上搜索了Grails核心源代码,但是不知道控制器上这种响应方法的包结构。

2 个答案:

答案 0 :(得分:5)

这可能不是一个简单的搜索,因为一些代码是在编译期间生成的,或者功能可以在运行时添加到类中。这是您在使用动态语言时支付的价格。

动态运行时方法

当我需要找到一些不那么明显的功能时,我首先尝试找到负责该功能的内部插件。在STS中,我ctrl shift T并搜索*GrailsPlugin*。您可以在插件的doWithDynamicMethods闭包中检查运行时更改。

例如,Grails有ControllersGrailsPlugin类,为您的控制器类添加数据绑定功能。

搜索方法

由于我没有在此插件描述符中找到与respond方法相关的任何内容,因此可能是通过编译实现的。您可以使用ctrl H进行Java搜索,在“搜索”框中标记method。在scope标记workspace中,STS也会查找Grails类。

答案

所以您的问题的答案是ControllersRestApi类,我发现它使用“搜索方法”方法。

答案 1 :(得分:0)

我有相同的问题,并且发现Sergio的答案非常有用,但这是另一种方法:加载调试器并逐步使用F5。现在,除非您启用步骤过滤器,否则这可能会令人筋疲力尽(请参阅GGTS / STS / Eclipse帮助)。特别是,除了预先选择的软件包之外,我建议过滤掉org.springsource.loaded.*。这摆脱了许多反思和动态部分 - 至少在这种情况下 - 你不关心。

我还要补充一点,我的任务发现了这个问题,以改进响应方法文档:

https://jira.grails.org/browse/GRAILS-10721

所以我们并不是唯一一个在这个问题上刮掌的人。