001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: * $Header:$
018: */
019: package org.apache.beehive.controls.runtime.generator;
020:
021: import java.util.Collection;
022:
023: import com.sun.mirror.declaration.FieldDeclaration;
024: import com.sun.mirror.declaration.Modifier;
025:
026: /**
027: * The AptField class is a helper class that knows how to generate useful information
028: * about a Field using APT metadata
029: */
030: public class AptField {
031: AptField(FieldDeclaration fieldDecl) {
032: _fieldDecl = fieldDecl;
033: }
034:
035: /**
036: * Returns the name of the method
037: */
038: public String getName() {
039: if (_fieldDecl == null)
040: return "";
041: return _fieldDecl.getSimpleName();
042: }
043:
044: /**
045: * Returns a local variable used when setting the field value
046: */
047: public String getLocalName() {
048: return "_" + getName();
049: }
050:
051: /**
052: * Returns the type of the field
053: */
054: public String getType() {
055: if (_fieldDecl == null || _fieldDecl.getType() == null)
056: return "";
057:
058: return _fieldDecl.getType().toString();
059: }
060:
061: /**
062: * Returns the class name of the field (does not include any formal type parameters
063: */
064: public String getClassName() {
065: if (_fieldDecl == null || _fieldDecl.getType() == null)
066: return "";
067:
068: //
069: // This is lazily... but much easier than navigating the APT type system and just
070: // as effective ;)
071: String typeName = _fieldDecl.getType().toString();
072: int formalIndex = typeName.indexOf('<');
073: if (formalIndex > 0)
074: return typeName.substring(0, formalIndex);
075: return typeName;
076: }
077:
078: /**
079: * Returns the access modifier associated with the field
080: */
081: public String getAccessModifier() {
082: if (_fieldDecl == null)
083: return "";
084:
085: Collection<Modifier> modifiers = _fieldDecl.getModifiers();
086: if (modifiers.contains(Modifier.PRIVATE))
087: return "private";
088: if (modifiers.contains(Modifier.PROTECTED))
089: return "protected";
090: if (modifiers.contains(Modifier.PUBLIC))
091: return "public";
092:
093: return "";
094: }
095:
096: /**
097: * Returns the name of a static local field using to refer to this Field
098: */
099: public String getReflectField() {
100: return "_" + getName() + "Field";
101: }
102:
103: protected FieldDeclaration _fieldDecl;
104: }
|