mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
+18
-1
@@ -16,6 +16,7 @@
|
||||
package com.intellij.codeInspection.bytecodeAnalysis;
|
||||
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.util.ThreadLocalCachedValue;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
@@ -41,8 +42,24 @@ public class BytecodeAnalysisConverter {
|
||||
public static final int SIGNATURE_HASH_SIZE = 4;
|
||||
public static final int HASH_SIZE = CLASS_HASH_SIZE + SIGNATURE_HASH_SIZE;
|
||||
|
||||
private static final ThreadLocalCachedValue<MessageDigest> HASHER_CACHE = new ThreadLocalCachedValue<MessageDigest>() {
|
||||
@Override
|
||||
public MessageDigest create() {
|
||||
try {
|
||||
return MessageDigest.getInstance("MD5");
|
||||
} catch (NoSuchAlgorithmException exception) {
|
||||
throw new RuntimeException(exception);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void init(MessageDigest value) {
|
||||
value.reset();
|
||||
}
|
||||
};
|
||||
|
||||
public static MessageDigest getMessageDigest() throws NoSuchAlgorithmException {
|
||||
return MessageDigest.getInstance("MD5");
|
||||
return HASHER_CACHE.getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -44,8 +44,6 @@ import com.intellij.openapi.progress.util.ProgressIndicatorUtils;
|
||||
import com.intellij.openapi.progress.util.ReadTask;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.*;
|
||||
import com.intellij.openapi.ui.popup.JBPopup;
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -58,7 +56,6 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiFileFactory;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.ui.awt.RelativePoint;
|
||||
import com.intellij.ui.components.JBScrollPane;
|
||||
import com.intellij.ui.table.JBTable;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
@@ -123,9 +120,11 @@ public class FindDialog extends DialogWrapper {
|
||||
protected JLabel myReplacePrompt;
|
||||
private HideableTitledPanel myScopePanel;
|
||||
private static boolean myPreviousResultsExpandedState;
|
||||
private static boolean myPreviewResultsTabWasSelected;
|
||||
private static final int RESULTS_PREVIEW_TAB_INDEX = 1;
|
||||
|
||||
private JBTable myResultsPreviewTable;
|
||||
private JBPopup myResultsPopup;
|
||||
private TabbedPane myContent;
|
||||
private volatile ProgressIndicatorBase myResultsPreviewSearchProgress;
|
||||
|
||||
public FindDialog(@NotNull Project project, @NotNull FindModel model, @NotNull Consumer<FindModel> myOkHandler){
|
||||
@@ -179,6 +178,7 @@ public class FindDialog extends DialogWrapper {
|
||||
}
|
||||
myComboBoxListeners.clear();
|
||||
if (myScopePanel != null) myPreviousResultsExpandedState = myScopePanel.isExpanded();
|
||||
if (myResultsPreviewTable != null) myPreviewResultsTabWasSelected = myContent.getSelectedIndex() == RESULTS_PREVIEW_TAB_INDEX;
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@@ -342,13 +342,9 @@ public class FindDialog extends DialogWrapper {
|
||||
|
||||
myResultsPreviewTable.setModel(model);
|
||||
myResultsPreviewTable.getColumnModel().getColumn(0).setCellRenderer(new UsageTableCellRenderer());
|
||||
myResultsPopup = JBPopupFactory.getInstance().createComponentPopupBuilder(new JBScrollPane(myResultsPreviewTable),
|
||||
myResultsPreviewTable)
|
||||
.setRequestFocus(false).createPopup();
|
||||
|
||||
myResultsPreviewTable.getEmptyText().setText("Searching...");
|
||||
|
||||
myResultsPopup.show(new RelativePoint(myInputComboBox, new Point(0, myInputComboBox.getHeight())));
|
||||
final AtomicInteger resultsCount = new AtomicInteger();
|
||||
|
||||
ProgressIndicatorUtils.scheduleWithWriteActionPriority(myResultsPreviewSearchProgress, new ReadTask() {
|
||||
@@ -400,7 +396,6 @@ public class FindDialog extends DialogWrapper {
|
||||
private void finishPreviousPreviewSearch() {
|
||||
if (myResultsPreviewSearchProgress != null && !myResultsPreviewSearchProgress.isCanceled()) {
|
||||
myResultsPreviewSearchProgress.cancel();
|
||||
if (myResultsPopup != null) myResultsPopup.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -518,6 +513,16 @@ public class FindDialog extends DialogWrapper {
|
||||
resultsOptionPanel.add(myCbToOpenInNewTab);
|
||||
}
|
||||
|
||||
if (myResultsPreviewTable != null) {
|
||||
TabbedPane pane = new TabbedPaneImpl(SwingConstants.TOP);
|
||||
pane.insertTab("Options", null, optionsPanel, null, 0);
|
||||
pane.insertTab("Preview", null, new JBScrollPane(myResultsPreviewTable), null, RESULTS_PREVIEW_TAB_INDEX);
|
||||
myContent = pane;
|
||||
if (myPreviewResultsTabWasSelected) myContent.setSelectedIndex(RESULTS_PREVIEW_TAB_INDEX);
|
||||
|
||||
return pane.getComponent();
|
||||
}
|
||||
|
||||
return optionsPanel;
|
||||
}
|
||||
|
||||
@@ -1397,6 +1402,7 @@ public class FindDialog extends DialogWrapper {
|
||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||
myUsageRenderer.clear();
|
||||
myFileAndLineNumber.clear();
|
||||
setBackground(isSelected && hasFocus ? UIUtil.getTableSelectionBackground() : UIUtil.getTableBackground());
|
||||
|
||||
if (value instanceof UsageInfo2UsageAdapter) {
|
||||
UsageInfo2UsageAdapter usageAdapter = (UsageInfo2UsageAdapter)value;
|
||||
|
||||
@@ -26,7 +26,7 @@ find.dialog.find.button=Find
|
||||
find.usages.in.file.dialog.title=Find Usages in File
|
||||
find.usages.dialog.title=Find Usages
|
||||
find.open.in.new.tab.checkbox=Open in new ta&b
|
||||
find.options.group=Options
|
||||
find.options.group=General
|
||||
find.options.search.for.text.occurences.checkbox=Search for text &occurrences
|
||||
find.options.skip.results.tab.with.one.usage.checkbox=S&kip results tab with one usage
|
||||
find.options.skip.results.tab.with.one.occurrence.checkbox=S&kip results tab when only one occurrence is found
|
||||
|
||||
+13
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -70,6 +70,9 @@ public class SerializableStoresNonSerializableInspection extends BaseInspection
|
||||
if (!(parent instanceof PsiDeclarationStatement) && !(aClass instanceof PsiAnonymousClass)) {
|
||||
return;
|
||||
}
|
||||
if (!SerializationUtils.isSerializable(aClass)) {
|
||||
return;
|
||||
}
|
||||
final LocalVariableReferenceFinder visitor = new LocalVariableReferenceFinder(aClass);
|
||||
aClass.accept(visitor);
|
||||
}
|
||||
@@ -77,6 +80,15 @@ public class SerializableStoresNonSerializableInspection extends BaseInspection
|
||||
@Override
|
||||
public void visitLambdaExpression(PsiLambdaExpression lambda) {
|
||||
super.visitLambdaExpression(lambda);
|
||||
final PsiType type = lambda.getFunctionalInterfaceType();
|
||||
if (!(type instanceof PsiClassType)) {
|
||||
return;
|
||||
}
|
||||
final PsiClassType classType = (PsiClassType)type;
|
||||
final PsiClass aClass = classType.resolve();
|
||||
if (!SerializationUtils.isSerializable(aClass)) {
|
||||
return;
|
||||
}
|
||||
final LocalVariableReferenceFinder visitor = new LocalVariableReferenceFinder(lambda);
|
||||
lambda.accept(visitor);
|
||||
}
|
||||
|
||||
+10
-2
@@ -1,6 +1,14 @@
|
||||
class SerializableStoresNonSerializable {
|
||||
|
||||
void f(B b, C c) {
|
||||
void f(final B b, final C c) {
|
||||
new Object() {
|
||||
@Override
|
||||
public String toString() {
|
||||
System.out.println(c);
|
||||
System.out.println(b);
|
||||
return super.toString();
|
||||
}
|
||||
};
|
||||
new A() {
|
||||
@Override
|
||||
public void m() {
|
||||
@@ -21,7 +29,7 @@ class SerializableStoresNonSerializable {
|
||||
}
|
||||
}
|
||||
}
|
||||
interface A {
|
||||
interface A extends java.io.Serializable {
|
||||
void m();
|
||||
}
|
||||
class B {}
|
||||
|
||||
Reference in New Issue
Block a user