You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2010/01/22 23:28:45 UTC

svn commit: r902296 - in /felix/trunk/framework/src/main/java/org/apache/felix/framework: FelixResolverState.java util/VersionRange.java

Author: rickhall
Date: Fri Jan 22 22:28:45 2010
New Revision: 902296

URL: http://svn.apache.org/viewvc?rev=902296&view=rev
Log:
Fixed some bugs and improved fragment version range intersection. (FELIX-1919)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/util/VersionRange.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java?rev=902296&r1=902295&r2=902296&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/FelixResolverState.java Fri Jan 22 22:28:45 2010
@@ -466,20 +466,8 @@
         // If the existing version range floor is greater than the additional
         // version range's floor, then they are inconflict since we cannot
         // widen the constraint.
-        if (existing.getTargetVersionRange().getLow().compareTo(
-            additional.getTargetVersionRange().getLow()) > 0)
-        {
-            return true;
-        }
-        // If the existing version range ceiling is less than the additional
-        // version range's ceiling, then they are inconflict since we cannot
-        // widen the constraint.
-        if (((existing.getTargetVersionRange().getHigh() != null)
-            && (additional.getTargetVersionRange().getHigh() == null))
-            || ((existing.getTargetVersionRange().getHigh() != null)
-                && (additional.getTargetVersionRange().getHigh() != null)
-                && (existing.getTargetVersionRange().getHigh().compareTo(
-                    additional.getTargetVersionRange().getHigh()) < 0)))
+        if (!existing.getTargetVersionRange().intersects(
+            additional.getTargetVersionRange()))
         {
             return true;
         }

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/util/VersionRange.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/VersionRange.java?rev=902296&r1=902295&r2=902296&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/util/VersionRange.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/util/VersionRange.java Fri Jan 22 22:28:45 2010
@@ -80,8 +80,37 @@
         return (version.compareTo(m_low) > 0) && (version.compareTo(m_high) < 0);
     }
 
+    public boolean intersects(VersionRange vr)
+    {
+        // Check to see if the passed in floor is less than or equal to
+        // this ceiling and the passed in ceiling is greater than or
+        // equal to this floor.
+        boolean isFloorLessThanCeiling = false;
+        if ((m_high == null)
+            || (m_high.compareTo(vr.getLow()) > 0)
+            || ((m_high.compareTo(vr.getLow()) == 0)
+                && m_isHighInclusive && vr.isLowInclusive()))
+        {
+            isFloorLessThanCeiling = true;
+        }
+        boolean isCeilingGreaterThanFloor = false;
+        if ((vr.getHigh() == null)
+            || (m_low.compareTo(vr.getHigh()) < 0)
+            || ((m_low.compareTo(vr.getHigh()) == 0)
+                && m_isLowInclusive && vr.isHighInclusive()))
+        {
+            isCeilingGreaterThanFloor = true;
+        }
+        return isFloorLessThanCeiling && isCeilingGreaterThanFloor;
+    }
+
     public VersionRange intersection(VersionRange vr)
     {
+        if (!intersects(vr))
+        {
+            return null;
+        }
+
         VersionRange floor = (m_low.compareTo(vr.getLow()) > 0) ? this : vr;
         boolean floorInclusive = (getLow().equals(vr.getLow()))
             ? (isLowInclusive() & vr.isLowInclusive())