// Get the list of InstallableUnits and all its requirements protected List<IServerExtension> getInstallableUnits( IMetadataRepository repo, IQuery<IInstallableUnit> query, URI url, IProgressMonitor monitor) { List<IServerExtension> list = new ArrayList<IServerExtension>(); IQueryResult<IInstallableUnit> collector = repo.query(query, monitor); for (IInstallableUnit iu : collector.toUnmodifiableSet()) { Collection<IRequirement> req = iu.getRequirements(); if (req != null) { for (IRequirement requirement : req) { IMatchExpression<IInstallableUnit> matches = requirement.getMatches(); query = new ExpressionMatchQuery<IInstallableUnit>(IInstallableUnit.class, matches); IQueryResult<IInstallableUnit> collector2 = repo.query(query, monitor); Iterator<IInstallableUnit> iter2 = collector2.iterator(); while (iter2.hasNext()) { IInstallableUnit iu2 = iter2.next(); if (!list.contains(iu2)) { Extension ext = new Extension(iu2, url); list.add(ext); } } } } } return list; }