Merge remote-tracking branch 'origin/master'

This commit is contained in:
Dmitry Trofimov
2015-01-08 15:36:38 +01:00
5 changed files with 57 additions and 14 deletions
@@ -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
@@ -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);
}
@@ -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 {}