2016-05-31 8 views
0

特定のStaticAnnotationタイプからJSファイルを作成するsbtプラグインを作成しています。クラスパスにあるすべての注釈を含めるのではなく、実際にfastOptJS/fullOptJSによってリンクされたクラスのアノテーションのみを出力する方が好きです。この目的のために、Scala.jsリンカツールやsbtプラグインを活用できますか?実際にfastOpt.js/fullOpt.jsにリンクされているScala.jsクラスのリスト?

答えて

0

はい、できます。 Scala.jsツールAPI(リンカツール)には、必要なものがすべて含まれているAnalysisというデータ型が用意されています。

AnalysisAnalyzer.computeReachabilityで構成できます。あなたのクラスパス上の.sjsirファイルのために適切なClassInfoを与えなければなりません。

まだ開発中、SBTプロジェクトのAnalysisを構築する方法を示していますが、これは、the callgraph sbt pluginで行われています https://github.com/lionelfleury/scala-js-call-graph/blob/065506bf9a9c12ccc54fed056fed878e6f18b328/sbt-scalajs-callgraph/src/main/scala/ch/epfl/sbtplugin/CallGraphPlugin.scala#L28-L49

最適化は(しない限り、実行された後に、この特定の実装がAnalysisを選択プログラムはリンクしません。この場合、の最適化が実行される前に、解析に戻ります)。ユースケースによってはどちらか一方のほうが好きかもしれませんが、の最適化の後にバージョンを追加した方がよいでしょう。

Analysisを取得したら、classInfoのメンバーを一覧表示し、.isNeededAtAllがfalseのメンバーを除外できます。また、場合によっては、より洗練されたテストを使用したいと考えています(.isAnySubclassInstantiatedなど)。

+0

詳細な説明をいただきありがとうございます。しかし、1つの質問:sbt.Loggerからcore.tools.logging.Loggerを取得するにはどうすればよいですか? – jokade

+0

このように:https://github.com/scala-js/scala-js/blob/master/sbt-plugin/src/main/scala/scala/scalajs/sbtplugin/Implicits.scala(ただし、今私は見るそれはおそらくそれらのことを暗黙的に公開するべきではありません^^) – sjrd

関連する問題