get rid of intellij.build.toolbox.litegen parameter and use BuildOptions.TOOLBOX_LITE...
[idea/community.git] / java / java-psi-impl / src / com / intellij / psi / impl / source / PsiAnnotationMethodImpl.java
1 /*
2  * Copyright 2000-2014 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.psi.impl.source;
17
18 import com.intellij.lang.ASTNode;
19 import com.intellij.openapi.util.text.StringUtil;
20 import com.intellij.psi.*;
21 import com.intellij.psi.impl.java.stubs.JavaStubElementTypes;
22 import com.intellij.psi.impl.java.stubs.PsiMethodStub;
23 import com.intellij.psi.impl.source.tree.ChildRole;
24 import com.intellij.reference.SoftReference;
25 import org.jetbrains.annotations.NonNls;
26 import org.jetbrains.annotations.NotNull;
27
28 /**
29  * @author ven
30  */
31 public class PsiAnnotationMethodImpl extends PsiMethodImpl implements PsiAnnotationMethod {
32   private SoftReference<PsiAnnotationMemberValue> myCachedDefaultValue;
33
34   public PsiAnnotationMethodImpl(final PsiMethodStub stub) {
35     super(stub, JavaStubElementTypes.ANNOTATION_METHOD);
36   }
37
38   public PsiAnnotationMethodImpl(final ASTNode node) {
39     super(node);
40   }
41
42   @Override
43   protected void dropCached() {
44     myCachedDefaultValue = null;
45   }
46
47   @Override
48   public PsiAnnotationMemberValue getDefaultValue() {
49     final PsiMethodStub stub = getStub();
50     if (stub != null) {
51       final String text = stub.getDefaultValueText();
52       if (StringUtil.isEmpty(text)) return null;
53
54       PsiAnnotationMemberValue value = SoftReference.dereference(myCachedDefaultValue);
55       if (value != null) {
56         return value;
57       }
58
59       value = JavaPsiFacade.getElementFactory(getProject()).createAnnotationFromText("@Foo(" + text + ")", this).findAttributeValue(null);
60       myCachedDefaultValue = new SoftReference<>(value);
61       return value;
62     }
63
64     myCachedDefaultValue = null;
65
66     final ASTNode node = getNode().findChildByRole(ChildRole.ANNOTATION_DEFAULT_VALUE);
67     if (node == null) return null;
68     return (PsiAnnotationMemberValue)node.getPsi();
69   }
70
71   @Override
72   @NonNls
73   public String toString() {
74     return "PsiAnnotationMethod:" + getName();
75   }
76
77   @Override
78   public final void accept(@NotNull PsiElementVisitor visitor) {
79     if (visitor instanceof JavaElementVisitor) {
80       ((JavaElementVisitor)visitor).visitAnnotationMethod(this);
81     }
82     else {
83       visitor.visitElement(this);
84     }
85   }
86 }