rename initial
[idea/javafx-plugin.git] / src / org / jetbrains / javafx / lang / psi / impl / JavaFxClassDefinitionImpl.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.openapi.util.io.FileUtil;
20 import com.intellij.psi.PsiElement;
21 import com.intellij.psi.PsiFile;
22 import com.intellij.psi.PsiReference;
23 import com.intellij.psi.ResolveState;
24 import com.intellij.psi.scope.PsiScopeProcessor;
25 import com.intellij.util.Icons;
26 import org.jetbrains.annotations.NotNull;
27 import org.jetbrains.annotations.Nullable;
28 import org.jetbrains.javafx.lang.parser.JavaFxElementTypes;
29 import org.jetbrains.javafx.lang.psi.*;
30 import org.jetbrains.javafx.lang.psi.impl.resolve.JavaFxResolveUtil;
31 import org.jetbrains.javafx.lang.psi.stubs.JavaFxClassStub;
32
33 import javax.swing.*;
34
35 /**
36  * Created by IntelliJ IDEA.
37  * Author: Alexey.Ivanov
38  * Date:   12.05.2010
39  * Time:   16:21:57
40  */
41 public class JavaFxClassDefinitionImpl extends JavaFxPresentableElementImpl<JavaFxClassStub> implements JavaFxClassDefinition {
42   public JavaFxClassDefinitionImpl(@NotNull ASTNode node) {
43     super(node);
44   }
45
46   public JavaFxClassDefinitionImpl(@NotNull JavaFxClassStub stub) {
47     super(stub, JavaFxElementTypes.CLASS_DEFINITION);
48   }
49
50   @Override
51   public String getName() {
52     final JavaFxClassStub classStub = getStub();
53     if (classStub != null) {
54       return classStub.getName();
55     }
56     return super.getName();
57   }
58
59   @Nullable
60   public JavaFxQualifiedName getQualifiedName() {
61     final JavaFxClassStub stub = getStub();
62     if (stub != null) {
63       return stub.getQualifiedName();
64     }
65     else {
66       return JavaFxPsiUtil.getQName(this);
67     }
68   }
69
70   @Override
71   public JavaFxElement[] getMembers() {
72     return getStubOrPsiChildren(JavaFxElementTypes.CLASS_MEMBERS, JavaFxElement.EMPTY_ARRAY);
73   }
74
75   @Override
76   public JavaFxReferenceElement[] getSuperClassElements() {
77     final JavaFxReferenceList referenceList = childToPsi(JavaFxElementTypes.REFERENCE_LIST);
78     assert referenceList != null;
79     return referenceList.getReferenceElements();
80   }
81
82   @Override
83   protected void acceptJavaFxVisitor(@NotNull JavaFxElementVisitor visitor) {
84     visitor.visitClassDefinition(this);
85   }
86
87   @Override
88   public Icon getIcon(int flags) {
89     return Icons.CLASS_ICON;
90   }
91
92   @Override
93   public boolean processDeclarations(@NotNull final PsiScopeProcessor processor,
94                                      @NotNull final ResolveState state,
95                                      final PsiElement lastParent,
96                                      @NotNull final PsiElement place) {
97     if (!JavaFxResolveUtil.processElements(getMembers(), lastParent, processor, state)) {
98       return false;
99     }
100     final PsiFile containingFile = getContainingFile();
101     if (containingFile instanceof JavaFxFile) {
102       final String name = containingFile.getName();
103       if (FileUtil.getNameWithoutExtension(name).equals(getName())) {
104         if (!JavaFxResolveUtil.processElements(((JavaFxFile)containingFile).getDefinitions(), this, processor, state)) {
105           return false;
106         }
107       }
108     }
109     final JavaFxReferenceElement[] superClassElements = getSuperClassElements();
110     for (JavaFxReferenceElement referenceElement : superClassElements) {
111       final PsiReference reference = referenceElement.getReference();
112       if (reference != null) {
113         final PsiElement resolveResult = reference.resolve();
114         if (resolveResult != null) {
115           if (!resolveResult.processDeclarations(processor, state, lastParent, place)) {
116             return false;
117           }
118         }
119       }
120     }
121     return processor.execute(this, state);
122   }
123 }