code: @SuppressWarnings("unchecked")
      static <P> MutableLightMetaProperty<P> of(
              MetaBean metaBean,
              Field field,
              final Method getMethod,
              final Method setMethod,
              final String propertyName,
              int constructorIndex) {
          
          PropertyGetter getter = new PropertyGetter() {
              @Override
              public Object get(Bean bean) {
                  try {
                      return getMethod.invoke(bean);
                  } catch (IllegalArgumentException | IllegalAccessException ex) {
                      throw new UnsupportedOperationException("Property cannot be read: " + propertyName, ex);
                  } catch (InvocationTargetException ex) {
                      if (ex.getCause() instanceof RuntimeException) {
                          throw (RuntimeException) ex.getCause();
                      }
                      throw new RuntimeException(ex);
                  }
              }
          };
          PropertySetter setter = new PropertySetter() {
              @Override
              public void set(Bean bean, Object value) {
                  try {
                      setMethod.invoke(bean, value);
                  } catch (IllegalArgumentException | IllegalAccessException ex) {
                      throw new UnsupportedOperationException("Property cannot be written: " + propertyName, ex);
                  } catch (InvocationTargetException ex) {
                      if (ex.getCause() instanceof RuntimeException) {
                          throw (RuntimeException) ex.getCause();
                      }
                      throw new RuntimeException(ex);
                  }
              }
          };
          // special case for optional
          return new MutableLightMetaProperty<>(
                  metaBean, 
                  propertyName, 
                  (Class<P>) field.getType(), 
                  field.getGenericType(), 
                  Arrays.asList(field.getAnnotations()), 
                  getter,
                  setter,
                  constructorIndex);
      }
docs: Creates an instance from a {@code Method}.
  
  @param <P>  the property type
  @param metaBean  the meta bean, not null
  @param getMethod  the method, not null
  @param constructorIndex  the index of the property in the constructor
  @return the property, not null