From 0ecd5a4a2629e1888d2f7263216969ca63b6ea44 Mon Sep 17 00:00:00 2001 From: Philippe Suter <philippe.suter@gmail.com> Date: Tue, 9 Jun 2009 12:32:47 +0000 Subject: [PATCH] started to move stuff out of AnalysisComponent to share work. --- src/funcheck/AnalysisComponent.scala | 36 +++++--------------------- src/funcheck/CodeExtraction.scala | 38 ++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 29 deletions(-) create mode 100644 src/funcheck/CodeExtraction.scala diff --git a/src/funcheck/AnalysisComponent.scala b/src/funcheck/AnalysisComponent.scala index 0502cf070..dab29a18c 100644 --- a/src/funcheck/AnalysisComponent.scala +++ b/src/funcheck/AnalysisComponent.scala @@ -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") diff --git a/src/funcheck/CodeExtraction.scala b/src/funcheck/CodeExtraction.scala new file mode 100644 index 000000000..256132b29 --- /dev/null +++ b/src/funcheck/CodeExtraction.scala @@ -0,0 +1,38 @@ +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 _ => ; + } +} -- GitLab