aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorJulien Herr <julien@herr.fr>2015-11-21 14:07:47 +0100
committerJulien Herr <julien@herr.fr>2015-11-21 22:39:22 +0100
commit648bfc7bd309bcd3ab6d123b48797b71b557127b (patch)
treeaf1a34f4a168ce9ae1768c8d1e0dc7280a27e65e /src/main/java
parent36dfb40f1200b21ab195392ef15660739859646e (diff)
downloadtestng-648bfc7bd309bcd3ab6d123b48797b71b557127b.tar.gz
Fix #876: NPE when a factory method is not static
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/testng/internal/FactoryMethod.java13
-rw-r--r--src/main/java/org/testng/internal/Utils.java2
2 files changed, 13 insertions, 2 deletions
diff --git a/src/main/java/org/testng/internal/FactoryMethod.java b/src/main/java/org/testng/internal/FactoryMethod.java
index d599b25f..fb802871 100644
--- a/src/main/java/org/testng/internal/FactoryMethod.java
+++ b/src/main/java/org/testng/internal/FactoryMethod.java
@@ -1,5 +1,6 @@
package org.testng.internal;
+import java.lang.reflect.Modifier;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -33,12 +34,22 @@ public class FactoryMethod extends BaseTestMethod {
ITestContext testContext)
{
super(com.getName(), com, annotationFinder, instance);
-// Utils.checkInstanceOrStatic(instance, method);
+ Utils.checkInstanceOrStatic(instance, com.getMethod());
Class<?> declaringClass = com.getDeclaringClass();
if (instance != null && ! declaringClass.isAssignableFrom(instance.getClass())) {
throw new TestNGException("Mismatch between instance/method classes:"
+ instance.getClass() + " " + declaringClass);
}
+ if (instance == null && com.getMethod() != null && !Modifier.isStatic(com.getMethod().getModifiers())) {
+ throw new TestNGException("An inner factory method MUST be static. But '" + com.getMethod().getName() + "' from '" + declaringClass.getName() + "' is not.");
+ }
+ if (com.getMethod() != null && !Modifier.isPublic(com.getMethod().getModifiers())) {
+ try {
+ com.getMethod().setAccessible(true);
+ } catch (SecurityException e) {
+ throw new TestNGException(e);
+ }
+ }
m_instance = instance;
m_xmlTest = xmlTest;
diff --git a/src/main/java/org/testng/internal/Utils.java b/src/main/java/org/testng/internal/Utils.java
index 741a812f..aa399b0c 100644
--- a/src/main/java/org/testng/internal/Utils.java
+++ b/src/main/java/org/testng/internal/Utils.java
@@ -796,7 +796,7 @@ public final class Utils {
* Make sure that either we have an instance or if not, that the method is static
*/
public static void checkInstanceOrStatic(Object instance, Method method) {
- if (instance == null && ! Modifier.isStatic(method.getModifiers())) {
+ if (instance == null && method != null && ! Modifier.isStatic(method.getModifiers())) {
throw new TestNGException("Can't invoke " + method + ": either make it static or add "
+ "a no-args constructor to your class");
}