grails controller, domain class implicit members resolve
[idea/community.git] / plugins / groovy / src / org / jetbrains / plugins / groovy / annotator / intentions / dynamic / elements / DPropertyElement.java
1 /*
2  * Copyright 2000-2009 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 org.jetbrains.plugins.groovy.annotator.intentions.dynamic.elements;
17
18 import com.intellij.psi.PsiElement;
19 import com.intellij.psi.PsiManager;
20 import com.intellij.psi.PsiModifier;
21 import com.intellij.psi.PsiVariable;
22 import com.intellij.util.IncorrectOperationException;
23 import org.jetbrains.annotations.NotNull;
24 import org.jetbrains.plugins.groovy.annotator.intentions.dynamic.DynamicManager;
25 import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrDynamicImplicitProperty;
26 import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.LightModifierList;
27
28 import java.util.LinkedHashSet;
29
30 /**
31  * User: Dmitry.Krasilschikov
32  * Date: 20.12.2007
33  */
34 public class DPropertyElement extends DItemElement {
35   private PsiVariable myPsi;
36
37   //Do not use directly! Persistence component uses default constructor for deserializable
38   public DPropertyElement() {
39     super(null, null, null);
40   }
41
42   public DPropertyElement(Boolean isStatic, String name, String type) {
43     super(isStatic, name, type);
44   }
45
46   public void clearCache() {
47     myPsi = null;
48   }
49
50   @NotNull
51   public PsiVariable getPsi(PsiManager manager, final String containingClassName) {
52     if (myPsi != null) return myPsi;
53
54     LinkedHashSet<String> hashSet = new LinkedHashSet<String>();
55
56     Boolean isStatic = isStatic();
57     if (isStatic != null && isStatic.booleanValue()) {
58       hashSet.add(PsiModifier.STATIC);
59     }
60     myPsi = new GrDynamicImplicitProperty(manager, getName(), getType(), containingClassName, new LightModifierList(manager, hashSet), null) {
61       @Override
62       public PsiElement setName(@NotNull String name) throws IncorrectOperationException {
63         DynamicManager.getInstance(getProject()).replaceDynamicPropertyName(containingClassName, getName(), name);
64         return super.setName(name);
65       }
66     };
67     return myPsi;
68   }
69 }