Skip to content

Commit

Permalink
Merge pull request resteasy#21 from liweinan/RESTEASY-645
Browse files Browse the repository at this point in the history
  • Loading branch information
Bill Burke committed Feb 14, 2012
2 parents 866ebbb + dcd1b5c commit dee5222
Showing 1 changed file with 27 additions and 0 deletions.
@@ -1,5 +1,7 @@
package org.jboss.resteasy.util;

import org.jboss.resteasy.logging.Logger;

import javax.ws.rs.core.Context;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
Expand All @@ -13,6 +15,7 @@
*/
public class PickConstructor
{
private final static Logger logger = Logger.getLogger(PickConstructor.class);

/**
* Pick best constructor for a provider or resource class
Expand All @@ -29,14 +32,19 @@ public static Constructor pickSingletonConstructor(Class clazz)
// prefer a no-arg constructor
int numParameters = 0;
Constructor pick = null;
boolean potentialConflict = false; // https://issues.jboss.org/browse/RESTEASY-645
for (Constructor con : constructors)
{
if (Modifier.isPublic(con.getModifiers()) == false)
{
continue;
}

if (con.getParameterTypes().length >= numParameters)
{
if (con.getParameterTypes().length > numParameters) {
potentialConflict = false;
}
boolean noContextAnnotation = false;
if (con.getParameterAnnotations() != null)
{
Expand All @@ -49,10 +57,17 @@ public static Constructor pickSingletonConstructor(Class clazz)
}
}
if (noContextAnnotation) continue;
if (con.getParameterTypes().length == numParameters && numParameters != 0) {
potentialConflict = true;
}
numParameters = con.getParameterTypes().length;
pick = con;

}
}
if (potentialConflict) {
logger.warn("Ambiguity constructors are found in " + clazz + ". More details please refer to http://jsr311.java.net/nonav/releases/1.1/spec/spec.html");
}
return pick;
}

Expand All @@ -71,6 +86,7 @@ public static Constructor pickPerRequestConstructor(Class clazz)
// prefer a no-arg constructor
int numParameters = 0;
Constructor pick = null;
boolean potentialConflict = false; // https://issues.jboss.org/browse/RESTEASY-645
for (Constructor con : constructors)
{
if (Modifier.isPublic(con.getModifiers()) == false)
Expand All @@ -79,6 +95,10 @@ public static Constructor pickPerRequestConstructor(Class clazz)
}
if (con.getParameterTypes().length >= numParameters)
{
if (con.getParameterTypes().length > numParameters) {
potentialConflict = false;
}

boolean noContextAnnotation = false;
if (con.getParameterAnnotations() != null)
{
Expand All @@ -91,10 +111,17 @@ public static Constructor pickPerRequestConstructor(Class clazz)
}
}
if (noContextAnnotation) continue;
if (con.getParameterTypes().length == numParameters && numParameters != 0) {
potentialConflict = true;
}
numParameters = con.getParameterTypes().length;
pick = con;
}
}

if (potentialConflict) {
logger.warn("Ambiguity constructors are found in " + clazz + ". More details please refer to http://jsr311.java.net/nonav/releases/1.1/spec/spec.html");
}
return pick;
}
}

0 comments on commit dee5222

Please sign in to comment.