226618144fc5e2b79c866e0c8394be903bfc524f
[idea/javafx-plugin.git] / src / org / jetbrains / javafx / lang / psi / impl / resolve / JavaFxReference.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.resolve;
17
18 import com.intellij.psi.PsiPolyVariantReferenceBase;
19 import com.intellij.psi.ResolveResult;
20 import com.intellij.psi.impl.PsiManagerEx;
21 import com.intellij.psi.impl.source.resolve.ResolveCache;
22 import org.jetbrains.annotations.NotNull;
23 import org.jetbrains.javafx.lang.psi.JavaFxReferenceElement;
24
25 /**
26  * Created by IntelliJ IDEA.
27  *
28  * @author: Alexey.Ivanov
29  */
30 public class JavaFxReference extends PsiPolyVariantReferenceBase<JavaFxReferenceElement> {
31   private static final ResolveCache.PolyVariantResolver<JavaFxReference> ourResolver =
32     new ResolveCache.PolyVariantResolver<JavaFxReference>() {
33       @Override
34       public ResolveResult[] resolve(final JavaFxReference javaFxReference, final boolean incompleteCode) {
35         return javaFxReference.multiResolveInner(incompleteCode);
36       }
37     };
38
39   public JavaFxReference(final JavaFxReferenceElement psiElement) {
40     super(psiElement, true);
41   }
42
43   @NotNull
44   @Override
45   public ResolveResult[] multiResolve(final boolean incompleteCode) {
46     final ResolveResult[] results =
47       ((PsiManagerEx)myElement.getManager()).getResolveCache().resolveWithCaching(this, ourResolver, true, incompleteCode);
48     if (results.length == 0) {
49       return ResolveResult.EMPTY_ARRAY;
50     }
51     return results;
52   }
53
54   protected ResolveResult[] multiResolveInner(final boolean incompleteCode) {
55     final String name = myElement.getName();
56     if (name != null) {
57       final JavaFxResolveProcessor resolveProcessor = new JavaFxResolveProcessor(name);
58       if (!JavaFxResolveUtil.treeWalkUp(myElement, resolveProcessor)) {
59         return JavaFxResolveUtil.createResolveResult(resolveProcessor.getResult());
60       }
61     }
62     return ResolveResult.EMPTY_ARRAY;
63   }
64
65   @NotNull
66   @Override
67   public Object[] getVariants() {
68     return new Object[0];  //To change body of implemented methods use File | Settings | File Templates.
69   }
70 }