code: private int selectConstructorAndTransformArguments1(Object[] arguments) {
          if (arguments == null) arguments = EMPTY_ARGUMENTS;
          Class[] argClasses = MetaClassHelper.convertToTypeArray(arguments);
          MetaClassHelper.unwrap(arguments);
          CachedConstructor constructor = (CachedConstructor) chooseMethod("<init>", constructors, argClasses);
          if (constructor == null) {
              constructor = (CachedConstructor) chooseMethod("<init>", constructors, argClasses);
          }
          if (constructor == null) {
              throw new GroovyRuntimeException(
                      "Could not find matching constructor for: "
                              + theClass.getName()
                              + "(" + InvokerHelper.toTypeString(arguments) + ")");
          }
          final String methodDescriptor = BytecodeHelper.getMethodDescriptor(Void.TYPE, constructor.getNativeParameterTypes());
          // keeping 3 bits for additional information such as vargs
          return BytecodeHelper.hashCode(methodDescriptor);
      }
docs: Constructor selection algorithm for Groovy 2.1.9+.
  This selection algorithm was introduced as a workaround for GROOVY-6080. Instead of generating an index between
  0 and N where N is the number of super constructors at the time the class is compiled, this algorithm uses
  a hash of the constructor descriptor instead.
  
  This has the advantage of letting the super class add new constructors while being binary compatible. But there
  are still problems with this approach:
  <ul>
  <li>There's a risk of hash collision, even if it's very low (two constructors of the same class must have the same hash)</li>
  <li>If the super class adds a new constructor which takes as an argument a superclass of an existing constructor parameter and
  that this new constructor is selected at runtime, it would not find it.</li>
  </ul>
  
  Hopefully in the last case, the error message is much nicer now since it explains that it's a binary incompatible change.
  
  @param arguments the actual constructor call arguments
  @return a hash used to identify the constructor to be called
  @since 2.1.9