inspection view: commit is redundant here IDEA-160735
[idea/community.git] / platform / lang-impl / src / com / intellij / codeInspection / ui / InspectionResultsViewUtil.java
1 /*
2  * Copyright 2000-2016 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.ui;
17
18 import com.intellij.codeInspection.ex.InspectionToolWrapper;
19 import com.intellij.codeInspection.reference.RefElement;
20 import com.intellij.codeInspection.reference.RefEntity;
21 import com.intellij.openapi.editor.Document;
22 import com.intellij.openapi.editor.Editor;
23 import com.intellij.openapi.editor.EditorFactory;
24 import com.intellij.openapi.fileEditor.FileDocumentManager;
25 import com.intellij.openapi.fileEditor.OpenFileDescriptor;
26 import com.intellij.openapi.vfs.VirtualFile;
27 import com.intellij.pom.Navigatable;
28 import com.intellij.psi.NavigatablePsiElement;
29 import com.intellij.psi.PsiElement;
30 import com.intellij.psi.PsiFile;
31 import com.intellij.ui.IdeBorderFactory;
32 import com.intellij.ui.components.JBLabel;
33 import org.jetbrains.annotations.NotNull;
34 import org.jetbrains.annotations.Nullable;
35
36 import javax.swing.*;
37
38 /**
39  * @author Dmitry Batkovich
40  */
41 public class InspectionResultsViewUtil {
42   static void releaseEditor(@Nullable Editor editor) {
43     if (editor != null && !editor.isDisposed()) {
44       EditorFactory.getInstance().releaseEditor(editor);
45     }
46   }
47
48   @Nullable
49   static Navigatable getNavigatableForInvalidNode(ProblemDescriptionNode node) {
50     RefEntity element = node.getElement();
51     while (element != null && !element.isValid()) {
52       element = element.getOwner();
53     }
54     if (!(element instanceof RefElement)) return null;
55     PsiElement containingElement = ((RefElement)element).getElement();
56     if (!(containingElement instanceof NavigatablePsiElement) || !containingElement.isValid()) return null;
57
58     final int lineNumber = node.getLineNumber();
59     if (lineNumber != -1) {
60       final PsiFile containingFile = containingElement.getContainingFile();
61       if (containingFile != null) {
62         final VirtualFile file = containingFile.getVirtualFile();
63         final Document document = FileDocumentManager.getInstance().getDocument(file);
64         if (document != null && document.getLineCount() > lineNumber - 1) {
65           return new OpenFileDescriptor(containingElement.getProject(),
66                                         file,
67                                         document.getLineStartOffset(lineNumber - 1));
68         }
69       }
70     }
71     return (Navigatable)containingElement;
72   }
73
74   @NotNull
75   static JLabel getNothingToShowTextLabel() {
76     return createLabelForText(InspectionViewNavigationPanel.getTitleText(false));
77   }
78
79   @NotNull
80   static JComponent getInvalidEntityLabel(@NotNull RefEntity entity) {
81     final String name = entity.getName();
82     return createLabelForText("\'" + name + "\' is no longer valid.");
83   }
84
85   public static JComponent getPreviewIsNotAvailable(@NotNull RefEntity entity) {
86     final String name = entity.getQualifiedName();
87     return createLabelForText("Preview is not available for \'" + name + "\'.");
88   }
89
90   @NotNull
91   static JComponent getApplyingFixLabel(@NotNull InspectionToolWrapper wrapper) {
92     return createLabelForText("Applying quick fix for \'" + wrapper.getDisplayName() + "\'...");
93   }
94
95   @NotNull
96   static JLabel createLabelForText(String text) {
97     final JLabel multipleSelectionLabel = new JBLabel(text);
98     multipleSelectionLabel.setVerticalAlignment(SwingConstants.TOP);
99     multipleSelectionLabel.setBorder(IdeBorderFactory.createEmptyBorder(16, 12, 0, 0));
100     return multipleSelectionLabel;
101   }
102 }