我的问题是,我生成的类的成员没有被识别为已实现。这是为Scala 2.10/2.11/2.12构建的,2.11是默认设置。使用macroparadise 2.10。Scala宏:生成的类无法编译未实现的成员
的这个目标是对一些性状标记为可冷冻和产生用于每个需要scala.util.Try
的每个是可冻结,将有其get
方法访问数据时调用的方法的一个实现类。所有不可解析的方法都填入throw new IllegalStateException
。并且创建一个自定义的freeze
方法,该方法创建填充了使用由特征定义的方法所需的数据的Frozen
类的实例。
我已成立的注释宏被放置在性状并生成伴侣对象与称为Frozen
像下面的内部类:
{
abstract trait JavaInfo extends scala.AnyRef {
@new CanFreeze() def isJavaInfo: Boolean;
@new CannotFreeze() def toJavaInfo: AnyRef
};
object JavaInfo extends scala.AnyRef {
def <init>() = {
super.<init>();
()
};
class Frozen extends JavaInfo with java.io.Serializable {
<paramaccessor> private val $isJavaInfo: scala.util.Try[Boolean] = _;
def <init>($isJavaInfo: scala.util.Try[Boolean]) = {
super.<init>();
()
};
override def isJavaInfo: Boolean = this.$isJavaInfo.get;
override def toJavaInfo: AnyRef = throw new IllegalStateException("Method not frozen!")
};
def freeze(valueToFreeze: JavaInfo): Frozen = new Frozen(scala.util.Try.apply(valueToFreeze.isJavaInfo))
};
()
}
当我尝试运行出现以下错误我的特点JavaInfo
宏:
[error] /Users/senk/projects/scala-debugger/scala-debugger-api/src/main/scala/org/scaladebugger/api/profiles/traits/info/JavaInfo.scala:9: class Frozen needs to be abstract, since:
[error] it has 2 unimplemented members.
[error] /** As seen from class Frozen, the missing signatures are as follows.
[error] * For convenience, these are usable as stub implementations.
[error] */
[error] override def isJavaInfo: Boolean = ???
[error] override def toJavaInfo: AnyRef = ???
[error] @Freezable trait JavaInfo {
[error]^
[error] one error found
这种特点本身如下:
import org.scaladebugger.macros.freeze.{CanFreeze, CannotFreeze, Freezable}
@Freezable trait JavaInfo {
@CanFreeze def isJavaInfo: Boolean
@CannotFreeze def toJavaInfo: AnyRef
}
得到错误,即Frozen
类没有实现任何功能,尽管我在我正在构建的树中看到了实现。
您可以通过检查该分支和运行sbt scalaDebuggerApi/compile
,这将编译斯卡拉2.11宏项目,然后API本身测试失败。