suggest to delete type arguments when they are not expected (IDEA-79300)
[idea/community.git] / java / java-impl / src / com / intellij / codeInsight / daemon / impl / quickfix / RemoveTypeArgumentsFix.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 com.intellij.codeInsight.daemon.impl.quickfix;
17
18 import com.intellij.codeInsight.intention.HighPriorityAction;
19 import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
20 import com.intellij.openapi.diagnostic.Logger;
21 import com.intellij.openapi.editor.Editor;
22 import com.intellij.openapi.project.Project;
23 import com.intellij.psi.*;
24 import org.jetbrains.annotations.NotNull;
25 import org.jetbrains.annotations.Nullable;
26
27 /**
28  * User: anna
29  * Date: 1/18/12
30  */
31 public class RemoveTypeArgumentsFix extends LocalQuickFixAndIntentionActionOnPsiElement implements HighPriorityAction {
32   private static final Logger LOGGER = Logger.getInstance("#" + RemoveTypeArgumentsFix.class.getName());
33
34   public RemoveTypeArgumentsFix(@Nullable PsiElement element) {
35     super(element);
36   }
37
38   @NotNull
39   @Override
40   public String getText() {
41     return "Remove type arguments";
42   }
43
44   @NotNull
45   @Override
46   public String getFamilyName() {
47     return getText();
48   }
49
50   @Override
51   public boolean isAvailable(@NotNull Project project,
52                              @NotNull PsiFile file,
53                              @NotNull PsiElement startElement,
54                              @NotNull PsiElement endElement) {
55     return startElement instanceof PsiVariable && startElement.isValid() && ((PsiVariable)startElement).getTypeElement() != null;
56   }
57
58   @Override
59   public void invoke(@NotNull Project project,
60                      @NotNull PsiFile file,
61                      @Nullable("is null when called from inspection") Editor editor,
62                      @NotNull PsiElement startElement,
63                      @NotNull PsiElement endElement) {
64     final PsiVariable psiVariable = (PsiVariable)startElement;
65     final PsiTypeElement typeElement = psiVariable.getTypeElement();
66     LOGGER.assertTrue(typeElement != null);
67     final PsiJavaCodeReferenceElement referenceElement = typeElement.getInnermostComponentReferenceElement();
68     if (referenceElement != null) {
69       final PsiReferenceParameterList parameterList = referenceElement.getParameterList();
70       if (parameterList != null) {
71         parameterList.delete();
72       }
73     }
74   }
75 }