private Set<SourceSpecificContext> getRequiredSourcesFromLib() { checkState(currentPhase == ModelProcessingPhase.SOURCE_PRE_LINKAGE, "Required library sources can be collected only in ModelProcessingPhase.SOURCE_PRE_LINKAGE phase," + " but current phase was %s", currentPhase); final TreeBasedTable<String, Optional<Revision>, SourceSpecificContext> libSourcesTable = TreeBasedTable.create( String::compareTo, Revision::compare); for (final SourceSpecificContext libSource : libSources) { final SourceIdentifier libSourceIdentifier = requireNonNull(libSource.getRootIdentifier()); libSourcesTable.put(libSourceIdentifier.getName(), libSourceIdentifier.getRevision(), libSource); } final Set<SourceSpecificContext> requiredLibs = new HashSet<>(); for (final SourceSpecificContext source : sources) { collectRequiredSourcesFromLib(libSourcesTable, requiredLibs, source); removeConflictingLibSources(source, requiredLibs); } return requiredLibs; }