diff --git a/src/java/org/apache/ivy/core/search/SearchEngine.java b/src/java/org/apache/ivy/core/search/SearchEngine.java index 30a014d61..f4e20cda9 100644 --- a/src/java/org/apache/ivy/core/search/SearchEngine.java +++ b/src/java/org/apache/ivy/core/search/SearchEngine.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; @@ -59,9 +60,8 @@ public String[] listTokenValues(String token, Map otherTokenValu Set entries = new LinkedHashSet<>(); for (DependencyResolver resolver : settings.getResolvers()) { - Map[] values = resolver.listTokenValues(new String[] {token}, - otherTokenValues); - for (Map value : values) { + for (Map value : resolver.listTokenValues( + Collections.singleton(token), otherTokenValues)) { entries.add(value.get(token)); } } @@ -73,11 +73,10 @@ public OrganisationEntry[] listOrganisationEntries() { Set entries = new HashSet<>(); for (DependencyResolver resolver : settings.getResolvers()) { - Map[] orgs = resolver.listTokenValues( - new String[] {IvyPatternHelper.ORGANISATION_KEY}, new HashMap()); - for (Map oe : orgs) { - String org = oe.get(IvyPatternHelper.ORGANISATION_KEY); - entries.add(new OrganisationEntry(resolver, org)); + for (Map oe : resolver.listTokenValues( + Collections.singleton(IvyPatternHelper.ORGANISATION_KEY), + new HashMap())) { + entries.add(new OrganisationEntry(resolver, oe.get(IvyPatternHelper.ORGANISATION_KEY))); } } @@ -88,9 +87,9 @@ public String[] listOrganisations() { Set entries = new HashSet<>(); for (DependencyResolver resolver : settings.getResolvers()) { - Map[] orgs = resolver.listTokenValues( - new String[] {IvyPatternHelper.ORGANISATION_KEY}, new HashMap()); - for (Map org : orgs) { + for (Map org : resolver.listTokenValues( + Collections.singleton(IvyPatternHelper.ORGANISATION_KEY), + new HashMap())) { entries.add(org.get(IvyPatternHelper.ORGANISATION_KEY)); } } @@ -105,11 +104,9 @@ public ModuleEntry[] listModuleEntries(OrganisationEntry org) { tokenValues.put(IvyPatternHelper.ORGANISATION_KEY, org.getOrganisation()); for (DependencyResolver resolver : settings.getResolvers()) { - Map[] modules = resolver.listTokenValues( - new String[] {IvyPatternHelper.MODULE_KEY}, tokenValues); - for (Map me : modules) { - String module = me.get(IvyPatternHelper.MODULE_KEY); - entries.add(new ModuleEntry(org, module)); + for (Map me : resolver.listTokenValues( + Collections.singleton(IvyPatternHelper.MODULE_KEY), tokenValues)) { + entries.add(new ModuleEntry(org, me.get(IvyPatternHelper.MODULE_KEY))); } } @@ -123,9 +120,8 @@ public String[] listModules(String org) { tokenValues.put(IvyPatternHelper.ORGANISATION_KEY, org); for (DependencyResolver resolver : settings.getResolvers()) { - Map[] modules = resolver.listTokenValues( - new String[] {IvyPatternHelper.MODULE_KEY}, tokenValues); - for (Map module : modules) { + for (Map module : resolver.listTokenValues( + Collections.singleton(IvyPatternHelper.MODULE_KEY), tokenValues)) { entries.add(module.get(IvyPatternHelper.MODULE_KEY)); } } @@ -141,9 +137,8 @@ public RevisionEntry[] listRevisionEntries(ModuleEntry module) { tokenValues.put(IvyPatternHelper.MODULE_KEY, module.getModule()); for (DependencyResolver resolver : settings.getResolvers()) { - Map[] revisions = resolver.listTokenValues( - new String[] {IvyPatternHelper.REVISION_KEY}, tokenValues); - for (Map revision : revisions) { + for (Map revision : resolver.listTokenValues( + Collections.singleton(IvyPatternHelper.REVISION_KEY), tokenValues)) { entries.add(new RevisionEntry(module, revision.get(IvyPatternHelper.REVISION_KEY))); } } @@ -159,9 +154,8 @@ public String[] listRevisions(String org, String module) { tokenValues.put(IvyPatternHelper.MODULE_KEY, module); for (DependencyResolver resolver : settings.getResolvers()) { - Map[] revisions = resolver.listTokenValues( - new String[] {IvyPatternHelper.REVISION_KEY}, tokenValues); - for (Map revision : revisions) { + for (Map revision : resolver.listTokenValues( + Collections.singleton(IvyPatternHelper.REVISION_KEY), tokenValues)) { entries.add(revision.get(IvyPatternHelper.REVISION_KEY)); } } @@ -188,17 +182,13 @@ public ModuleId[] listModules(ModuleId moduleCrit, PatternMatcher matcher) { IvyPatternHelper.ORGANISATION_KEY); addMatcher(matcher, moduleCrit.getName(), criteria, IvyPatternHelper.MODULE_KEY); - String[] tokensToList = new String[] {IvyPatternHelper.ORGANISATION_KEY, - IvyPatternHelper.MODULE_KEY}; - for (DependencyResolver resolver : settings.getResolvers()) { - Map[] moduleIdAsMap = resolver.listTokenValues(tokensToList, criteria); - for (Map moduleId : moduleIdAsMap) { - String org = moduleId.get(IvyPatternHelper.ORGANISATION_KEY); - String name = moduleId.get(IvyPatternHelper.MODULE_KEY); - ModuleId modId = ModuleId.newInstance(org, name); - ret.add(NameSpaceHelper.transform(modId, resolver.getNamespace() - .getToSystemTransformer())); + for (Map moduleId : resolver.listTokenValues(new HashSet<>( + Arrays.asList(IvyPatternHelper.ORGANISATION_KEY, IvyPatternHelper.MODULE_KEY)), criteria)) { + ModuleId modId = ModuleId.newInstance(moduleId.get(IvyPatternHelper.ORGANISATION_KEY), + moduleId.get(IvyPatternHelper.MODULE_KEY)); + ret.add(NameSpaceHelper.transform(modId, + resolver.getNamespace().getToSystemTransformer())); } } @@ -224,12 +214,9 @@ public ModuleRevisionId[] listModules(ModuleRevisionId moduleCrit, PatternMatche addMatcher(matcher, entry.getValue(), criteria, entry.getKey()); } - String[] tokensToList = moduleCrit.getAttributes().keySet() - .toArray(new String[moduleCrit.getAttributes().size()]); - for (DependencyResolver resolver : settings.getResolvers()) { - Map[] moduleIdAsMap = resolver.listTokenValues(tokensToList, criteria); - for (Map moduleId : moduleIdAsMap) { + for (Map moduleId : resolver.listTokenValues(moduleCrit.getAttributes().keySet(), + criteria)) { String org = moduleId.get(IvyPatternHelper.ORGANISATION_KEY); String name = moduleId.get(IvyPatternHelper.MODULE_KEY); String branch = moduleId.get(IvyPatternHelper.BRANCH_KEY); @@ -280,12 +267,9 @@ public ModuleRevisionId[] listModules(DependencyResolver resolver, ModuleRevisio addMatcher(matcher, entry.getValue(), criteria, entry.getKey()); } - String[] tokensToList = moduleCrit.getAttributes().keySet() - .toArray(new String[moduleCrit.getAttributes().size()]); - - Map[] moduleIdAsMap = resolver.listTokenValues(tokensToList, criteria); Set result = new LinkedHashSet<>(); // we use a Set to remove duplicates - for (Map moduleId : moduleIdAsMap) { + for (Map moduleId : resolver.listTokenValues(moduleCrit.getAttributes().keySet(), + criteria)) { String org = moduleId.get(IvyPatternHelper.ORGANISATION_KEY); String name = moduleId.get(IvyPatternHelper.MODULE_KEY); String branch = moduleId.get(IvyPatternHelper.BRANCH_KEY); @@ -368,7 +352,6 @@ public Collection findModuleRevisionIds(DependencyResolver res + " on " + resolverName); boolean foundModule = false; for (ModuleEntry mEntry : modules) { - ModuleId foundMid = new ModuleId(mEntry.getOrganisation(), mEntry.getModule()); ModuleId systemMid = foundMid; if (fromNamespace != null) { diff --git a/src/java/org/apache/ivy/osgi/repo/AbstractOSGiResolver.java b/src/java/org/apache/ivy/osgi/repo/AbstractOSGiResolver.java index fc0b6b855..0ad63bc5a 100644 --- a/src/java/org/apache/ivy/osgi/repo/AbstractOSGiResolver.java +++ b/src/java/org/apache/ivy/osgi/repo/AbstractOSGiResolver.java @@ -403,15 +403,8 @@ private void filterCapabilityValues(Set capabilityValues, } } - @SuppressWarnings("unchecked") @Override - public Map[] listTokenValues(String[] tokens, Map criteria) { - Set tokenSet = new HashSet<>(Arrays.asList(tokens)); - Set> listTokenValues = listTokenValues(tokenSet, criteria); - return listTokenValues.toArray(new Map[listTokenValues.size()]); - } - - private Set> listTokenValues(Set tokens, + public Set> listTokenValues(Set tokens, Map criteria) { Map stringCriteria = new HashMap<>(); for (Map.Entry entry : criteria.entrySet()) { diff --git a/src/java/org/apache/ivy/plugins/resolver/AbstractPatternsBasedResolver.java b/src/java/org/apache/ivy/plugins/resolver/AbstractPatternsBasedResolver.java index cb0d60648..6de4c3ad2 100644 --- a/src/java/org/apache/ivy/plugins/resolver/AbstractPatternsBasedResolver.java +++ b/src/java/org/apache/ivy/plugins/resolver/AbstractPatternsBasedResolver.java @@ -157,9 +157,8 @@ protected Collection findArtifactNames(Map tokenValues, return names; } - @SuppressWarnings("unchecked") @Override - public Map[] listTokenValues(String[] tokens, Map criteria) { + public Set> listTokenValues(Set tokens, Map criteria) { Set> result = new LinkedHashSet<>(); // use ivy patterns @@ -185,17 +184,17 @@ public Map[] listTokenValues(String[] tokens, Map> resolveTokenValues(String[] tokens, String pattern, + private Set> resolveTokenValues(Set tokens, String pattern, Map criteria, boolean noMd) { Set> result = new LinkedHashSet<>(); - Set tokenSet = new HashSet<>(Arrays.asList(tokens)); + Set tokenSet = new HashSet<>(tokens); Map tokenValues = new HashMap<>(); for (Map.Entry entry : criteria.entrySet()) { @@ -251,8 +250,7 @@ private Set> resolveTokenValues(String[] tokens, String patt } else if (noMd && "module".equals(token)) { newCriteria.put("artifact", value); } - result.addAll(resolveTokenValues(tokenSet.toArray(new String[tokenSet.size()]), - moreResolvedPattern, newCriteria, noMd)); + result.addAll(resolveTokenValues(tokenSet, moreResolvedPattern, newCriteria, noMd)); } return result; diff --git a/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java b/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java index fa9907e89..a578659f0 100644 --- a/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java +++ b/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java @@ -21,7 +21,9 @@ import java.io.IOException; import java.util.Arrays; import java.util.Date; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import org.apache.ivy.core.IvyContext; import org.apache.ivy.core.LogOptions; @@ -178,7 +180,20 @@ public String[] listTokenValues(String token, Map otherTokenValu return new String[0]; } + // new API: provide the default implementation for third party extensions that lack it + @SuppressWarnings("deprecation") + public Set> listTokenValues(Set tokens, Map criteria) { + Set> tokenValueSet = new HashSet<>(); + for (Map tokenValue : + listTokenValues(tokens.toArray(new String[tokens.size()]), criteria)) { + tokenValueSet.add(tokenValue); + } + return tokenValueSet; + } + + // old API @SuppressWarnings("unchecked") + @Deprecated public Map[] listTokenValues(String[] tokens, Map criteria) { return new Map[0]; } diff --git a/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java b/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java index 840e4e655..b7441f0d0 100644 --- a/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java +++ b/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java @@ -178,17 +178,13 @@ public ResolvedResource findIvyFileRef(DependencyDescriptor dd, ResolveData data return null; } - @SuppressWarnings("unchecked") @Override - public Map[] listTokenValues(String[] tokens, Map criteria) { + public Set> listTokenValues(Set tokens, Map criteria) { Set> result = new HashSet<>(); for (DependencyResolver resolver : chain) { - Map[] temp = resolver.listTokenValues(tokens, - new HashMap<>(criteria)); - result.addAll(Arrays.asList(temp)); + result.addAll(resolver.listTokenValues(tokens, new HashMap<>(criteria))); } - - return result.toArray(new Map[result.size()]); + return result; } @Override diff --git a/src/java/org/apache/ivy/plugins/resolver/DependencyResolver.java b/src/java/org/apache/ivy/plugins/resolver/DependencyResolver.java index 80b98d356..bcd8e8356 100644 --- a/src/java/org/apache/ivy/plugins/resolver/DependencyResolver.java +++ b/src/java/org/apache/ivy/plugins/resolver/DependencyResolver.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.text.ParseException; import java.util.Map; +import java.util.Set; import org.apache.ivy.core.cache.ArtifactOrigin; import org.apache.ivy.core.cache.RepositoryCacheManager; @@ -188,6 +189,9 @@ ResolvedModuleRevision getDependency(DependencyDescriptor dd, ResolveData data) * the token which have values * @return the list of token values, must not be null */ + Set> listTokenValues(Set tokens, Map criteria); + + @Deprecated Map[] listTokenValues(String[] tokens, Map criteria); OrganisationEntry[] listOrganisations(); diff --git a/test/java/org/apache/ivy/plugins/resolver/IBiblioResolverTest.java b/test/java/org/apache/ivy/plugins/resolver/IBiblioResolverTest.java index b33bb0b7a..5257aaf23 100644 --- a/test/java/org/apache/ivy/plugins/resolver/IBiblioResolverTest.java +++ b/test/java/org/apache/ivy/plugins/resolver/IBiblioResolverTest.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -153,7 +154,6 @@ public void testInitFromConf() throws Exception { l.get(0)); } - @SuppressWarnings({"rawtypes", "unchecked"}) @Test public void testMaven2Listing() throws Exception { IBiblioResolver resolver = new IBiblioResolver(); @@ -171,20 +171,22 @@ public void testMaven2Listing() throws Exception { RevisionEntry[] revisions = resolver.listRevisions(modules[0]); assertTrue(revisions.length > 0); - Map otherTokenValues = new HashMap(); + Map otherTokenValues = new HashMap<>(); otherTokenValues.put(IvyPatternHelper.ORGANISATION_KEY, "commons-lang"); String[] values = resolver.listTokenValues(IvyPatternHelper.MODULE_KEY, otherTokenValues); assertNotNull(values); assertEquals(1, values.length); assertEquals("commons-lang", values[0]); - Map[] valuesMaps = resolver.listTokenValues(new String[] {IvyPatternHelper.MODULE_KEY}, - otherTokenValues); - Set vals = new HashSet(); - for (Map valuesMap : valuesMaps) { + Map criteria = new HashMap<>(); + criteria.putAll(otherTokenValues); + Set> valuesMaps = resolver.listTokenValues( + Collections.singleton(IvyPatternHelper.MODULE_KEY), criteria); + Set vals = new HashSet<>(); + for (Map valuesMap : valuesMaps) { vals.add(valuesMap.get(IvyPatternHelper.MODULE_KEY)); } - values = (String[]) vals.toArray(new String[vals.size()]); + values = vals.toArray(new String[vals.size()]); assertEquals(1, values.length); assertEquals("commons-lang", values[0]); }