parent
072d30439d
commit
c00c075c18
@ -15,6 +15,7 @@ import java.net.URL;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarInputStream;
|
import java.util.jar.JarInputStream;
|
||||||
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
|
||||||
@ -200,7 +201,7 @@ public class ReflectPackage {
|
|||||||
* @return An ArrayList of Class objects contained in the package which may be empty if an error occurs.
|
* @return An ArrayList of Class objects contained in the package which may be empty if an error occurs.
|
||||||
*/
|
*/
|
||||||
public static Class[] getAllClassesInPackage(String pkg, boolean includeSubs, boolean bSort) {
|
public static Class[] getAllClassesInPackage(String pkg, boolean includeSubs, boolean bSort) {
|
||||||
return getClassesInPackageFltr(new HashSet<Class>(), pkg, includeSubs, bSort, null);
|
return getClassesInPackageFltr(new HashSet<>(), pkg, includeSubs, bSort, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -355,7 +356,7 @@ public class ReflectPackage {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Class<?>[] getAssignableClassesInPackage(String pckg, Class reqSuperCls, boolean includeSubs, boolean bSort) {
|
public static Class<?>[] getAssignableClassesInPackage(String pckg, Class reqSuperCls, boolean includeSubs, boolean bSort) {
|
||||||
return getClassesInPackageFltr(new HashSet<Class>(), pckg, includeSubs, bSort, reqSuperCls);
|
return getClassesInPackageFltr(new HashSet<>(), pckg, includeSubs, bSort, reqSuperCls);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -370,7 +371,7 @@ public class ReflectPackage {
|
|||||||
public static Class<?>[] getAssignableClasses(String pckgClassName, boolean includeSubs, boolean bSort) {
|
public static Class<?>[] getAssignableClasses(String pckgClassName, boolean includeSubs, boolean bSort) {
|
||||||
int dotIndex = pckgClassName.lastIndexOf('.');
|
int dotIndex = pckgClassName.lastIndexOf('.');
|
||||||
if (dotIndex <= 0) {
|
if (dotIndex <= 0) {
|
||||||
System.err.println("warning: " + pckgClassName + " is not a package!");
|
LOGGER.warning(pckgClassName + " is not a package!");
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
String pckg = pckgClassName.substring(0, pckgClassName.lastIndexOf('.'));
|
String pckg = pckgClassName.substring(0, pckgClassName.lastIndexOf('.'));
|
||||||
@ -460,14 +461,14 @@ public class ReflectPackage {
|
|||||||
for (Pair<String, Object> nameVal : paramValuePairs) {
|
for (Pair<String, Object> nameVal : paramValuePairs) {
|
||||||
boolean succ = BeanInspector.setMem(o, nameVal.head, nameVal.tail);
|
boolean succ = BeanInspector.setMem(o, nameVal.head, nameVal.tail);
|
||||||
if (!succ) {
|
if (!succ) {
|
||||||
System.err.println("Error, unable to set " + nameVal.head + " to " + nameVal.tail + " in object " + o);
|
LOGGER.severe("Unable to set " + nameVal.head + " to " + nameVal.tail + " in object " + o);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return o;
|
return o;
|
||||||
} else {
|
} else {
|
||||||
System.err.println("Error in instantiateWithParams!");
|
LOGGER.severe("Error in instantiateWithParams!");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -475,7 +476,7 @@ public class ReflectPackage {
|
|||||||
/**
|
/**
|
||||||
* Retrieve an instance of a generic object with arbitrary arguments. Note that the
|
* Retrieve an instance of a generic object with arbitrary arguments. Note that the
|
||||||
* full package path must be given and the argument array must match a signature of
|
* full package path must be given and the argument array must match a signature of
|
||||||
* an existing constructor.
|
* an existing constructor. Constructors with primitive types are not supported.
|
||||||
* Returns null on a failure and the constructed object otherwise.
|
* Returns null on a failure and the constructed object otherwise.
|
||||||
*
|
*
|
||||||
* @param clsName
|
* @param clsName
|
||||||
@ -495,14 +496,11 @@ public class ReflectPackage {
|
|||||||
ct = clz.getConstructor(argClz);
|
ct = clz.getConstructor(argClz);
|
||||||
o = ct.newInstance(args);
|
o = ct.newInstance(args);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.err.println("Unable to retrieve constructor of " + clsName + ", arguments " + BeanInspector.toString(args) + "\n" + e.getClass());
|
LOGGER.log(Level.SEVERE, "Unable to retrieve constructor of " + clsName + ", arguments " + BeanInspector.toString(args) + "\n" + e.getClass(), e);
|
||||||
System.err.println(e.getMessage());
|
|
||||||
e.printStackTrace();
|
|
||||||
o = null;
|
o = null;
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.err.println("Unable to create instance of " + clsName + ", arguments " + BeanInspector.toString(args) + "\n" + e.getMessage());
|
LOGGER.log(Level.SEVERE, "Unable to create instance of " + clsName + ", arguments " + BeanInspector.toString(args) + "\n" + e.getMessage(), e);
|
||||||
e.printStackTrace(System.err);
|
|
||||||
o = null;
|
o = null;
|
||||||
}
|
}
|
||||||
return o;
|
return o;
|
||||||
|
30
src/test/java/eva2/tools/DummyClass.java
Normal file
30
src/test/java/eva2/tools/DummyClass.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package eva2.tools;
|
||||||
|
|
||||||
|
public class DummyClass {
|
||||||
|
private int i;
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
public DummyClass(Integer i) {
|
||||||
|
this.i = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DummyClass() {
|
||||||
|
this.i = 42;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getI() {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setI(int i) {
|
||||||
|
this.i = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
}
|
45
src/test/java/eva2/tools/ReflectPackageTest.java
Normal file
45
src/test/java/eva2/tools/ReflectPackageTest.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package eva2.tools;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
public class ReflectPackageTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInstantiateWithParams() throws Exception {
|
||||||
|
List<Pair<String,Object>> params = new ArrayList<>();
|
||||||
|
params.add(new Pair<>("i", 108));
|
||||||
|
|
||||||
|
DummyClass dummy = (DummyClass)ReflectPackage.instantiateWithParams(DummyClass.class.getCanonicalName(), params);
|
||||||
|
assertEquals(108, dummy.getI());
|
||||||
|
assertNull(dummy.getText());
|
||||||
|
|
||||||
|
params.add(new Pair<>("text", "New Jersey"));
|
||||||
|
dummy = (DummyClass)ReflectPackage.instantiateWithParams(DummyClass.class.getCanonicalName(), params);
|
||||||
|
assertEquals(108, dummy.getI());
|
||||||
|
assertEquals("New Jersey", dummy.getText());
|
||||||
|
|
||||||
|
// Invalid param
|
||||||
|
params.add(new Pair<>("invalid", 42.0));
|
||||||
|
dummy = (DummyClass)ReflectPackage.instantiateWithParams(DummyClass.class.getCanonicalName(), params);
|
||||||
|
assertNull(dummy);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetInstance() throws Exception {
|
||||||
|
Object obj = ReflectPackage.getInstance(DummyClass.class.getCanonicalName(), new Object[]{});
|
||||||
|
assertTrue(obj instanceof DummyClass);
|
||||||
|
|
||||||
|
// Calls default constructor
|
||||||
|
DummyClass dummy = (DummyClass)obj;
|
||||||
|
assertEquals(42, dummy.getI());
|
||||||
|
|
||||||
|
dummy = (DummyClass)ReflectPackage.getInstance(DummyClass.class.getCanonicalName(), new Object[]{23});
|
||||||
|
assertEquals(23, dummy.getI());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user