docs: 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;
      }