首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy DSLD和ServiceLoader模式

Groovy DSLD和ServiceLoader模式
EN

Stack Overflow用户
提问于 2018-06-15 16:40:13
回答 1查看 71关注 0票数 0

我的Groovy脚本中有一个隐式变量" services ",它的作用是在注册表中查找服务。

我可以用以下语法调用它:

代码语言:javascript
复制
def myService = services.lookup 'com.test.MyService'

查找方法的实现并不返回MyService的实例,而是一个特殊的GroovyObject,它将丢失的方法委托给服务。

我想告诉Eclipse,对MyService的调用应该委托给MyService,以便将来自myService的所有方法添加到自动完成列表中。但是,我没有成功地用DSLD定义实现它。

有可能实现这样的行为吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-19 17:43:47

我使用了两项贡献:

  • 第一个发现对services.lookup的每个调用,并在虫洞中填充地图。
  • 第二个属性将虫洞映射中的每个属性声明为全局属性。

简化版本:

代码语言:javascript
复制
contribute(isMyDSL() & currentType('ServiceProxy') & bind(exprs: assignedVariable(currentType()))) {
      def name = exprs[0].leftExpression.name
      def classType - exprs[0].arguments.getExpression(0).text /* Introspecting MethodCall */

      def services = wormhole.services
      if (!services) {
        services = [:]
        wormhole.services = services
      }
      services[name] = classType
}

contribute(isMyDSL() & isThisType()) {
      wormhole.properties?.each { name, type -> 
        property name:name, type:type, doc:"OSGI Service: ${type}"
      }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50879689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档