Author: gnodet
Date: Mon Jul 13 15:19:44 2015
New Revision: 1690732
URL: http://svn.apache.org/r1690732
Log:
[FELIX-4942] Do not store permutations on the session
Modified:
felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
Modified:
felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
URL:
http://svn.apache.org/viewvc/felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java?rev=1690732&r1=1690731&r2=1690732&view=diff
==============================================================================
---
felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
(original)
+++
felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
Mon Jul 13 15:19:44 2015
@@ -85,16 +85,6 @@ public class ResolverImpl implements Res
m_resolveContext = resolveContext;
}
- List<Candidates> getUsesPermutations()
- {
- return m_usesPermutations;
- }
-
- List<Candidates> getImportPermutations()
- {
- return m_importPermutations;
- }
-
Candidates getMultipleCardCandidates()
{
return m_multipleCardCandidates;
@@ -215,9 +205,12 @@ public class ResolverImpl implements Res
}
}
- List<Candidates> usesPermutations =
session.getUsesPermutations();
- List<Candidates> importPermutations =
session.getImportPermutations();
- List<Candidates> substPermutations = new
ArrayList<Candidates>();
+ // Holds candidate permutations based on permutating "uses"
chains.
+ // These permutations are given higher priority.
+ List<Candidates> usesPermutations = new
ArrayList<Candidates>();
+ // Holds candidate permutations based on permutating
requirement candidates.
+ // These permutations represent backtracking on previous
decisions.
+ List<Candidates> importPermutations = new
ArrayList<Candidates>();
// Record the initial candidate permutation.
usesPermutations.add(allCandidates);
@@ -248,10 +241,6 @@ public class ResolverImpl implements Res
{
allCandidates = importPermutations.remove(0);
}
- else if (!substPermutations.isEmpty())
- {
- allCandidates = substPermutations.remove(0);
- }
else
{
break;
@@ -272,7 +261,7 @@ public class ResolverImpl implements Res
//allCandidates.dump();
- rethrow = allCandidates.checkSubstitutes(
/*substPermutations*/ importPermutations);
+ rethrow =
allCandidates.checkSubstitutes(importPermutations);
if (rethrow != null)
{
continue;
@@ -301,7 +290,15 @@ public class ResolverImpl implements Res
}
Map<Resource, ResolutionError> currentFaultyResources =
new HashMap<Resource, ResolutionError>();
- rethrow = checkConsistency(executor, session,
allCandidates, currentFaultyResources, hosts, false);
+ rethrow = checkConsistency(
+ executor,
+ session,
+ usesPermutations,
+ importPermutations,
+ allCandidates,
+ currentFaultyResources,
+ hosts,
+ false);
if (!currentFaultyResources.isEmpty())
{
@@ -394,8 +391,6 @@ public class ResolverImpl implements Res
finally
{
// Always clear the state.
- session.getUsesPermutations().clear();
- session.getImportPermutations().clear();
session.setMultipleCardCandidates(null);
}
}
@@ -407,6 +402,8 @@ public class ResolverImpl implements Res
private ResolutionError checkConsistency(
Executor executor,
ResolveSession session,
+ List<Candidates> usesPermutations,
+ List<Candidates> importPermutations,
Candidates allCandidates,
Map<Resource, ResolutionError> currentFaultyResources,
Map<Resource, Resource> hosts,
@@ -422,7 +419,7 @@ public class ResolverImpl implements Res
for (Entry<Resource, Resource> entry : hosts.entrySet())
{
ResolutionError rethrow = checkPackageSpaceConsistency(
- session, entry.getValue(),
+ session, usesPermutations, importPermutations,
entry.getValue(),
allCandidates, dynamic, resourcePkgMap, resultCache);
if (rethrow != null)
{
@@ -520,8 +517,8 @@ public class ResolverImpl implements Res
throw rethrow.toException();
}
- List<Candidates> usesPermutations =
session.getUsesPermutations();
- List<Candidates> importPermutations =
session.getImportPermutations();
+ List<Candidates> usesPermutations = new
ArrayList<Candidates>();
+ List<Candidates> importPermutations = new
ArrayList<Candidates>();
// Record the initial candidate permutation.
usesPermutations.add(allCandidates);
@@ -546,7 +543,7 @@ public class ResolverImpl implements Res
// this case like we do for a normal resolve.
rethrow = checkConsistency(
new DumbExecutor(),
- session, allCandidates,
+ session, usesPermutations, importPermutations,
allCandidates,
new OpenHashMap<Resource,
ResolutionError>(resourcePkgMap.size()),
Collections.singletonMap(host,
allCandidates.getWrappedHost(host)),
true);
@@ -604,8 +601,6 @@ public class ResolverImpl implements Res
finally
{
// Always clear the state.
- session.getUsesPermutations().clear();
- session.getImportPermutations().clear();
session.setMultipleCardCandidates(null);
}
}
@@ -1237,6 +1232,8 @@ public class ResolverImpl implements Res
private ResolutionError checkPackageSpaceConsistency(
ResolveSession session,
+ List<Candidates> usesPermutations,
+ List<Candidates> importPermutations,
Resource resource,
Candidates allCandidates,
boolean dynamic,
@@ -1259,9 +1256,6 @@ public class ResolverImpl implements Res
Candidates permutation = null;
Set<Requirement> mutated = null;
- List<Candidates> importPermutations = session.getImportPermutations();
- List<Candidates> usesPermutations = session.getUsesPermutations();
-
// Check for conflicting imports from fragments.
// TODO: Is this only needed for imports or are generic and bundle
requirements also needed?
// I think this is only a special case for fragment imports
because they can overlap
@@ -1527,7 +1521,7 @@ public class ResolverImpl implements Res
if (!resource.equals(cap.getResource()))
{
rethrow = checkPackageSpaceConsistency(
- session, cap.getResource(),
+ session, usesPermutations, importPermutations,
cap.getResource(),
allCandidates, false, resourcePkgMap, resultCache);
if (rethrow != null)
{