Author: reto
Date: Mon Jan 24 22:13:31 2011
New Revision: 1063017

URL: http://svn.apache.org/viewvc?rev=1063017&view=rev
Log:
CLEREZZA-408: working with multiple byte-arrays by assigning different 
virtual-file name, refactoring around directory wrapping

Modified:
    incubator/clerezza/trunk/scala-scripting/script-engine/pom.xml
    
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala
    
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/VirtualDirectoryWrapper.scala
    
incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/CompilerServiceTest.scala

Modified: incubator/clerezza/trunk/scala-scripting/script-engine/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/pom.xml?rev=1063017&r1=1063016&r2=1063017&view=diff
==============================================================================
--- incubator/clerezza/trunk/scala-scripting/script-engine/pom.xml (original)
+++ incubator/clerezza/trunk/scala-scripting/script-engine/pom.xml Mon Jan 24 
22:13:31 2011
@@ -43,8 +43,7 @@
                                <configuration>
                                        <instructions>
                                                
<Service-Component>OSGI-INF/serviceComponents.xml</Service-Component>
-                                               
<Export-Package>org.apache.clerezza.scala.scripting</Export-Package>
-                                               
<Private-Package>org.apache.clerezza.scala.scripting.util</Private-Package>
+                                               
<Export-Package>org.apache.clerezza.scala.scripting,org.apache.clerezza.scala.scripting.util</Export-Package>
                                                
<DynamicImport-Package>*</DynamicImport-Package>
                                                
<Bundle-SymbolicName>org.apache.clerezza.scala.scripting</Bundle-SymbolicName>
                                        </instructions>

Modified: 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala?rev=1063017&r1=1063016&r2=1063017&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala
 (original)
+++ 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala
 Mon Jan 24 22:13:31 2011
@@ -19,6 +19,7 @@
 
 package org.apache.clerezza.scala.scripting
 
+
 import org.apache.clerezza.scala.scripting.util.FileWrapper
 import org.apache.clerezza.scala.scripting.util.GenericFileWrapperTrait
 import org.apache.clerezza.scala.scripting.util.SplittingDirectory
@@ -52,7 +53,11 @@ class TrackingCompiler private (bundleCo
        @throws(classOf[CompileErrorsException])
        def compile(sources: List[Array[Char]]): List[Class[_]] = {
                writtenClasses.clear()
-               val sourceFiles: List[SourceFile] = for(chars <- sources) yield 
new BatchSourceFile("<script>", chars)
+               var i = 0
+               val sourceFiles: List[SourceFile] = for(chars <- sources) yield 
{
+                       i = i +1;
+                       new BatchSourceFile("<script"+i+">", chars)
+               }
                (new Run).compileSources(sourceFiles)
                if (reporter.hasErrors) {
                        reporter.reset
@@ -95,31 +100,11 @@ object TrackingCompiler {
 
                val writtenClasses: mutable.ListBuffer[AbstractFile] = 
mutable.ListBuffer[AbstractFile]()
                val settings = {
-                               trait VirtualDirectoryFlavour extends 
VirtualDirectoryWrapper {
-                                       abstract override def output = {
-                                               println("unexpected call to 
output "+name)
-                                               super.output
-                                       }
-                               }
-
-                               def wrap(f: AbstractFile): AbstractFile = {
-                                       f match {
-                                               case d: VirtualDirectory => new 
VirtualDirectoryWrapper(d, wrap) with LoggingFileWrapper with 
VirtualDirectoryFlavour {
-                                                               override def 
output = d.output
-                                                       }
-                                               case o => new FileWrapper(o, 
wrap) with LoggingFileWrapper
-                                       }
-                               }
-
-                               trait LoggingFileWrapper extends 
GenericFileWrapperTrait {
-
-                                       abstract override def output = {
-                                               writtenClasses += this
-                                               super.output
-                                       }
+                               def outputListener(abtractFile: AbstractFile) {
+                                       writtenClasses += abtractFile
                                }
                                val settings = new Settings
-                               settings.outputDirs setSingleOutput 
wrap(outputDirectory)
+                               settings.outputDirs setSingleOutput 
VirtualDirectoryWrapper.wrap(outputDirectory, outputListener)
                                settings
                        }
                new TrackingCompiler(bundleContext,

Modified: 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/VirtualDirectoryWrapper.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/VirtualDirectoryWrapper.scala?rev=1063017&r1=1063016&r2=1063017&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/VirtualDirectoryWrapper.scala
 (original)
+++ 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/VirtualDirectoryWrapper.scala
 Mon Jan 24 22:13:31 2011
@@ -10,7 +10,7 @@ import scala.tools.nsc.io.VirtualDirecto
 
 class VirtualDirectoryWrapper(val wrapped: AbstractFile,
                                                          val childWrapper: 
(AbstractFile) => AbstractFile) extends VirtualDirectory(null, None)
-                                                       with 
GenericFileWrapperTrait {
+                                                                               
                                                                                
   with GenericFileWrapperTrait {
        lastModified =wrapped.lastModified
 
        override def output = {
@@ -39,3 +39,37 @@ class VirtualDirectoryWrapper(val wrappe
        }
 
 }
+
+object VirtualDirectoryWrapper {
+       trait VirtualDirectoryFlavour extends VirtualDirectoryWrapper {
+               abstract override def output = {
+                       println("unexpected call to output "+name)
+                       super.output
+               }
+       }
+
+       def wrap(f: AbstractFile, outputListenerParam: (AbstractFile) => Unit): 
AbstractFile = {
+               def innerWrap(f: AbstractFile) = wrap(f, outputListenerParam)
+               f match {
+                       case d: VirtualDirectory => new 
VirtualDirectoryWrapper(d, 
+                                                                               
innerWrap)
+                                                                               
with LoggingFileWrapper with VirtualDirectoryFlavour {
+                                       override def output = d.output
+                                       val outputListener = outputListenerParam
+                               }
+                       case o => new FileWrapper(o, innerWrap) with 
LoggingFileWrapper {
+                                       val outputListener = outputListenerParam
+                               }
+               }
+       }
+
+       trait LoggingFileWrapper extends GenericFileWrapperTrait {
+
+               val outputListener: (AbstractFile) => Unit
+
+               abstract override def output = {
+                       outputListener(this)
+                       super.output
+               }
+       }
+}

Modified: 
incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/CompilerServiceTest.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/CompilerServiceTest.scala?rev=1063017&r1=1063016&r2=1063017&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/CompilerServiceTest.scala
 (original)
+++ 
incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/CompilerServiceTest.scala
 Mon Jan 24 22:13:31 2011
@@ -108,11 +108,27 @@ class CompilerServiceTest {
                                }
                        }
                        """
-                       val compileResult = 
priv(service.compile(List(s.toCharArray)))
+                       //and another class
+                       val s2 = """
+                       package foo {
+                               class TestClass2() {
+                                       println("constructing TestClass2");
+                               }
+                               object TestClass2 {
+                                       println("constructing TestClass2 
Object");
+                                       val msg = "Hello2b"
+                               }
+                       }
+                       """
+                       val compileResult = 
priv(service.compile(List(s.toCharArray, s2.toCharArray)))
                        val testClassClass: Class[_] = compileResult(0)
                        Assert.assertEquals("foo.TestClass", 
testClassClass.getName)
                        val method = testClassClass.getMethod("msg")
                        Assert.assertEquals("Hello2", method.invoke(null))
+                       val testClassClass2: Class[_] = compileResult(1)
+                       Assert.assertEquals("foo.TestClass2", 
testClassClass2.getName)
+                       val method2 = testClassClass2.getMethod("msg")
+                       Assert.assertEquals("Hello2b", method2.invoke(null))
                }
                val methodFrom1Again = testClassClass1.getMethod("msg")
                Assert.assertEquals("Hello", methodFrom1Again.invoke(null))


Reply via email to