Scala:自定义编译器警告

Ric*_*ver 5 java annotations scala

我已经用一些抽象过程(方法返回单元)创建了一个特征。然后我创建了一个 sub trait,为了方便开发,它放入了虚拟实现 {}。但是,我想对 dummy trait 发出编译器警告:“使用 dummy trait 可能无法实现所有功能。在生产中使用基本特征。”

我查看了 Scala 注释和 Java 注释,但找不到合适的注释或执行此操作的方法。我可以使用已弃用的注释,但这相当不雅:

@deprecated("GraphicMethodsDummy contains procedure stubs. Inherit from GraphicMethods for production", "")
Run Code Online (Sandbox Code Playgroud)

从 deprecated 继承似乎没有太大优势,因为产生编译器消息的方法似乎是私有的,不能被覆盖。

mik*_*łak 1

  1. 更改您的 API,以便只能通过“创建者”方法(例如在伴随对象中)获取虚拟特征。
  2. 将“创建者方法”实现为def 宏它看起来像这样:

class Dummy

object creator {
    def apply(): Dummy = macro creatorImpl

    def creatorImpl(c: Context)(): c.Expr[Dummy] = {
        import c.universe._

        c.warning(c.enclosingPosition,
            """Using the dummy trait all functionality may not be implemented. 
                        Use the base trait in production.""")

        reify(new Dummy)
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,在各种 API(如 Guava)中常用的另一种较少涉及的方法是仅向您的类添加自定义注释(例如@NotSafeForProd)。但是,这当然不会生成编译器警告。