Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression')
-rw-r--r--bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/ContextExpression.java70
-rw-r--r--bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Flatten.java5
-rw-r--r--bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/QLFactory.java7
-rw-r--r--bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/QLUtil.java20
-rw-r--r--bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Select.java1
-rw-r--r--bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Unique.java7
6 files changed, 18 insertions, 92 deletions
diff --git a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/ContextExpression.java b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/ContextExpression.java
index 26cbce481..e7c3bc7ec 100644
--- a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/ContextExpression.java
+++ b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/ContextExpression.java
@@ -12,8 +12,8 @@ package org.eclipse.equinox.internal.p2.ql.expression;
import java.util.Iterator;
import org.eclipse.equinox.internal.p2.metadata.expression.*;
-import org.eclipse.equinox.internal.p2.ql.Everything;
-import org.eclipse.equinox.p2.metadata.expression.*;
+import org.eclipse.equinox.p2.metadata.expression.IEvaluationContext;
+import org.eclipse.equinox.p2.metadata.expression.IExpression;
import org.eclipse.equinox.p2.ql.IContextExpression;
import org.eclipse.equinox.p2.ql.ITranslationSupport;
@@ -22,71 +22,17 @@ import org.eclipse.equinox.p2.ql.ITranslationSupport;
* variable 'everything' and initialized it with the iterator that represents all
* available items.
*/
-public final class ContextExpression<T> extends Unary implements IContextExpression<T>, IQLConstants {
- private static final Object[] noParams = new Object[0];
- private final Class<T> elementClass;
- private final Object[] parameters;
-
- public ContextExpression(Class<T> elementClass, Expression expression, Object[] parameters) {
- super(expression);
- this.elementClass = elementClass;
- this.parameters = parameters == null ? noParams : parameters;
- }
-
- public boolean accept(IExpressionVisitor visitor) {
- return visitor.visit(operand);
- }
-
- public void toString(StringBuffer bld, Variable rootVariable) {
- operand.toString(bld, rootVariable);
- }
-
- public IEvaluationContext createContext(Iterator<T> iterator) {
- Variable everything = QLFactory.EVERYTHING;
- IEvaluationContext context = EvaluationContext.create(parameters, everything);
- context.setValue(everything, new Everything<T>(elementClass, iterator, QLUtil.needsRepeadedAccessToEverything(operand)));
- return context;
+public final class ContextExpression<T> extends org.eclipse.equinox.internal.p2.metadata.expression.ContextExpression<T> implements IContextExpression<T> {
+ public ContextExpression(Expression expression, Object[] parameters) {
+ super(expression, parameters);
}
- public IEvaluationContext createContext(Iterator<T> iterator, ITranslationSupport ts) {
- Variable everything = QLFactory.EVERYTHING;
+ public IEvaluationContext createContext(Class<T> elementClass, Iterator<T> iterator, ITranslationSupport ts) {
+ Variable everything = ExpressionFactory.EVERYTHING;
IExpression translations = QLFactory.TRANSLATIONS;
IEvaluationContext context = EvaluationContext.create(parameters, new IExpression[] {everything, translations});
- context.setValue(everything, new Everything<T>(elementClass, iterator, QLUtil.needsRepeadedAccessToEverything(operand)));
+ context.setValue(everything, new Everything<T>(elementClass, iterator, operand));
context.setValue(translations, ts);
return context;
}
-
- public Class<T> getElementClass() {
- return elementClass;
- }
-
- public int getExpressionType() {
- return 0;
- }
-
- public String getOperator() {
- throw new UnsupportedOperationException();
- }
-
- public int getPriority() {
- return operand.getPriority();
- }
-
- public Object[] getParameters() {
- return parameters;
- }
-
- public int hashCode() {
- return operand.hashCode();
- }
-
- @SuppressWarnings("unchecked")
- public Iterator<T> iterator(IEvaluationContext context) {
- return (Iterator<T>) evaluateAsIterator(context);
- }
-
- public void toString(StringBuffer bld) {
- toString(bld, QLFactory.EVERYTHING);
- }
}
diff --git a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Flatten.java b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Flatten.java
index b0ff4122c..8aa33622c 100644
--- a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Flatten.java
+++ b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Flatten.java
@@ -10,9 +10,10 @@
*******************************************************************************/
package org.eclipse.equinox.internal.p2.ql.expression;
+import org.eclipse.equinox.internal.p2.metadata.expression.CompoundIterator;
+
import java.util.Iterator;
import org.eclipse.equinox.internal.p2.metadata.expression.Expression;
-import org.eclipse.equinox.internal.p2.ql.FlattenIterator;
import org.eclipse.equinox.p2.metadata.expression.IEvaluationContext;
/**
@@ -25,7 +26,7 @@ final class Flatten extends UnaryCollectionFilter {
}
public Iterator<?> evaluateAsIterator(IEvaluationContext context) {
- return new FlattenIterator<Object>(operand.evaluateAsIterator(context));
+ return new CompoundIterator<Object>(operand.evaluateAsIterator(context));
}
public int getExpressionType() {
diff --git a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/QLFactory.java b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/QLFactory.java
index 17bbb657a..8568e680c 100644
--- a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/QLFactory.java
+++ b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/QLFactory.java
@@ -5,15 +5,12 @@ import java.lang.reflect.InvocationTargetException;
import java.util.*;
import org.eclipse.equinox.internal.p2.metadata.expression.*;
import org.eclipse.equinox.p2.metadata.expression.IExpression;
-import org.eclipse.equinox.p2.ql.IContextExpression;
import org.eclipse.equinox.p2.ql.IQLFactory;
public class QLFactory extends ExpressionFactory implements IQLFactory, IQLConstants {
@SuppressWarnings("hiding")
public static final IQLFactory INSTANCE = new QLFactory();
- public static final Variable EVERYTHING = new Variable(IExpressionConstants.VARIABLE_EVERYTHING);
-
public static final Variable TRANSLATIONS = new Variable(VARIABLE_TRANSLATIONS);
protected static final Map<String, Constructor<?>> functionMap;
@@ -60,8 +57,8 @@ public class QLFactory extends ExpressionFactory implements IQLFactory, IQLConst
return new Condition((Expression) test, (Expression) ifTrue, (Expression) ifFalse);
}
- public <T> IContextExpression<T> contextExpression(Class<T> elementClass, IExpression expr, Object... parameters) {
- return new ContextExpression<T>(elementClass, (Expression) expr, parameters);
+ public <T> org.eclipse.equinox.p2.metadata.expression.IContextExpression<T> contextExpression(IExpression expr, Object... parameters) {
+ return new ContextExpression<T>((Expression) expr, parameters);
}
public IExpression first(IExpression collection, IExpression lambda) {
diff --git a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/QLUtil.java b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/QLUtil.java
index 6d790b25b..5ae9b8c6b 100644
--- a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/QLUtil.java
+++ b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/QLUtil.java
@@ -73,24 +73,4 @@ public abstract class QLUtil implements IExpression, IQLConstants {
});
return translationSupportNeeded[0];
}
-
- /**
- * Checks if the expression will make repeated requests for the 'everything' iterator.
- * @return <code>true</code> if repeated requests will be made, <code>false</code> if not.
- */
- static boolean needsRepeadedAccessToEverything(Expression expression) {
- final boolean[] repeatedAccessNeeded = new boolean[] {false};
- expression.accept(new IExpressionVisitor() {
- public boolean visit(IExpression expr) {
- // FIXME Needs proper counting
- if (expr == QLFactory.EVERYTHING) {
- repeatedAccessNeeded[0] = true;
- return false;
- }
- return true;
- }
- });
- // return repeatedAccessNeeded[0];
- return true;
- }
}
diff --git a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Select.java b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Select.java
index 9ea863a0e..300d8d390 100644
--- a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Select.java
+++ b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Select.java
@@ -12,7 +12,6 @@ package org.eclipse.equinox.internal.p2.ql.expression;
import java.util.Iterator;
import org.eclipse.equinox.internal.p2.metadata.expression.*;
-import org.eclipse.equinox.internal.p2.ql.MatchIteratorFilter;
import org.eclipse.equinox.p2.metadata.expression.IEvaluationContext;
import org.eclipse.equinox.p2.ql.IQLExpression;
diff --git a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Unique.java b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Unique.java
index 5d4953cea..270ac2b5e 100644
--- a/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Unique.java
+++ b/bundles/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/internal/p2/ql/expression/Unique.java
@@ -12,7 +12,6 @@ package org.eclipse.equinox.internal.p2.ql.expression;
import java.util.*;
import org.eclipse.equinox.internal.p2.metadata.expression.*;
-import org.eclipse.equinox.internal.p2.ql.MatchIteratorFilter;
import org.eclipse.equinox.p2.metadata.expression.IEvaluationContext;
import org.eclipse.equinox.p2.ql.IQLExpression;
@@ -21,8 +20,12 @@ import org.eclipse.equinox.p2.ql.IQLExpression;
* once throughout the whole query.
*/
final class Unique extends Binary implements IQLConstants, IQLExpression {
+ /**
+ * A UniqueIterator that uses a set as a discriminator, ensuring that
+ * no element is returned twice.
+ */
static class UniqueIterator<T> extends MatchIteratorFilter<T> {
- private final Set<T> uniqueSet;
+ final Set<T> uniqueSet;
public UniqueIterator(Iterator<? extends T> iterator, Set<T> uniqueSet) {
super(iterator);

Back to the top