Skip to content
Snippets Groups Projects
Commit 6d0b84f0 authored by brinn's avatar brinn
Browse files

revert: changes to @Mandatory annotation of r714, since it has a negative...

revert: changes to @Mandatory annotation of r714, since it has a negative impact on the robustness when doing refactorings

SVN: 742
parent 97e35cc9
No related branches found
No related tags found
No related merge requests found
......@@ -28,9 +28,9 @@ import java.lang.annotation.Target;
* @author Christian Ribeaud
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Target(ElementType.FIELD)
@Inherited
public @interface Mandatory
{
public String[] value();
}
......@@ -24,8 +24,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.ArrayUtils;
import ch.systemsx.cisd.common.annotation.Mandatory;
import ch.systemsx.cisd.common.exceptions.CheckedExceptionTunnel;
......@@ -44,20 +42,17 @@ public final class ClassUtils
/**
* For given <code>Class</code> returns a list of fields that are annotated with {@link Mandatory}.
*/
public final static List<Field> getMandatoryFields(Class<?> clazz)
public final static List<Field> getMandatoryFields(Class clazz)
{
final Mandatory mandatory = clazz.getAnnotation(Mandatory.class);
return getFields(clazz, null, mandatory == null ? null : mandatory.value());
return getMandatoryFields(clazz, null);
}
/**
* For given <code>Class</code> (and eventually its superclasses) return a list of <code>Field</code> objects
* that matches the ones defined in <code>strFields</code>.
* For given <code>Class</code> returns a list of fields that are annotated with {@link Mandatory}.
*
* @param fields if <code>null</code>, then a new <code>List</code> is created.
* @return never <code>null</code> but could return an empty <code>List</code>.
*/
public final static List<Field> getFields(Class<?> clazz, List<Field> fields, String... strFields)
private final static List<Field> getMandatoryFields(Class clazz, List<Field> fields)
{
List<Field> list = fields;
if (list == null)
......@@ -66,7 +61,7 @@ public final class ClassUtils
}
for (Field field : clazz.getDeclaredFields())
{
if (ArrayUtils.indexOf(strFields, field.getName()) > -1)
if (field.getAnnotation(Mandatory.class) != null)
{
list.add(field);
}
......@@ -74,7 +69,7 @@ public final class ClassUtils
Class superclass = clazz.getSuperclass();
if (superclass != null)
{
return getFields(superclass, list, strFields);
return getMandatoryFields(superclass, list);
}
return list;
}
......
......@@ -16,15 +16,10 @@
package ch.systemsx.cisd.common.utilities;
import static org.testng.AssertJUnit.*;
import java.lang.reflect.Field;
import java.util.List;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
import ch.systemsx.cisd.common.annotation.Mandatory;
/**
* Test cases for the {@link ClassUtils} class.
*
......@@ -33,50 +28,17 @@ import ch.systemsx.cisd.common.annotation.Mandatory;
public final class ClassUtilsTest
{
/**
* Test method for {@link ch.systemsx.cisd.common.utilities.ClassUtils#getCurrentMethod()}.
*/
@Test
public final void testGetCurrentMethod()
{
assertEquals("testGetCurrentMethod", ClassUtils.getCurrentMethod().getName());
// Border cases
assertEquals(new SameMethodName().getMethodName(), new SameMethodName().getMethodName(new Object(),
new Object()));
}
@Test
public final void testGetFields()
{
List<Field> fields = ClassUtils.getFields(A.class, null, "otherField");
assertNotNull(fields);
assert fields.size() == 0;
// A
fields = ClassUtils.getFields(A.class, null, "someField");
assertNotNull(fields);
assert fields.size() == 1;
// B
fields = ClassUtils.getFields(B.class, null, "someField");
assertNotNull(fields);
assert fields.size() == 1;
// C
fields = ClassUtils.getFields(C.class, null, "someField");
assertNotNull(fields);
assert fields.size() == 1;
assertEquals(new SameMethodName().getMethodName(), new SameMethodName().getMethodName(new Object(), new Object()));
}
@Test
public final void testGetMandatoryFields()
{
List<Field> fields = ClassUtils.getMandatoryFields(A.class);
assertNotNull(fields);
assert fields.size() == 0;
fields = ClassUtils.getMandatoryFields(C.class);
assertNotNull(fields);
assert fields.size() == 2;
}
//
// Helper classes
//
private final static class SameMethodName
{
......@@ -93,24 +55,4 @@ public final class ClassUtilsTest
}
}
@SuppressWarnings("unused")
private static class A
{
private Object someField;
private Object mandatoryField;
}
private static class B extends A
{
}
@Mandatory(
{ "mandatoryField", "otherMandatoryField", "notPresentField" })
private final static class C extends B
{
@SuppressWarnings("unused")
private Object otherMandatoryField;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment