You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2015/07/13 17:17:41 UTC
svn commit: r1690710 -
/felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
Author: gnodet
Date: Mon Jul 13 15:17:41 2015
New Revision: 1690710
URL: http://svn.apache.org/r1690710
Log:
[FELIX-4942] Small improvements in checkPackageSpaceConsistency
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=1690710&r1=1690709&r2=1690710&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:17:41 2015
@@ -1179,10 +1179,12 @@ public class ResolverImpl implements Res
// host imports, which is not allowed in normal metadata.
for (Entry<String, List<Blame>> entry : pkgs.m_importedPkgs.fast())
{
- if (entry.getValue().size() > 1)
+ String pkgName = entry.getKey();
+ List<Blame> blames = entry.getValue();
+ if (blames.size() > 1)
{
Blame sourceBlame = null;
- for (Blame blame : entry.getValue())
+ for (Blame blame : blames)
{
if (sourceBlame == null)
{
@@ -1197,7 +1199,7 @@ public class ResolverImpl implements Res
// Report conflict.
rethrow = new UseConstraintError(
session.getContext(), allCandidates,
- resource, entry.getKey(),
+ resource, pkgName,
sourceBlame, blame);
if (m_logger.isDebugEnabled())
{
@@ -1217,13 +1219,14 @@ public class ResolverImpl implements Res
{
String pkgName = entry.getKey();
Blame exportBlame = entry.getValue();
- if (!pkgs.m_usedPkgs.containsKey(pkgName))
+ ArrayMap<Capability, UsedBlames> pkgBlames = pkgs.m_usedPkgs.get(pkgName);
+ if (pkgBlames == null)
{
continue;
}
- for (UsedBlames usedBlames : pkgs.m_usedPkgs.get(pkgName).values())
+ for (UsedBlames usedBlames : pkgBlames.values())
{
- if (!isCompatible(session, Collections.singletonList(exportBlame), usedBlames.m_cap, resourcePkgMap))
+ if (!isCompatible(resourcePkgMap, exportBlame, usedBlames.m_cap))
{
for (Blame usedBlame : usedBlames.m_blames)
{
@@ -1296,26 +1299,35 @@ public class ResolverImpl implements Res
// We combine the imported and required packages here into one map.
// Imported packages are added after required packages because they shadow or override
// the packages from required bundles.
- OpenHashMap<String, List<Blame>> allImportRequirePkgs =
- new OpenHashMap<String, List<Blame>>(pkgs.m_requiredPkgs.size() + pkgs.m_importedPkgs.size());
- allImportRequirePkgs.putAll(pkgs.m_requiredPkgs);
- allImportRequirePkgs.putAll(pkgs.m_importedPkgs);
+ OpenHashMap<String, List<Blame>> allImportRequirePkgs;
+ if (pkgs.m_requiredPkgs.isEmpty())
+ {
+ allImportRequirePkgs = pkgs.m_importedPkgs;
+ }
+ else
+ {
+ allImportRequirePkgs = new OpenHashMap<String, List<Blame>>(pkgs.m_requiredPkgs.size() + pkgs.m_importedPkgs.size());
+ allImportRequirePkgs.putAll(pkgs.m_requiredPkgs);
+ allImportRequirePkgs.putAll(pkgs.m_importedPkgs);
+ }
- for (Entry<String, List<Blame>> requirementBlames : allImportRequirePkgs.fast())
+ for (Entry<String, List<Blame>> entry : allImportRequirePkgs.fast())
{
- String pkgName = requirementBlames.getKey();
- if (!pkgs.m_usedPkgs.containsKey(pkgName))
+ String pkgName = entry.getKey();
+ ArrayMap<Capability, UsedBlames> pkgBlames = pkgs.m_usedPkgs.get(pkgName);
+ if (pkgBlames == null)
{
continue;
}
+ List<Blame> requirementBlames = entry.getValue();
- for (UsedBlames usedBlames : pkgs.m_usedPkgs.get(pkgName).values())
+ for (UsedBlames usedBlames : pkgBlames.values())
{
- if (!isCompatible(session, requirementBlames.getValue(), usedBlames.m_cap, resourcePkgMap))
+ if (!isCompatible(resourcePkgMap, requirementBlames, usedBlames.m_cap))
{
// Split packages, need to think how to get a good message for split packages (sigh)
// For now we just use the first requirement that brings in the package that conflicts
- Blame requirementBlame = requirementBlames.getValue().get(0);
+ Blame requirementBlame = requirementBlames.get(0);
for (Blame usedBlame : usedBlames.m_blames)
{
if (checkMultiple(session, usedBlames, usedBlame, allCandidates))
@@ -1386,7 +1398,7 @@ public class ResolverImpl implements Res
// Try to permutate the candidate for the original
// import requirement; only permutate it if we haven't
// done so already.
- for (Blame requirementBlame : requirementBlames.getValue())
+ for (Blame requirementBlame : requirementBlames)
{
Requirement req = requirementBlame.m_reqs.get(0);
if (!mutated.contains(req))