rename initial
[idea/javafx-plugin.git] / src / org / jetbrains / javafx / lang / psi / impl / JavaFxFunctionDefinitionImpl.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.util.Icons;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27 import org.jetbrains.javafx.lang.parser.JavaFxElementTypes;
28 import org.jetbrains.javafx.lang.psi.*;
29 import org.jetbrains.javafx.lang.psi.stubs.JavaFxClassStub;
30 import org.jetbrains.javafx.lang.psi.stubs.JavaFxFunctionStub;
31
32 import javax.swing.*;
33
34 /**
35  * Created by IntelliJ IDEA.
36  * Author: Alexey.Ivanov
37  * Date:   12.05.2010
38  * Time:   16:21:57
39  */
40 public class JavaFxFunctionDefinitionImpl extends JavaFxPresentableElementImpl<JavaFxFunctionStub> implements JavaFxFunctionDefinition {
41   public JavaFxFunctionDefinitionImpl(@NotNull ASTNode node) {
42     super(node);
43   }
44
45   public JavaFxFunctionDefinitionImpl(@NotNull JavaFxFunctionStub stub) {
46     super(stub, JavaFxElementTypes.FUNCTION_DEFINITION);
47   }
48
49   @Nullable
50   @Override
51   public JavaFxSignature getSignature() {
52     return getStubOrPsiChild(JavaFxElementTypes.FUNCTION_SIGNATURE);
53   }
54
55   @Override
56   public String getName() {
57     final JavaFxFunctionStub stub = getStub();
58     if (stub != null) {
59       return stub.getName();
60     }
61     return super.getName();
62   }
63
64   @Override
65   public PsiType getReturnType() {
66     final JavaFxSignature signature = getSignature();
67     if (signature != null) {
68       final PsiType resultType = signature.getReturnType();
69       if (resultType != null) {
70         return resultType;
71       }
72     }
73     return getCodeBlock().getType();
74   }
75
76   @Nullable
77   @Override
78   public JavaFxBlockExpression getCodeBlock() {
79     return (JavaFxBlockExpression)childToPsi(JavaFxElementTypes.BLOCK_EXPRESSION);
80   }
81
82   @Nullable
83   public JavaFxClassDefinition getContainingClass() {
84     final JavaFxFunctionStub stub = getStub();
85     if (stub != null) {
86       final StubElement parentStub = stub.getParentStub();
87       if (parentStub instanceof JavaFxClassStub) {
88         return ((JavaFxClassStub)parentStub).getPsi();
89       }
90       return null;
91     }
92
93     final PsiElement parent = getParent();
94     if (parent instanceof JavaFxClassDefinition) {
95       return (JavaFxClassDefinition)parent;
96     }
97     return null;
98   }
99
100   public void acceptJavaFxVisitor(@NotNull JavaFxElementVisitor visitor) {
101     visitor.visitFunctionDefinition(this);
102   }
103
104   @Override
105   public Icon getIcon(int flags) {
106     return Icons.METHOD_ICON;
107   }
108
109   @Override
110   protected String getLocationString() {
111     final String locationString = super.getLocationString();
112     final JavaFxClassDefinition containingClass = getContainingClass();
113     if (containingClass != null) {
114       return containingClass.getName() + " in " + locationString;
115     }
116     return locationString;
117   }
118
119   @Override
120   @Nullable
121   public JavaFxQualifiedName getQualifiedName() {
122     final JavaFxFunctionStub stub = getStub();
123     if (stub != null) {
124       return stub.getQualifiedName();
125     }
126     return (getContainingClass() == null) ? JavaFxPsiUtil.getQName(this) : null;
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     final JavaFxSignature signature = getSignature();
135     if (signature != null && signature != lastParent && !signature.processDeclarations(processor, state, lastParent, place)) {
136       return false;
137     }
138     return processor.execute(this, state);
139   }
140 }