/* * 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.devtools.j2objc.ast; import com.google.devtools.j2objc.util.ElementUtil; import java.util.List; import javax.lang.model.element.Element; /** * Base class for all declarations that may appear in the body of a type declaration. */ public abstract class BodyDeclaration extends TreeNode { private int modifiers = 0; // True if this node can be declared in the implementation and not the header. private boolean hasPrivateDeclaration = false; protected ChildLink<Javadoc> javadoc = ChildLink.create(Javadoc.class, this); protected ChildList<Annotation> annotations = ChildList.create(Annotation.class, this); BodyDeclaration() { super(); } public BodyDeclaration(BodyDeclaration other) { super(other); modifiers = other.getModifiers(); hasPrivateDeclaration = other.hasPrivateDeclaration(); javadoc.copyFrom(other.getJavadoc()); annotations.copyFrom(other.getAnnotations()); } public BodyDeclaration(Element element) { modifiers = ElementUtil.fromModifierSet(element.getModifiers()); } public int getModifiers() { return modifiers; } public BodyDeclaration setModifiers(int newModifiers) { modifiers = newModifiers; return this; } public void addModifiers(int modifiersToAdd) { modifiers |= modifiersToAdd; } public void removeModifiers(int modifiersToRemove) { modifiers &= ~modifiersToRemove; } public boolean hasPrivateDeclaration() { return hasPrivateDeclaration; } public BodyDeclaration setHasPrivateDeclaration(boolean value) { hasPrivateDeclaration = value; return this; } public Javadoc getJavadoc() { return javadoc.get(); } public BodyDeclaration setJavadoc(Javadoc newJavadoc) { javadoc.set(newJavadoc); return this; } public List<Annotation> getAnnotations() { return annotations; } public BodyDeclaration setAnnotations(List<Annotation> newAnnotations) { annotations.replaceAll(newAnnotations); return this; } @Override public abstract BodyDeclaration copy(); }