diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImportHelperTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImportHelperTest.java index 6499e8fc6a4a..dcb35fb4ffa5 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImportHelperTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/ImportHelperTest.java @@ -32,7 +32,6 @@ import com.intellij.openapi.actionSystem.IdeActions; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.command.WriteCommandAction; -import com.intellij.openapi.command.impl.UndoManagerImpl; import com.intellij.openapi.command.undo.UndoManager; import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider; import com.intellij.openapi.util.text.StringUtil; @@ -66,6 +65,13 @@ public class ImportHelperTest extends LightDaemonAnalyzerTestCase { enableInspectionTool(new UnusedImportInspection()); } + @Override + protected void tearDown() throws Exception { + CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = false; + //noinspection SuperTearDownInFinally + super.tearDown(); + } + @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() { @@ -210,96 +216,70 @@ public class ImportHelperTest extends LightDaemonAnalyzerTestCase { } public void testAutoImportCaretLocation() { - boolean old = CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY; - try { - CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = true; - @Language("JAVA") - String text = "class X { ArrayList c; }"; - configureByText(text); - ((UndoManagerImpl)UndoManager.getInstance(getProject())).flushCurrentCommandMerger(); - ((UndoManagerImpl)UndoManager.getInstance(getProject())).clearUndoRedoQueueInTests(getFile().getVirtualFile()); - type(" "); - backspace(); + String text = "class X { ArrayList c; }"; + configureByText(text); + CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = true; + type(" "); + backspace(); - assertOneElement(highlightErrors()); + assertOneElement(highlightErrors()); - int offset = getEditor().getCaretModel().getOffset(); - PsiReference ref = getFile().findReferenceAt(offset - 1); - assertTrue(ref instanceof PsiJavaCodeReferenceElement); + int offset = getEditor().getCaretModel().getOffset(); + PsiReference ref = getFile().findReferenceAt(offset - 1); + assertTrue(ref instanceof PsiJavaCodeReferenceElement); - ImportClassFixBase.Result result = new ImportClassFix((PsiJavaCodeReferenceElement)ref).doFix(getEditor(), true, false); - assertEquals(ImportClassFixBase.Result.POPUP_NOT_SHOWN, result); - UIUtil.dispatchAllInvocationEvents(); + ImportClassFixBase.Result result = new ImportClassFix((PsiJavaCodeReferenceElement)ref).doFix(getEditor(), true, false); + assertEquals(ImportClassFixBase.Result.POPUP_NOT_SHOWN, result); + UIUtil.dispatchAllInvocationEvents(); - getEditor().getCaretModel().moveToOffset(offset - 1); - result = new ImportClassFix((PsiJavaCodeReferenceElement)ref).doFix(getEditor(), true, false); - assertEquals(ImportClassFixBase.Result.CLASS_AUTO_IMPORTED, result); - UIUtil.dispatchAllInvocationEvents(); + getEditor().getCaretModel().moveToOffset(offset - 1); + result = new ImportClassFix((PsiJavaCodeReferenceElement)ref).doFix(getEditor(), true, false); + assertEquals(ImportClassFixBase.Result.CLASS_AUTO_IMPORTED, result); + UIUtil.dispatchAllInvocationEvents(); - assertEmpty(highlightErrors()); - } - finally { - CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = old; - } + assertEmpty(highlightErrors()); } public void testAutoImportCaretLocation2() { - boolean old = CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY; - try { - CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = true; - @Language("JAVA") - String text = "class X { ArrayList c = new ArrayList(); }"; - configureByText(text); - ((UndoManagerImpl)UndoManager.getInstance(getProject())).flushCurrentCommandMerger(); - ((UndoManagerImpl)UndoManager.getInstance(getProject())).clearUndoRedoQueueInTests(getFile().getVirtualFile()); - type(" "); - backspace(); + String text = "class X { ArrayList c = new ArrayList(); }"; + configureByText(text); + CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = true; + type(" "); + backspace(); - assertEquals(2, highlightErrors().size()); - UIUtil.dispatchAllInvocationEvents(); + assertEquals(2, highlightErrors().size()); + UIUtil.dispatchAllInvocationEvents(); - int offset = getEditor().getCaretModel().getOffset(); - PsiReference ref = getFile().findReferenceAt(offset); - assertTrue(ref instanceof PsiJavaCodeReferenceElement); + int offset = getEditor().getCaretModel().getOffset(); + PsiReference ref = getFile().findReferenceAt(offset); + assertTrue(ref instanceof PsiJavaCodeReferenceElement); - ImportClassFixBase.Result result = new ImportClassFix((PsiJavaCodeReferenceElement)ref).doFix(getEditor(), true, false); - assertEquals(ImportClassFixBase.Result.CLASS_AUTO_IMPORTED, result); - UIUtil.dispatchAllInvocationEvents(); + ImportClassFixBase.Result result = new ImportClassFix((PsiJavaCodeReferenceElement)ref).doFix(getEditor(), true, false); + assertEquals(ImportClassFixBase.Result.CLASS_AUTO_IMPORTED, result); + UIUtil.dispatchAllInvocationEvents(); - assertEmpty(highlightErrors()); - } - finally { - CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = old; - } + assertEmpty(highlightErrors()); } public void testAutoImportWorksWhenITypeSpaceAfterClassName() { - @Language("JAVA") @NonNls String text = "class S { ArrayList }"; configureByText(text); - boolean old = CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY; CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = true; - DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); - try { - doHighlighting(); - //caret is too close - assertEmpty(((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); + doHighlighting(); + //caret is too close + assertEmpty(((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); - type(" "); + type(" "); - PsiJavaCodeReferenceElement element = - (PsiJavaCodeReferenceElement)getFile().findReferenceAt(getEditor().getCaretModel().getOffset() - 2); - ImportClassFix fix = new ImportClassFix(element); - ImportClassFixBase.Result result = fix.doFix(getEditor(), false, false); - assertEquals(ImportClassFixBase.Result.CLASS_AUTO_IMPORTED, result); + PsiJavaCodeReferenceElement element = + (PsiJavaCodeReferenceElement)getFile().findReferenceAt(getEditor().getCaretModel().getOffset() - 2); + ImportClassFix fix = new ImportClassFix(element); + ImportClassFixBase.Result result = fix.doFix(getEditor(), false, false); + assertEquals(ImportClassFixBase.Result.CLASS_AUTO_IMPORTED, result); - assertNotSame(0, ((PsiJavaFile)getFile()).getImportList().getAllImportStatements().length); - } - finally { - CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = old; - } + assertNotSame(0, ((PsiJavaFile)getFile()).getImportList().getAllImportStatements().length); } public void testAutoImportAfterUncomment() { @@ -307,31 +287,24 @@ public class ImportHelperTest extends LightDaemonAnalyzerTestCase { @NonNls String text = "class S { /*ArrayList l; HashMap h; */ }"; configureByText(text); - boolean old = CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY; CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = true; DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); - try { - doHighlighting(); + doHighlighting(); - assertEmpty(((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); + assertEmpty(((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); - EditorTestUtil.executeAction(getEditor(), IdeActions.ACTION_COMMENT_BLOCK); + EditorTestUtil.executeAction(getEditor(), IdeActions.ACTION_COMMENT_BLOCK); - doHighlighting(); - UIUtil.dispatchAllInvocationEvents(); + doHighlighting(); + UIUtil.dispatchAllInvocationEvents(); - assertEmpty(highlightErrors()); + assertEmpty(highlightErrors()); - assertNotSame(0, ((PsiJavaFile)getFile()).getImportList().getAllImportStatements().length); - } - finally { - CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = old; - } + assertNotSame(0, ((PsiJavaFile)getFile()).getImportList().getAllImportStatements().length); } public void testEnsureOptimizeImportsWhenInspectionReportsErrors() { - @Language("JAVA") @NonNls String text = "import java.util.List; class S { } "; configureByText(text); //ensure error will be provided by a local inspection @@ -357,9 +330,8 @@ public class ImportHelperTest extends LightDaemonAnalyzerTestCase { }; tool.setEnabled(true, ClassNamingConvention.CLASS_NAMING_CONVENTION_SHORT_NAME); enableInspectionTool(tool); - + CodeInsightWorkspaceSettings.getInstance(getProject()).setOptimizeImportsOnTheFly(true, getTestRootDisposable()); - DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); List errs = highlightErrors(); //error corresponding to too short class name @@ -374,12 +346,8 @@ public class ImportHelperTest extends LightDaemonAnalyzerTestCase { } public void testAutoImportWorks() { - @Language("JAVA") @NonNls final String text = "class S { JFrame x; }"; configureByText(text); - UndoManagerImpl undoManager = (UndoManagerImpl)UndoManager.getInstance(getProject()); - undoManager.flushCurrentCommandMerger(); - undoManager.clearUndoRedoQueueInTests(getFile().getVirtualFile()); assertFalse(DaemonListeners.canChangeFileSilently(getFile())); @@ -389,45 +357,34 @@ public class ImportHelperTest extends LightDaemonAnalyzerTestCase { type(" "); assertTrue(DaemonListeners.canChangeFileSilently(getFile())); - undoManager.undo(TextEditorProvider.getInstance().getTextEditor(getEditor())); + UndoManager.getInstance(getProject()).undo(TextEditorProvider.getInstance().getTextEditor(getEditor())); - assertFalse( - DaemonListeners.canChangeFileSilently(getFile()));//CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = old; + assertFalse(DaemonListeners.canChangeFileSilently(getFile())); } public void testAutoImportOfGenericReference() { - @Language("JAVA") @NonNls final String text = "class S {{ new ArrayList }}"; configureByText(text); EditorTestUtil.setEditorVisibleSize(getEditor(), 1000, 1000); // make sure editor is visible - auto-import works only for visible area - boolean old = CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY; CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = true; - try { - DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); + DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); - ((UndoManagerImpl)UndoManager.getInstance(getProject())).flushCurrentCommandMerger(); - ((UndoManagerImpl)UndoManager.getInstance(getProject())).clearUndoRedoQueueInTests(getFile().getVirtualFile()); - type(" "); - backspace(); + type(" "); + backspace(); - doHighlighting(); - //caret is too close - assertEmpty(((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); + doHighlighting(); + //caret is too close + assertEmpty(((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); - caretRight(); + caretRight(); - doHighlighting(); + doHighlighting(); - assertNotSame(0, ((PsiJavaFile)getFile()).getImportList().getAllImportStatements().length); - } - finally { - CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = old; - } + assertNotSame(0, ((PsiJavaFile)getFile()).getImportList().getAllImportStatements().length); } public void testAutoOptimizeUnresolvedImports() { - @Language("JAVA") @NonNls String text = "import xxx.yyy; class S { } "; configureByText(text); @@ -449,7 +406,6 @@ public class ImportHelperTest extends LightDaemonAnalyzerTestCase { } public void testAutoOptimizeDoesntSuddenlyRemoveImportsDuringTyping() { - @Language("JAVA") @NonNls String text = "package x; " + "import java.util.ArrayList; " + "class S {{ ArrayList l;\n" + @@ -457,7 +413,6 @@ public class ImportHelperTest extends LightDaemonAnalyzerTestCase { configureByText(text); CodeInsightWorkspaceSettings.getInstance(getProject()).setOptimizeImportsOnTheFly(true, getTestRootDisposable()); - DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); List errs = highlightErrors(); @@ -482,95 +437,63 @@ public class ImportHelperTest extends LightDaemonAnalyzerTestCase { } public void testAutoInsertImportForInnerClass() { - @Language("JAVA") @NonNls String text = "package x; class S { void f(ReadLock r){} } "; configureByText(text); - boolean old = CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY; CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = true; - DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); - try { - List errs = highlightErrors(); - assertEquals(1, errs.size()); + List errs = highlightErrors(); + assertEquals(1, errs.size()); - assertEmpty(((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); - type("/* */"); - doHighlighting(); - UIUtil.dispatchAllInvocationEvents(); - assertEmpty(((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); - } - finally { - CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = old; - } + assertEmpty(((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); + type("/* */"); + doHighlighting(); + UIUtil.dispatchAllInvocationEvents(); + assertEmpty(((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); } public void testAutoInsertImportForInnerClassAllowInnerClassImports() { - @Language("JAVA") @NonNls String text = "package x; class S { void f(ReadLock r){} } "; configureByText(text); JavaCodeStyleSettings javaCodeStyleSettings = CodeStyle.getSettings(getFile()).getCustomSettings(JavaCodeStyleSettings.class); javaCodeStyleSettings.INSERT_INNER_CLASS_IMPORTS = true; - boolean old = CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY; CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = true; DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); - try { - type(" "); - List errs = highlightErrors(); - assertEmpty(errs); + type(" "); + List errs = highlightErrors(); + assertEmpty(errs); - assertSize(1, ((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); - } - finally { - CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = old; - } + assertSize(1, ((PsiJavaFile)getFile()).getImportList().getAllImportStatements()); } public void testAutoImportSkipsClassReferenceInMethodPosition() { - @Language("JAVA") @NonNls String text = "package x; import java.util.HashMap; class S { HashMap f(){ return HashMap ();} } "; configureByText(text); - boolean old = CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY; CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = true; - DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); - try { - List errs = highlightErrors(); - assertTrue(errs.size() > 1); + List errs = highlightErrors(); + assertTrue(errs.size() > 1); - PsiJavaFile javaFile = (PsiJavaFile)getFile(); - assertEquals(1, javaFile.getImportList().getAllImportStatements().length); + PsiJavaFile javaFile = (PsiJavaFile)getFile(); + assertEquals(1, javaFile.getImportList().getAllImportStatements().length); - PsiReference ref = javaFile.findReferenceAt(getEditor().getCaretModel().getOffset()); - ImportClassFix fix = new ImportClassFix((PsiJavaCodeReferenceElement)ref); - assertFalse(fix.isAvailable(getProject(), getEditor(), getFile())); - } - finally { - CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = old; - } + PsiReference ref = javaFile.findReferenceAt(getEditor().getCaretModel().getOffset()); + ImportClassFix fix = new ImportClassFix((PsiJavaCodeReferenceElement)ref); + assertFalse(fix.isAvailable(getProject(), getEditor(), getFile())); } public void testAutoImportDoNotBreakCode() { - @Language("JAVA") @NonNls String text = "package x; class S {{ S.\n Runnable r; }}"; configureByText(text); - boolean old = CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY; CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = true; CodeInsightWorkspaceSettings.getInstance(getProject()).setOptimizeImportsOnTheFly(true, getTestRootDisposable()); - DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(true); - try { - List errs = highlightErrors(); - assertEquals(1, errs.size()); - } - finally { - CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = old; - } + assertEquals(1, highlightErrors().size()); } public void testAutoImportIgnoresUnresolvedImportReferences() {