This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 1b3f41384f org.apache.juneau.common.reflect API improvements
1b3f41384f is described below
commit 1b3f41384f8388b4e5fc267bc8659431a2535b45
Author: James Bognar <[email protected]>
AuthorDate: Mon Nov 24 14:22:23 2025 -0500
org.apache.juneau.common.reflect API improvements
---
.../juneau/common/annotation/AnnotationObject.java | 1 +
.../common/annotation/AppliedAnnotationObject.java | 22 +++++++
.../common/annotation/AnnotationObject_Test.java | 11 ++++
.../annotation/AppliedAnnotationObject_Test.java | 76 ++++++++++++++++++++++
4 files changed, 110 insertions(+)
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationObject.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationObject.java
index 2419956368..9d17fb12b8 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationObject.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationObject.java
@@ -176,6 +176,7 @@ public class AnnotationObject implements Annotation {
* @param b The builder used to instantiate the fields of this class.
*/
public AnnotationObject(Builder b) {
+ assertArgNotNull("b", b);
this.annotationType = b.getAnnotationType();
}
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AppliedAnnotationObject.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AppliedAnnotationObject.java
index 18ea0dbe6c..65739dc7ce 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AppliedAnnotationObject.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AppliedAnnotationObject.java
@@ -17,6 +17,7 @@
package org.apache.juneau.common.annotation;
import static org.apache.juneau.common.reflect.ReflectionUtils.*;
+import static org.apache.juneau.common.utils.AssertionUtils.*;
import static org.apache.juneau.common.utils.CollectionUtils.*;
import java.lang.annotation.*;
@@ -166,6 +167,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public Builder on(String...values) {
+ assertVarargsNotNull("values", values);
for (var v : values)
on = addAll(on, v);
return this;
@@ -221,6 +223,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderT on(Class<?>...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on = addAll(on, v.getName());
return this;
@@ -233,6 +236,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderT on(ClassInfo...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on = addAll(on, v.inner().getName());
return this;
@@ -246,6 +250,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
*/
@SuppressWarnings("unchecked")
public BuilderT onClass(Class<?>...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
onClass = addAll(onClass, v);
return this;
@@ -259,6 +264,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
*/
@SuppressWarnings("unchecked")
public BuilderT onClass(ClassInfo...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
onClass = addAll(onClass, v.inner());
return this;
@@ -305,6 +311,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderM on(Method...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(info(v).getFullName());
return this;
@@ -317,6 +324,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderM on(MethodInfo...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(v.getFullName());
return this;
@@ -362,6 +370,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderC on(Constructor<?>...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(info(v).getFullName());
return this;
@@ -374,6 +383,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderC on(ConstructorInfo...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(v.getFullName());
return this;
@@ -423,6 +433,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderMF on(Field...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(info(v).getFullName());
return this;
@@ -435,6 +446,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderMF on(FieldInfo...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(v.getFullName());
return this;
@@ -447,6 +459,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderMF on(Method...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(info(v).getFullName());
return this;
@@ -459,6 +472,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderMF on(MethodInfo...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(v.getFullName());
return this;
@@ -499,6 +513,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderTM on(Method...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(info(v).getFullName());
return this;
@@ -511,6 +526,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderTM on(MethodInfo...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(v.getFullName());
return this;
@@ -565,6 +581,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderTMF on(Field...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(info(v).getFullName());
return this;
@@ -577,6 +594,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderTMF on(FieldInfo...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(v.getFullName());
return this;
@@ -589,6 +607,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderTMF on(Method...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(info(v).getFullName());
return this;
@@ -601,6 +620,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderTMF on(MethodInfo...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(v.getFullName());
return this;
@@ -644,6 +664,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderTMFC on(Constructor<?>...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(info(v).getFullName());
return this;
@@ -656,6 +677,7 @@ public class AppliedAnnotationObject extends
AnnotationObject {
* @return This object.
*/
public BuilderTMFC on(ConstructorInfo...value) {
+ assertVarargsNotNull("value", value);
for (var v : value)
on(v.getFullName());
return this;
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/common/annotation/AnnotationObject_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/common/annotation/AnnotationObject_Test.java
index 57c3e300e3..75d662479e 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/common/annotation/AnnotationObject_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/common/annotation/AnnotationObject_Test.java
@@ -401,5 +401,16 @@ class AnnotationObject_Test extends TestBase {
var a = TestAnnotationObject.create().build();
assertNotEquals(a, null);
}
+
+
//------------------------------------------------------------------------------------------------------------------
+ // Null validation tests
+
//------------------------------------------------------------------------------------------------------------------
+
+ @Test
+ void h01_nullBuilder_throwsException() {
+ assertThrows(IllegalArgumentException.class, () ->
+ new TestAnnotationObject(null)
+ );
+ }
}
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/common/annotation/AppliedAnnotationObject_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/common/annotation/AppliedAnnotationObject_Test.java
index 81da56105d..0beea16060 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/common/annotation/AppliedAnnotationObject_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/common/annotation/AppliedAnnotationObject_Test.java
@@ -690,5 +690,81 @@ class AppliedAnnotationObject_Test extends TestBase {
assertNotSame(a1, a2);
assertEquals(a1, a2);
}
+
+
//------------------------------------------------------------------------------------------------------------------
+ // Null validation tests
+
//------------------------------------------------------------------------------------------------------------------
+
+ @Test
+ void j01_nullClass_throwsException() {
+ assertThrows(IllegalArgumentException.class, () ->
+ TestAppliedAnnotationObjectT.create()
+ .on((Class<?>)null)
+ .build()
+ );
+ }
+
+ @Test
+ void j02_nullClassInfo_throwsException() {
+ assertThrows(IllegalArgumentException.class, () ->
+ TestAppliedAnnotationObjectT.create()
+ .on((ClassInfo)null)
+ .build()
+ );
+ }
+
+ @Test
+ void j03_nullMethod_throwsException() {
+ assertThrows(IllegalArgumentException.class, () ->
+ TestAppliedAnnotationObjectM.create()
+ .on((java.lang.reflect.Method)null)
+ .build()
+ );
+ }
+
+ @Test
+ void j04_nullMethodInfo_throwsException() {
+ assertThrows(IllegalArgumentException.class, () ->
+ TestAppliedAnnotationObjectM.create()
+ .on((MethodInfo)null)
+ .build()
+ );
+ }
+
+ @Test
+ void j05_nullField_throwsException() {
+ assertThrows(IllegalArgumentException.class, () ->
+ TestAppliedAnnotationObjectMF.create()
+ .on((java.lang.reflect.Field)null)
+ .build()
+ );
+ }
+
+ @Test
+ void j06_nullFieldInfo_throwsException() {
+ assertThrows(IllegalArgumentException.class, () ->
+ TestAppliedAnnotationObjectMF.create()
+ .on((FieldInfo)null)
+ .build()
+ );
+ }
+
+ @Test
+ void j07_nullConstructor_throwsException() {
+ assertThrows(IllegalArgumentException.class, () ->
+ TestAppliedAnnotationObjectC.create()
+ .on((java.lang.reflect.Constructor<?>)null)
+ .build()
+ );
+ }
+
+ @Test
+ void j08_nullConstructorInfo_throwsException() {
+ assertThrows(IllegalArgumentException.class, () ->
+ TestAppliedAnnotationObjectC.create()
+ .on((ConstructorInfo)null)
+ .build()
+ );
+ }
}