def define_java_property(pd)
      if transient?(pd) then
        logger.debug { "Ignoring #{name.demodulize} transient attribute #{pd.name}." }
        return
      end
      # the standard underscore lower-case attributes
      prop = add_java_property(pd)
      # delegate the standard attribute accessors to the attribute accessors
      alias_property_accessors(prop)
      # add special wrappers
      wrap_java_property(prop)
      # create Ruby alias for boolean, e.g. alias :empty? for :empty
      if pd.property_type.name[/\w+$/].downcase == 'boolean' then
        # Strip the leading is_, if any, before appending a question mark.
        aliaz = prop.to_s[/^(is_)?(\w+)/, 2] << '?'
        delegate_to_property(aliaz, prop)
      end
    end
def define_java_property(pd)
      if transient?(pd) then
        logger.debug { "Ignoring #{name.demodulize} transient attribute #{pd.name}." }
        return
      end
      # the standard underscore lower-case attributes
      prop = add_java_property(pd)
      # delegate the standard attribute accessors to the attribute accessors
      alias_property_accessors(prop)
      # add special wrappers
      wrap_java_property(prop)
      # create Ruby alias for boolean, e.g. alias :empty? for :empty
      if pd.property_type.name[/\w+$/].downcase == 'boolean' then
        # Strip the leading is_, if any, before appending a question mark.
        aliaz = prop.to_s[/^(is_)?(\w+)/, 2] << '?'
        delegate_to_property(aliaz, prop)
      end
    end
Defines the Java property attribute and standard attribute methods, e.g.
 +study_protocol+ and +studyProtocol+. A boolean attribute is provisioned
 with an additional reader alias, e.g.  +available?+  for +is_available+.

 A standard attribute which differs from the property attribute delegates
 to the property attribute, e.g. +study_protocol+ delegates to +studyProtocol+
 rather than aliasing +setStudyProtocol+. Redefining these methods results
 in a call to the redefined method.  This contrasts with a Ruby alias,
 where each attribute alias is bound to the respective attribute reader or
 writer.

 @param [Java::PropertyDescriptor] the introspected property descriptor