Bug 13010 fixed: Wrong class was returned by jcompile (with ecj) 88/12988/3
Simon Marchetto [Tue, 29 Oct 2013 15:28:56 +0000 (16:28 +0100)]
Change-Id: If013792bcdc66d24efe0e5966dc0cfcff5ad7671

scilab/CHANGES_5.5.X
scilab/modules/external_objects_java/src/java/org/scilab/modules/external_objects_java/ScilabJavaCompiler.java
scilab/modules/external_objects_java/tests/nonreg_tests/bug_13010.dia.ref [new file with mode: 0644]
scilab/modules/external_objects_java/tests/nonreg_tests/bug_13010.tst [new file with mode: 0644]

index 47ba329..e5b305d 100644 (file)
@@ -83,6 +83,8 @@ Scilab Bug Fixes
 
 * Bug #13008 fixed - 'help $' now opens the 'Symbols' help page.
 
+* Bug #13010 fixed - Wrong class was returned by jcompile (with ecj).
+
 * Bug #13011 fixed - ilib_compile failed under MacOS X 10.9.
 
 * Bug #13012 fixed - Vectorial export of rotated strings was wrong.
index 906f06c..a42d871 100644 (file)
@@ -184,7 +184,11 @@ public class ScilabJavaCompiler {
             if (isFile) {
                 return -1;
             } else {
-                return ScilabClassLoader.loadJavaClass(manager.className, true);
+                if (manager.className != null && !manager.className.isEmpty()) {
+                    return ScilabClassLoader.loadJavaClass(manager.className, true);
+                } else {
+                    return -1;
+                }
             }
         } else {
             if (!isECJ) {
@@ -352,7 +356,7 @@ public class ScilabJavaCompiler {
 
         @Override
         public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling) throws IOException {
-            if (sibling instanceof SourceString) {
+            if (sibling instanceof SourceString && className != null && className.indexOf('$') == -1) {
                 this.className = className.replace('/', '.');
             }
 
diff --git a/scilab/modules/external_objects_java/tests/nonreg_tests/bug_13010.dia.ref b/scilab/modules/external_objects_java/tests/nonreg_tests/bug_13010.dia.ref
new file mode 100644 (file)
index 0000000..3dddc64
--- /dev/null
@@ -0,0 +1,12 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+compiledClass = jcompile("Test", ["public class Test {";
+"public enum foo { ONE, TWO, THREE; }";
+"public static double bar(foo x) { return (double) x.ordinal(); }}"]);
+classObj = compiledClass.class;
+className = classObj.getName(jvoid);
+assert_checkequal(className, "Test");
diff --git a/scilab/modules/external_objects_java/tests/nonreg_tests/bug_13010.tst b/scilab/modules/external_objects_java/tests/nonreg_tests/bug_13010.tst
new file mode 100644 (file)
index 0000000..c742313
--- /dev/null
@@ -0,0 +1,14 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+compiledClass = jcompile("Test", ["public class Test {";
+"public enum foo { ONE, TWO, THREE; }";
+"public static double bar(foo x) { return (double) x.ordinal(); }}"]);
+
+classObj = compiledClass.class;
+className = classObj.getName(jvoid);
+assert_checkequal(className, "Test");