| /* |
| * Copyright 2008 Google Inc. |
| * |
| * 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 com.google.gwt.dev.javac.typemodel; |
| |
| import com.google.gwt.core.ext.typeinfo.JType; |
| import com.google.gwt.dev.util.StringInterner; |
| |
| import java.lang.annotation.Annotation; |
| import java.util.Map; |
| |
| /** |
| * Represents a field declaration. |
| */ |
| public class JField implements com.google.gwt.core.ext.typeinfo.JField { |
| |
| private final Annotations annotations; |
| |
| private final JClassType enclosingType; |
| |
| private int modifierBits; |
| |
| private final String name; |
| |
| private JType type; |
| |
| JField(JClassType enclosingType, JField srcField) { |
| this.annotations = new Annotations(srcField.annotations); |
| this.enclosingType = enclosingType; |
| this.modifierBits = srcField.modifierBits; |
| this.name = srcField.name; |
| this.type = srcField.type; |
| } |
| |
| JField(JClassType enclosingType, String name) { |
| this(enclosingType, name, null); |
| } |
| |
| JField(JClassType enclosingType, String name, |
| Map<Class<? extends Annotation>, Annotation> declaredAnnotations) { |
| assert (enclosingType != null); |
| this.enclosingType = enclosingType; |
| this.name = StringInterner.get().intern(name); |
| this.enclosingType.addField(this); |
| annotations = new Annotations(declaredAnnotations); |
| } |
| |
| public <T extends Annotation> T getAnnotation(Class<T> annotationClass) { |
| return annotations.getAnnotation(annotationClass); |
| } |
| |
| public Annotation[] getAnnotations() { |
| return annotations.getAnnotations(); |
| } |
| |
| public Annotation[] getDeclaredAnnotations() { |
| return annotations.getDeclaredAnnotations(); |
| } |
| |
| public JClassType getEnclosingType() { |
| return enclosingType; |
| } |
| |
| @Deprecated |
| public final String[][] getMetaData(String tagName) { |
| return TypeOracle.NO_STRING_ARR_ARR; |
| } |
| |
| @Deprecated |
| public final String[] getMetaDataTags() { |
| return TypeOracle.NO_STRINGS; |
| } |
| |
| public String getName() { |
| assert (name != null); |
| return name; |
| } |
| |
| public JType getType() { |
| assert (type != null); |
| return type; |
| } |
| |
| public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) { |
| return annotations.isAnnotationPresent(annotationClass); |
| } |
| |
| public boolean isDefaultAccess() { |
| return 0 == (modifierBits & (TypeOracle.MOD_PUBLIC | TypeOracle.MOD_PRIVATE | TypeOracle.MOD_PROTECTED)); |
| } |
| |
| public JEnumConstant isEnumConstant() { |
| return null; |
| } |
| |
| public boolean isFinal() { |
| return 0 != (modifierBits & TypeOracle.MOD_FINAL); |
| } |
| |
| public boolean isPrivate() { |
| return 0 != (modifierBits & TypeOracle.MOD_PRIVATE); |
| } |
| |
| public boolean isProtected() { |
| return 0 != (modifierBits & TypeOracle.MOD_PROTECTED); |
| } |
| |
| public boolean isPublic() { |
| return 0 != (modifierBits & TypeOracle.MOD_PUBLIC); |
| } |
| |
| public boolean isStatic() { |
| return 0 != (modifierBits & TypeOracle.MOD_STATIC); |
| } |
| |
| public boolean isTransient() { |
| return 0 != (modifierBits & TypeOracle.MOD_TRANSIENT); |
| } |
| |
| public boolean isVolatile() { |
| return 0 != (modifierBits & TypeOracle.MOD_VOLATILE); |
| } |
| |
| @Override |
| public String toString() { |
| String[] names = TypeOracle.modifierBitsToNamesForField(modifierBits); |
| StringBuffer sb = new StringBuffer(); |
| for (int i = 0; i < names.length; i++) { |
| if (i > 0) { |
| sb.append(" "); |
| } |
| sb.append(names[i]); |
| } |
| if (names.length > 0) { |
| sb.append(" "); |
| } |
| sb.append(type.getParameterizedQualifiedSourceName()); |
| sb.append(" "); |
| sb.append(getName()); |
| return sb.toString(); |
| } |
| |
| void addModifierBits(int modifierBits) { |
| this.modifierBits |= modifierBits; |
| } |
| |
| void setType(JType type) { |
| this.type = type; |
| } |
| } |