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