Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/LongLiteralExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/LongLiteralExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/LongLiteralExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/LongLiteralExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,92 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.tree.LongLiteralExpression; +import org.apache.jdo.jdoql.tree.NodeVisitor; + + +/** + * This node represents a long literal. It does not have any children. + * + * @author Michael Watzek + */ +public final class LongLiteralExpr + extends ConstantExpr implements LongLiteralExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public LongLiteralExpr() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public LongLiteralExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param l the long value + */ + LongLiteralExpr(Long l) + { super( JDOQLTokenTypes.LONG_LITERAL, l.toString(), l ); //NOI18N + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param l the long value + */ + LongLiteralExpr(long l) + { this( new Long(l) ); + } + + /** + * Returns the long value represented by this expression. + * @return the long value + */ + public long getLong() + { return ((Long)this.value).longValue(); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } +}
Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/MethodCallExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/MethodCallExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/MethodCallExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/MethodCallExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,114 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.jdoql.tree.Expression; +import org.apache.jdo.jdoql.tree.MethodCallExpression; +import org.apache.jdo.jdoql.tree.Node; + +/** + * This node represents a method call expression. + * Examples of method call expressions are + * <code>ContainsCallExpression</code>, <code>IsEmptyCallExpression</code>, + * <code>EndsWithCallExpression</code> and + * <code>StartsWithCallExpression</code>. + * + * @author Michael Watzek + */ +public abstract class MethodCallExpr extends Expr implements MethodCallExpression +{ + Expression[] args; + + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public MethodCallExpr() + {} + + /** + * This constructor is called by specialized nodes. + * It calls <code>setChildren</code> in order to initialize the node's + * child <code>expr</code>. + * @param tokenType the token tpye + * @param tokenName the name of this node + * @param clazz the Java type of this node + * @param target the target expression of this method call + * @param args the arguments of this method call + */ + MethodCallExpr(int tokenType, String tokenName, Class clazz, Expression target, Expression[] args) + { super( tokenType, tokenName, clazz ); + this.args = args; + int nrOfChildren = 1; + if( args!=null ) + nrOfChildren += args.length; + Node[] children = new Node[nrOfChildren]; + children[0] = target; + if( args!=null ) + System.arraycopy( args, 0, children, 1, args.length ); + setChildren( children ); + } + + /** + * Creates and returns a copy of this object. + * @return the copy + * @exception CloneNotSupportedException thrown by <code>super.clone()</code> + */ + protected Object clone() throws CloneNotSupportedException + { MethodCallExpr copy = (MethodCallExpr) super.clone(); + copy.args = null; + return copy; + } + + /** + * Returns the target expression of this method call. + * The target expression can be an instance of + * <code>ThisExpression</code> or an instance of an arbitrary other + * <code>Expression</code>, e.g. <code>FieldAccessExpression</code>. + * @return the target expression + */ + public Expression getTarget() + { ASTToChildren(); + if( this.children==null || + this.children.length<1 ) + return null; + return (Expression) this.children[0]; + } + + /** + * Returns the method name. + * @return the method name + */ + public String getMethodName() + { return getText(); + } + + /** + * Returns the argument array of this method call. + * @return the argument array + */ + public Expression[] getArguments() + { ASTToChildren(); + if( args==null && + this.children.length>1 ) + { this.args = new Expression[this.children.length-1]; + System.arraycopy( this.children, 1, this.args, 0, this.args.length ); + } + return args; + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/MinusExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/MinusExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/MinusExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/MinusExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,94 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.tree.Expression; +import org.apache.jdo.jdoql.tree.MinusExpression; +import org.apache.jdo.jdoql.tree.NodeVisitor; + + +/** + * This node represents a binary minus operator. + * The string representation of this operator is <code>-</code>. + * + * @author Michael Watzek + */ +public final class MinusExpr extends BinaryExpr implements MinusExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public MinusExpr() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public MinusExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param left the first child + * @param right the second child + */ + MinusExpr(Expression left, Expression right) + { super( JDOQLTokenTypes.MINUS, "Minus", null, left, right ); //NOI18N + this.clazz = this.commonOperandType; + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param resultOfPreviousChild the result computed by leaving the + * previous child node + * @param indexOfNextChild the index in the children array of the + * next child to walk + * @return the boolean value returned by the visitor instance + */ + public boolean walkNextChild(NodeVisitor visitor, + Object resultOfPreviousChild, + int indexOfNextChild) + { return visitor.walkNextChild( this, resultOfPreviousChild, + indexOfNextChild ); + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NodeImpl.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NodeImpl.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NodeImpl.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NodeImpl.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,259 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import java.io.*; +import java.util.HashMap; +import java.security.AccessController; +import java.security.PrivilegedAction; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLAST; +import org.apache.jdo.impl.model.java.runtime.RuntimeJavaModelFactory; +import org.apache.jdo.jdoql.JDOQueryException; +import org.apache.jdo.jdoql.tree.Node; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.util.I18NHelper; + +import antlr.collections.AST; + + +/** + * This is the base class of all nodes. Examples of nodes are + * <CandidateClass</code>, <code>Declaration</code>, <code>Expression</code> + * and <code>OrderingExpression<code>. This class is not defined + * <code>abstract</code> to allow the syntactical analysis to + * construct general nodes, which are replaced by the semantic analysis + * with their specialized counterparts. + * + * @author Michael Watzek + */ +public class NodeImpl extends JDOQLAST implements Node +{ + /** I18N support */ + final static I18NHelper msg = I18NHelper.getInstance( + "org.apache.jdo.impl.jdoql.Bundle", NodeImpl.class.getClassLoader()); //NOI18N + + /** RuntimeJavaModelFactory. */ + private static final RuntimeJavaModelFactory javaModelFactory = + (RuntimeJavaModelFactory) AccessController.doPrivileged( + new PrivilegedAction () { + public Object run () { + return RuntimeJavaModelFactory.getInstance(); + } + } + ); + + Node parent = null; + Node[] children = null; + Object object = null; + transient Class clazz = null; + + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public NodeImpl() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public NodeImpl(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by specialized nodes. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + * @param tokenType the token tpye + * @param tokenName the name of this node + * @param clazz the Java type of this node + */ + NodeImpl(int tokenType, String tokenName, Class clazz) + { initialize( tokenType, tokenName ); + this.clazz = clazz; + } + + /** + * Creates and returns a copy of this object nullifying fields + * <code>parent</code>, <code>children</code> and <code>clazz</code>. + * @return the copy + * @exception CloneNotSupportedException thrown by <code>super.clone()</code> + */ + protected Object clone() throws CloneNotSupportedException + { NodeImpl copy = (NodeImpl) super.clone(); + copy.parent = null; + copy.children = null; + return copy; + } + + public String toString() + { if( getTypeInfo()==null ) + return getText(); + else + return super.toString(); + } + + + /** + * Returns the Java type of this node. + * @return the Java type + */ + public Class getJavaClass() + { if( this.clazz==null && + getTypeInfo()!=null ) + this.clazz = javaModelFactory.getJavaClass(getTypeInfo()); + return this.clazz; + } + + /** + * Returns the token type of this node. + * @return the token type + */ + public int getTokenType() + { return getType(); + } + + /** + * Returns the user object. + * @return the ouser object + */ + public Object getObject() + { return this.object; + } + + /** + * Sets the user object. + * @param object the user object + */ + public void setObject(Object object) + { this.object = object; + } + + /** + * Returns this node's parent node. + * @return the parent node + */ + public Node getParent() + { return this.parent; + } + + /** + * Sets the parent of this node. + * @param parent the parent node + */ + public void setParent(Node parent) + { this.parent = parent; + } + + /** + * Returns this node's children. + * Ensures that this node's children corresponds with the underlying + * ANTLR tree structure. + * @return the children + */ + public Node[] getChildren() + { ASTToChildren(); + return this.children; + } + + /** + * Implements a noop as a default implementation. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + {} + + /** + * Returns <code>null</code> as a default implementation. + * @param visitor the node visitor + * @param results the result array containing result instances of + * this node's children + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return null; + } + + /** + * Returns <code>true</code> as a default implementation. + * @param visitor the node visitor + * @param resultOfPreviousChild the result computed by leaving the + * previous child node + * @param indexOfNextChild the index in the children array of the + * next child to walk + * @return <code>true</code> + */ + public boolean walkNextChild(NodeVisitor visitor, + Object resultOfPreviousChild, + int indexOfNextChild) + { return true; + } + + /** + * Sets the children of this node specified by the argument + * <code>children</code>. + * It is called in constructors of specialized nodes. These + * constructors are called by factory methods + * when you build the tree yourself. + * @param children the child nodes + * @exception JDOQueryException if an instance in the children + * array is <code>null</code> or already has a parent node + */ + void setChildren(Node[] children) + { if( children!=null ) + { setFirstChild( null ); + for( int i=0; i<children.length; i++ ) + { Node current = children[i]; + if( current==null ) + throw new JDOQueryException( + msg.msg("EXC_CannotProcessNullNodes", this) ); //NOI18N + if( current.getParent()!=null ) + throw new JDOQueryException( + msg.msg("EXC_CannotReuseNodes", current, + current.getParent()) ); //NOI18N + current.setParent( this ); + if( current instanceof AST ) + addChild( (AST) current ); + } } + this.children = children; + this.parent = null; + } + + /** + * This method initializes the children of this node + * based on underlying ANTLR tree structure. + * It is called in method <code>getChildren</code> of this class. + */ + void ASTToChildren() + { if( this.children==null ) + { int nrOfChildren; + AST current = getFirstChild(); + for( nrOfChildren=0; current!=null; nrOfChildren++ ) + current = current.getNextSibling(); + if( nrOfChildren!=0 ) + { this.children = new Node[nrOfChildren]; + current = getFirstChild(); + for( nrOfChildren=0; current!=null; nrOfChildren++ ) + { this.children[nrOfChildren] = (Node) current; + current = current.getNextSibling(); + } } } + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NotEqualsExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NotEqualsExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NotEqualsExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NotEqualsExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,96 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.tree.Expression; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.jdoql.tree.NotEqualsExpression; + + +/** + * This node represents a not equals operator. + * A not equals operator is a binary expression. + * The string representation of this operator is <code>!=</code>. + * + * @author Michael Watzek + */ +public final class NotEqualsExpr + extends BinaryExpr implements NotEqualsExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public NotEqualsExpr() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public NotEqualsExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param left the first child + * @param right the second child + */ + NotEqualsExpr(Expression left, Expression right) + { super( JDOQLTokenTypes.NOT_EQUAL, "NotEquals", Boolean.class, left, + right ); //NOI18N + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param resultOfPreviousChild the result computed by leaving the + * previous child node + * @param indexOfNextChild the index in the children array of the + * next child to walk + * @return the boolean value returned by the visitor instance + */ + public boolean walkNextChild(NodeVisitor visitor, + Object resultOfPreviousChild, + int indexOfNextChild) + { return visitor.walkNextChild( this, resultOfPreviousChild, + indexOfNextChild ); + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NotExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NotExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NotExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/NotExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,77 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.tree.Expression; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.jdoql.tree.NotExpression; + + +/** + * This node represents a logical not operator. + * A logical not operator is a unary expression. + * The string representation of this operator is <code>!</code>. + * + * @author Michael Watzek + */ +public final class NotExpr extends UnaryExpr implements NotExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public NotExpr() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public NotExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param expr the expression to compute the complement for + */ + NotExpr(Expression expr) + { super( JDOQLTokenTypes.LNOT, "Not", expr ); //NOI18N + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/OrExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/OrExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/OrExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/OrExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,94 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.tree.Expression; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.jdoql.tree.OrExpression; + + +/** + * This node represents a logical or operator. + * A logical operator is based on boolean types. + * The string representation of this operator is <code>|</code>. + * + * @author Michael Watzek + */ +public final class OrExpr extends BinaryExpr implements OrExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public OrExpr() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public OrExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param left the first child + * @param right the second child + */ + OrExpr(Expression left, Expression right) + { super( JDOQLTokenTypes.BOR, "Or", Boolean.class, left, right ); //NOI18N + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param resultOfPreviousChild the result computed by leaving the + * previous child node + * @param indexOfNextChild the index in the children array of the + * next child to walk + * @return the boolean value returned by the visitor instance + */ + public boolean walkNextChild(NodeVisitor visitor, + Object resultOfPreviousChild, + int indexOfNextChild) + { return visitor.walkNextChild( this, resultOfPreviousChild, + indexOfNextChild ); + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/OrderingExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/OrderingExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/OrderingExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/OrderingExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,64 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.jdoql.tree.Expression; +import org.apache.jdo.jdoql.tree.Node; +import org.apache.jdo.jdoql.tree.OrderingExpression; + +/** + * This node represents an ordering expression. Examples of ordering expressions + * are <code>AscendingOrderingExpression</code> and + * <code>DescendingOrderingExpression</code>. + * + * @author Michael Watzek + */ +public abstract class OrderingExpr extends NodeImpl implements OrderingExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public OrderingExpr() + {} + + /** + * This constructor is called by specialized nodes. + * It calls <code>setChildren</code> in order to initialize the node's + * child <code>expr</code>. + * @param tokenType the token tpye + * @param tokenName the name of this node + * @param expr the expression defining the order + */ + OrderingExpr(int tokenType, String tokenName, Expression expr) + { super( tokenType, tokenName, expr.getJavaClass() ); + setChildren( new Node[] {expr} ); + } + + /** + * Returns the node's ordering expression. + * @return the node's expression + */ + public Expression getOrdering() + { ASTToChildren(); + if( this.children==null || + this.children.length<1 ) + return null; + return (Expression) this.children[0]; + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ParameterAccessExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ParameterAccessExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ParameterAccessExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ParameterAccessExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,81 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.tree.Declaration; +import org.apache.jdo.jdoql.tree.Expression; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.jdoql.tree.ParameterAccessExpression; + + +/** + * This node represents a parameter access expression. + * It does not have any children. + * + * @author Michael Watzek + */ +public final class ParameterAccessExpr + extends IdentifierExpr implements ParameterAccessExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public ParameterAccessExpr() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public ParameterAccessExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param clazz the Java type of this identifier + * @param name the name of this identifier + */ + ParameterAccessExpr(Class clazz, String name) + { super( JDOQLTokenTypes.PARAMETER_ACCESS, name, + Tree.toWrapperClass(clazz) ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } +} + Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ParameterDecl.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ParameterDecl.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ParameterDecl.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ParameterDecl.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,77 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.jdoql.tree.ParameterDeclaration; +import org.apache.jdo.jdoql.tree.Type; + + +/** + * This node represents a parameter declaration. + * It does not have any children. + * + * @author Michael Watzek + */ +public final class ParameterDecl extends Decl implements ParameterDeclaration +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public ParameterDecl() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public ParameterDecl(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor delegates to the super class constructor. + * @param type the type instance wrapping the Java class + * @param name the name of the parameter + */ + ParameterDecl(Type type, String name) + { super( JDOQLTokenTypes.PARAMETER_DECL, "ParameterDeclaration", + type, name ); //NOI18N + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/PlusExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/PlusExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/PlusExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/PlusExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,94 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.tree.Expression; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.jdoql.tree.PlusExpression; + + +/** + * This node represents a binary plus operator. + * The string representation of this operator is <code>+</code>. + * + * @author Michael Watzek + */ +public final class PlusExpr extends BinaryExpr implements PlusExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public PlusExpr() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public PlusExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param left the first child + * @param right the second child + */ + PlusExpr(Expression left, Expression right) + { super( JDOQLTokenTypes.PLUS, "Plus", null, left, right ); //NOI18N + this.clazz = this.commonOperandType; + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param resultOfPreviousChild the result computed by leaving the + * previous child node + * @param indexOfNextChild the index in the children array of the + * next child to walk + * @return the boolean value returned by the visitor instance + */ + public boolean walkNextChild(NodeVisitor visitor, + Object resultOfPreviousChild, + int indexOfNextChild) + { return visitor.walkNextChild( this, resultOfPreviousChild, + indexOfNextChild ); + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ShortLiteralExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ShortLiteralExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ShortLiteralExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ShortLiteralExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,92 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.jdoql.tree.ShortLiteralExpression; + + +/** + * This node represents a short literal. It does not have any children. + * + * @author Michael Watzek + */ +public final class ShortLiteralExpr + extends ConstantExpr implements ShortLiteralExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public ShortLiteralExpr() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public ShortLiteralExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param s the short value + */ + ShortLiteralExpr(Short s) + { super( JDOQLTokenTypes.SHORT_LITERAL, s.toString(), s ); //NOI18N + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param s the short value + */ + ShortLiteralExpr(short s) + { this( new Short(s) ); + } + + /** + * Returns the short value represented by this expression. + * @return the short value + */ + public short getShort() + { return ((Short)this.value).shortValue(); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/StartsWithCallExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/StartsWithCallExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/StartsWithCallExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/StartsWithCallExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,119 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.JDOQueryException; +import org.apache.jdo.jdoql.tree.Expression; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.jdoql.tree.StartsWithCallExpression; + + + +/** + * This node represents the method call expression + * <code>String.startsWith</code>. Children of this node are a target + * expression (e.g. a <code>FieldAccessExpression</code>) and the method + * argument which is an arbitrary expression. + * + * @author Michael Watzek + */ +public final class StartsWithCallExpr + extends MethodCallExpr implements StartsWithCallExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public StartsWithCallExpr() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public StartsWithCallExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param target the target expression of this method call + * @param args the arguments of this method call + * @exception JDOQueryException if the result type of target is not a string or + * the length of args is not equal 1 + */ + StartsWithCallExpr(Expression target, Expression[] args) + { super( JDOQLTokenTypes.STARTS_WITH, "startsWith", Boolean.class, + target, args ); //NOI18N + if( target.getJavaClass()!=null && + !String.class.isAssignableFrom(target.getJavaClass()) ) + throw new JDOQueryException( + msg.msg("EXC_NoStringType", target, this) ); //NOI18N + if( args==null || + args.length!=1 ) + throw new JDOQueryException( + msg.msg("EXC_IllegalNumberOfParameters", this) ); //NOI18N + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param target the target expression of this method call + * @param arg the argument of this method call + */ + StartsWithCallExpr(Expression target, Expression arg) + { this( target, new Expression[] {arg} ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param resultOfPreviousChild the result computed by leaving the + * previous child node + * @param indexOfNextChild the index in the children array of the + * next child to walk + * @return the boolean value returned by the visitor instance + */ + public boolean walkNextChild(NodeVisitor visitor, + Object resultOfPreviousChild, + int indexOfNextChild) + { return visitor.walkNextChild( this, resultOfPreviousChild, + indexOfNextChild ); + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/StaticFieldAccessExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/StaticFieldAccessExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/StaticFieldAccessExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/StaticFieldAccessExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,166 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + + +import javax.jdo.PersistenceManager; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.impl.jdoql.jdoqlc.TypeSupport; +import org.apache.jdo.jdoql.tree.Node; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.jdoql.tree.StaticFieldAccessExpression; +import org.apache.jdo.model.java.JavaField; +import org.apache.jdo.model.java.JavaType; +import org.apache.jdo.pm.PersistenceManagerInternal; + +import java.lang.reflect.Field; +import java.security.AccessController; +import java.security.PrivilegedAction; + +/** + * This node represents a static field access expression. + * It inherits from <code>FieldAccessExpr</code>. + * Static Field access expressions have exactly one child, the target expression. + * That target expression is an identifier expression. + * + * @author Michael Watzek + */ +public final class StaticFieldAccessExpr + extends IdentifierExpr implements StaticFieldAccessExpression +{ + String fieldName; + transient JavaField javaField; + transient Field field; + + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public StaticFieldAccessExpr() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public StaticFieldAccessExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param type the type of the instance wrapping the Java clazz + * defining the static field + * @param fieldName the field name of this static field access expression + * @exception JDOQueryException if the field cannot be found in the + * the result type of target. + */ + StaticFieldAccessExpr(TypeImpl type, String fieldName) + { super( JDOQLTokenTypes.STATIC_FIELD_ACCESS, fieldName, null ); + setChildren( new Node[] {type} ); + this.fieldName = fieldName; + } + + /** + * Returns the name of the accessed field. + * Please note, that this name does not contain any information + * about the target object of this field access. + * @return the field name + */ + public String getName() + { return this.fieldName; + } + + /** + * Sets the name of the accessed field. + * Please note, that this name must not contain any information + * about the target object of this field access. + * This method is used by semantic analysis only. + * @param fieldName the field name + */ + public void setName(String fieldName) + { this.fieldName = fieldName; + } + + /** + * Returns the value of the field corresponding with this static + * field access expression. + * @param pm the persistence manager of the query + * @return the field value + * @exception JDOQueryException if access to the corresponding field of this + * expression is denied + */ + public Object getFieldValue(PersistenceManager pm) + { JavaField javaField = getFieldInfo(); + return TypeSupport.getFieldValue( getField(), null ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } + + /** + * Returns the model's field object assciated with this instance. + * If that field object is <code>null</code>, + * then it is computed by this method. + * @return the model's field object + * @exception JDOQueryException if the access to the desired field is denied + */ + JavaField getFieldInfo() + { if( this.javaField==null ) + { ASTToChildren(); + if( this.children==null || + this.children.length<1 ) + return null; + TypeImpl type = (TypeImpl) this.children[0]; + JavaType classType = (JavaType) type.getTypeInfo(); + if( classType!=null ) + this.javaField = classType.getJavaField( this.fieldName ); + } + return this.javaField; + } + + /** */ + private Field getField() + { if( this.field==null ) + this.field = (Field) AccessController.doPrivileged( + new PrivilegedAction() { + public Object run () { + return TypeSupport.getAccessibleField(getFieldInfo()); + }}); + return this.field; + } +} + Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ThisExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ThisExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ThisExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/ThisExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,76 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.jdoql.tree.ThisExpression; + + +/** + * This node represents an access to <code>this</code>. + * It does not have any children. + * + * @author Michael Watzek + */ +public final class ThisExpr extends IdentifierExpr implements ThisExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public ThisExpr() + { + } + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public ThisExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param clazz the Java type of this + */ + ThisExpr(Class clazz) + { super( JDOQLTokenTypes.THIS, "this", clazz ); //NOI18N + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/TimesExpr.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/TimesExpr.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/TimesExpr.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/tree/TimesExpr.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,95 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.jdo.impl.jdoql.tree; + +import org.apache.jdo.impl.jdoql.jdoqlc.JDOQLTokenTypes; +import org.apache.jdo.jdoql.tree.Expression; +import org.apache.jdo.jdoql.tree.NodeVisitor; +import org.apache.jdo.jdoql.tree.TimesExpression; + + +/** + * This node represents a times operator. + * A times operator is a binary expression. + * The string representation of this operator is <code>*</code>. + * + * @author Michael Watzek + */ +public final class TimesExpr extends BinaryExpr implements TimesExpression +{ + /** + * The noarg constructor is needed for ANTLR support and deserialization. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public TimesExpr() + {} + + /** + * The noarg constructor is needed for ANTLR support. + * The caller must make sure to set the ANTLR tree structure himself + * or, call <code>setChildren</code> optionally. + */ + public TimesExpr(antlr.Token token) + { initialize( token ); + } + + /** + * This constructor is called by the query tree instance. + * It delegates to the super class constructor. + * @param left the first child + * @param right the second child + */ + TimesExpr(Expression left, Expression right) + { super( JDOQLTokenTypes.STAR, "Times", null, left, right ); //NOI18N + this.clazz = this.commonOperandType; + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + */ + public void arrive(NodeVisitor visitor) + { visitor.arrive( this ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param results the result array + * @return the object returned by the visitor instance + */ + public Object leave(NodeVisitor visitor, Object[] results) + { return visitor.leave( this, results ); + } + + /** + * Delegates to the argument <code>visitor</code>. + * @param visitor the node visitor + * @param resultOfPreviousChild the result computed by leaving the + * previous child node + * @param indexOfNextChild the index in the children array of the + * next child to walk + * @return the boolean value returned by the visitor instance + */ + public boolean walkNextChild(NodeVisitor visitor, + Object resultOfPreviousChild, + int indexOfNextChild) + { return visitor.walkNextChild( this, resultOfPreviousChild, + indexOfNextChild ); + } +}