grails controller, domain class implicit members resolve
[idea/community.git] / plugins / groovy / src / org / jetbrains / plugins / groovy / lang / psi / impl / synthetic / GrImplicitVariableImpl.java
1 /*
2  * Copyright (c) 2008, Your Corporation. All Rights Reserved.
3  */
4
5 package org.jetbrains.plugins.groovy.lang.psi.impl.synthetic;
6
7 import com.intellij.psi.*;
8 import com.intellij.psi.impl.light.LightIdentifier;
9 import com.intellij.psi.impl.light.LightVariableBase;
10 import com.intellij.util.IncorrectOperationException;
11 import org.jetbrains.annotations.NonNls;
12 import org.jetbrains.annotations.NotNull;
13 import org.jetbrains.annotations.Nullable;
14
15 /**
16  * @author ilyas
17  */
18 public class GrImplicitVariableImpl extends LightVariableBase implements GrImplicitVariable {
19   private PsiModifierList myInnerModifierList;
20
21   public GrImplicitVariableImpl(PsiModifierList modifierList, PsiManager manager, PsiIdentifier nameIdentifier, @NotNull PsiType type, boolean writable, PsiElement scope) {
22     super(manager, nameIdentifier, type, writable, scope);
23         myInnerModifierList = modifierList != null ? modifierList : myModifierList;
24     }
25
26   public GrImplicitVariableImpl(PsiModifierList modifierList, PsiManager manager, @NonNls String name, @NonNls String type, PsiElement referenceExpression) {
27     this(modifierList, manager, null, JavaPsiFacade.getElementFactory(manager.getProject()).
28       createTypeFromText(type, referenceExpression), false, referenceExpression);
29     myNameIdentifier = new GrLightIdentifier(myManager, name);
30   }
31
32     public void accept(@NotNull PsiElementVisitor visitor) {
33     if (visitor instanceof JavaElementVisitor) {
34       ((JavaElementVisitor) visitor).visitImplicitVariable(this);
35     }
36   }
37
38   public String toString() {
39     return "Specific implicit variable";
40   }
41
42   public void setInitializer(@Nullable PsiExpression initializer) throws IncorrectOperationException {
43     throw new IncorrectOperationException();
44   }
45
46   @Override
47   public PsiModifierList getModifierList() {
48     return myInnerModifierList;
49   }
50
51   @Override
52   public boolean hasModifierProperty(@NotNull String modifier) {
53     return myInnerModifierList.hasModifierProperty(modifier);
54   }
55
56   protected static class GrLightIdentifier extends LightIdentifier {
57     private String myTextInternal;
58
59     public GrLightIdentifier(PsiManager manager, String name) {
60       super(manager, name);
61       myTextInternal = name;
62     }
63
64     public PsiElement replace(@NotNull PsiElement newElement) throws IncorrectOperationException {
65       myTextInternal = newElement.getText();
66       return newElement;
67     }
68
69     public String getText() {
70       return myTextInternal;
71     }
72
73     public PsiElement copy() {
74       return new LightIdentifier(getManager(), myTextInternal);
75     }
76   }
77
78 }