芭蕾舞女演员注释处理无法正常工作

问题描述 投票:2回答:2

我正在尝试使用芭蕾舞演员(在MacOS Catalina上为jBallerina-1.0.5)实现一个简单的注释处理器。在此示例中,我需要:

  1. 迭代给定resource的可用service功能
  2. 对于每次迭代,获取给定@annotation的值,如resource中所注释的>]
  3. 例如:

...
service my_service on new http:Listener(8080) {
    @my_annonatation {
        value: "my-value-for-resource-1"
    }
    resource function my_resource_1() {}

    @my_annonatation {
        value: "my-value-for-resource-2"
    }
    resource function my_resource_2() {}
}

根据上述service代码段,我需要将resource名称设为["my_resource_1", "my_resource_2"],并将@annotation值设为my-value-for-resource-1my-value-for-resource-2分别用于my_resource_1my_resource_2

我的问题是:

  1. 如何获得芭蕾舞女演员在给定resource中定义的service
  2. 我已经尝试过使用function getServiceAnnotations(service serviceType, string annotName, string? moduleName = ()) returns any模块的ballerina/reflect来获取@annotation值。但是它没有任何回报(显然它返回一个空字符串,或者可能为null)。
  3. 除了旧的芭蕾舞演员0.x预发行版1之外,我没有看到任何有关芭蕾舞演员注释处理的好文章。我发现ballerina/reflect模块现在已更新2 3,因为与芭蕾舞女演员源代码相比,我预发行了0.x版(但芭蕾舞女演员发行说明4中未提及)。

[还有文章“ Extending Ballerina” 5提到了通过编译器扩展进行注释处理的另一种方法,该扩展将操作委托给Java。但是,我们存在将Java依赖关系推入ballerina central的限制。

[请向我建议一种解决方法,以获得预期的结果,并且非常感谢纯芭蕾舞演员编写的代码。

参考

  1. Ballerina Annotation Processing example for 0.9.x releases
  2. ballerina/reflect of 0.x
  3. ballerina/reflect
  4. ballerina/reflect of 1.0.5
  5. ballerina/reflect

我正在尝试用芭蕾舞演员(在MacOS Catalina上为jBallerina-1.0.5)实现一个简单的注释处理器。在此示例中,我需要:遍历给定服务的可用资源功能...

wso2 annotation-processing ballerina
2个回答
1
投票

注释处理可以在编译时或运行时进行。目前(使用Ballerina 1.0.5和更早版本),编译时注释处理只能通过“扩展芭蕾舞女演员”文档中所述的编译器扩展来完成,而运行时注释访问可以使用Ballerina release notes或通过Extending Ballerina模块(annotation access expression模块中现在仅提供了通过注释访问表达式无法实现的模块-而在发行说明中提到了此添加功能“已引入二进制运算符。@来访问位于运行时。”,这似乎已错过了ballerina/reflect模块中某些功能的事实。


0
投票

UPDATE:

© www.soinside.com 2019 - 2024. All rights reserved.