001 /*
002 * Copyright 2010-2015 JetBrains s.r.o.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.jetbrains.kotlin.psi;
018
019 import com.intellij.lang.ASTNode;
020 import org.jetbrains.annotations.NotNull;
021 import org.jetbrains.annotations.Nullable;
022 import org.jetbrains.kotlin.KtNodeTypes;
023 import org.jetbrains.kotlin.kdoc.psi.api.KDoc;
024 import org.jetbrains.kotlin.lexer.KtModifierKeywordToken;
025 import org.jetbrains.kotlin.psi.addRemoveModifier.AddRemoveModifierKt;
026 import org.jetbrains.kotlin.psi.findDocComment.FindDocCommentKt;
027
028 import java.util.Collections;
029 import java.util.List;
030
031 public abstract class KtDeclarationImpl extends KtExpressionImpl implements KtDeclaration {
032 public KtDeclarationImpl(@NotNull ASTNode node) {
033 super(node);
034 }
035
036 @Override
037 @Nullable
038 public KtModifierList getModifierList() {
039 return (KtModifierList) findChildByType(KtNodeTypes.MODIFIER_LIST);
040 }
041
042 @Override
043 public boolean hasModifier(@NotNull KtModifierKeywordToken modifier) {
044 KtModifierList modifierList = getModifierList();
045 return modifierList != null && modifierList.hasModifier(modifier);
046 }
047
048 @Override
049 public void addModifier(@NotNull KtModifierKeywordToken modifier) {
050 AddRemoveModifierKt.addModifier(this, modifier);
051 }
052
053 @Override
054 public void removeModifier(@NotNull KtModifierKeywordToken modifier) {
055 AddRemoveModifierKt.removeModifier(this, modifier);
056 }
057
058 @NotNull
059 @Override
060 public KtAnnotationEntry addAnnotationEntry(@NotNull KtAnnotationEntry annotationEntry) {
061 return AddRemoveModifierKt.addAnnotationEntry(this, annotationEntry);
062 }
063
064 @NotNull
065 @Override
066 public List<KtAnnotationEntry> getAnnotationEntries() {
067 KtModifierList modifierList = getModifierList();
068 if (modifierList == null) return Collections.emptyList();
069 return modifierList.getAnnotationEntries();
070 }
071
072 @NotNull
073 @Override
074 public List<KtAnnotation> getAnnotations() {
075 KtModifierList modifierList = getModifierList();
076 if (modifierList == null) return Collections.emptyList();
077 return modifierList.getAnnotations();
078 }
079
080 @Nullable
081 @Override
082 public KDoc getDocComment() {
083 return FindDocCommentKt.findDocComment(this);
084 }
085 }