Skip to content
Snippets Groups Projects
Commit 0ecd5a4a authored by Philippe Suter's avatar Philippe Suter
Browse files

started to move stuff out of AnalysisComponent to share work.

parent 60f4783e
No related branches found
No related tags found
No related merge requests found
......@@ -3,9 +3,12 @@ package funcheck
import scala.tools.nsc._
import scala.tools.nsc.plugins._
class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin) extends PluginComponent with Extractors {
class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin) extends PluginComponent
with Extractors
// all these traits define functions applied during tree traversals
with CodeExtraction
{
import global._
import global.definitions._
// when we use 2.8.x, swap the following two lines
val runsAfter = "refchecks"
......@@ -19,8 +22,8 @@ class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin)
import StructuralExtractors._
def apply(unit: CompilationUnit): Unit = {
(new ForeachTreeTraverser(firstFilter(unit))).traverse(unit.body)
stopIfErrors
// (new ForeachTreeTraverser(firstFilter(unit))).traverse(unit.body)
// stopIfErrors
(new ForeachTreeTraverser(findContracts)).traverse(unit.body)
stopIfErrors
(new ForeachTreeTraverser(mircoTraverser(unit))).traverse(unit.body)
......@@ -38,31 +41,6 @@ class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin)
}
}
private def findContracts(tree: Tree): Unit = tree match {
case DefDef(/*mods*/ _, name, /*tparams*/ _, /*vparamss*/ _, /*tpt*/ _, body) => {
var realBody = body
var reqCont: Option[Tree] = None
var ensCont: Option[Function] = None
body match {
case EnsuredExpression(body2, contract) => realBody = body2; ensCont = Some(contract)
case _ => ;
}
realBody match {
case RequiredExpression(body3, contract) => realBody = body3; reqCont = Some(contract)
case _ => ;
}
println("In: " + name)
println(" Requires clause: " + reqCont)
println(" Ensures clause: " + ensCont)
println(" Body: " + realBody)
}
case _ => ;
}
def mircoTraverser(unit: CompilationUnit)(tree: Tree): Unit = {
lazy val genAnnot: Symbol = definitions.getClass("funcheck.lib.Specs.generator")
......
package funcheck
import scala.tools.nsc._
import scala.tools.nsc.plugins._
trait CodeExtraction {
self: Extractors =>
val global: Global
import global._
import StructuralExtractors._
def findContracts(tree: Tree): Unit = tree match {
case DefDef(/*mods*/ _, name, /*tparams*/ _, /*vparamss*/ _, /*tpt*/ _, body) => {
var realBody = body
var reqCont: Option[Tree] = None
var ensCont: Option[Function] = None
body match {
case EnsuredExpression(body2, contract) => realBody = body2; ensCont = Some(contract)
case _ => ;
}
realBody match {
case RequiredExpression(body3, contract) => realBody = body3; reqCont = Some(contract)
case _ => ;
}
println("In: " + name)
println(" Requires clause: " + reqCont)
println(" Ensures clause: " + ensCont)
println(" Body: " + realBody)
}
case _ => ;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment