private void ensurePropertyKnown(String methodName, Method method) {
   String capPropertyName;
   String propertyName;
   boolean getter = false;
   if (methodName.startsWith("get")) {
     capPropertyName = methodName.substring(3);
     propertyName = uncapitalize(capPropertyName);
     getter = true;
   } else if (methodName.startsWith("set")) {
     capPropertyName = methodName.substring(3);
     propertyName = uncapitalize(capPropertyName);
   } else if (methodName.startsWith("is")) {
     capPropertyName = methodName.substring(2);
     propertyName = uncapitalize(capPropertyName);
     getter = true;
   } else {
     throw new IllegalArgumentException("methodName=" + methodName);
   }
   PropertyInfo pinfo = (PropertyInfo) this.properties.get(propertyName);
   if (pinfo == null) {
     pinfo = new PropertyInfo(propertyName);
     this.properties.put(propertyName, pinfo);
   }
   if (getter) {
     pinfo.setGetter(method);
   } else {
     pinfo.setSetter(method);
   }
 }
 private void updateNameIndexer(String methodName, Method method) {
   boolean getter = true;
   if (methodName.startsWith("set")) {
     getter = false;
   }
   PropertyInfo indexer = this.nameIndexer;
   if (indexer == null) {
     indexer = new PropertyInfo("$item");
     this.nameIndexer = indexer;
   }
   if (getter) {
     indexer.setGetter(method);
   } else {
     indexer.setSetter(method);
   }
 }
 private void updateIntegerIndexer(String methodName, Method method) {
   boolean getter;
   if (methodName.startsWith("get")) {
     getter = true;
   } else if (methodName.startsWith("set")) {
     getter = false;
   } else {
     throw new IllegalArgumentException("methodName=" + methodName);
   }
   PropertyInfo indexer = this.integerIndexer;
   if (indexer == null) {
     indexer = new PropertyInfo("$item");
     this.integerIndexer = indexer;
   }
   if (getter) {
     indexer.setGetter(method);
   } else {
     indexer.setSetter(method);
   }
 }
 public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) {
   if (index == 0) {
     info.name = "name";
     info.type = PropertyInfo.STRING_CLASS;
     info.namespace = "";
   } else if (index == 1) {
     info.name = "count";
     info.type = PropertyInfo.INTEGER_CLASS;
     info.namespace = "";
   } else {
     throw new RuntimeException("invalid parameter");
   }
 }
 public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) {
   info.name = getItemDescriptor();
   info.type = getElementClass();
 }