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