- static MethodHandle getConstructor(final Class<? extends Identifier<?>> clazz) {
- for (@SuppressWarnings("rawtypes") final Constructor constr : clazz.getConstructors()) {
- final Class<?>[] parameters = constr.getParameterTypes();
- if (!clazz.equals(parameters[0])) {
- // It is not copy constructor;
- try {
- return MethodHandles.publicLookup().unreflectConstructor(constr);
- } catch (IllegalAccessException e) {
- throw new IllegalStateException("Cannot access constructor " + constr + " in class " + clazz, e);
- }
+ static MethodHandle getConstructor(final Class<? extends Identifier<?>> clazz, final int nrArgs) {
+ for (final Constructor<?> ctor : clazz.getConstructors()) {
+ // Check argument count
+ if (ctor.getParameterCount() != nrArgs) {
+ LOG.debug("Skipping {} due to argument count mismatch", ctor);
+ continue;
+ }
+
+ // Do not consider deprecated constructors
+ if (isDeprecated(ctor)) {
+ LOG.debug("Skipping deprecated constructor {}", ctor);
+ continue;
+ }
+
+ // Do not consider copy constructors
+ if (clazz.equals(ctor.getParameterTypes()[0])) {
+ LOG.debug("Skipping copy constructor {}", ctor);
+ continue;
+ }
+
+ try {
+ return MethodHandles.publicLookup().unreflectConstructor(ctor);
+ } catch (IllegalAccessException e) {
+ throw new IllegalStateException("Cannot access constructor " + ctor + " in class " + clazz, e);