我的問題是,我生成的類的成員沒有被識別爲已實現。這是爲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本身測試失敗。