public static ReflectConstructorSpec createConstructor(
      final ConstructorAwareReflectClass claxx,
      Class clazz,
      ReflectorConfiguration config,
      ReflectConstructor[] constructors) {

    if (claxx == null) {
      return ReflectConstructorSpec.INVALID_CONSTRUCTOR;
    }

    if (claxx.isAbstract() || claxx.isInterface()) {
      return ReflectConstructorSpec.INVALID_CONSTRUCTOR;
    }

    if (!Platform4.callConstructor()) {
      boolean skipConstructor = !config.callConstructor(claxx);
      if (!claxx.isCollection()) {
        ReflectConstructor serializableConstructor =
            skipConstructor(claxx, skipConstructor, config.testConstructors());
        if (serializableConstructor != null) {
          return new ReflectConstructorSpec(serializableConstructor, null);
        }
      }
    }

    if (!config.testConstructors()) {
      return new ReflectConstructorSpec(new PlatformReflectConstructor(clazz), null);
    }

    if (ReflectPlatform.createInstance(clazz) != null) {
      return new ReflectConstructorSpec(new PlatformReflectConstructor(clazz), null);
    }

    Tree sortedConstructors = sortConstructorsByParamsCount(constructors);
    return findConstructor(claxx, sortedConstructors);
  }
 public static ReflectConstructor skipConstructor(
     ConstructorAwareReflectClass claxx, boolean skipConstructor, boolean testConstructor) {
   if (!skipConstructor) {
     return null;
   }
   ReflectConstructor serializableConstructor = claxx.getSerializableConstructor();
   if (serializableConstructor == null) {
     return null;
   }
   if (!testConstructor || Deploy.csharp) {
     return serializableConstructor;
   }
   Object obj = serializableConstructor.newInstance((Object[]) null);
   if (obj != null) {
     return serializableConstructor;
   }
   return null;
 }