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))