2c5b5b3ad8c64f049f34cde17ff44e37bc6110e2
[idea/community.git] / platform / lang-impl / src / com / intellij / codeInsight / intention / impl / IntentionActionWithTextCaching.java
1 /*
2  * Copyright 2000-2013 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
17 package com.intellij.codeInsight.intention.impl;
18
19 import com.intellij.codeInsight.daemon.impl.HighlightInfo;
20 import com.intellij.codeInsight.intention.IntentionAction;
21 import com.intellij.openapi.util.Comparing;
22 import com.intellij.openapi.diagnostic.Logger;
23 import org.jetbrains.annotations.NotNull;
24
25 import javax.swing.*;
26 import java.util.List;
27 import java.util.ArrayList;
28
29 /**
30 * @author cdr
31 */
32 class IntentionActionWithTextCaching implements Comparable<IntentionActionWithTextCaching> {
33   private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.IntentionActionWithTextCaching");
34   private final List<IntentionAction> myOptionIntentions = new ArrayList<IntentionAction>();
35   private final List<IntentionAction> myOptionErrorFixes = new ArrayList<IntentionAction>();
36   private final List<IntentionAction> myOptionInspectionFixes = new ArrayList<IntentionAction>();
37   private final String myText;
38   private final IntentionAction myAction;
39   private final String myDisplayName;
40   private final Icon myIcon;
41
42   IntentionActionWithTextCaching(IntentionAction action){
43     this(action, action.getText(), null);
44   }
45
46   IntentionActionWithTextCaching(HighlightInfo.IntentionActionDescriptor action){
47     this(action.getAction(), action.getDisplayName(), action.getIcon());
48   }
49
50   private IntentionActionWithTextCaching(IntentionAction action, String displayName, Icon icon) {
51     myIcon = icon;
52     myText = action.getText();
53     // needed for checking errors in user written actions
54     //noinspection ConstantConditions
55     LOG.assertTrue(myText != null, "action "+action.getClass()+" text returned null");
56     myAction = action;
57     myDisplayName = displayName;
58   }
59
60   String getText() {
61     return myText;
62   }
63
64   public void addIntention(final IntentionAction action) {
65     myOptionIntentions.add(action);
66   }
67   public void addErrorFix(final IntentionAction action) {
68     myOptionErrorFixes.add(action);
69   }
70   public void addInspectionFix(final IntentionAction action) {
71     myOptionInspectionFixes.add(action);
72   }
73
74   public IntentionAction getAction() {
75     return myAction;
76   }
77
78   public List<IntentionAction> getOptionIntentions() {
79     return myOptionIntentions;
80   }
81
82   public List<IntentionAction> getOptionErrorFixes() {
83     return myOptionErrorFixes;
84   }
85
86   public List<IntentionAction> getOptionInspectionFixes() {
87     return myOptionInspectionFixes;
88   }
89
90   public String getToolName() {
91     return myDisplayName;
92   }
93
94   public String toString() {
95     return getText();
96   }
97
98   @Override
99   public int compareTo(@NotNull final IntentionActionWithTextCaching other) {
100     if (myAction instanceof Comparable) {
101       return ((Comparable)myAction).compareTo(other.getAction());
102     }
103     else if (other.getAction() instanceof Comparable) {
104       return ((Comparable)other.getAction()).compareTo(myAction);
105     }
106     return Comparing.compare(getText(), other.getText());
107   }
108
109   public Icon getIcon() {
110     return myIcon;
111   }
112 }