private void cataloguePropertiesAndCollections(final Map<Method, ObjectMember> membersByMethod) { final Filter<ObjectAssociation> noop = Filters.anyOfType(ObjectAssociation.class); final List<ObjectAssociation> fields = getAssociations(noop); for (int i = 0; i < fields.size(); i++) { final ObjectAssociation field = fields.get(i); final List<Facet> facets = field.getFacets(ImperativeFacet.FILTER); for (final Facet facet : facets) { final ImperativeFacet imperativeFacet = ImperativeFacetUtils.getImperativeFacet(facet); for (final Method imperativeFacetMethod : imperativeFacet.getMethods()) { membersByMethod.put(imperativeFacetMethod, field); } } } }
public static Intent getIntent(final ObjectMember member, final Method method) { final List<Facet> allFacets = member.getFacets(Filters.anyOfType(Facet.class)); final List<ImperativeFacet> imperativeFacets = Lists.newArrayList(); for (final Facet facet : allFacets) { final ImperativeFacet imperativeFacet = ImperativeFacet.Util.getImperativeFacet(facet); if (imperativeFacet == null) { continue; } final List<Method> methods = imperativeFacet.getMethods(); if (!methods.contains(method)) { continue; } imperativeFacets.add(imperativeFacet); } switch (imperativeFacets.size()) { case 0: break; case 1: return imperativeFacets.get(0).getIntent(method); default: Intent intentToReturn = null; for (ImperativeFacet imperativeFacet : imperativeFacets) { Intent intent = imperativeFacet.getIntent(method); if (intentToReturn == null) { intentToReturn = intent; } else if (intentToReturn != intent) { throw new IllegalArgumentException( member.getIdentifier().toClassAndNameIdentityString() + ": more than one ImperativeFacet for method " + method.getName() + " , with inconsistent intents: " + imperativeFacets.toString()); } } return intentToReturn; } throw new IllegalArgumentException( member.getIdentifier().toClassAndNameIdentityString() + ": unable to determine intent of " + method.getName()); }