001: /*
002: $Id: PropertyNode.java 3419 2006-01-19 00:07:02Z blackdrag $
003:
004: Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
005:
006: Redistribution and use of this software and associated documentation
007: ("Software"), with or without modification, are permitted provided
008: that the following conditions are met:
009:
010: 1. Redistributions of source code must retain copyright
011: statements and notices. Redistributions must also contain a
012: copy of this document.
013:
014: 2. Redistributions in binary form must reproduce the
015: above copyright notice, this list of conditions and the
016: following disclaimer in the documentation and/or other
017: materials provided with the distribution.
018:
019: 3. The name "groovy" must not be used to endorse or promote
020: products derived from this Software without prior written
021: permission of The Codehaus. For written permission,
022: please contact info@codehaus.org.
023:
024: 4. Products derived from this Software may not be called "groovy"
025: nor may "groovy" appear in their names without prior written
026: permission of The Codehaus. "groovy" is a registered
027: trademark of The Codehaus.
028:
029: 5. Due credit should be given to The Codehaus -
030: http://groovy.codehaus.org/
031:
032: THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
033: ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
034: NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
035: FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
036: THE CODEHAUS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
037: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
038: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
039: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
040: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
041: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
042: ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
043: OF THE POSSIBILITY OF SUCH DAMAGE.
044:
045: */
046: package org.codehaus.groovy.ast;
047:
048: import org.codehaus.groovy.ast.expr.*;
049: import org.codehaus.groovy.ast.stmt.*;
050: import org.objectweb.asm.Opcodes;
051:
052: /**
053: * Represents a property (member variable, a getter and setter)
054: *
055: * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
056: * @version $Revision: 3419 $
057: */
058: public class PropertyNode extends AnnotatedNode implements Opcodes,
059: Variable {
060:
061: private FieldNode field;
062: private Statement getterBlock;
063: private Statement setterBlock;
064: private int modifiers;
065: private boolean closureShare = false;
066:
067: public PropertyNode(String name, int modifiers, ClassNode type,
068: ClassNode owner, Expression initialValueExpression,
069: Statement getterBlock, Statement setterBlock) {
070: this (new FieldNode(name, modifiers & ACC_STATIC, type, owner,
071: initialValueExpression), modifiers, getterBlock,
072: setterBlock);
073: }
074:
075: public PropertyNode(FieldNode field, int modifiers,
076: Statement getterBlock, Statement setterBlock) {
077: this .field = field;
078: this .modifiers = modifiers;
079: this .getterBlock = getterBlock;
080: this .setterBlock = setterBlock;
081: }
082:
083: public Statement getGetterBlock() {
084: return getterBlock;
085: }
086:
087: public Expression getInitialExpression() {
088: return field.getInitialExpression();
089: }
090:
091: public int getModifiers() {
092: return modifiers;
093: }
094:
095: public String getName() {
096: return field.getName();
097: }
098:
099: public Statement getSetterBlock() {
100: return setterBlock;
101: }
102:
103: public ClassNode getType() {
104: return field.getType();
105: }
106:
107: public void setType(ClassNode t) {
108: field.setType(t);
109: }
110:
111: public FieldNode getField() {
112: return field;
113: }
114:
115: public boolean isPrivate() {
116: return (modifiers & ACC_PRIVATE) != 0;
117: }
118:
119: public boolean hasInitialExpression() {
120: return field.hasInitialExpression();
121: }
122:
123: public boolean isInStaticContext() {
124: return field.isInStaticContext();
125: }
126:
127: public boolean isDynamicTyped() {
128: return field.isDynamicTyped();
129: }
130:
131: public boolean isClosureSharedVariable() {
132: return false;
133: }
134:
135: public void setClosureSharedVariable(boolean inClosure) {
136: closureShare = inClosure;
137: }
138: }
|