blob: 5fb14873412f5305b21a522191a722acfd4842e5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
//############################################################################
// Test Java interaction with scala inner classes
//############################################################################
// $Id: $
import java.io._;
class A {
val abc = "A.abc";
protected class B(x: Int, y: String) {
Console.println(abc); Console.println(x);
Console.println(y);
}
trait Itf {
def method1(x: Int): Int;
trait Itf2 extends Itf {
def method2: Unit;
}
}
trait PlainTrait {
def method1(x: Int): Int;
}
class Impl(a: Int) extends Itf {
def method1(x: Int) = {
Console.println(x);
Console.println(a);
x + a
}
}
class Impl2 extends Impl(1) with Itf#Itf2 {
def method2 = {
Console.println(abc);
}
}
def newImpl: Itf = new Impl(1);
def newImpl2: Itf#Itf2 = new Impl2;
class Outer1(arg1: Int) {
class Outer2(arg2: Int) {
class Outer3(arg3: Int) {
Console.println("Outer3: " + arg1 + " " + arg2 + " " + arg3);
}
}
}
}
object Scalatest {
val outputdir = System.getProperty("scalatest.output", "inner-jvm.obj")
val scalalib = System.getProperty("scalatest.lib", "")
val classpath = outputdir + File.pathSeparator + scalalib
def javac(src: String) = {
val tmpfilename = "tmpJavaInterraction.java";
val tmpfile = new FileWriter(tmpfilename)
tmpfile.write(src)
tmpfile.close
exec("javac -d " + outputdir + " -cp " + classpath + " " + tmpfilename)
}
/** Execute cmd, wait for the process to end and pipe it's output to stdout */
def exec(cmd: String) = {
val proc = Runtime.getRuntime().exec(cmd);
val inp = new BufferedReader(new InputStreamReader(proc.getInputStream))
val errp = new BufferedReader(new InputStreamReader(proc.getErrorStream))
proc.waitFor()
while (inp.ready) Console.println(inp.readLine())
while (errp.ready) Console.println(errp.readLine())
}
}
object Test {
val program = """
public class tmpJavaInterraction {
public static void main(String[] args) {
A a = new A();
A.B b = a.new B(1, "Hello");
A.Itf itf = a.newImpl();
itf.method1(1);
A.Itf.Itf2 itf2 = a.newImpl2();
itf2.method2();
A.Outer1 o1 = a.new Outer1(1);
A.Outer1.Outer2 o2 = o1.new Outer2(2);
A.Outer1.Outer2.Outer3 or = o2.new Outer3(3);
}
}
"""
def main(args: Array[String]): Unit = {
Scalatest.javac(program)
Scalatest.exec("java -cp " + Scalatest.classpath + " tmpJavaInterraction");
}
}
//############################################################################
|