public List < MetaProperty > getProperties ( ) { checkInitalised ( ) ; SingleKeyHashMap propertyMap = classPropertyIndex . getNullable ( theCachedClass ) ; if ( propertyMap == null ) { // GROOVY-6903: May happen in some special environment, like under Android, due // to classloading issues propertyMap = new SingleKeyHashMap ( ) ; } // simply return the values of the metaproperty map as a List List ret = new ArrayList ( propertyMap . size ( ) ) ; for ( ComplexKeyHashMap . EntryIterator iter = propertyMap . getEntrySetIterator ( ) ; iter . hasNext ( ) ; ) { MetaProperty element = ( MetaProperty ) ( ( SingleKeyHashMap . Entry ) iter . next ( ) ) . value ; if ( element instanceof CachedField ) continue ; // filter out DGM beans if ( element instanceof MetaBeanProperty ) { MetaBeanProperty mp = ( MetaBeanProperty ) element ; boolean setter = true ; boolean getter = true ; if ( mp . getGetter ( ) == null || mp . getGetter ( ) instanceof GeneratedMetaMethod || mp . getGetter ( ) instanceof NewInstanceMetaMethod ) { getter = false ; } if ( mp . getSetter ( ) == null || mp . getSetter ( ) instanceof GeneratedMetaMethod || mp . getSetter ( ) instanceof NewInstanceMetaMethod ) { setter = false ; } if ( ! setter && ! getter ) continue ; // TODO: I (ait) don't know why these strange tricks needed and comment following as it effects some Grails tests // if (!setter && mp.getSetter() != null) { // element = new MetaBeanProperty(mp.getName(), mp.getType(), mp.getGetter(), null); // } // if (!getter && mp.getGetter() != null) { // element = new MetaBeanProperty(mp.getName(), mp.getType(), null, mp.getSetter()); // } } ret . add ( element ) ; } return ret ; }
Get all the properties defined for this type