@Override public void computeSubRoles(final Role r, final Set<Role> subRoles, final Set<ATermList> subRoleChains, final Map<ATerm, DependencySet> dependencies, final DependencySet ds) { // check for loops if (subRoles.contains(r)) return; // reflexive subRoles.add(r); dependencies.put(r.getName(), ds); // transitive closure final Map<ATerm, DependencySet> immSubs = new ConcurrentHashMap<>(); computeImmediateSubRoles(r, immSubs); for (final Entry<ATerm, DependencySet> entry : immSubs.entrySet()) { final ATerm sub = entry.getKey(); final DependencySet subDS = OpenlletOptions.USE_TRACING ? ds.union(entry.getValue(), true) : DependencySet.INDEPENDENT; if (sub instanceof ATermAppl) { final Role subRole = getRole(sub); computeSubRoles(subRole, subRoles, subRoleChains, dependencies, subDS); } else { subRoleChains.add((ATermList) sub); dependencies.put(sub, subDS); } } }
@Override public void computeSubRoles(final Role r, final Set<Role> subRoles, final Set<ATermList> subRoleChains, final Map<ATerm, DependencySet> dependencies, final DependencySet ds) { // check for loops if (subRoles.contains(r)) return; // reflexive subRoles.add(r); dependencies.put(r.getName(), ds); // transitive closure final Map<ATerm, DependencySet> immSubs = new ConcurrentHashMap<>(); computeImmediateSubRoles(r, immSubs); for (final Entry<ATerm, DependencySet> entry : immSubs.entrySet()) { final ATerm sub = entry.getKey(); final DependencySet subDS = OpenlletOptions.USE_TRACING ? ds.union(entry.getValue(), true) : DependencySet.INDEPENDENT; if (sub instanceof ATermAppl) { final Role subRole = getRole(sub); computeSubRoles(subRole, subRoles, subRoleChains, dependencies, subDS); } else { subRoleChains.add((ATermList) sub); dependencies.put(sub, subDS); } } }