@Override public IAccessRule[][] getAccessRules(IVMInstall vm, LibraryLocation[] libraries, IJavaProject project) { IAccessRuleParticipant[] participants = getParticipants(); Map<IAccessRuleParticipant, IAccessRule[][]> rulesByParticipant = collectRulesByParticipant(participants, vm, libraries, project); synchronized (this) { Map<IAccessRuleParticipant, IAccessRule[][]> cachedRules = fParticipantMap.get(vm); if (cachedRules == null || !cachedRules.equals(rulesByParticipant)) { ArrayList<List<IAccessRule>> libLists = new ArrayList<List<IAccessRule>>(); // array of lists of access rules for (int i = 0; i < libraries.length; i++) { libLists.add(new ArrayList<IAccessRule>()); } for (int i = 0; i < participants.length; i++) { IAccessRuleParticipant participant = participants[i]; addRules(rulesByParticipant.get(participant), libLists); } IAccessRule[][] allRules = new IAccessRule[libraries.length][]; for (int i = 0; i < libLists.size(); i++) { List<IAccessRule> l = libLists.get(i); allRules[i] = l.toArray(new IAccessRule[l.size()]); } fParticipantMap.put(vm, rulesByParticipant); fRuleCache.put(vm, allRules); return allRules; } return fRuleCache.get(vm); } }
@Override public IAccessRule[][] getAccessRules(IVMInstall vm, LibraryLocation[] libraries, IJavaProject project) { IAccessRuleParticipant[] participants = getParticipants(); Map<IAccessRuleParticipant, IAccessRule[][]> rulesByParticipant = collectRulesByParticipant(participants, vm, libraries, project); synchronized (this) { Map<IAccessRuleParticipant, IAccessRule[][]> cachedRules = fParticipantMap.get(vm); if (cachedRules == null || !cachedRules.equals(rulesByParticipant)) { ArrayList<List<IAccessRule>> libLists = new ArrayList<>(); // array of lists of access rules for (int i = 0; i < libraries.length; i++) { libLists.add(new ArrayList<IAccessRule>()); } for (int i = 0; i < participants.length; i++) { IAccessRuleParticipant participant = participants[i]; addRules(rulesByParticipant.get(participant), libLists); } IAccessRule[][] allRules = new IAccessRule[libraries.length][]; for (int i = 0; i < libLists.size(); i++) { List<IAccessRule> l = libLists.get(i); allRules[i] = l.toArray(new IAccessRule[l.size()]); } fParticipantMap.put(vm, rulesByParticipant); fRuleCache.put(vm, allRules); return allRules; } return fRuleCache.get(vm); } }