gpp meta methods are not unused (IDEA-75803)
[idea/community.git] / plugins / groovy / src / org / jetbrains / plugins / groovy / gpp / GppImplicitUsageProvider.java
1 /*
2  * Copyright 2000-2012 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.plugins.groovy.gpp;
17
18 import com.intellij.codeInsight.daemon.ImplicitUsageProvider;
19 import com.intellij.psi.*;
20
21 /**
22  * @author peter
23  */
24 public class GppImplicitUsageProvider implements ImplicitUsageProvider {
25
26   private static boolean isGppMetaMethod(PsiMethod method) {
27     PsiParameter[] parameters = method.getParameterList().getParameters();
28     if (parameters.length == 0 || !parameters[0].getType().equalsToText(CommonClassNames.JAVA_LANG_STRING)) {
29       return false;
30     }
31     
32     if ("invokeUnresolvedMethod".equals(method.getName())) {
33       return true;
34     }
35     if ("getUnresolvedProperty".equals(method.getName())) {
36       return parameters.length == 1;
37     }
38     if ("setUnresolvedProperty".equals(method.getName())) {
39       return parameters.length == 2;
40     }
41
42     return false;
43   }
44   
45   @Override
46   public boolean isImplicitUsage(PsiElement element) {
47     return element instanceof PsiMethod && isGppMetaMethod((PsiMethod)element);
48   }
49
50   @Override
51   public boolean isImplicitRead(PsiElement element) {
52     return false;
53   }
54
55   @Override
56   public boolean isImplicitWrite(PsiElement element) {
57     return false;
58   }
59 }