Merge branch 'master' into upsource-master

This commit is contained in:
Evgeny Pasynkov
2012-06-27 09:32:50 +02:00
19 changed files with 81 additions and 110 deletions
@@ -20,7 +20,6 @@ import com.intellij.codeInsight.daemon.QuickFixBundle;
import com.intellij.codeInsight.template.Template;
import com.intellij.codeInsight.template.TemplateEditingAdapter;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
@@ -29,14 +28,10 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
/**
* @author Mike
*/
public class CreateFieldFromUsageFix extends CreateVarFromUsageFix {
public static boolean DEBUG = false;
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.daemon.impl.quickfix.CreateFieldFromUsageFix");
public CreateFieldFromUsageFix(PsiReferenceExpression referenceElement) {
super(referenceElement);
@@ -74,10 +69,6 @@ public class CreateFieldFromUsageFix extends CreateVarFromUsageFix {
final PsiFile targetFile = targetClass.getContainingFile();
ExpectedTypeInfo[] expectedTypes = CreateFromUsageUtils.guessExpectedTypes(myReferenceExpression, false);
if (DEBUG) {
System.out.println("CreateFieldFromUsageFix.invokeImpl");
System.out.println("expectedTypes = " + Arrays.toString(expectedTypes));
}
String fieldName = myReferenceExpression.getReferenceName();
assert fieldName != null;
@@ -774,34 +774,16 @@ public class CreateFromUsageUtils {
public int compare(final PsiMember m1, final PsiMember m2) {
ProgressManager.checkCanceled();
int result = JavaStatisticsManager.createInfo(null, m2).getUseCount() - JavaStatisticsManager.createInfo(null, m1).getUseCount();
if (CreateFieldFromUsageFix.DEBUG) {
System.out.println("CreateFromUsageUtils.compare");
System.out.println("m1 = " + m1);
System.out.println("m2 = " + m2);
System.out.println("result = " + result);
}
if (result != 0) return result;
final PsiClass aClass = m1.getContainingClass();
final PsiClass bClass = m2.getContainingClass();
if (aClass == null || bClass == null) return 0;
if (CreateFieldFromUsageFix.DEBUG) {
System.out.println("aClass = " + aClass);
System.out.println("bClass = " + bClass);
}
result = JavaStatisticsManager.createInfo(null, bClass).getUseCount() - JavaStatisticsManager.createInfo(null, aClass).getUseCount();
if (CreateFieldFromUsageFix.DEBUG) {
System.out.println("result2 = " + result);
}
if (result != 0) return result;
WeighingComparable<PsiElement,ProximityLocation> proximity1 = PsiProximityComparator.getProximity(m1, expression);
WeighingComparable<PsiElement,ProximityLocation> proximity2 = PsiProximityComparator.getProximity(m2, expression);
if (proximity1 != null && proximity2 != null) {
if (CreateFieldFromUsageFix.DEBUG) {
System.out.println("proximity1 = " + proximity1);
System.out.println("proximity2 = " + proximity2);
}
return proximity2.compareTo(proximity1);
}
@@ -816,11 +798,6 @@ public class CreateFromUsageUtils {
ProgressManager.checkCanceled();
PsiClass aClass = member.getContainingClass();
if (aClass instanceof PsiAnonymousClass || aClass == null) continue;
if (CreateFieldFromUsageFix.DEBUG) {
System.out.println("CreateFromUsageUtils.addMemberInfo");
System.out.println("member = " + member);
System.out.println("aClass = " + aClass);
}
if (facade.getResolveHelper().isAccessible(member, expression, null)) {
PsiClassType type;
@@ -59,7 +59,7 @@ public class DfaVariableState implements Cloneable {
}
List<PsiExpression> initializers = NullableStuffInspection.findAllConstructorInitializers((PsiField)var);
if (!nullable && initializers.isEmpty()) {
if (initializers.isEmpty()) {
return false;
}
@@ -78,7 +78,7 @@ public class DfaVariableState implements Cloneable {
return false;
}
}
return true;
return !nullable;
}
protected DfaVariableState(final DfaVariableState toClone) {
@@ -49,10 +49,10 @@ import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import static com.intellij.util.containers.ContainerUtil.addIfNotNull;
import static com.intellij.util.containers.ContainerUtilRt.createEmptyCOWList;
public class NullableStuffInspection extends BaseLocalInspectionTool {
// deprecated fields remain to minimize changes to users inspection profiles (which are often located in version control).
@@ -485,7 +485,7 @@ public class NullableStuffInspection extends BaseLocalInspectionTool {
}
public static List<PsiExpression> findAllConstructorInitializers(PsiField field) {
final List<PsiExpression> result = new ArrayList<PsiExpression>();
final List<PsiExpression> result = createEmptyCOWList();
addIfNotNull(result, field.getInitializer());
PsiClass containingClass = field.getContainingClass();
@@ -1,15 +1,24 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.lang.Object;
public class Doo {
private final Object myA;
private final Object myB;
private final Object myC;
public Doo(@Nullable Object myA, @NotNull Object myB) {
public Doo(@Nullable Object myA, @NotNull Object myB, Object c) {
this.myA = myA;
this.myB = myB;
myC = c;
}
int bar() {
return myC.hashCode();
}
int foo() {
if (<warning descr="Condition 'myB != null' is always 'true'">myB != null</warning> &&
<warning descr="Method invocation 'myA.equals(myB)' may produce 'java.lang.NullPointerException'">myA.equals(myB)</warning>) {
@@ -10,6 +10,8 @@ import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupManager;
import com.intellij.codeInsight.lookup.impl.LookupImpl;
import com.intellij.ide.ui.UISettings;
import com.intellij.psi.statistics.StatisticsManager;
import com.intellij.psi.statistics.impl.StatisticsManagerImpl;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.annotations.NonNls;
@@ -25,6 +27,12 @@ public abstract class CompletionSortingTestCase extends LightFixtureCompletionTe
myType = type;
}
@Override
protected void setUp() throws Exception {
super.setUp();
((StatisticsManagerImpl)StatisticsManager.getInstance()).enableStatistics(getTestRootDisposable());
}
@Override
protected void tearDown() throws Exception {
LookupManager.getInstance(getProject()).hideActiveLookup();
@@ -10,8 +10,6 @@ import com.intellij.openapi.roots.LanguageLevelProjectExtension;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
import com.intellij.psi.statistics.StatisticsManager;
import com.intellij.psi.statistics.impl.StatisticsManagerImpl;
import com.intellij.testFramework.LightCodeInsightTestCase;
import com.intellij.testFramework.TestDataPath;
@@ -26,12 +24,6 @@ import com.intellij.testFramework.TestDataPath;
public class CompletionStyleTest extends LightCodeInsightTestCase{
private static final String BASE_PATH = "/codeInsight/completion/style";
@Override
protected void setUp() throws Exception {
super.setUp();
((StatisticsManagerImpl)StatisticsManager.getInstance()).clearStatistics();
}
@Override
protected LanguageLevel getLanguageLevel() {
return LanguageLevel.JDK_1_6;
@@ -5,8 +5,6 @@ import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupManager;
import com.intellij.codeInsight.lookup.impl.LookupImpl;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.psi.statistics.StatisticsManager;
import com.intellij.psi.statistics.impl.StatisticsManagerImpl;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import org.jetbrains.annotations.NotNull;
@@ -17,12 +15,6 @@ import org.jetbrains.annotations.NotNull;
public abstract class LightFixtureCompletionTestCase extends LightCodeInsightFixtureTestCase {
protected LookupElement[] myItems;
@Override
protected void setUp() throws Exception {
super.setUp();
((StatisticsManagerImpl)StatisticsManager.getInstance()).clearStatistics();
}
@NotNull
@Override
protected LightProjectDescriptor getProjectDescriptor() {
@@ -1,6 +1,5 @@
package com.intellij.codeInsight.daemon.quickFix;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateFieldFromUsageFix;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.vfs.VfsUtil;
@@ -23,14 +22,7 @@ public class CreateFieldFromUsageTest extends LightQuickFixTestCase{
public void testCreateFromEquals() throws Exception { doSingleTest(); }
public void testCreateFromEqualsToPrimitiveType() throws Exception { doSingleTest(); }
@Override
protected void tearDown() throws Exception {
CreateFieldFromUsageFix.DEBUG = false;
super.tearDown();
}
public void testSortByRelevance() throws Exception {
CreateFieldFromUsageFix.DEBUG = true;
new WriteCommandAction(getProject()) {
@Override
protected void run(Result result) throws Exception {
@@ -19,8 +19,6 @@ import com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupManager;
import com.intellij.codeInsight.lookup.impl.LookupImpl;
import com.intellij.psi.statistics.StatisticsManager;
import com.intellij.psi.statistics.impl.StatisticsManagerImpl;
import com.intellij.testFramework.PlatformTestCase;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
@@ -38,12 +36,6 @@ public abstract class CompletionTestCase extends DaemonAnalyzerTestCase {
protected LookupElement[] myItems;
private CompletionType myType = CompletionType.BASIC;
@Override
protected void setUp() throws Exception {
super.setUp();
((StatisticsManagerImpl)StatisticsManager.getInstance()).clearStatistics();
}
@Override
protected void tearDown() throws Exception {
try {
@@ -19,8 +19,6 @@ import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupManager;
import com.intellij.codeInsight.lookup.impl.LookupImpl;
import com.intellij.testFramework.LightCodeInsightTestCase;
import com.intellij.psi.statistics.impl.StatisticsManagerImpl;
import com.intellij.psi.statistics.StatisticsManager;
import com.intellij.util.containers.HashSet;
import org.jetbrains.annotations.NonNls;
@@ -37,12 +35,6 @@ public abstract class LightCompletionTestCase extends LightCodeInsightTestCase {
protected LookupElement[] myItems;
private CompletionType myType = CompletionType.BASIC;
@Override
protected void setUp() throws Exception {
super.setUp();
((StatisticsManagerImpl)StatisticsManager.getInstance()).clearStatistics();
}
@Override
protected void tearDown() throws Exception {
LookupManager.getInstance(getProject()).hideActiveLookup();
@@ -85,7 +85,7 @@ class ValueContainerImpl<Value> extends UpdatableValueContainer<Value> implement
final Value value = valueIterator.next();
if (isAssociated(value, inputId)) {
if (toRemove == null) toRemove = new SmartList<Value>();
else LOG.error("Expected only one value per-inputId");
else LOG.error("Expected only one value per-inputId", String.valueOf(toRemove.get(0)), String.valueOf(value));
toRemove.add(value);
}
}
@@ -17,9 +17,11 @@ package com.intellij.psi.statistics.impl;
import com.intellij.CommonBundle;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Disposer;
import com.intellij.psi.statistics.StatisticsInfo;
import com.intellij.psi.statistics.StatisticsManager;
import com.intellij.reference.SoftReference;
@@ -43,6 +45,7 @@ public class StatisticsManagerImpl extends StatisticsManager {
private final SoftReference[] myUnits = new SoftReference[UNIT_COUNT];
private final HashSet<StatisticsUnit> myModifiedUnits = new HashSet<StatisticsUnit>();
private boolean myTestingStatistics;
public int getUseCount(@NotNull final StatisticsInfo info) {
if (info == StatisticsInfo.EMPTY) return 0;
@@ -57,6 +60,9 @@ public class StatisticsManagerImpl extends StatisticsManager {
public void incUseCount(@NotNull final StatisticsInfo info) {
if (info == StatisticsInfo.EMPTY) return;
if (ApplicationManager.getApplication().isUnitTestMode() && !myTestingStatistics) {
return;
}
final String key1 = info.getContext();
int unitNumber = getUnitNumber(key1);
@@ -177,9 +183,17 @@ public class StatisticsManagerImpl extends StatisticsManager {
}
@TestOnly
public void clearStatistics() {
synchronized (LOCK) {
Arrays.fill(myUnits, null);
}
public void enableStatistics(@NotNull Disposable parentDisposable) {
myTestingStatistics = true;
Disposer.register(parentDisposable, new Disposable() {
@Override
public void dispose() {
synchronized (LOCK) {
Arrays.fill(myUnits, null);
}
myTestingStatistics = false;
}
});
}
}
@@ -141,6 +141,7 @@ refactoring.introduceVariable=Extract Variable refactoring
refactoring.introduce.selection.error=Cannot perform refactoring using selected element(s)
refactoring.introduce.name.error=Incorrect name
refactoring.introduce.name.used.error=This name is already used
refactoring.introduce.variable.scope.error=Name clashes with existing variable
refactoring.introduce.placing.error=Cannot extract {0} variable
variable.of.type=Variable of &type:
@@ -19,22 +19,16 @@ public class StatisticsManagerTest extends LightPlatformTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
((StatisticsManagerImpl)StatisticsManager.getInstance()).clearStatistics();
((StatisticsManagerImpl)StatisticsManager.getInstance()).enableStatistics(getTestRootDisposable());
}
@Override
protected void tearDown() throws Exception {
((StatisticsManagerImpl)StatisticsManager.getInstance()).clearStatistics();
super.tearDown();
}
private void incUseCount(String value, int times) {
private static void incUseCount(String value, int times) {
for (int i = 0; i < times; i++) {
StatisticsManager.getInstance().incUseCount(new StatisticsInfo(TEST_CONTEXT, value));
}
}
private int getUseCount(String value) {
private static int getUseCount(String value) {
return StatisticsManager.getInstance().getUseCount(new StatisticsInfo(TEST_CONTEXT, value));
}
@@ -68,7 +68,10 @@ import com.intellij.openapi.util.EmptyRunnable;
import com.intellij.openapi.util.ShutDownTracker;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.*;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.openapi.vfs.encoding.EncodingManager;
import com.intellij.openapi.vfs.encoding.EncodingManagerImpl;
import com.intellij.openapi.vfs.impl.VirtualFilePointerManagerImpl;
@@ -209,7 +212,7 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
new Throwable(projectFile.getPath()).printStackTrace(new PrintStream(buffer));
ourProject = PlatformTestCase.createProject(projectFile, LIGHT_PROJECT_MARK +buffer.toString());
ourProject = PlatformTestCase.createProject(projectFile, LIGHT_PROJECT_MARK + buffer.toString());
if (!ourHaveShutdownHook) {
ourHaveShutdownHook = true;
registerShutdownHook();
@@ -233,7 +236,10 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
FileBasedIndex.getInstance().registerIndexableSet(new IndexableFileSet() {
@Override
public boolean isInSet(@NotNull final VirtualFile file) {
return ourSourceRoot != null && file.getFileSystem() == ourSourceRoot.getFileSystem() && ourProject.isOpen();
return ourSourceRoot != null &&
file.getFileSystem() == ourSourceRoot.getFileSystem() &&
ourProject != null &&
ourProject.isOpen();
}
@Override
@@ -313,7 +319,8 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
super.setUp();
initApplication();
ourApplication.setDataProvider(this);
doSetup(new SimpleLightProjectDescriptor(getModuleType(), getProjectJDK()), configureLocalInspectionTools(), myAvailableInspectionTools);
doSetup(new SimpleLightProjectDescriptor(getModuleType(), getProjectJDK()), configureLocalInspectionTools(),
myAvailableInspectionTools);
((InjectedLanguageManagerImpl)InjectedLanguageManager.getInstance(getProject())).pushInjectors();
storeSettings();
@@ -326,7 +333,8 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
}
public static void doSetup(final LightProjectDescriptor descriptor,
final LocalInspectionTool[] localInspectionTools, final Map<String, InspectionTool> availableInspectionTools) throws Exception {
final LocalInspectionTool[] localInspectionTools, final Map<String, InspectionTool> availableInspectionTools)
throws Exception {
assertNull("Previous test " + ourTestCase + " hasn't called tearDown(). Probably overriden without super call.", ourTestCase);
IdeaLogger.ourErrorsOccurred = null;
@@ -348,7 +356,7 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
@Override
@NotNull
public InspectionProfileEntry[] getInspectionTools(PsiElement element) {
if (availableInspectionTools != null){
if (availableInspectionTools != null) {
final Collection<InspectionTool> tools = availableInspectionTools.values();
return tools.toArray(new InspectionTool[tools.size()]);
}
@@ -405,7 +413,13 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
catch (Exception e) {
}
assertTrue("open: "+getProject().isOpen()+"; disposed:"+getProject().isDisposed()+"; startup passed:"+ passed+"; all open projects: "+
assertTrue("open: " +
getProject().isOpen() +
"; disposed:" +
getProject().isDisposed() +
"; startup passed:" +
passed +
"; all open projects: " +
Arrays.asList(ProjectManager.getInstance().getOpenProjects()), getProject().isInitialized());
CodeStyleSettingsManager.getInstance(getProject()).setTemporarySettings(new CodeStyleSettings());
@@ -443,8 +457,10 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
private static void enableInspectionTool(final Map<String, InspectionTool> availableLocalTools, InspectionTool wrapper) {
final String shortName = wrapper.getShortName();
final HighlightDisplayKey key = HighlightDisplayKey.find(shortName);
if (key == null){
HighlightDisplayKey.register(shortName, wrapper.getDisplayName(), wrapper instanceof LocalInspectionToolWrapper ? ((LocalInspectionToolWrapper)wrapper).getTool().getID() : wrapper.getShortName());
if (key == null) {
HighlightDisplayKey.register(shortName, wrapper.getDisplayName(), wrapper instanceof LocalInspectionToolWrapper
? ((LocalInspectionToolWrapper)wrapper).getTool().getID()
: wrapper.getShortName());
}
availableLocalTools.put(shortName, wrapper);
}
@@ -528,7 +544,7 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
public void run() {
((UndoManagerImpl)UndoManager.getGlobalInstance()).dropHistoryInTests();
((UndoManagerImpl)UndoManager.getInstance(project)).dropHistoryInTests();
UIUtil.dispatchAllInvocationEvents();
}
});
@@ -546,7 +562,8 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
checkEditorsReleased();
}
if (isLight(project)) {
((ProjectImpl)project).setTemporarilyDisposed(true); // mark temporarily as disposed so that rogue component trying to access it will fail
((ProjectImpl)project)
.setTemporarilyDisposed(true); // mark temporarily as disposed so that rogue component trying to access it will fail
documentManager.clearUncommitedDocuments();
}
}
@@ -631,11 +648,11 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
}
finally {
//try{
tearDown();
tearDown();
//}
//catch(Throwable th){
// noinspection CallToPrintStackTrace
//th.printStackTrace();
//th.printStackTrace();
//}
}
}
@@ -665,15 +682,18 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
* @param text - file text.
* @return dummy psi file.
* @throws com.intellij.util.IncorrectOperationException
*
*/
protected static PsiFile createFile(@NonNls String fileName, @NonNls String text) throws IncorrectOperationException {
FileType fileType = FileTypeManager.getInstance().getFileTypeByFileName(fileName);
return PsiFileFactory.getInstance(getProject()).createFileFromText(fileName, fileType, text, LocalTimeCounter.currentTime(), true, false);
return PsiFileFactory.getInstance(getProject())
.createFileFromText(fileName, fileType, text, LocalTimeCounter.currentTime(), true, false);
}
protected static PsiFile createLightFile(@NonNls String fileName, String text) throws IncorrectOperationException {
FileType fileType = FileTypeManager.getInstance().getFileTypeByFileName(fileName);
return PsiFileFactory.getInstance(getProject()).createFileFromText(fileName, fileType, text, LocalTimeCounter.currentTime(), false, false);
return PsiFileFactory.getInstance(getProject())
.createFileFromText(fileName, fileType, text, LocalTimeCounter.currentTime(), false, false);
}
/**
@@ -795,6 +815,5 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
final String[] newUrls = newSdk.getRootProvider().getUrls(OrderRootType.CLASSES);
return CollectionFactory.hashSet(myUrls).equals(CollectionFactory.hashSet(newUrls));
}
}
}
@@ -1050,8 +1050,6 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
@Override
public void tearDown() throws Exception {
((StatisticsManagerImpl)StatisticsManager.getInstance()).clearStatistics();
FileEditorManager editorManager = FileEditorManager.getInstance(getProject());
VirtualFile[] openFiles = editorManager.getOpenFiles();
for (VirtualFile openFile : openFiles) {
@@ -60,7 +60,7 @@ public class ControlFlowTest extends LightCodeInsightFixtureTestCase {
public void testAnonymous() {doTest();}
public void testSomeCatches() {doTest();}
public void testOrInReturn() {doTest();}
public void testInString() {doTest();}
public void testVarInString() {doTest();}
public void doTest() {
final List<String> input = TestUtils.readInput(getTestDataPath() + getTestName(true) + ".test");