copy lookup elements weight info to clipboard
[idea/community.git] / platform / lang-impl / src / com / intellij / internal / DumpLookupElementWeights.java
1 /*
2  * Copyright 2000-2015 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.internal;
18
19 import com.intellij.codeInsight.lookup.LookupElement;
20 import com.intellij.codeInsight.lookup.LookupManager;
21 import com.intellij.codeInsight.lookup.impl.LookupImpl;
22 import com.intellij.openapi.actionSystem.AnAction;
23 import com.intellij.openapi.actionSystem.AnActionEvent;
24 import com.intellij.openapi.actionSystem.CommonDataKeys;
25 import com.intellij.openapi.actionSystem.Presentation;
26 import com.intellij.openapi.diagnostic.Logger;
27 import com.intellij.openapi.editor.Editor;
28 import com.intellij.openapi.ide.CopyPasteManager;
29 import com.intellij.openapi.project.DumbAware;
30 import com.intellij.openapi.util.text.StringUtil;
31
32 import java.awt.datatransfer.StringSelection;
33 import java.util.ArrayList;
34 import java.util.List;
35 import java.util.Map;
36
37 /**
38  * @author peter
39  */
40 public class DumpLookupElementWeights extends AnAction implements DumbAware {
41   private static final Logger LOG = Logger.getInstance("#com.intellij.internal.DumpLookupElementWeights");
42
43   @Override
44   public void actionPerformed(final AnActionEvent e) {
45     final Editor editor = e.getData(CommonDataKeys.EDITOR);
46     dumpLookupElementWeights((LookupImpl)LookupManager.getActiveLookup(editor));
47   }
48
49   @Override
50   public void update(final AnActionEvent e) {
51     final Presentation presentation = e.getPresentation();
52     final Editor editor = e.getData(CommonDataKeys.EDITOR);
53     presentation.setEnabled(editor != null && LookupManager.getActiveLookup(editor) != null);
54   }
55
56   public static void dumpLookupElementWeights(final LookupImpl lookup) {
57     LookupElement selected = lookup.getCurrentItem();
58     String sb = "selected: " + selected;
59     if (selected != null) {
60       sb += "\nprefix: " + lookup.itemPattern(selected);
61     }
62     sb += "\nweights:\n" + StringUtil.join(getLookupElementWeights(lookup), "\n");
63     System.out.println(sb);
64     LOG.info(sb);
65     try {
66       CopyPasteManager.getInstance().setContents(new StringSelection(sb));
67     } catch (Exception ignore){}
68   }
69
70   public static List<String> getLookupElementWeights(LookupImpl lookup) {
71     final Map<LookupElement,StringBuilder> strings = lookup.getRelevanceStrings();
72     List<String> sb = new ArrayList<String>();
73     for (LookupElement item : lookup.getItems()) {
74       StringBuilder builder = strings.get(item);
75       String weight = builder == null ? "null" : builder.toString();
76       final String s = item.getLookupString() + "\t" + weight;
77       sb.add(s);
78     }
79     return sb;
80   }
81 }