rename initial
[idea/javafx-plugin.git] / src / org / jetbrains / javafx / lang / psi / impl / JavaFxVariableDeclarationImpl.java
1 /*
2  * Copyright 2000-2010 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.javafx.lang.psi.impl;
17
18 import com.intellij.lang.ASTNode;
19 import com.intellij.psi.PsiElement;
20 import com.intellij.psi.PsiType;
21 import com.intellij.psi.ResolveState;
22 import com.intellij.psi.scope.PsiScopeProcessor;
23 import com.intellij.psi.stubs.StubElement;
24 import com.intellij.psi.util.PsiTreeUtil;
25 import com.intellij.util.Icons;
26 import org.jetbrains.annotations.NotNull;
27 import org.jetbrains.annotations.Nullable;
28 import org.jetbrains.javafx.lang.lexer.JavaFxTokenTypes;
29 import org.jetbrains.javafx.lang.parser.JavaFxElementTypes;
30 import org.jetbrains.javafx.lang.psi.*;
31 import org.jetbrains.javafx.lang.psi.impl.types.JavaFxTypeUtil;
32 import org.jetbrains.javafx.lang.psi.stubs.JavaFxClassStub;
33 import org.jetbrains.javafx.lang.psi.stubs.JavaFxVariableStub;
34
35 import javax.swing.*;
36
37 /**
38  * Created by IntelliJ IDEA.
39  * Author: Alexey.Ivanov
40  * Date:   12.05.2010
41  * Time:   16:21:57
42  */
43 public class JavaFxVariableDeclarationImpl extends JavaFxPresentableElementImpl<JavaFxVariableStub> implements JavaFxVariableDeclaration {
44   public JavaFxVariableDeclarationImpl(@NotNull ASTNode node) {
45     super(node);
46   }
47
48   public JavaFxVariableDeclarationImpl(JavaFxVariableStub stub) {
49     super(stub, JavaFxElementTypes.VARIABLE_DECLARATION);
50   }
51
52   @Override
53   public String getName() {
54     final JavaFxVariableStub stub = getStub();
55     if (stub != null) {
56       return stub.getName();
57     }
58     return super.getName();
59   }
60
61   @Override
62   protected void acceptJavaFxVisitor(@NotNull JavaFxElementVisitor visitor) {
63     visitor.visitVariableDeclaration(this);
64   }
65
66   @Override
67   public Icon getIcon(int flags) {
68     return Icons.VARIABLE_ICON;
69   }
70
71   @Nullable
72   public JavaFxExpression getInitializer() {
73     final ASTNode child = getNode().findChildByType(JavaFxTokenTypes.EQ);
74     if (child != null) {
75       final JavaFxExpression element = PsiTreeUtil.getNextSiblingOfType(child.getPsi(), JavaFxExpression.class);
76       if (element != null) {
77         return element;
78       }
79     }
80     return null;
81   }
82
83   @Override
84   public JavaFxTypeElement getTypeElement() {
85     return childToPsi(JavaFxElementTypes.TYPE_ELEMENTS);
86   }
87
88   @Override
89   protected String getLocationString() {
90     final String locationString = super.getLocationString();
91     final JavaFxVariableStub stub = getStub();
92     if (stub != null) {
93       final StubElement parentStub = stub.getParentStub();
94       if (parentStub instanceof JavaFxClassStub) {
95         return ((JavaFxClassStub)parentStub).getName() + " in " + locationString;
96       }
97     }
98     else {
99       final PsiElement parent = getParent();
100       if (parent instanceof JavaFxClassDefinition) {
101         return ((JavaFxClassDefinition)parent).getName() + " in " + locationString;
102       }
103     }
104     return locationString;
105   }
106
107   @Override
108   public JavaFxQualifiedName getQualifiedName() {
109     final JavaFxVariableStub stub = getStub();
110     if (stub != null) {
111       return stub.getQualifiedName();
112     }
113     return (getParent() instanceof JavaFxFile) ? JavaFxPsiUtil.getQName(this) : null;
114   }
115
116   @Override
117   public PsiType getType() {
118     final JavaFxTypeElement typeElement = getTypeElement();
119     if (typeElement != null) {
120       return typeElement.getType();
121     }
122     final JavaFxExpression initializer = getInitializer();
123     if (initializer != null) {
124       return initializer.getType();
125     }
126     return JavaFxTypeUtil.getObjectClassType(getProject());
127   }
128
129   @Override
130   public boolean processDeclarations(@NotNull final PsiScopeProcessor processor,
131                                      @NotNull final ResolveState state,
132                                      final PsiElement lastParent,
133                                      @NotNull final PsiElement place) {
134     return processor.execute(this, state);
135   }
136 }