我有数百个遵循以下格式的小型 javascript 文件,其中 Ext.define 定义了一个 javascript 类。我需要能够在 Java 应用程序中解析这些文件并获取“SOMECLASSNAME”以及“extend”和“requires”等各种属性的值。我想忽略评论,我不关心功能。
我实际上已经使用正则表达式实现了这个并且它有效。然而,它相当脆弱。我已经处理了诸如使用 " 而不是 ' 的文件以及不方便地放置破坏正则表达式的注释之类的问题。我真的很想使用不那么脆弱的解决方案来做到这一点,这意味着使用 javascript 解析器。
我已经使用诸如“java javascript ast parser”之类的各种搜索进行了搜索,但似乎没有什么适合我正在尝试做的事情。我发现最接近的是Using ScriptEngine in java, How can I extract function list? 但这似乎要求脚本是可运行的,并且这些文件中的每一个都不能单独运行。
Ext.define('SOMECLASSNAME', {
extend: 'JSCommon.remoting.RESTService',
alternateClassName: 'AccountSettingService',
requires: [
'JSCommon.security.Privilege',
'JSCommon.security.PrivilegeConstants',
'JSCommon.security.store.UIPrivilege',
'JSCommon.util.StringUtil'
],
statics: {
/**
* Creates and returns a new instance of the ReportsService
*/
getNewInstance: function() {
return Ext.create('JSCommon.acctSetting.AccountSettingService');
}
},
config: {
customer: 'abc',
service: 'companySetting'
},
constructor: function(config) {
this.initConfig(config);
return this;
},
getCompanyID: function() {
return PlatformCache.getCompanyContextByAttribute('id');
},
getAccountSetting: function(onResult, onFault) {
var me = this;
var svc = RESTService.getNewInstance();
var ops = Ext.create('JSCommon.remoting.URLElements');
var params = Ext.create('JSCommon.remoting.URLParams');
params.add('action', 'find');
var postbody = {
};
svc.sendGETRequest(svc.getURL(this.getCustomer(), me.getCompanyID(), me.getService(), ops, params), postbody, onResult, onFault);
}
});