rename initial
[idea/javafx-plugin.git] / src / org / jetbrains / javafx / lang / psi / impl / JavaFxParameterImpl.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.PsiArrayType;
20 import com.intellij.psi.PsiElement;
21 import com.intellij.psi.PsiType;
22 import org.jetbrains.annotations.NotNull;
23 import org.jetbrains.javafx.lang.parser.JavaFxElementTypes;
24 import org.jetbrains.javafx.lang.psi.JavaFxExpression;
25 import org.jetbrains.javafx.lang.psi.JavaFxInClause;
26 import org.jetbrains.javafx.lang.psi.JavaFxParameter;
27 import org.jetbrains.javafx.lang.psi.JavaFxTypeElement;
28 import org.jetbrains.javafx.lang.psi.impl.types.JavaFxTypeUtil;
29 import org.jetbrains.javafx.lang.psi.stubs.JavaFxParameterStub;
30 import org.jetbrains.javafx.lang.psi.types.JavaFxSequenceType;
31
32 /**
33  * Created by IntelliJ IDEA.
34  *
35  * @author: Alexey.Ivanov
36  */
37 public class JavaFxParameterImpl extends JavaFxPresentableElementImpl<JavaFxParameterStub> implements JavaFxParameter {
38   public JavaFxParameterImpl(@NotNull JavaFxParameterStub stub) {
39     super(stub, JavaFxElementTypes.FORMAL_PARAMETER);
40   }
41
42   public JavaFxParameterImpl(@NotNull ASTNode node) {
43     super(node);
44   }
45
46   @Override
47   public JavaFxTypeElement getTypeElement() {
48     return childToPsi(JavaFxElementTypes.TYPE_ELEMENTS);
49   }
50
51   @Override
52   public String getName() {
53     final JavaFxParameterStub stub = getStub();
54     if (stub != null) {
55       return stub.getName();
56     }
57     return super.getName();
58   }
59
60   @Override
61   public PsiType getType() {
62     final JavaFxTypeElement typeElement = getTypeElement();
63     if (typeElement != null) {
64       return typeElement.getType();
65     }
66     final PsiElement parent = getParent();
67     if (parent instanceof JavaFxInClause) {
68       final JavaFxExpression iteratedExpression = ((JavaFxInClause)parent).getIteratedExpression();
69       if (iteratedExpression != null) {
70         final PsiType type = iteratedExpression.getType();
71         if (type != null) {
72           if (type instanceof JavaFxSequenceType) {
73             return ((JavaFxSequenceType)type).getElementType();
74           }
75           if (type instanceof PsiArrayType) {
76             return ((PsiArrayType)type).getComponentType();
77           }
78         }
79       }
80     }
81     return JavaFxTypeUtil.getObjectClassType(getProject());
82   }
83 }