You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2016/01/12 14:08:11 UTC

[10/30] olingo-odata4 git commit: [OLINGO-834] clean-up Expression implementations

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/BinaryImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/BinaryImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/BinaryImpl.java
index c3530c0..3f2e8f2 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/BinaryImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/BinaryImpl.java
@@ -25,21 +25,16 @@ import org.apache.olingo.server.api.uri.queryoption.expression.Expression;
 import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitException;
 import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitor;
 
-public class BinaryImpl extends ExpressionImpl implements Binary {
+public class BinaryImpl implements Binary {
 
-  private BinaryOperatorKind operator;
-  private ExpressionImpl left;
-  private ExpressionImpl right;
+  private final Expression left;
+  private final BinaryOperatorKind operator;
+  private final Expression right;
 
-  public BinaryImpl() {
-    // TODO: Delete
-  }
-
-  public BinaryImpl(Expression left, BinaryOperatorKind operator, Expression right) {
-    // TODO:DeleteCast
-    this.left = (ExpressionImpl) left;
+  public BinaryImpl(final Expression left, final BinaryOperatorKind operator, final Expression right) {
+    this.left = left;
     this.operator = operator;
-    this.right = (ExpressionImpl) right;
+    this.right = right;
   }
 
   @Override
@@ -47,30 +42,16 @@ public class BinaryImpl extends ExpressionImpl implements Binary {
     return operator;
   }
 
-  public Binary setOperator(final BinaryOperatorKind operator) {
-    this.operator = operator;
-    return this;
-  }
-
   @Override
   public Expression getLeftOperand() {
     return left;
   }
 
-  public void setLeftOperand(final ExpressionImpl operand) {
-    left = operand;
-  }
-
   @Override
   public Expression getRightOperand() {
     return right;
   }
 
-  public void setRightOperand(final ExpressionImpl operand) {
-    right = operand;
-
-  }
-
   @Override
   public <T> T accept(final ExpressionVisitor<T> visitor) throws ExpressionVisitException, ODataApplicationException {
     T left = this.left.accept(visitor);
@@ -82,5 +63,4 @@ public class BinaryImpl extends ExpressionImpl implements Binary {
   public String toString() {
     return "{" + left + " " + operator.name() + " " + right + '}';
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/EnumerationImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/EnumerationImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/EnumerationImpl.java
index 8f7df3a..256b8d1 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/EnumerationImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/EnumerationImpl.java
@@ -18,7 +18,7 @@
  */
 package org.apache.olingo.server.core.uri.queryoption.expression;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.olingo.commons.api.edm.EdmEnumType;
@@ -27,19 +27,14 @@ import org.apache.olingo.server.api.uri.queryoption.expression.Enumeration;
 import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitException;
 import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitor;
 
-public class EnumerationImpl extends ExpressionImpl implements Enumeration {
+public class EnumerationImpl implements Enumeration {
 
-  private EdmEnumType type;
-  private List<String> values = new ArrayList<String>();
+  private final EdmEnumType type;
+  private final List<String> values;
 
-  @Override
-  public List<String> getValues() {
-    return values;
-  }
-
-  public EnumerationImpl addValue(final String enumValue) {
-    values.add(enumValue);
-    return this;
+  public EnumerationImpl(final EdmEnumType type, final List<String> values) {
+    this.type = type;
+    this.values = values;
   }
 
   @Override
@@ -47,14 +42,15 @@ public class EnumerationImpl extends ExpressionImpl implements Enumeration {
     return type;
   }
 
-  public EnumerationImpl setType(final EdmEnumType type) {
-    this.type = type;
-    return this;
+  @Override
+  public List<String> getValues() {
+    return values == null ?
+        Collections.<String> emptyList() :
+        Collections.unmodifiableList(values);
   }
 
   @Override
   public <T> T accept(final ExpressionVisitor<T> visitor) throws ExpressionVisitException, ODataApplicationException {
     return visitor.visitEnum(type, values);
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/ExpressionImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/ExpressionImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/ExpressionImpl.java
deleted file mode 100644
index c9cc707..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/ExpressionImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.server.core.uri.queryoption.expression;
-
-import org.apache.olingo.server.api.uri.queryoption.expression.Expression;
-
-public abstract class ExpressionImpl implements Expression {
-  // No additional methods needed for now.
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/LambdaRefImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/LambdaRefImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/LambdaRefImpl.java
index 8198204..824943a 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/LambdaRefImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/LambdaRefImpl.java
@@ -23,23 +23,21 @@ import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitEx
 import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitor;
 import org.apache.olingo.server.api.uri.queryoption.expression.LambdaRef;
 
-public class LambdaRefImpl extends ExpressionImpl implements LambdaRef {
+public class LambdaRefImpl implements LambdaRef {
 
-  private String variableText;
+  private final String variableText;
+
+  public LambdaRefImpl(final String text) {
+    variableText = text;
+  }
 
   @Override
   public String getVariableName() {
     return variableText;
   }
 
-  public LambdaRefImpl setVariableText(final String text) {
-    variableText = text;
-    return this;
-  }
-
   @Override
   public <T> T accept(final ExpressionVisitor<T> visitor) throws ExpressionVisitException, ODataApplicationException {
     return visitor.visitLambdaReference(variableText);
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/LiteralImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/LiteralImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/LiteralImpl.java
index e275fdd..8a3cc8a 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/LiteralImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/LiteralImpl.java
@@ -24,16 +24,12 @@ import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitEx
 import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitor;
 import org.apache.olingo.server.api.uri.queryoption.expression.Literal;
 
-public class LiteralImpl extends ExpressionImpl implements Literal {
+public class LiteralImpl implements Literal {
 
-  private String text;
-  private EdmType type;
+  private final String text;
+  private final EdmType type;
 
-  public LiteralImpl() {
-
-  }
-
-  public LiteralImpl(String text, EdmType type) {
+  public LiteralImpl(final String text, final EdmType type) {
     this.text = text;
     this.type = type;
   }
@@ -43,21 +39,11 @@ public class LiteralImpl extends ExpressionImpl implements Literal {
     return text;
   }
 
-  public LiteralImpl setText(final String text) {
-    this.text = text;
-    return this;
-  }
-
   @Override
   public EdmType getType() {
     return type;
   }
 
-  public LiteralImpl setType(final EdmType type) {
-    this.type = type;
-    return this;
-  }
-
   @Override
   public <T> T accept(final ExpressionVisitor<T> visitor) throws ExpressionVisitException, ODataApplicationException {
     return visitor.visitLiteral(this);
@@ -65,7 +51,6 @@ public class LiteralImpl extends ExpressionImpl implements Literal {
 
   @Override
   public String toString() {
-    return "" + text;
+    return text == null ? "" : text;
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/MemberImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/MemberImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/MemberImpl.java
index 5f6162f..a71e382 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/MemberImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/MemberImpl.java
@@ -30,19 +30,24 @@ import org.apache.olingo.server.core.uri.UriResourceImpl;
 import org.apache.olingo.server.core.uri.UriResourceTypedImpl;
 import org.apache.olingo.server.core.uri.UriResourceWithKeysImpl;
 
-public class MemberImpl extends ExpressionImpl implements Member {
+public class MemberImpl implements Member {
 
-  private UriInfoResource path;
-  private EdmType startTypeFilter;
+  private final UriInfoResource path;
+  private final EdmType startTypeFilter;
+
+  public MemberImpl(final UriInfoResource path, final EdmType startTypeFilter) {
+    this.path = path;
+    this.startTypeFilter = startTypeFilter;
+  }
 
   @Override
   public UriInfoResource getResourcePath() {
     return path;
   }
 
-  public Member setResourcePath(final UriInfoResource pathSegments) {
-    path = pathSegments;
-    return this;
+  @Override
+  public EdmType getStartTypeFilter() {
+    return startTypeFilter;
   }
 
   @Override
@@ -89,15 +94,4 @@ public class MemberImpl extends ExpressionImpl implements Member {
     }
     return false;
   }
-
-  @Override
-  public EdmType getStartTypeFilter() {
-    return startTypeFilter;
-  }
-
-  public MemberImpl setTypeFilter(final EdmType startTypeFilter) {
-    this.startTypeFilter = startTypeFilter;
-    return this;
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/MethodImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/MethodImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/MethodImpl.java
index 8175c85..1c8ce64 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/MethodImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/MethodImpl.java
@@ -19,6 +19,7 @@
 package org.apache.olingo.server.core.uri.queryoption.expression;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.olingo.server.api.ODataApplicationException;
@@ -28,17 +29,14 @@ import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitor
 import org.apache.olingo.server.api.uri.queryoption.expression.Method;
 import org.apache.olingo.server.api.uri.queryoption.expression.MethodKind;
 
-public class MethodImpl extends ExpressionImpl implements Method {
+public class MethodImpl implements Method {
 
-  private MethodKind method;
-  private List<ExpressionImpl> parameters = new ArrayList<ExpressionImpl>();
+  private final MethodKind method;
+  private final List<Expression> parameters;
 
-  public MethodImpl() {
-    // TODO: Delete constructor
-  }
-
-  public MethodImpl(MethodKind method) {
+  public MethodImpl(final MethodKind method, final List<Expression> parameters) {
     this.method = method;
+    this.parameters = parameters;
   }
 
   @Override
@@ -46,48 +44,26 @@ public class MethodImpl extends ExpressionImpl implements Method {
     return method;
   }
 
-  public MethodImpl setMethod(final MethodKind methodCalls) {
-    method = methodCalls;
-    return this;
-  }
-
   @Override
   public List<Expression> getParameters() {
-    List<Expression> list = new ArrayList<Expression>();
-    for (ExpressionImpl item : parameters) {
-      list.add(item);
-    }
-    return list;
-  }
-
-  public MethodImpl addParameter(final ExpressionImpl readCommonExpression) {
-    parameters.add(readCommonExpression);
-    return this;
+    return parameters == null ?
+        Collections.<Expression> emptyList() :
+        Collections.unmodifiableList(parameters);
   }
 
   @Override
   public <T> T accept(final ExpressionVisitor<T> visitor) throws ExpressionVisitException, ODataApplicationException {
     List<T> userParameters = new ArrayList<T>();
-    for (ExpressionImpl parameter : parameters) {
-      userParameters.add(parameter.accept(visitor));
+    if (parameters != null) {
+      for (final Expression parameter : parameters) {
+        userParameters.add(parameter.accept(visitor));
+      }
     }
     return visitor.visitMethodCall(method, userParameters);
   }
 
   @Override
   public String toString() {
-    String parametersString = "[";
-    boolean first = true;
-    for (Expression exp : parameters) {
-      if(first){
-        first = false;
-        parametersString = parametersString + exp.toString();
-      }else {
-        parametersString = parametersString + ", " + exp.toString();
-      }
-    }
-    parametersString = parametersString + "]";
-    return "{" + method + " " + parametersString + "}";
+    return "{" + method + " " + parameters + "}";
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/TypeLiteralImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/TypeLiteralImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/TypeLiteralImpl.java
index f5f6f06..336c203 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/TypeLiteralImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/TypeLiteralImpl.java
@@ -24,23 +24,21 @@ import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitEx
 import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitor;
 import org.apache.olingo.server.api.uri.queryoption.expression.TypeLiteral;
 
-public class TypeLiteralImpl extends ExpressionImpl implements TypeLiteral {
+public class TypeLiteralImpl implements TypeLiteral {
 
-  private EdmType type;
+  private final EdmType type;
+
+  public TypeLiteralImpl(final EdmType type) {
+    this.type = type;
+  }
 
   @Override
   public EdmType getType() {
     return type;
   }
 
-  public TypeLiteralImpl setType(final EdmType type) {
-    this.type = type;
-    return this;
-  }
-
   @Override
   public <T> T accept(final ExpressionVisitor<T> visitor) throws ExpressionVisitException, ODataApplicationException {
     return visitor.visitTypeLiteral(type);
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/UnaryImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/UnaryImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/UnaryImpl.java
index f1edf91..2438d27 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/UnaryImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/expression/UnaryImpl.java
@@ -25,18 +25,14 @@ import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitor
 import org.apache.olingo.server.api.uri.queryoption.expression.Unary;
 import org.apache.olingo.server.api.uri.queryoption.expression.UnaryOperatorKind;
 
-public class UnaryImpl extends ExpressionImpl implements Unary {
+public class UnaryImpl implements Unary {
 
-  private UnaryOperatorKind operator;
-  private ExpressionImpl expression;
+  private final UnaryOperatorKind operator;
+  private final Expression expression;
 
-  public UnaryImpl() {
-
-  }
-
-  public UnaryImpl(UnaryOperatorKind operator, Expression expression) {
+  public UnaryImpl(final UnaryOperatorKind operator, final Expression expression) {
     this.operator = operator;
-    this.expression = (ExpressionImpl) expression;
+    this.expression = expression;
   }
 
   @Override
@@ -44,19 +40,11 @@ public class UnaryImpl extends ExpressionImpl implements Unary {
     return operator;
   }
 
-  public void setOperator(final UnaryOperatorKind operator) {
-    this.operator = operator;
-  }
-
   @Override
   public Expression getOperand() {
     return expression;
   }
 
-  public void setOperand(final ExpressionImpl expression) {
-    this.expression = expression;
-  }
-
   @Override
   public <T> T accept(final ExpressionVisitor<T> visitor) throws ExpressionVisitException, ODataApplicationException {
     T operand = expression.accept(visitor);
@@ -67,5 +55,4 @@ public class UnaryImpl extends ExpressionImpl implements Unary {
   public String toString() {
     return "{" + operator + " " + expression + '}';
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/expression/FilterParserTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/expression/FilterParserTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/expression/FilterParserTest.java
deleted file mode 100644
index 7bfc369..0000000
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/expression/FilterParserTest.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.server.core.uri.expression;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.util.ArrayList;
-
-import org.apache.olingo.server.api.uri.queryoption.expression.Expression;
-import org.apache.olingo.server.core.uri.expression.FilterParser.TokenKind;
-import org.apache.olingo.server.core.uri.expression.FilterParser.Tokenizer;
-import org.apache.olingo.server.core.uri.expression.FilterParser.Token;
-import org.junit.Test;
-
-public class FilterParserTest {
-
-  @Test
-  public void equality() {
-    Expression expression = parseExpression(TokenKind.EQ_OP);
-    assertEquals("{5 EQ 5}", expression.toString());
-
-    expression = parseExpression(TokenKind.NE_OP);
-    assertEquals("{5 NE 5}", expression.toString());
-  }
-
-  @Test
-  public void relational() {
-    Expression expression = parseExpression(TokenKind.GT_OP);
-    assertEquals("{5 GT 5}", expression.toString());
-
-    expression = parseExpression(TokenKind.GE_OP);
-    assertEquals("{5 GE 5}", expression.toString());
-
-    expression = parseExpression(TokenKind.LT_OP);
-    assertEquals("{5 LT 5}", expression.toString());
-
-    expression = parseExpression(TokenKind.LE_OP);
-    assertEquals("{5 LE 5}", expression.toString());
-  }
-
-  @Test
-  public void additive() {
-    Expression expression = parseExpression(TokenKind.ADD_OP);
-    assertEquals("{5 ADD 5}", expression.toString());
-
-    expression = parseExpression(TokenKind.SUB_OP);
-    assertEquals("{5 SUB 5}", expression.toString());
-  }
-
-  @Test
-  public void multiplicative() {
-    Expression expression = parseExpression(TokenKind.MUL_OP);
-    assertEquals("{5 MUL 5}", expression.toString());
-
-    expression = parseExpression(TokenKind.DIV_OP);
-    assertEquals("{5 DIV 5}", expression.toString());
-
-    expression = parseExpression(TokenKind.MOD_OP);
-    assertEquals("{5 MOD 5}", expression.toString());
-  }
-
-  @Test
-  public void unary() {
-    ArrayList<Token> tokens = new ArrayList<Token>();
-    tokens.add(new Token(TokenKind.MINUS, ""));
-    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
-    Tokenizer tokenizer = new Tokenizer(tokens);
-    Expression expression = new FilterParser().parse(tokenizer);
-    assertEquals("{- 5}", expression.toString());
-
-    tokens = new ArrayList<Token>();
-    tokens.add(new Token(TokenKind.NOT, ""));
-    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
-    tokenizer = new Tokenizer(tokens);
-    expression = new FilterParser().parse(tokenizer);
-    assertEquals("{not 5}", expression.toString());
-  }
-
-  @Test
-  public void grouping() {
-    ArrayList<Token> tokens = new ArrayList<Token>();
-    tokens.add(new Token(TokenKind.MINUS, ""));
-    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
-    tokens.add(new Token(TokenKind.ADD_OP, ""));
-    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
-    Tokenizer tokenizer = new Tokenizer(tokens);
-    Expression expression = new FilterParser().parse(tokenizer);
-    assertEquals("{{- 5} ADD 5}", expression.toString());
-
-    tokens = new ArrayList<Token>();
-    tokens.add(new Token(TokenKind.MINUS, ""));
-    tokens.add(new Token(TokenKind.OPEN, ""));
-    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
-    tokens.add(new Token(TokenKind.ADD_OP, ""));
-    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
-    tokens.add(new Token(TokenKind.CLOSE, ""));
-    tokenizer = new Tokenizer(tokens);
-    expression = new FilterParser().parse(tokenizer);
-    assertEquals("{- {5 ADD 5}}", expression.toString());
-  }
-
-  @Test
-  public void noParameterMethods() {
-    Expression expression = parseMethod(TokenKind.Now);
-    assertEquals("{now []}", expression.toString());
-
-    expression = parseMethod(TokenKind.Maxdatetime);
-    assertEquals("{maxdatetime []}", expression.toString());
-
-    expression = parseMethod(TokenKind.Mindatetime);
-    assertEquals("{mindatetime []}", expression.toString());
-  }
-
-  @Test
-  public void oneParameterMethods() {
-    Expression expression = parseMethod(TokenKind.Length, TokenKind.PrimitiveStringValue);
-    assertEquals("{length [String1]}", expression.toString());
-
-    expression = parseMethod(TokenKind.Tolower, TokenKind.PrimitiveStringValue);
-    assertEquals("{tolower [String1]}", expression.toString());
-
-    expression = parseMethod(TokenKind.Toupper, TokenKind.PrimitiveStringValue);
-    assertEquals("{toupper [String1]}", expression.toString());
-
-    expression = parseMethod(TokenKind.Trim, TokenKind.PrimitiveStringValue);
-    assertEquals("{trim [String1]}", expression.toString());
-
-    expression = parseMethod(TokenKind.Year, TokenKind.PrimitiveDateValue);
-    assertEquals("{year [Date1]}", expression.toString());
-
-    expression = parseMethod(TokenKind.Month, TokenKind.PrimitiveDateValue);
-    assertEquals("{month [Date1]}", expression.toString());
-
-    expression = parseMethod(TokenKind.Day, TokenKind.PrimitiveDateValue);
-    assertEquals("{day [Date1]}", expression.toString());
-
-    expression = parseMethod(TokenKind.Hour, TokenKind.PrimitiveDateTimeOffsetValue);
-    assertEquals("{hour [DateTimeOffset1]}", expression.toString());
-
-    expression = parseMethod(TokenKind.Minute, TokenKind.PrimitiveDateTimeOffsetValue);
-    assertEquals("{minute [DateTimeOffset1]}", expression.toString());
-
-    expression = parseMethod(TokenKind.Second, TokenKind.PrimitiveDateTimeOffsetValue);
-    assertEquals("{second [DateTimeOffset1]}", expression.toString());
-  }
-
-  @Test
-  public void twoParameterMethods() {
-
-  }
-
-  private Expression parseMethod(TokenKind... kind) {
-    ArrayList<Token> tokens = new ArrayList<Token>();
-    tokens.add(new Token(kind[0], ""));
-
-    for (int i = 1; i < kind.length; i++) {
-      String text = null;
-      switch (kind[i]) {
-      case PrimitiveStringValue:
-        text = "String" + i;
-        break;
-      case PrimitiveDateValue:
-        text = "Date" + i;
-        break;
-      case PrimitiveDateTimeOffsetValue:
-        text = "DateTimeOffset" + i;
-        break;
-      default:
-        text = "" + i;
-        break;
-      }
-      tokens.add(new Token(kind[i], text));
-    }
-
-    tokens.add(new Token(TokenKind.CLOSE, ""));
-    Tokenizer tokenizer = new Tokenizer(tokens);
-    Expression expression = new FilterParser().parse(tokenizer);
-    assertNotNull(expression);
-    return expression;
-  }
-
-  private Expression parseExpression(TokenKind operator) {
-    ArrayList<Token> tokens = new ArrayList<Token>();
-    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
-    tokens.add(new Token(operator, ""));
-    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
-    Tokenizer tokenizer = new Tokenizer(tokens);
-
-    Expression expression = new FilterParser().parse(tokenizer);
-    assertNotNull(expression);
-    return expression;
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/ExpressionParserTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/ExpressionParserTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/ExpressionParserTest.java
new file mode 100644
index 0000000..7da823e
--- /dev/null
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/ExpressionParserTest.java
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.server.core.uri.parser;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.ArrayList;
+
+import org.apache.olingo.server.api.uri.queryoption.expression.Expression;
+import org.apache.olingo.server.core.uri.parser.ExpressionParser.Token;
+import org.apache.olingo.server.core.uri.parser.ExpressionParser.TokenKind;
+import org.apache.olingo.server.core.uri.parser.ExpressionParser.Tokenizer;
+import org.junit.Test;
+
+public class ExpressionParserTest {
+
+  @Test
+  public void equality() throws Exception {
+    Expression expression = parseExpression(TokenKind.EQ_OP);
+    assertEquals("{5 EQ 5}", expression.toString());
+
+    expression = parseExpression(TokenKind.NE_OP);
+    assertEquals("{5 NE 5}", expression.toString());
+  }
+
+  @Test
+  public void relational() throws Exception {
+    Expression expression = parseExpression(TokenKind.GT_OP);
+    assertEquals("{5 GT 5}", expression.toString());
+
+    expression = parseExpression(TokenKind.GE_OP);
+    assertEquals("{5 GE 5}", expression.toString());
+
+    expression = parseExpression(TokenKind.LT_OP);
+    assertEquals("{5 LT 5}", expression.toString());
+
+    expression = parseExpression(TokenKind.LE_OP);
+    assertEquals("{5 LE 5}", expression.toString());
+  }
+
+  @Test
+  public void additive() throws Exception {
+    Expression expression = parseExpression(TokenKind.ADD_OP);
+    assertEquals("{5 ADD 5}", expression.toString());
+
+    expression = parseExpression(TokenKind.SUB_OP);
+    assertEquals("{5 SUB 5}", expression.toString());
+  }
+
+  @Test
+  public void multiplicative() throws Exception {
+    Expression expression = parseExpression(TokenKind.MUL_OP);
+    assertEquals("{5 MUL 5}", expression.toString());
+
+    expression = parseExpression(TokenKind.DIV_OP);
+    assertEquals("{5 DIV 5}", expression.toString());
+
+    expression = parseExpression(TokenKind.MOD_OP);
+    assertEquals("{5 MOD 5}", expression.toString());
+  }
+
+  @Test
+  public void unary() throws Exception {
+    ArrayList<Token> tokens = new ArrayList<Token>();
+    tokens.add(new Token(TokenKind.MINUS, ""));
+    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
+    Tokenizer tokenizer = new Tokenizer(tokens);
+    Expression expression = new ExpressionParser().parse(tokenizer);
+    assertEquals("{- 5}", expression.toString());
+
+    tokens = new ArrayList<Token>();
+    tokens.add(new Token(TokenKind.NOT, ""));
+    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
+    tokenizer = new Tokenizer(tokens);
+    expression = new ExpressionParser().parse(tokenizer);
+    assertEquals("{not 5}", expression.toString());
+  }
+
+  @Test
+  public void grouping() throws Exception {
+    ArrayList<Token> tokens = new ArrayList<Token>();
+    tokens.add(new Token(TokenKind.MINUS, ""));
+    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
+    tokens.add(new Token(TokenKind.ADD_OP, ""));
+    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
+    Tokenizer tokenizer = new Tokenizer(tokens);
+    Expression expression = new ExpressionParser().parse(tokenizer);
+    assertEquals("{{- 5} ADD 5}", expression.toString());
+
+    tokens = new ArrayList<Token>();
+    tokens.add(new Token(TokenKind.MINUS, ""));
+    tokens.add(new Token(TokenKind.OPEN, ""));
+    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
+    tokens.add(new Token(TokenKind.ADD_OP, ""));
+    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
+    tokens.add(new Token(TokenKind.CLOSE, ""));
+    tokenizer = new Tokenizer(tokens);
+    expression = new ExpressionParser().parse(tokenizer);
+    assertEquals("{- {5 ADD 5}}", expression.toString());
+  }
+
+  @Test
+  public void noParameterMethods() throws Exception {
+    Expression expression = parseMethod(TokenKind.Now);
+    assertEquals("{now []}", expression.toString());
+
+    expression = parseMethod(TokenKind.Maxdatetime);
+    assertEquals("{maxdatetime []}", expression.toString());
+
+    expression = parseMethod(TokenKind.Mindatetime);
+    assertEquals("{mindatetime []}", expression.toString());
+  }
+
+  @Test
+  public void oneParameterMethods() throws Exception {
+    Expression expression = parseMethod(TokenKind.Length, TokenKind.PrimitiveStringValue);
+    assertEquals("{length [String1]}", expression.toString());
+
+    expression = parseMethod(TokenKind.Tolower, TokenKind.PrimitiveStringValue);
+    assertEquals("{tolower [String1]}", expression.toString());
+
+    expression = parseMethod(TokenKind.Toupper, TokenKind.PrimitiveStringValue);
+    assertEquals("{toupper [String1]}", expression.toString());
+
+    expression = parseMethod(TokenKind.Trim, TokenKind.PrimitiveStringValue);
+    assertEquals("{trim [String1]}", expression.toString());
+
+    expression = parseMethod(TokenKind.Year, TokenKind.PrimitiveDateValue);
+    assertEquals("{year [Date1]}", expression.toString());
+
+    expression = parseMethod(TokenKind.Month, TokenKind.PrimitiveDateValue);
+    assertEquals("{month [Date1]}", expression.toString());
+
+    expression = parseMethod(TokenKind.Day, TokenKind.PrimitiveDateValue);
+    assertEquals("{day [Date1]}", expression.toString());
+
+    expression = parseMethod(TokenKind.Hour, TokenKind.PrimitiveDateTimeOffsetValue);
+    assertEquals("{hour [DateTimeOffset1]}", expression.toString());
+
+    expression = parseMethod(TokenKind.Minute, TokenKind.PrimitiveDateTimeOffsetValue);
+    assertEquals("{minute [DateTimeOffset1]}", expression.toString());
+
+    expression = parseMethod(TokenKind.Second, TokenKind.PrimitiveDateTimeOffsetValue);
+    assertEquals("{second [DateTimeOffset1]}", expression.toString());
+  }
+
+  @Test
+  public void twoParameterMethods() {
+
+  }
+
+  private Expression parseMethod(TokenKind... kind) throws UriParserException {
+    ArrayList<Token> tokens = new ArrayList<Token>();
+    tokens.add(new Token(kind[0], ""));
+
+    for (int i = 1; i < kind.length; i++) {
+      String text = null;
+      switch (kind[i]) {
+      case PrimitiveStringValue:
+        text = "String" + i;
+        break;
+      case PrimitiveDateValue:
+        text = "Date" + i;
+        break;
+      case PrimitiveDateTimeOffsetValue:
+        text = "DateTimeOffset" + i;
+        break;
+      default:
+        text = "" + i;
+        break;
+      }
+      tokens.add(new Token(kind[i], text));
+    }
+
+    tokens.add(new Token(TokenKind.CLOSE, ""));
+    Tokenizer tokenizer = new Tokenizer(tokens);
+    Expression expression = new ExpressionParser().parse(tokenizer);
+    assertNotNull(expression);
+    return expression;
+  }
+
+  private Expression parseExpression(TokenKind operator) throws UriParserException {
+    ArrayList<Token> tokens = new ArrayList<Token>();
+    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
+    tokens.add(new Token(operator, ""));
+    tokens.add(new Token(TokenKind.PrimitiveIntegerValue, "5"));
+    Tokenizer tokenizer = new Tokenizer(tokens);
+
+    Expression expression = new ExpressionParser().parse(tokenizer);
+    assertNotNull(expression);
+    return expression;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
index a5d0ea3..a945d11 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
@@ -43,7 +43,7 @@ import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.edmx.EdmxReference;
 import org.apache.olingo.server.api.uri.UriParameter;
 import org.apache.olingo.server.api.uri.UriResourceKind;
-import org.apache.olingo.server.core.uri.queryoption.expression.ExpressionImpl;
+import org.apache.olingo.server.api.uri.queryoption.expression.Expression;
 import org.apache.olingo.server.core.uri.queryoption.expression.LiteralImpl;
 import org.apache.olingo.server.tecsvc.provider.ActionProvider;
 import org.apache.olingo.server.tecsvc.provider.ComplexTypeProvider;
@@ -59,7 +59,7 @@ public class UriResourceImplTest {
   @Test
   public void testUriParameterImpl() {
     UriParameterImpl impl = new UriParameterImpl();
-    ExpressionImpl expression = new LiteralImpl().setText("Expression");
+    Expression expression = new LiteralImpl("Expression", null);
 
     impl.setText("Text");
     impl.setName("A");
@@ -105,7 +105,7 @@ public class UriResourceImplTest {
     UriResourceLambdaAllImpl impl = new UriResourceLambdaAllImpl();
     assertEquals(UriResourceKind.lambdaAll, impl.getKind());
 
-    ExpressionImpl expression = new LiteralImpl().setText("Expression");
+    Expression expression = new LiteralImpl("Expression", null);
     impl.setExpression(expression);
     impl.setLamdaVariable("A");
 
@@ -121,7 +121,7 @@ public class UriResourceImplTest {
     UriResourceLambdaAnyImpl impl = new UriResourceLambdaAnyImpl();
     assertEquals(UriResourceKind.lambdaAny, impl.getKind());
 
-    ExpressionImpl expression = new LiteralImpl().setText("Expression");
+    Expression expression = new LiteralImpl("Expression", null);
     impl.setExpression(expression);
     impl.setLamdaVariable("A");
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/queryoption/QueryOptionTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/queryoption/QueryOptionTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/queryoption/QueryOptionTest.java
index 93cdf86..db9f5be 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/queryoption/QueryOptionTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/queryoption/QueryOptionTest.java
@@ -44,7 +44,7 @@ public class QueryOptionTest {
   public void testAliasQueryOption() {
     AliasQueryOptionImpl option = new AliasQueryOptionImpl();
 
-    Expression expression = new LiteralImpl();
+    Expression expression = new LiteralImpl(null, null);
 
     option.setAliasValue(expression);
     assertEquals(expression, option.getValue());
@@ -132,7 +132,7 @@ public class QueryOptionTest {
     FilterOptionImpl option = new FilterOptionImpl();
     assertEquals(SystemQueryOptionKind.FILTER, option.getKind());
 
-    AliasImpl expression = new AliasImpl();
+    AliasImpl expression = new AliasImpl(null);
 
     option.setExpression(expression);
     assertEquals(expression, option.getExpression());
@@ -184,7 +184,7 @@ public class QueryOptionTest {
   public void testOrderByItemImpl() {
     OrderByItemImpl option = new OrderByItemImpl();
 
-    AliasImpl expression = new AliasImpl();
+    AliasImpl expression = new AliasImpl(null);
     option.setExpression(expression);
     assertEquals(expression, option.getExpression());
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/208f26c7/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/queryoption/expression/ExpressionTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/queryoption/expression/ExpressionTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/queryoption/expression/ExpressionTest.java
index e8a9b38..ec5ce6e 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/queryoption/expression/ExpressionTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/queryoption/expression/ExpressionTest.java
@@ -37,6 +37,7 @@ import org.apache.olingo.server.api.edmx.EdmxReference;
 import org.apache.olingo.server.api.uri.UriInfoKind;
 import org.apache.olingo.server.api.uri.UriInfoResource;
 import org.apache.olingo.server.api.uri.queryoption.expression.BinaryOperatorKind;
+import org.apache.olingo.server.api.uri.queryoption.expression.Expression;
 import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitException;
 import org.apache.olingo.server.api.uri.queryoption.expression.MethodKind;
 import org.apache.olingo.server.api.uri.queryoption.expression.UnaryOperatorKind;
@@ -56,7 +57,7 @@ public class ExpressionTest {
       new EdmTechProvider(), Collections.<EdmxReference> emptyList()).getEdm();
 
   @Test
-  public void testSupportedOperators() {
+  public void supportedOperators() {
     assertEquals(UnaryOperatorKind.MINUS, UnaryOperatorKind.get("-"));
     assertEquals(null, UnaryOperatorKind.get("XXX"));
 
@@ -68,28 +69,21 @@ public class ExpressionTest {
   }
 
   @Test
-  public void testAliasExpression() throws ExpressionVisitException, ODataApplicationException {
-    AliasImpl expression = new AliasImpl();
-
-    expression.setParameter("Test");
+  public void aliasExpression() throws ExpressionVisitException, ODataApplicationException {
+    AliasImpl expression = new AliasImpl("Test");
 
     assertEquals("Test", expression.getParameterName());
 
     String output = expression.accept(new FilterTreeToText());
     assertEquals("<Test>", output);
-
   }
 
   @Test
-  public void testBinaryExpression() throws ExpressionVisitException, ODataApplicationException {
-    BinaryImpl expression = new BinaryImpl();
-
-    ExpressionImpl expressionLeft = new LiteralImpl().setText("A");
-    ExpressionImpl expressionRight = new LiteralImpl().setText("B");
+  public void binaryExpression() throws ExpressionVisitException, ODataApplicationException {
+    Expression expressionLeft = new LiteralImpl("A", null);
+    Expression expressionRight = new LiteralImpl("B", null);
 
-    expression.setLeftOperand(expressionLeft);
-    expression.setRightOperand(expressionRight);
-    expression.setOperator(BinaryOperatorKind.SUB);
+    BinaryImpl expression = new BinaryImpl(expressionLeft, BinaryOperatorKind.SUB, expressionRight);
 
     assertEquals(expressionLeft, expression.getLeftOperand());
     assertEquals(expressionRight, expression.getRightOperand());
@@ -100,50 +94,39 @@ public class ExpressionTest {
   }
 
   @Test
-  public void testEnumerationExpression() throws ExpressionVisitException, ODataApplicationException {
-    EnumerationImpl expression = new EnumerationImpl();
+  public void enumerationExpression() throws ExpressionVisitException, ODataApplicationException {
     EdmEnumType type = edm.getEnumType(EnumTypeProvider.nameENString);
     assertNotNull(type);
-    expression.setType(type);
-
+    EnumerationImpl expression = new EnumerationImpl(type, Arrays.asList("A", "B"));
     assertEquals(type, expression.getType());
-
-    expression.addValue("A");
-    expression.addValue("B");
     assertEquals("A", expression.getValues().get(0));
     assertEquals("B", expression.getValues().get(1));
     assertEquals("<olingo.odata.test1.ENString<A,B>>", expression.accept(new FilterTreeToText()));
   }
 
   @Test
-  public void testLambdaRefExpression() throws ExpressionVisitException, ODataApplicationException {
-    LambdaRefImpl expression = new LambdaRefImpl();
-    expression.setVariableText("A");
+  public void lambdaRefExpression() throws ExpressionVisitException, ODataApplicationException {
+    LambdaRefImpl expression = new LambdaRefImpl("A");
     assertEquals("A", expression.getVariableName());
-
     assertEquals("<A>", expression.accept(new FilterTreeToText()));
-
   }
 
   @Test
-  public void testLiteralExpresion() throws ExpressionVisitException, ODataApplicationException {
-    LiteralImpl expression = new LiteralImpl();
-    expression.setText("A");
+  public void literalExpression() throws ExpressionVisitException, ODataApplicationException {
+    LiteralImpl expression = new LiteralImpl("A", null);
     assertEquals("A", expression.getText());
-
     assertEquals("<A>", expression.accept(new FilterTreeToText()));
   }
 
   @Test
-  public void testMemberExpression() throws ExpressionVisitException, ODataApplicationException {
-    MemberImpl expression = new MemberImpl();
+  public void memberExpression() throws ExpressionVisitException, ODataApplicationException {
     EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETKeyNav);
 
     // UriResourceImpl
     EdmAction action = edm.getUnboundAction(ActionProvider.nameUARTString);
     UriInfoResource uriInfo = new UriInfoImpl().setKind(UriInfoKind.resource).addResourcePart(
         new UriResourceActionImpl().setAction(action)).asUriInfoResource();
-    expression.setResourcePath(uriInfo);
+    MemberImpl expression = new MemberImpl(uriInfo, null);
     assertEquals(action.getReturnType().getType(), expression.getType());
 
     // check accept and path
@@ -155,45 +138,50 @@ public class ExpressionTest {
 
     // UriResourceImplTyped check collection = true case
     action = edm.getUnboundAction(ActionProvider.nameUARTCollStringTwoParam);
-    expression.setResourcePath(new UriInfoImpl().setKind(UriInfoKind.resource)
+    expression = new MemberImpl(new UriInfoImpl().setKind(UriInfoKind.resource)
         .addResourcePart(new UriResourceActionImpl().setAction(action))
-        .asUriInfoResource());
+        .asUriInfoResource(),
+        null);
     assertTrue(expression.isCollection());
 
     // UriResourceImplTyped with filter
     EdmFunction function = edm.getUnboundFunction(FunctionProvider.nameUFCRTETKeyNav, null);
-    expression.setResourcePath(new UriInfoImpl().setKind(UriInfoKind.resource).addResourcePart(
+    expression = new MemberImpl(new UriInfoImpl().setKind(UriInfoKind.resource).addResourcePart(
         new UriResourceFunctionImpl().setFunction(function).setEntryTypeFilter(entityType))
-        .asUriInfoResource());
+        .asUriInfoResource(),
+        null);
     assertEquals(entityType, expression.getType());
 
     // UriResourceImplKeyPred
     function = edm.getUnboundFunction(FunctionProvider.nameUFCRTETKeyNav, null);
-    expression.setResourcePath(new UriInfoImpl().setKind(UriInfoKind.resource).addResourcePart(
+    expression = new MemberImpl(new UriInfoImpl().setKind(UriInfoKind.resource).addResourcePart(
         new UriResourceFunctionImpl().setFunction(function))
-        .asUriInfoResource());
+        .asUriInfoResource(),
+        null);
     assertEquals(function.getReturnType().getType(), expression.getType());
 
     // UriResourceImplKeyPred typeFilter on entry
     EdmEntityType entityBaseType = edm.getEntityType(EntityTypeProvider.nameETBaseTwoKeyNav);
     function = edm.getUnboundFunction(FunctionProvider.nameUFCRTCollETTwoKeyNavParam, Arrays.asList("ParameterInt16"));
-    expression.setResourcePath(new UriInfoImpl().setKind(UriInfoKind.resource).addResourcePart(
+    expression = new MemberImpl(new UriInfoImpl().setKind(UriInfoKind.resource).addResourcePart(
         new UriResourceFunctionImpl().setFunction(function).setEntryTypeFilter(entityBaseType))
-        .asUriInfoResource());
+        .asUriInfoResource(),
+        null);
     assertEquals(entityBaseType, expression.getType());
 
     // UriResourceImplKeyPred typeFilter on entry
     entityBaseType = edm.getEntityType(EntityTypeProvider.nameETBaseTwoKeyNav);
     function = edm.getUnboundFunction(FunctionProvider.nameUFCRTCollETTwoKeyNavParam, Arrays.asList("ParameterInt16"));
-    expression.setResourcePath(new UriInfoImpl().setKind(UriInfoKind.resource).addResourcePart(
+    expression = new MemberImpl(new UriInfoImpl().setKind(UriInfoKind.resource).addResourcePart(
         new UriResourceFunctionImpl().setFunction(function).setCollectionTypeFilter(entityBaseType))
-        .asUriInfoResource());
+        .asUriInfoResource(),
+        null);
     assertEquals(entityBaseType, expression.getType());
 
     // no typed
     entityBaseType = edm.getEntityType(EntityTypeProvider.nameETBaseTwoKeyNav);
     function = edm.getUnboundFunction(FunctionProvider.nameUFCRTCollETTwoKeyNavParam, Arrays.asList("ParameterInt16"));
-    expression.setResourcePath(new UriInfoImpl().setKind(UriInfoKind.all));
+    expression = new MemberImpl(new UriInfoImpl().setKind(UriInfoKind.all), null);
     assertEquals(null, expression.getType());
 
     // no typed collection else case
@@ -201,14 +189,10 @@ public class ExpressionTest {
   }
 
   @Test
-  public void testMethodCallExpression() throws ExpressionVisitException, ODataApplicationException {
-    MethodImpl expression = new MethodImpl();
-    expression.setMethod(MethodKind.CONCAT);
-
-    ExpressionImpl p0 = new LiteralImpl().setText("A");
-    ExpressionImpl p1 = new LiteralImpl().setText("B");
-    expression.addParameter(p0);
-    expression.addParameter(p1);
+  public void methodCallExpression() throws ExpressionVisitException, ODataApplicationException {
+    Expression p0 = new LiteralImpl("A", null);
+    Expression p1 = new LiteralImpl("B", null);
+    MethodImpl expression = new MethodImpl(MethodKind.CONCAT, Arrays.asList(p0, p1));
 
     assertEquals(MethodKind.CONCAT, expression.getMethod());
     assertEquals("<concat(<A>,<B>)>", expression.accept(new FilterTreeToText()));
@@ -218,27 +202,22 @@ public class ExpressionTest {
   }
 
   @Test
-  public void testTypeLiteralExpression() throws ExpressionVisitException, ODataApplicationException {
-    TypeLiteralImpl expression = new TypeLiteralImpl();
+  public void typeLiteralExpression() throws ExpressionVisitException, ODataApplicationException {
     EdmEntityType entityBaseType = edm.getEntityType(EntityTypeProvider.nameETBaseTwoKeyNav);
-    expression.setType(entityBaseType);
+    TypeLiteralImpl expression = new TypeLiteralImpl(entityBaseType);
 
     assertEquals(entityBaseType, expression.getType());
     assertEquals("<olingo.odata.test1.ETBaseTwoKeyNav>", expression.accept(new FilterTreeToText()));
   }
 
   @Test
-  public void testUnaryExpression() throws ExpressionVisitException, ODataApplicationException {
-    UnaryImpl expression = new UnaryImpl();
-    expression.setOperator(UnaryOperatorKind.MINUS);
-
-    ExpressionImpl operand = new LiteralImpl().setText("A");
-    expression.setOperand(operand);
+  public void unaryExpression() throws ExpressionVisitException, ODataApplicationException {
+    Expression operand = new LiteralImpl("A", null);
+    UnaryImpl expression = new UnaryImpl(UnaryOperatorKind.MINUS, operand);
 
     assertEquals(UnaryOperatorKind.MINUS, expression.getOperator());
     assertEquals(operand, expression.getOperand());
 
     assertEquals("<- <A>>", expression.accept(new FilterTreeToText()));
   }
-
 }