From ecef43a298dbeeda61979e68b657685a09369bb6 Mon Sep 17 00:00:00 2001 From: Muhammad Hammad Date: Tue, 12 Dec 2017 22:23:11 +0100 Subject: [PATCH] Fixes #16 --- .../mdkt/compiler/InMemoryJavaCompiler.java | 2 +- .../java/org/mdkt/compiler/HelloClass.java | 8 ++++++ .../compiler/InMemoryJavaCompilerTest.java | 26 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/mdkt/compiler/HelloClass.java diff --git a/src/main/java/org/mdkt/compiler/InMemoryJavaCompiler.java b/src/main/java/org/mdkt/compiler/InMemoryJavaCompiler.java index b853590..e293f29 100644 --- a/src/main/java/org/mdkt/compiler/InMemoryJavaCompiler.java +++ b/src/main/java/org/mdkt/compiler/InMemoryJavaCompiler.java @@ -109,7 +109,7 @@ public Map> compileAll() throws Exception { Map> classes = new HashMap>(); for (String className : sourceCodes.keySet()) { - classes.put(className, classLoader.loadClass(className)); + classes.put(className, classLoader.findClass(className)); } return classes; } diff --git a/src/test/java/org/mdkt/compiler/HelloClass.java b/src/test/java/org/mdkt/compiler/HelloClass.java new file mode 100644 index 0000000..3813aa5 --- /dev/null +++ b/src/test/java/org/mdkt/compiler/HelloClass.java @@ -0,0 +1,8 @@ +package org.mdkt.compiler; + +public class HelloClass { + + public String hello() { + return "hello"; + } +} diff --git a/src/test/java/org/mdkt/compiler/InMemoryJavaCompilerTest.java b/src/test/java/org/mdkt/compiler/InMemoryJavaCompilerTest.java index c3c16e8..ca97e2e 100644 --- a/src/test/java/org/mdkt/compiler/InMemoryJavaCompilerTest.java +++ b/src/test/java/org/mdkt/compiler/InMemoryJavaCompilerTest.java @@ -1,5 +1,6 @@ package org.mdkt.compiler; +import java.lang.reflect.Method; import java.util.List; import java.util.Map; @@ -30,6 +31,29 @@ public void compile_WhenTypical() throws Exception { Assert.assertEquals(1, helloClass.getDeclaredMethods().length); } + @Test + public void compile_WhenTypicalUpdateClass() throws Exception { + StringBuffer sourceCode = new StringBuffer(); + + sourceCode.append("package org.mdkt.compiler;\n"); + sourceCode.append("public class HelloClass {\n"); + sourceCode.append(" public String hello() { return \"hello1\"; }"); + sourceCode.append("}"); + + Class oldClass = HelloClass.class; + Class newClass = InMemoryJavaCompiler.newInstance().compile("org.mdkt.compiler.HelloClass", sourceCode.toString()); + + Assert.assertNotEquals(oldClass.hashCode() , newClass.hashCode()); + Assert.assertNotEquals(oldClass.getDeclaredMethod("hello").invoke(oldClass.newInstance()) , + newClass.getDeclaredMethod("hello").invoke(newClass.newInstance())); + + + + + + } + + @Test public void compileAll_WhenTypical() throws Exception { String cls1 = "public class A{ public B b() { return new B(); }}"; @@ -114,4 +138,6 @@ public void compile_WhenWarningsAndErrors() throws Exception { throw e; } } + + }