You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2012/01/15 18:51:24 UTC
svn commit: r1231711 - in /ant/ivy/core/trunk:
src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java
src/java/org/apache/ivy/osgi/obr/filter/UniOperatorFilter.java
test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java
Author: hibou
Date: Sun Jan 15 17:51:24 2012
New Revision: 1231711
URL: http://svn.apache.org/viewvc?rev=1231711&view=rev
Log:
IVY-1329: fix the parse of ! (NOT) in the OSGi requirement filter
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/obr/filter/UniOperatorFilter.java
ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java?rev=1231711&r1=1231710&r2=1231711&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/obr/filter/RequirementFilterParser.java Sun Jan 15 17:51:24 2012
@@ -93,27 +93,33 @@ public class RequirementFilterParser {
if (c != '(') {
throw new ParseException("Expecting '(' as the start of the filter", pos);
}
+ RequirementFilter filter;
switch (readNext()) {
case '&':
- return parseAnd();
+ filter = parseAnd();
+ break;
case '|':
- return parseOr();
+ filter = parseOr();
+ break;
case '!':
- return parseNot();
+ filter = parseNot();
+ break;
default:
unread();
- return parseCompare();
+ filter = parseCompare();
+ break;
+ }
+ readNext();
+ if (c != ')') {
+ throw new ParseException("Expecting ')' as the end of the filter", pos);
}
+ return filter;
}
private RequirementFilter parseCompare() throws ParseException {
String leftValue = parseCompareValue();
Operator operator = parseCompareOperator();
String rightValue = parseCompareValue();
- readNext();
- if (c != ')') {
- throw new ParseException("Expecting ')' as the end of the filter", pos);
- }
return new CompareFilter(leftValue, operator, rightValue);
}
@@ -177,6 +183,7 @@ public class RequirementFilterParser {
unread();
filter.add(parseFilter());
} else {
+ unread();
break;
}
} while (pos < length);
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/obr/filter/UniOperatorFilter.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/obr/filter/UniOperatorFilter.java?rev=1231711&r1=1231710&r2=1231711&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/obr/filter/UniOperatorFilter.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/obr/filter/UniOperatorFilter.java Sun Jan 15 17:51:24 2012
@@ -54,7 +54,7 @@ public abstract class UniOperatorFilter
if (obj == null) {
return false;
}
- if (!(obj instanceof MultiOperatorFilter)) {
+ if (!(obj instanceof UniOperatorFilter)) {
return false;
}
UniOperatorFilter other = (UniOperatorFilter) obj;
Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java?rev=1231711&r1=1231710&r2=1231711&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/obr/RequirementFilterTest.java Sun Jan 15 17:51:24 2012
@@ -25,6 +25,7 @@ import junit.framework.TestCase;
import org.apache.ivy.osgi.obr.filter.AndFilter;
import org.apache.ivy.osgi.obr.filter.CompareFilter;
import org.apache.ivy.osgi.obr.filter.CompareFilter.Operator;
+import org.apache.ivy.osgi.obr.filter.NotFilter;
import org.apache.ivy.osgi.obr.filter.RequirementFilterParser;
import org.apache.ivy.osgi.obr.xml.RequirementFilter;
@@ -38,16 +39,28 @@ public class RequirementFilterTest exten
checkParse(cgt2, "(c>2)");
RequirementFilter twoeqd = new CompareFilter("2", Operator.EQUALS, "d");
checkParse(twoeqd, "(2=d)");
- RequirementFilter foodorbarge0dot0 = new CompareFilter("foo.bar",
+ RequirementFilter foodotbarge0dot0 = new CompareFilter("foo.bar",
Operator.GREATER_OR_EQUAL, "0.0");
- checkParse(foodorbarge0dot0, "(foo.bar>=0.0)");
- RequirementFilter and = new AndFilter(new RequirementFilter[] {foodorbarge0dot0});
+ checkParse(foodotbarge0dot0, "(foo.bar>=0.0)");
+ RequirementFilter and = new AndFilter(new RequirementFilter[] {foodotbarge0dot0});
checkParse(and, "(&(foo.bar>=0.0))");
RequirementFilter and2 = new AndFilter(new RequirementFilter[] {cgt2, twoeqd,
- foodorbarge0dot0});
+ foodotbarge0dot0});
checkParse(and2, "(&(c>2)(2=d)(foo.bar>=0.0))");
RequirementFilter spaceAfterAnd = new AndFilter(new RequirementFilter[] {twoeqd});
checkParse(spaceAfterAnd, "(& (2=d))");
+
+ RequirementFilter version350 = new CompareFilter("version", Operator.GREATER_OR_EQUAL,
+ "3.5.0");
+ RequirementFilter version400 = new CompareFilter("version", Operator.GREATER_OR_EQUAL,
+ "4.0.0");
+ RequirementFilter notVersion400 = new NotFilter(version400);
+ RequirementFilter bundle = new CompareFilter("bundle", Operator.EQUALS,
+ "org.eclipse.core.runtime");
+ RequirementFilter andEverythingWithSpace = new AndFilter(new RequirementFilter[] {
+ version350, notVersion400, bundle});
+ checkParse(andEverythingWithSpace,
+ "(& (version>=3.5.0) (!(version>=4.0.0)) (bundle=org.eclipse.core.runtime) )");
}
private void assertParseFail(String toParse) {