mirror of https://github.com/apache/cloudstack.git
ReflectUtil: test for getAllFieldsForClass
- code comment turned to javadoc - added braces to if and for statements to make it look more like the rest - tests added Signed-off-by: Laszlo Hornyak <laszlo.hornyak@gmail.com>
This commit is contained in:
parent
66fe3abe3b
commit
d1dd85a4c4
|
|
@ -106,7 +106,12 @@ public class ReflectUtil {
|
|||
return fields;
|
||||
}
|
||||
|
||||
// Returns all unique fields except excludeClasses for a cmd class
|
||||
/**
|
||||
* Returns all unique fields except excludeClasses for a cmd class
|
||||
* @param cmdClass the class in which fields should be collected
|
||||
* @param excludeClasses the classes whose fields must be ignored
|
||||
* @return list of fields
|
||||
*/
|
||||
public static Set<Field> getAllFieldsForClass(Class<?> cmdClass,
|
||||
Class<?>[] excludeClasses) {
|
||||
Set<Field> fields = new HashSet<Field>();
|
||||
|
|
@ -116,14 +121,17 @@ public class ReflectUtil {
|
|||
while (superClass != null && superClass != Object.class) {
|
||||
String superName = superClass.getName();
|
||||
boolean isNameEqualToSuperName = false;
|
||||
for (Class<?> baseClass: excludeClasses)
|
||||
if (superName.equals(baseClass.getName()))
|
||||
for (Class<?> baseClass: excludeClasses) {
|
||||
if (superName.equals(baseClass.getName())) {
|
||||
isNameEqualToSuperName = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isNameEqualToSuperName) {
|
||||
Field[] superClassFields = superClass.getDeclaredFields();
|
||||
if (superClassFields != null)
|
||||
if (superClassFields != null) {
|
||||
Collections.addAll(fields, superClassFields);
|
||||
}
|
||||
}
|
||||
superClass = superClass.getSuperclass();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,11 @@
|
|||
// under the License.package com.cloud.utils;
|
||||
package com.cloud.utils;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import static com.cloud.utils.ReflectUtil.flattenProperties;
|
||||
|
|
@ -88,4 +92,63 @@ public final class ReflectUtilTest {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
static class Empty {
|
||||
}
|
||||
|
||||
static class Foo {
|
||||
String fooField;
|
||||
int fooIntField;
|
||||
}
|
||||
|
||||
static class Bar extends Foo {
|
||||
String barField;
|
||||
int barIntField;
|
||||
}
|
||||
|
||||
static class Baz extends Foo {
|
||||
String bazField;
|
||||
int bazIntField;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAllFieldsForClassWithFoo() throws NoSuchFieldException, SecurityException {
|
||||
Set<Field> fooFields = ReflectUtil.getAllFieldsForClass(Foo.class, new Class<?> [] {});
|
||||
Assert.assertNotNull(fooFields);
|
||||
Assert.assertEquals(2, fooFields.size());
|
||||
Assert.assertTrue(fooFields.contains(Foo.class.getDeclaredField("fooField")));
|
||||
Assert.assertTrue(fooFields.contains(Foo.class.getDeclaredField("fooIntField")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAllFieldsForClassWithBar() throws NoSuchFieldException, SecurityException {
|
||||
Set<Field> barFields = ReflectUtil.getAllFieldsForClass(Bar.class, new Class<?> [] {});
|
||||
Assert.assertNotNull(barFields);
|
||||
Assert.assertEquals(4, barFields.size());
|
||||
Assert.assertTrue(barFields.contains(Foo.class.getDeclaredField("fooField")));
|
||||
Assert.assertTrue(barFields.contains(Foo.class.getDeclaredField("fooIntField")));
|
||||
Assert.assertTrue(barFields.contains(Bar.class.getDeclaredField("barField")));
|
||||
Assert.assertTrue(barFields.contains(Bar.class.getDeclaredField("barIntField")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAllFieldsForClassWithBarWithoutFoo() throws NoSuchFieldException, SecurityException {
|
||||
Set<Field> barFields = ReflectUtil.getAllFieldsForClass(Bar.class, new Class<?> [] {Foo.class});
|
||||
Assert.assertNotNull(barFields);
|
||||
Assert.assertEquals(2, barFields.size());
|
||||
Assert.assertTrue(barFields.contains(Bar.class.getDeclaredField("barField")));
|
||||
Assert.assertTrue(barFields.contains(Bar.class.getDeclaredField("barIntField")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAllFieldsForClassWithBazWithoutBar() throws NoSuchFieldException, SecurityException {
|
||||
Set<Field> bazFields = ReflectUtil.getAllFieldsForClass(Baz.class, new Class<?> [] {Bar.class});
|
||||
Assert.assertNotNull(bazFields);
|
||||
Assert.assertEquals(4, bazFields.size());
|
||||
Assert.assertTrue(bazFields.contains(Foo.class.getDeclaredField("fooField")));
|
||||
Assert.assertTrue(bazFields.contains(Foo.class.getDeclaredField("fooIntField")));
|
||||
Assert.assertTrue(bazFields.contains(Baz.class.getDeclaredField("bazField")));
|
||||
Assert.assertTrue(bazFields.contains(Baz.class.getDeclaredField("bazIntField")));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue