001: /*
002: * The contents of this file are subject to the terms
003: * of the Common Development and Distribution License
004: * (the "License"). You may not use this file except
005: * in compliance with the License.
006: *
007: * You can obtain a copy of the license at
008: * https://jwsdp.dev.java.net/CDDLv1.0.html
009: * See the License for the specific language governing
010: * permissions and limitations under the License.
011: *
012: * When distributing Covered Code, include this CDDL
013: * HEADER in each file and include the License file at
014: * https://jwsdp.dev.java.net/CDDLv1.0.html If applicable,
015: * add the following below this CDDL HEADER, with the
016: * fields enclosed by brackets "[]" replaced with your
017: * own identifying information: Portions Copyright [yyyy]
018: * [name of copyright owner]
019: */
020:
021: package com.sun.codemodel;
022:
023: /**
024: * Field Reference
025: */
026:
027: public class JFieldRef extends JExpressionImpl implements
028: JAssignmentTarget {
029: /**
030: * Object expression upon which this field will be accessed, or
031: * null for the implicit 'this'.
032: */
033: private JGenerable object;
034:
035: /**
036: * Name of the field to be accessed. Either this or {@link #var} is set.
037: */
038: private String name;
039:
040: /**
041: * Variable to be accessed.
042: */
043: private JVar var;
044:
045: /**
046: * Indicates if an explicit this should be generated
047: */
048: private boolean explicitThis;
049:
050: /**
051: * Field reference constructor given an object expression and field name
052: *
053: * @param object
054: * JExpression for the object upon which
055: * the named field will be accessed,
056: *
057: * @param name
058: * Name of field to access
059: */
060: JFieldRef(JExpression object, String name) {
061: this (object, name, false);
062: }
063:
064: JFieldRef(JExpression object, JVar v) {
065: this (object, v, false);
066: }
067:
068: /**
069: * Static field reference.
070: */
071: JFieldRef(JType type, String name) {
072: this (type, name, false);
073: }
074:
075: JFieldRef(JType type, JVar v) {
076: this (type, v, false);
077: }
078:
079: JFieldRef(JGenerable object, String name, boolean explicitThis) {
080: this .explicitThis = explicitThis;
081: this .object = object;
082: if (name.indexOf('.') >= 0)
083: throw new IllegalArgumentException(
084: "Field name contains '.': " + name);
085: this .name = name;
086: }
087:
088: JFieldRef(JGenerable object, JVar var, boolean explicitThis) {
089: this .explicitThis = explicitThis;
090: this .object = object;
091: this .var = var;
092: }
093:
094: public void generate(JFormatter f) {
095: String name = this .name;
096: if (name == null)
097: name = var.name();
098:
099: if (object != null) {
100: f.g(object).p('.').p(name);
101: } else {
102: if (explicitThis) {
103: f.p("this.").p(name);
104: } else {
105: f.id(name);
106: }
107: }
108: }
109:
110: public JExpression assign(JExpression rhs) {
111: return JExpr.assign(this , rhs);
112: }
113:
114: public JExpression assignPlus(JExpression rhs) {
115: return JExpr.assignPlus(this, rhs);
116: }
117: }
|