public ObjectInstantiator newInstantiatorOf()

in metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/utils/SerDeUtils.java [136:189]


    public ObjectInstantiator newInstantiatorOf(final Class type) {
      if (!Util.isAndroid) {
        // Use ReflectASM if the class is not a non-static member class.
        Class enclosingType = type.getEnclosingClass();
        boolean isNonStaticMemberClass = enclosingType != null && type.isMemberClass()
                && !Modifier.isStatic(type.getModifiers());
        if (!isNonStaticMemberClass) {
          try {
            final ConstructorAccess access = ConstructorAccess.get(type);
            return new ObjectInstantiator() {
              @Override
              public Object newInstance () {
                try {
                  return access.newInstance();
                } catch (Exception ex) {
                  throw new KryoException("Error constructing instance of class: " + className(type), ex);
                }
              }
            };
          } catch (Exception ignored) {
          }
        }
      }
      // Reflection.
      try {
        Constructor ctor;
        try {
          ctor = type.getConstructor((Class[])null);
        } catch (Exception ex) {
          ctor = type.getDeclaredConstructor((Class[])null);
          ctor.setAccessible(true);
        }
        final Constructor constructor = ctor;
        return new ObjectInstantiator() {
          @Override
          public Object newInstance () {
            try {
              return constructor.newInstance();
            } catch (Exception ex) {
              throw new KryoException("Error constructing instance of class: " + className(type), ex);
            }
          }
        };
      } catch (Exception ignored) {
      }
      if (fallbackStrategy == null) {
        if (type.isMemberClass() && !Modifier.isStatic(type.getModifiers()))
          throw new KryoException("Class cannot be created (non-static member class): " + className(type));
        else
          throw new KryoException("Class cannot be created (missing no-arg constructor): " + className(type));
      }
      // InstantiatorStrategy.
      return fallbackStrategy.newInstantiatorOf(type);
    }