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