lang-api
[idea/community.git] / platform / lang-api / src / com / intellij / codeInspection / reference / RefUtil.java
1 /*
2  * Copyright 2000-2007 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 com.intellij.codeInspection.reference;
17
18 import com.intellij.ExtensionPoints;
19 import com.intellij.codeInsight.daemon.ImplicitUsageProvider;
20 import com.intellij.openapi.components.ServiceManager;
21 import com.intellij.openapi.extensions.Extensions;
22 import com.intellij.openapi.extensions.ExtensionPoint;
23 import com.intellij.psi.PsiElement;
24
25 /**
26  * Application component which provides utility methods for working with the reference
27  * graph.
28  *
29  * @author anna
30  * @since 6.0
31  */
32 public abstract class RefUtil {
33   public static RefUtil getInstance() {
34     return ServiceManager.getService(RefUtil.class);
35   }
36
37   public static boolean isEntryPoint(final RefElement refElement) {
38     ExtensionPoint<EntryPoint> point = Extensions.getRootArea().getExtensionPoint(ExtensionPoints.INSPECTION_ENRTY_POINT);
39     final EntryPoint[] addins = point.getExtensions();
40     for (EntryPoint entryPoint : addins) {
41       if (entryPoint.accept(refElement)) {
42         return true;
43       }
44     }
45     final PsiElement element = refElement.getElement();
46     final ImplicitUsageProvider[] implicitUsageProviders = Extensions.getExtensions(ImplicitUsageProvider.EP_NAME);
47     for (ImplicitUsageProvider provider : implicitUsageProviders) {
48       if (provider.isImplicitUsage(element)) return true;
49     }
50     return false;
51   }
52 }