code: @SuppressWarnings("unchecked")
      static <P> LightMetaProperty<P> of(
              MetaBean metaBean,
              Field field,
              MethodHandles.Lookup lookup,
              String propertyName,
              int constructorIndex) {
          
          MethodHandle getter;
          try {
              getter = lookup.findGetter(field.getDeclaringClass(), field.getName(), field.getType());
          } catch (IllegalArgumentException | NoSuchFieldException | IllegalAccessException ex) {
              throw new UnsupportedOperationException("Property cannot be read: " + propertyName, ex);
          }
          MethodHandle setter = null;
          if (!Modifier.isFinal(field.getModifiers())) {
              try {
                  setter = lookup.findSetter(field.getDeclaringClass(), field.getName(), field.getType());
              } catch (IllegalArgumentException | NoSuchFieldException | IllegalAccessException ex) {
                  throw new UnsupportedOperationException("Property cannot be read: " + propertyName, ex);
              }
          }
          return new LightMetaProperty<>(
                  metaBean, 
                  propertyName, 
                  (Class<P>) field.getType(), 
                  field.getGenericType(), 
                  Arrays.asList(field.getAnnotations()), 
                  getter,
                  setter,
                  constructorIndex,
                  calculateStyle(metaBean, setter));
      }
docs: Creates an instance from a {@code Field}.
  
  @param <P>  the property type
  @param metaBean  the meta bean, not null
  @param field  the field, not null
  @param constructorIndex  the index of the property in the constructor
  @return the property, not null