private boolean nameMatches(
     String n, ElementDefn e, boolean throughChoice, Definitions definitions) {
   if (e.getName().equals(n)) return true;
   else if (!throughChoice || !e.getName().endsWith("[x]")) return false;
   else {
     String b = e.getName().substring(0, e.getName().indexOf("["));
     if (!n.startsWith(b)) return false;
     String tn = n.substring(b.length());
     if (e.typeCode().equals("*") && definitions != null) {
       for (TypeRef t : definitions.getKnownTypes()) {
         if (!definitions.getInfrastructure().containsKey(t.getName())
             && !definitions.getConstraints().containsKey(t.getName())) {
           if (t.getName().equalsIgnoreCase(tn)) return true;
         }
       }
     } else for (TypeRef t : e.getTypes()) if (t.getName().equalsIgnoreCase(tn)) return true;
     return false;
   }
 }