diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java index 363e7ef64adb..75830bc64d23 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java @@ -15,9 +15,8 @@ */ package com.intellij.debugger.ui.tree.render; -import com.intellij.ui.classFilter.ClassFilter; -import com.intellij.debugger.DebuggerContext; import com.intellij.debugger.DebuggerBundle; +import com.intellij.debugger.DebuggerContext; import com.intellij.debugger.engine.DebugProcessImpl; import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.evaluation.EvaluationContext; @@ -29,6 +28,7 @@ import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.JDOMExternalizerUtil; import com.intellij.openapi.util.WriteExternalException; import com.intellij.psi.PsiExpression; +import com.intellij.ui.classFilter.ClassFilter; import com.intellij.xdebugger.impl.ui.XDebuggerUIConstants; import com.sun.jdi.*; import org.jdom.Element; @@ -73,7 +73,7 @@ public class ToStringRenderer extends NodeRendererImpl { final Value value = valueDescriptor.getValue(); BatchEvaluator.getBatchEvaluator(evaluationContext.getDebugProcess()).invoke(new ToStringCommand(evaluationContext, value) { public void evaluationResult(String message) { - valueDescriptor.setValueLabel(message != null ? "\"" + message + "\"" : ""); + valueDescriptor.setValueLabel(message != null ? "\"" + DebuggerUtilsEx.truncateString(message) + "\"" : ""); labelListener.labelChanged(); } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodQuickFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodQuickFix.java index b232cb7dce86..2826cec4c910 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodQuickFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodQuickFix.java @@ -24,7 +24,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; -import com.intellij.psi.impl.JavaPsiFacadeEx; import com.intellij.psi.util.PsiFormatUtil; import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; @@ -61,23 +60,18 @@ public class CreateMethodQuickFix implements LocalQuickFix { } public void applyFix(@NotNull final Project project, @NotNull final ProblemDescriptor descriptor) { - try { - if (!CodeInsightUtilBase.preparePsiElementForWrite(myTargetClass.getContainingFile())) return; + if (!CodeInsightUtilBase.preparePsiElementForWrite(myTargetClass.getContainingFile())) return; - PsiMethod method = createMethod(project); - List> arguments = - ContainerUtil.map2List(method.getParameterList().getParameters(), new Function>() { - public Pair fun(PsiParameter psiParameter) { - return Pair.create(null, psiParameter.getType()); - } - }); + PsiMethod method = createMethod(project); + List> arguments = + ContainerUtil.map2List(method.getParameterList().getParameters(), new Function>() { + public Pair fun(PsiParameter psiParameter) { + return Pair.create(null, psiParameter.getType()); + } + }); - method = (PsiMethod)JavaCodeStyleManager.getInstance(project).shortenClassReferences((PsiMethod)myTargetClass.add(method)); - CreateMethodFromUsageFix.doCreate(myTargetClass, method, arguments, PsiSubstitutor.EMPTY, ExpectedTypeInfo.EMPTY_ARRAY, method); - } - catch (IncorrectOperationException e) { - throw new RuntimeException(e); - } + method = (PsiMethod)JavaCodeStyleManager.getInstance(project).shortenClassReferences((PsiMethod)myTargetClass.add(method)); + CreateMethodFromUsageFix.doCreate(myTargetClass, method, arguments, PsiSubstitutor.EMPTY, ExpectedTypeInfo.EMPTY_ARRAY, method); } private PsiMethod createMethod(Project project) { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java index 0c1b429466db..9c9e93c96193 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java @@ -22,6 +22,7 @@ import com.intellij.codeInsight.daemon.impl.actions.AddImportAction; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.compiler.ModuleCompilerUtil; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.application.Result; @@ -42,8 +43,6 @@ import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; -import com.intellij.util.IncorrectOperationException; -import com.intellij.compiler.ModuleCompilerUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -72,12 +71,7 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix { } public void applyFix(@NotNull final Project project, @NotNull final ProblemDescriptor descriptor) { - try { - invoke(project, null, descriptor.getPsiElement().getContainingFile()); - } - catch (IncorrectOperationException e) { - throw new RuntimeException(e); - } + invoke(project, null, descriptor.getPsiElement().getContainingFile()); } @Nullable diff --git a/java/java-impl/src/com/intellij/ide/structureView/impl/StructureNodeRenderer.java b/java/java-impl/src/com/intellij/ide/structureView/impl/StructureNodeRenderer.java index 74af60cec239..35cc77e12166 100644 --- a/java/java-impl/src/com/intellij/ide/structureView/impl/StructureNodeRenderer.java +++ b/java/java-impl/src/com/intellij/ide/structureView/impl/StructureNodeRenderer.java @@ -23,6 +23,7 @@ import com.intellij.openapi.roots.ui.util.ModifiableCellAppearance; import com.intellij.openapi.util.Iconable; import com.intellij.psi.*; import com.intellij.psi.util.PsiFormatUtil; +import com.intellij.psi.util.PsiFormatUtilBase; import com.intellij.ui.ColoredTreeCellRenderer; import com.intellij.ui.SimpleTextAttributes; @@ -51,7 +52,8 @@ public class StructureNodeRenderer extends ColoredTreeCellRenderer { ModifiableCellAppearance result; if (psiElement instanceof PsiElement && !((PsiElement)psiElement).isValid()) { result = CompositeAppearance.single(name); - } else { + } + else { PsiClass psiClass = getContainingClass(psiElement); if (isInheritedMember(node, psiClass) && psiClass != null) { CompositeAppearance.DequeEnd ending = new CompositeAppearance().getEnding(); @@ -84,13 +86,13 @@ public class StructureNodeRenderer extends ColoredTreeCellRenderer { } } - public static String getNameOf(PsiElement psiElement) { + private static String getNameOf(PsiElement psiElement) { if (psiElement instanceof PsiMethod) return PsiFormatUtil.formatMethod((PsiMethod)psiElement, PsiSubstitutor.EMPTY, - PsiFormatUtil.SHOW_NAME | PsiFormatUtil.SHOW_TYPE | PsiFormatUtil.TYPE_AFTER | - PsiFormatUtil.SHOW_PARAMETERS, - PsiFormatUtil.SHOW_TYPE + PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_TYPE | PsiFormatUtilBase.TYPE_AFTER | + PsiFormatUtilBase.SHOW_PARAMETERS, + PsiFormatUtilBase.SHOW_TYPE ); return psiElement.toString(); } @@ -109,23 +111,17 @@ public class StructureNodeRenderer extends ColoredTreeCellRenderer { return new SimpleTextAttributes(nameAttributes.getStyle() | SimpleTextAttributes.STYLE_STRIKEOUT, nameAttributes.getFgColor()); } - public static boolean isDeprecated(Object psiElement) { - if (psiElement instanceof PsiDocCommentOwner) - return ((PsiDocCommentOwner) psiElement).isDeprecated(); - return false; + private static boolean isDeprecated(Object psiElement) { + return psiElement instanceof PsiDocCommentOwner && ((PsiDocCommentOwner)psiElement).isDeprecated(); } - public static PsiClass getContainingClass(Object element) { + private static PsiClass getContainingClass(Object element) { if (element instanceof PsiMember) return ((PsiMember) element).getContainingClass(); - if (element instanceof PsiClass) { - PsiElement parent = ((PsiClass) element).getParent(); - return (PsiClass) (parent instanceof PsiClass ? parent : null); - } return null; } - public static PsiClass getTreeParentClass(Object value) { + private static PsiClass getTreeParentClass(Object value) { if (!(value instanceof TreeNode)) return null; for (TreeNode treeNode = ((TreeNode) value).getParent(); treeNode != null; treeNode = treeNode.getParent()) { diff --git a/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaClassTreeElement.java b/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaClassTreeElement.java index b97433a98ca3..80951de253bd 100644 --- a/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaClassTreeElement.java +++ b/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaClassTreeElement.java @@ -35,10 +35,8 @@ public class JavaClassTreeElement extends JavaClassTreeElementBase { } private Collection getClassChildren() { - ArrayList array = new ArrayList(); - final PsiClass aClass = getElement(); - if (aClass == null) return array; + if (aClass == null) return Collections.emptyList(); List children = Arrays.asList(aClass.getChildren()); Collection ownChildren = new THashSet(); @@ -47,6 +45,7 @@ public class JavaClassTreeElement extends JavaClassTreeElementBase { ContainerUtil.addAll(ownChildren, aClass.getInnerClasses()); ContainerUtil.addAll(ownChildren, aClass.getInitializers()); Collection inherited = new LinkedHashSet(children); + List array = new ArrayList(inherited.size()); aClass.processDeclarations(new AddAllMembersProcessor(inherited, aClass), ResolveState.initial(), null, aClass); diff --git a/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaFileTreeElement.java b/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaFileTreeElement.java index 1a5bb59cf538..98a587a369c2 100644 --- a/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaFileTreeElement.java +++ b/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaFileTreeElement.java @@ -26,7 +26,6 @@ import java.util.ArrayList; import java.util.Collection; public class JavaFileTreeElement extends PsiTreeElementBase implements ItemPresentation { - public JavaFileTreeElement(PsiJavaFile file) { super(file); } diff --git a/java/java-impl/src/com/intellij/pom/java/impl/PomJavaAspectImpl.java b/java/java-impl/src/com/intellij/pom/java/impl/PomJavaAspectImpl.java index 9d128cb0c178..e3d0276469e1 100644 --- a/java/java-impl/src/com/intellij/pom/java/impl/PomJavaAspectImpl.java +++ b/java/java-impl/src/com/intellij/pom/java/impl/PomJavaAspectImpl.java @@ -68,7 +68,7 @@ public class PomJavaAspectImpl extends PomJavaAspect implements ProjectComponent if(changeSet == null) return; final PsiFile containingFile = changeSet.getRootElement().getPsi().getContainingFile(); if(!(containingFile.getLanguage() instanceof JavaLanguage)) return; - final PomJavaAspectChangeSet set = new PomJavaAspectChangeSet(myPomModel, containingFile); + final PomJavaAspectChangeSet set = new PomJavaAspectChangeSet(myPomModel); set.addChange(new JavaTreeChanged(containingFile)); event.registerChangeSet(this, set); } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy index 1439b3b55f83..64ed0eedb9e9 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy @@ -429,9 +429,9 @@ class JavaAutoPopupTest extends CompletionAutoPopupTestCase { public void testVerticalArrows() { testArrows false, false, 0, -1 - testArrows false, true, -1, 1 - testArrows true, false, 0, -1 - testArrows true, true, -1, 1 + testArrows false, true, 0, -1 + testArrows true, false, 0, 1 + testArrows true, true, 0, 1 } public void testHideOnOnePrefixVariant() { diff --git a/java/java-tests/testSrc/com/intellij/openapi/vfs/LocalFileSystemTest.java b/java/java-tests/testSrc/com/intellij/openapi/vfs/LocalFileSystemTest.java index 820ddfd6d8d6..017070824b74 100644 --- a/java/java-tests/testSrc/com/intellij/openapi/vfs/LocalFileSystemTest.java +++ b/java/java-tests/testSrc/com/intellij/openapi/vfs/LocalFileSystemTest.java @@ -1,14 +1,19 @@ package com.intellij.openapi.vfs; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vfs.impl.win32.Win32LocalFileSystem; import com.intellij.openapi.vfs.newvfs.ManagingFS; import com.intellij.testFramework.IdeaTestCase; import com.intellij.testFramework.IdeaTestUtil; +import org.jetbrains.annotations.NonNls; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStreamWriter; +import java.nio.charset.Charset; import java.util.Arrays; public class LocalFileSystemTest extends IdeaTestCase{ @@ -219,4 +224,20 @@ public class LocalFileSystemTest extends IdeaTestCase{ ); } + + public static void setContentOnDisk(File file, byte[] bom, String content, Charset charset) throws IOException { + FileOutputStream stream = new FileOutputStream(file); + stream.write(bom); + OutputStreamWriter writer = new OutputStreamWriter(stream, charset); + writer.write(content); + writer.close(); + } + + public static VirtualFile createTempFile(@NonNls String ext, byte[] bom, @NonNls String content, Charset charset) throws IOException { + File temp = FileUtil.createTempFile("copy", "." + ext); + setContentOnDisk(temp, bom, content, charset); + + myFilesToDelete.add(temp); + return LocalFileSystem.getInstance().refreshAndFindFileByIoFile(temp); + } } diff --git a/java/java-tests/testSrc/com/intellij/projectView/StructureViewUpdatingTest.java b/java/java-tests/testSrc/com/intellij/projectView/StructureViewUpdatingTest.java index d7ee434b124c..81a61b14b0ad 100644 --- a/java/java-tests/testSrc/com/intellij/projectView/StructureViewUpdatingTest.java +++ b/java/java-tests/testSrc/com/intellij/projectView/StructureViewUpdatingTest.java @@ -34,11 +34,9 @@ package com.intellij.projectView; import com.intellij.JavaTestUtil; import com.intellij.ide.structureView.impl.java.InheritedMembersFilter; import com.intellij.ide.structureView.newStructureView.StructureViewComponent; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.testFramework.IdeaTestUtil; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; +import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileEditor; import com.intellij.openapi.fileEditor.FileEditorManager; @@ -48,6 +46,7 @@ import com.intellij.psi.JavaDirectoryService; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiField; +import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.TestSourceBasedTestCase; import com.intellij.util.IncorrectOperationException; @@ -69,55 +68,55 @@ public class StructureViewUpdatingTest extends TestSourceBasedTestCase { final StructureViewComponent structureViewComponent = (StructureViewComponent)fileEditor.getStructureViewBuilder().createStructureView(fileEditor, myProject); final Document document = PsiDocumentManager.getInstance(myProject).getDocument(psiClass.getContainingFile()); - IdeaTestUtil.assertTreeEqual(structureViewComponent.getTree(), - "-Class1.java\n" + - " -Class1\n" + - " getValue():int\n" + - " getClass():Class\n" + - " hashCode():int\n" + - " equals(Object):boolean\n" + - " clone():Object\n" + - " toString():String\n" + - " notify():void\n" + - " notifyAll():void\n" + - " wait(long):void\n" + - " wait(long, int):void\n" + - " wait():void\n" + - " finalize():void\n" + - " myField1:boolean\n" + - " myField2:boolean\n"); + PlatformTestUtil.assertTreeEqual(structureViewComponent.getTree(), + "-Class1.java\n" + + " -Class1\n" + + " getValue():int\n" + + " getClass():Class\n" + + " hashCode():int\n" + + " equals(Object):boolean\n" + + " clone():Object\n" + + " toString():String\n" + + " notify():void\n" + + " notifyAll():void\n" + + " wait(long):void\n" + + " wait(long, int):void\n" + + " wait():void\n" + + " finalize():void\n" + + " myField1:boolean\n" + + " myField2:boolean\n"); - CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { + new WriteCommandAction.Simple(getProject()) { @Override - public void run() { - + protected void run() throws Throwable { final int offset = document.getLineStartOffset(5); document.insertString(offset, " boolean myNewField = false;\n"); } - }, null, null); + }.execute().throwException(); + PsiDocumentManager.getInstance(myProject).commitDocument(document); - IdeaTestUtil.waitForAlarm(600); + PlatformTestUtil.waitForAlarm(600); //TreeUtil.expand(structureViewComponent.getTree(), 3); - IdeaTestUtil.assertTreeEqual(structureViewComponent.getTree(), "-Class1.java\n" + - " -Class1\n" + " getValue():int\n" + - " getClass():Class\n" + - " hashCode():int\n" + - " equals(Object):boolean\n" + - " clone():Object\n" + - " toString():String\n" + - " notify():void\n" + - " notifyAll():void\n" + - " wait(long):void\n" + - " wait(long, int):void\n" + - " wait():void\n" + - " finalize():void\n" + - " myField1:boolean\n" + - " myField2:boolean\n" + - " myNewField:boolean = false\n"); + PlatformTestUtil.assertTreeEqual(structureViewComponent.getTree(), "-Class1.java\n" + + " -Class1\n" + " getValue():int\n" + + " getClass():Class\n" + + " hashCode():int\n" + + " equals(Object):boolean\n" + + " clone():Object\n" + + " toString():String\n" + + " notify():void\n" + + " notifyAll():void\n" + + " wait(long):void\n" + + " wait(long, int):void\n" + + " wait():void\n" + + " finalize():void\n" + + " myField1:boolean\n" + + " myField2:boolean\n" + + " myNewField:boolean = false\n"); Disposer.dispose(structureViewComponent); @@ -138,31 +137,31 @@ public class StructureViewUpdatingTest extends TestSourceBasedTestCase { try { structureViewComponent.setActionActive(InheritedMembersFilter.ID, true); - IdeaTestUtil.assertTreeEqual(structureViewComponent.getTree(), "-Class2.java\n" + - " -Class2\n" + - " +InnerClass1\n" + - " +InnerClass2\n" + - " getValue():int\n" + - " myField1:boolean\n" + - " myField2:boolean\n" + - " myField3:boolean\n" + - " myField4:boolean\n"); + PlatformTestUtil.assertTreeEqual(structureViewComponent.getTree(), "-Class2.java\n" + + " -Class2\n" + + " +InnerClass1\n" + + " +InnerClass2\n" + + " getValue():int\n" + + " myField1:boolean\n" + + " myField2:boolean\n" + + " myField3:boolean\n" + + " myField4:boolean\n"); final PsiField innerClassField = psiClass.getInnerClasses()[0].getFields()[0]; structureViewComponent.select(innerClassField, true); - IdeaTestUtil.assertTreeEqual(structureViewComponent.getTree(), "-Class2.java\n" + - " -Class2\n" + - " -InnerClass1\n" + - " +InnerClass12\n" + - " myInnerClassField:int\n" + - " +InnerClass2\n" + - " getValue():int\n" + - " myField1:boolean\n" + - " myField2:boolean\n" + - " myField3:boolean\n" + - " myField4:boolean\n"); + PlatformTestUtil.assertTreeEqual(structureViewComponent.getTree(), "-Class2.java\n" + + " -Class2\n" + + " -InnerClass1\n" + + " +InnerClass12\n" + + " myInnerClassField:int\n" + + " +InnerClass2\n" + + " getValue():int\n" + + " myField1:boolean\n" + + " myField2:boolean\n" + + " myField3:boolean\n" + + " myField4:boolean\n"); CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { @Override @@ -175,25 +174,25 @@ public class StructureViewUpdatingTest extends TestSourceBasedTestCase { innerClassField.delete(); } catch (IncorrectOperationException e) { - assertTrue(e.getLocalizedMessage(), false); + fail(e.getLocalizedMessage()); } } }); } }, null, null); - IdeaTestUtil.waitForAlarm(600); + PlatformTestUtil.waitForAlarm(600); - IdeaTestUtil.assertTreeEqual(structureViewComponent.getTree(), "-Class2.java\n" + - " -Class2\n" + - " -InnerClass1\n" + - " +InnerClass12\n" + - " +InnerClass2\n" + - " getValue():int\n" + - " myField1:boolean\n" + - " myField2:boolean\n" + - " myField3:boolean\n" + - " myField4:boolean\n"); + PlatformTestUtil.assertTreeEqual(structureViewComponent.getTree(), "-Class2.java\n" + + " -Class2\n" + + " -InnerClass1\n" + + " +InnerClass12\n" + + " +InnerClass2\n" + + " getValue():int\n" + + " myField1:boolean\n" + + " myField2:boolean\n" + + " myField3:boolean\n" + + " myField4:boolean\n"); } finally { @@ -213,26 +212,26 @@ public class StructureViewUpdatingTest extends TestSourceBasedTestCase { (StructureViewComponent)fileEditor.getStructureViewBuilder().createStructureView(fileEditor, myProject); final JTree tree = structureViewComponent.getTree(); - IdeaTestUtil.assertTreeEqual(tree, "-test.xml\n" + - " -test\n" + - " +level1\n" + - " +level1\n" + - " +level1\n" + - " +level1\n"); + PlatformTestUtil.assertTreeEqual(tree, "-test.xml\n" + + " -test\n" + + " +level1\n" + + " +level1\n" + + " +level1\n" + + " +level1\n"); tree.expandPath(tree.getPathForRow(3)); - IdeaTestUtil.waitForAlarm(600); + PlatformTestUtil.waitForAlarm(600); - IdeaTestUtil.assertTreeEqual(tree, - "-test.xml\n" + - " -test\n" + - " +level1\n" + - " -level1\n" + - " +level2\n" + - " +level1\n" + - " +level1\n"); + PlatformTestUtil.assertTreeEqual(tree, + "-test.xml\n" + + " -test\n" + + " +level1\n" + + " -level1\n" + + " +level2\n" + + " +level1\n" + + " +level1\n"); Disposer.dispose(structureViewComponent); } @@ -246,4 +245,9 @@ public class StructureViewUpdatingTest extends TestSourceBasedTestCase { protected String getTestDataPath() { return JavaTestUtil.getJavaTestDataPath(); } + + @Override + protected boolean isRunInWriteAction() { + return false; + } } diff --git a/java/openapi/src/com/intellij/pom/java/events/PomJavaAspectChangeSet.java b/java/openapi/src/com/intellij/pom/java/events/PomJavaAspectChangeSet.java index d1e2792219f9..2625a48a6144 100644 --- a/java/openapi/src/com/intellij/pom/java/events/PomJavaAspectChangeSet.java +++ b/java/openapi/src/com/intellij/pom/java/events/PomJavaAspectChangeSet.java @@ -20,7 +20,6 @@ import com.intellij.pom.PomModel; import com.intellij.pom.PomModelAspect; import com.intellij.pom.event.PomChangeSet; import com.intellij.pom.java.PomJavaAspect; -import com.intellij.psi.PsiFile; import java.util.ArrayList; import java.util.List; @@ -28,22 +27,16 @@ import java.util.List; public class PomJavaAspectChangeSet implements PomChangeSet{ private final PomModel myModel; private final List myChanges = new ArrayList(); - private final PsiFile myChangedFile; - public PomJavaAspectChangeSet(PomModel model, PsiFile fileChanged) { + public PomJavaAspectChangeSet(PomModel model) { myModel = model; - myChangedFile = fileChanged; } public void addChange(PomJavaChange change) { myChanges.add(change); } - public List getChanges() { - return myChanges; - } - public PomModelAspect getAspect() { return myModel.getModelAspect(PomJavaAspect.class); } @@ -53,8 +46,4 @@ public class PomJavaAspectChangeSet implements PomChangeSet{ final PomJavaAspectChangeSet blockedJavaChange = (PomJavaAspectChangeSet)blocked; myChanges.addAll(blockedJavaChange.myChanges); } - - public PsiFile getChangedFile() { - return myChangedFile; - } } diff --git a/java/testFramework/src/com/intellij/projectView/BaseProjectViewTestCase.java b/java/testFramework/src/com/intellij/projectView/BaseProjectViewTestCase.java index cbe0eb8c9a30..c1c6510b24d3 100644 --- a/java/testFramework/src/com/intellij/projectView/BaseProjectViewTestCase.java +++ b/java/testFramework/src/com/intellij/projectView/BaseProjectViewTestCase.java @@ -25,8 +25,6 @@ import com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode; import com.intellij.ide.util.treeView.*; import com.intellij.openapi.application.ex.PathManagerEx; import com.intellij.openapi.project.DumbAwareRunnable; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.ui.Queryable; import com.intellij.openapi.util.Disposer; @@ -300,4 +298,9 @@ public abstract class BaseProjectViewTestCase extends TestSourceBasedTestCase { protected String getTestDataPath() { return PathManagerEx.getTestDataPath(getClass()); } + + @Override + protected boolean isRunInWriteAction() { + return false; + } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java index 106e016d7b86..c2f09f4c935c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -239,11 +239,10 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler { @NotNull private LookupImpl obtainLookup(Editor editor) { LookupImpl existing = (LookupImpl)LookupManager.getActiveLookup(editor); - if (existing != null && existing.isCompletion()) { + if (existing != null && existing.isCompletion() && !existing.isHintMode()) { existing.markReused(); if (!autopopup) { existing.setFocused(true); - existing.setHintMode(false); } return existing; } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupActionHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupActionHandler.java index de8e1eb23ab0..b00d961853ef 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupActionHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupActionHandler.java @@ -17,6 +17,7 @@ package com.intellij.codeInsight.lookup.impl; import com.intellij.codeInsight.lookup.LookupManager; +import com.intellij.ide.ui.UISettings; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; @@ -73,11 +74,6 @@ public abstract class LookupActionHandler extends EditorActionHandler { protected void executeInLookup(final LookupImpl lookup, DataContext context) { if (!lookup.isFocused()) { - if (lookup.isPositionedAboveCaret()) { - myOriginalHandler.execute(lookup.getEditor(), context); - return; - } - lookup.setFocused(true); lookup.getList().setSelectedIndex(0); lookup.refreshUi(); @@ -94,16 +90,14 @@ public abstract class LookupActionHandler extends EditorActionHandler { protected void executeInLookup(final LookupImpl lookup, DataContext context) { if (!lookup.isFocused()) { - if (!lookup.isPositionedAboveCaret()) { + if (!UISettings.getInstance().CYCLE_SCROLLING) { myOriginalHandler.execute(lookup.getEditor(), context); return; } lookup.setFocused(true); - final int index = ApplicationManager.getApplication().isUnitTestMode() ? lookup.getItems().size() - 1 : lookup.getList().getLastVisibleIndex(); - lookup.getList().setSelectedIndex(index); + lookup.getList().setSelectedIndex(0); lookup.refreshUi(); - return; } ListScrollingUtil.moveUp(lookup.getList(), 0); } diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateUtil.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateUtil.java index 77a277ac7546..92badac379be 100644 --- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateUtil.java +++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateUtil.java @@ -311,7 +311,7 @@ public class FileTemplateUtil{ final Properties finalProps = props; CommandProcessor.getInstance().executeCommand(project, new Runnable(){ public void run(){ - final Runnable run = new Runnable(){ + ApplicationManager.getApplication().runWriteAction(new Runnable(){ public void run(){ try{ CreateFromTemplateHandler handler = findHandler(template); @@ -321,8 +321,7 @@ public class FileTemplateUtil{ commandException[0] = ex; } } - }; - ApplicationManager.getApplication().runWriteAction(run); + }); } }, template.isJavaClassTemplate() ? IdeBundle.message("command.create.class.from.template") diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java index d54a659b2deb..07591f7c4d6f 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java @@ -102,8 +102,9 @@ public class FileBasedIndex implements ApplicationComponent { private final Set myNoLimitCheckTypes = new HashSet(); private final PerIndexDocumentMap myLastIndexedDocStamps = new PerIndexDocumentMap() { + @NotNull @Override - protected Long createDefault(Document document) { + protected Long createDefault(@NotNull Document document) { return 0L; } }; @@ -1161,7 +1162,7 @@ public class FileBasedIndex implements ApplicationComponent { } // returns false if doc was not indexed because the file does not fit in scope - private boolean indexUnsavedDocument(final Document document, final ID requestedIndexId, final Project project, GlobalSearchScope filter) throws StorageException { + private boolean indexUnsavedDocument(@NotNull final Document document, @NotNull final ID requestedIndexId, final Project project, GlobalSearchScope filter) throws StorageException { final VirtualFile vFile = myFileDocumentManager.getFile(document); if (!(vFile instanceof VirtualFileWithId) || !vFile.isValid()) { return true; @@ -1253,9 +1254,7 @@ public class FileBasedIndex implements ApplicationComponent { } private void cleanupMemoryStorage() { - synchronized (myLastIndexedDocStamps) { - myLastIndexedDocStamps.clear(); - } + myLastIndexedDocStamps.clear(); for (ID indexId : myIndices.keySet()) { final MapReduceIndex index = (MapReduceIndex)getIndex(indexId); assert index != null; diff --git a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUpdater.java b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUpdater.java index c076a99d3013..a6bfe1507455 100644 --- a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUpdater.java +++ b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUpdater.java @@ -86,7 +86,7 @@ public class AbstractTreeUpdater implements Disposable, Activatable { } public boolean hasNodesToUpdate() { - return myNodeQueue.size() > 0 || !myUpdateQueue.isEmpty(); + return !myNodeQueue.isEmpty() || !myUpdateQueue.isEmpty(); } public void dispose() { @@ -114,15 +114,15 @@ public class AbstractTreeUpdater implements Disposable, Activatable { toAdd.expire(); break; } - else if (passInQueue.getNode() == toAdd.getNode()) { + if (passInQueue.getNode() == toAdd.getNode()) { toAdd.expire(); break; } - else if (toAdd.getNode().isNodeAncestor(passInQueue.getNode())) { + if (toAdd.getNode().isNodeAncestor(passInQueue.getNode())) { toAdd.expire(); break; } - else if (passInQueue.getNode().isNodeAncestor(toAdd.getNode())) { + if (passInQueue.getNode().isNodeAncestor(toAdd.getNode())) { iterator.remove(); passInQueue.expire(); } @@ -133,9 +133,7 @@ public class AbstractTreeUpdater implements Disposable, Activatable { if (!toAdd.isExpired()) { final Collection yielding = ui.getYeildingPasses(); - for (Iterator iterator = yielding.iterator(); iterator.hasNext();) { - TreeUpdatePass eachYielding = iterator.next(); - + for (TreeUpdatePass eachYielding : yielding) { final DefaultMutableTreeNode eachNode = eachYielding.getCurrentNode(); if (eachNode != null) { if (eachNode.isNodeAncestor(toAdd.getNode())) { @@ -228,8 +226,7 @@ public class AbstractTreeUpdater implements Disposable, Activatable { try { myTreeBuilder.getUi().updateSubtreeNow(eachPass, false); } - catch (ProcessCanceledException e) { - return; + catch (ProcessCanceledException ignored) { } } }); @@ -348,10 +345,8 @@ public class AbstractTreeUpdater implements Disposable, Activatable { } public boolean isEnqueuedToUpdate(DefaultMutableTreeNode node) { - Iterator nodes = myNodeQueue.iterator(); - while (nodes.hasNext()) { - TreeUpdatePass each = nodes.next(); - if (each.willUpdate(node)) return true; + for (TreeUpdatePass pass : myNodeQueue) { + if (pass.willUpdate(node)) return true; } return false; } diff --git a/platform/platform-api/src/com/intellij/util/ui/update/MergingUpdateQueue.java b/platform/platform-api/src/com/intellij/util/ui/update/MergingUpdateQueue.java index bcb2e34055f7..c6fec60254d8 100644 --- a/platform/platform-api/src/com/intellij/util/ui/update/MergingUpdateQueue.java +++ b/platform/platform-api/src/com/intellij/util/ui/update/MergingUpdateQueue.java @@ -123,8 +123,7 @@ public class MergingUpdateQueue implements Runnable, Disposable, Activatable { try { each.setRejected(); } - catch (ProcessCanceledException e) { - continue; + catch (ProcessCanceledException ignored) { } } myScheduledUpdates.clear(); @@ -237,7 +236,7 @@ public class MergingUpdateQueue implements Runnable, Disposable, Activatable { } }; - if (myExecuteInDispatchThread && invokeLaterIfNotDispatch && !ApplicationManager.getApplication().isDispatchThread()) { + if (myExecuteInDispatchThread && invokeLaterIfNotDispatch) { UIUtil.invokeLaterIfNeeded(toRun); } else { @@ -394,7 +393,7 @@ public class MergingUpdateQueue implements Runnable, Disposable, Activatable { public boolean isEmpty() { synchronized (myScheduledUpdates) { - return myScheduledUpdates.size() == 0; + return myScheduledUpdates.isEmpty(); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java index c8a218c3a956..91d6c9fb3ab1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java @@ -365,7 +365,7 @@ public class CaretModelImpl implements CaretModel, PrioritizedDocumentListener, EditorSettings editorSettings = myEditor.getSettings(); - if (!editorSettings.isVirtualSpace() && line < lineCount) { + if (!editorSettings.isVirtualSpace() && line < lineCount && !myEditor.getSelectionModel().hasBlockSelection()) { int lineEndOffset = doc.getLineEndOffset(line); int lineEndColumnNumber = myEditor.offsetToLogicalPosition(lineEndOffset).column; if (column > lineEndColumnNumber) { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index e2e5963c3d03..917e8d449be9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -3258,7 +3258,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi return; } - if (!mySettings.isVirtualSpace()) { + if (!mySettings.isVirtualSpace() && !mySelectionModel.hasBlockSelection()) { int lineEndOffset = myDocument.getLineEndOffset(lineNumber); int lineEndColumnNumber = calcColumnNumber(lineEndOffset, lineNumber); if (columnNumber > lineEndColumnNumber) { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/MarkupModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/MarkupModelImpl.java index ecce8d321218..04812916c5e3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/MarkupModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/MarkupModelImpl.java @@ -24,6 +24,7 @@ */ package com.intellij.openapi.editor.impl; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.ex.MarkupModelEx; @@ -54,11 +55,13 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx private final RangeHighlighterTree myHighlighterTree; MarkupModelImpl(DocumentImpl document) { + ApplicationManager.getApplication().assertIsDispatchThread(); myDocument = document; myHighlighterTree = new RangeHighlighterTree(myDocument); } public void dispose() { + ApplicationManager.getApplication().assertIsDispatchThread(); myHighlighterTree.dispose(); } @@ -98,9 +101,11 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx @NotNull public RangeHighlighter[] getAllHighlighters() { + ApplicationManager.getApplication().assertIsDispatchThread(); if (myCachedHighlighters == null) { - if (myHighlighterTree.size() == 0) return RangeHighlighter.EMPTY_ARRAY; - List list = new ArrayList(); + int size = myHighlighterTree.size(); + if (size == 0) return RangeHighlighter.EMPTY_ARRAY; + List list = new ArrayList(size); myHighlighterTree.process(new CommonProcessors.CollectProcessor(list)); myCachedHighlighters = list.toArray(new RangeHighlighter[list.size()]); } @@ -115,6 +120,7 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx @NotNull HighlighterTargetArea targetArea, boolean isPersistent, @Nullable Consumer changeAttributesAction) { + ApplicationManager.getApplication().assertIsDispatchThread(); RangeHighlighterEx highlighter = isPersistent ? new PersistentRangeHighlighterImpl(this, startOffset, layer, targetArea, textAttributes) : new RangeHighlighterImpl(this, startOffset, endOffset, layer, targetArea, textAttributes); @@ -134,6 +140,7 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx @Override public void changeAttributesInBatch(@NotNull RangeHighlighterEx highlighter, @NotNull Consumer changeAttributesAction) { + ApplicationManager.getApplication().assertIsDispatchThread(); boolean changed = highlighter instanceof PersistentRangeHighlighterImpl ? ((PersistentRangeHighlighterImpl)highlighter).changeAttributesInBatch(changeAttributesAction) : ((RangeHighlighterImpl)highlighter).changeAttributesInBatch(changeAttributesAction); @@ -143,6 +150,7 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx } void addRangeHighlighter(RangeHighlighterEx marker, int start, int end, RangeHighlighterData data) { + ApplicationManager.getApplication().assertIsDispatchThread(); myHighlighterTree.addInterval(marker, start, end, data); } @@ -156,6 +164,7 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx } public void removeHighlighter(@NotNull RangeHighlighter segmentHighlighter) { + ApplicationManager.getApplication().assertIsDispatchThread(); myCachedHighlighters = null; if (!segmentHighlighter.isValid()) return; @@ -166,6 +175,7 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx } public void removeAllHighlighters() { + ApplicationManager.getApplication().assertIsDispatchThread(); myHighlighterTree.process(new Processor() { public boolean process(RangeMarkerEx rangeMarkerEx) { fireBeforeRemoved((RangeHighlighterEx)rangeMarkerEx); @@ -191,6 +201,7 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx } public void setRangeHighlighterAttributes(@NotNull final RangeHighlighter highlighter, final TextAttributes textAttributes) { + ApplicationManager.getApplication().assertIsDispatchThread(); ((RangeHighlighterImpl)highlighter).setTextAttributes(textAttributes); } @@ -211,6 +222,7 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx } public boolean containsHighlighter(@NotNull final RangeHighlighter highlighter) { + ApplicationManager.getApplication().assertIsDispatchThread(); return !myHighlighterTree.processOverlappingWith(highlighter.getStartOffset(), highlighter.getEndOffset(), new Processor() { public boolean process(RangeHighlighterEx h) { return h.getId() != ((RangeHighlighterEx)highlighter).getId(); @@ -236,6 +248,7 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx } public void normalize() { + ApplicationManager.getApplication().assertIsDispatchThread(); myHighlighterTree.normalize(); } } diff --git a/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java b/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java index ee6627924f92..e455ec2534fe 100644 --- a/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java +++ b/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java @@ -15,7 +15,8 @@ */ package com.intellij.testFramework; -import com.intellij.ide.*; +import com.intellij.ide.DataManager; +import com.intellij.ide.IdeEventQueue; import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.ide.util.treeView.AbstractTreeStructure; import com.intellij.idea.Bombed; @@ -48,9 +49,10 @@ import org.jetbrains.annotations.TestOnly; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; -import java.util.*; import java.awt.*; import java.awt.event.InvocationEvent; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; /** @@ -99,14 +101,14 @@ public class PlatformTestUtil { } public static String print(JTree tree, boolean withSelection, Condition nodePrintCondition) { - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); Object root = tree.getModel().getRoot(); printImpl(tree, root, buffer, 0, withSelection, nodePrintCondition); return buffer.toString(); } - private static void printImpl(JTree tree, Object root, StringBuffer buffer, int level, boolean withSelection, @Nullable Condition nodePrintCondition) { + private static void printImpl(JTree tree, Object root, StringBuilder buffer, int level, boolean withSelection, @Nullable Condition nodePrintCondition) { DefaultMutableTreeNode defaultMutableTreeNode = (DefaultMutableTreeNode)root; @@ -116,7 +118,7 @@ public class PlatformTestUtil { nodeText = toString(userObject, null); } else { - nodeText = defaultMutableTreeNode + ""; + nodeText = String.valueOf(defaultMutableTreeNode); } @@ -163,8 +165,10 @@ public class PlatformTestUtil { Assert.assertEquals(expected, treeStringPresentation); } + @TestOnly public static void waitForAlarm(final int delay) throws InterruptedException { - final boolean[] invoked = new boolean[]{false}; + assert !ApplicationManager.getApplication().isWriteAccessAllowed(): "It's a bad idea to wait for an alarm under the write action. Somebody creates an alarm which requires read action and you are deadlocked."; + final AtomicBoolean invoked = new AtomicBoolean(); final Alarm alarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD); alarm.addRequest(new Runnable() { @Override @@ -175,7 +179,7 @@ public class PlatformTestUtil { alarm.addRequest(new Runnable() { @Override public void run() { - invoked[0] = true; + invoked.set(true); } }, delay); } @@ -185,10 +189,13 @@ public class PlatformTestUtil { UIUtil.dispatchAllInvocationEvents(); - while (!invoked[0]) { + boolean sleptAlready = false; + while (!invoked.get()) { UIUtil.dispatchAllInvocationEvents(); - Thread.sleep(delay); + Thread.sleep(sleptAlready ? 10 : delay); + sleptAlready = true; } + UIUtil.dispatchAllInvocationEvents(); } @TestOnly diff --git a/platform/usageView/src/com/intellij/usages/impl/GroupNode.java b/platform/usageView/src/com/intellij/usages/impl/GroupNode.java index 583fce9f8caa..991a365e5f9c 100644 --- a/platform/usageView/src/com/intellij/usages/impl/GroupNode.java +++ b/platform/usageView/src/com/intellij/usages/impl/GroupNode.java @@ -105,7 +105,10 @@ public class GroupNode extends Node implements Navigatable, Comparable { T thing = myQueue.poll(); if (thing == null) break; if (!myProcessor.process(thing)) { - myQueue.clear(); + stop(); return; } processed++; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/constructors/GroovyGenerationInfo.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/constructors/GroovyGenerationInfo.java index 87929cbb6865..6e36d660ffe5 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/constructors/GroovyGenerationInfo.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/constructors/GroovyGenerationInfo.java @@ -61,7 +61,7 @@ public class GroovyGenerationInfo extends PsiGenerationInfo } final IElementType type = element.getNode().getElementType(); - if (GroovyTokenTypes.WHITE_SPACES_SET.contains(type)) { + if (type == GroovyTokenTypes.mNLS || type == GroovyTokenTypes.mWS) { return element.getNextSibling(); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java index 14caa5c9b638..ae581d9070f4 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java @@ -520,8 +520,8 @@ public class ResolveUtil { return resolveResult != null && isInUseScope(resolveResult.getCurrentFileResolveContext()); } - public static boolean isInUseScope(PsiElement context) { - if (context instanceof GrMethodCall) { + public static boolean isInUseScope(@Nullable PsiElement context) { + if (context instanceof GrMethodCall && context.isValid()) { final GrExpression expression = ((GrMethodCall)context).getInvokedExpression(); if (expression instanceof GrReferenceExpression) { final PsiElement resolved = ((GrReferenceExpression)expression).resolve(); diff --git a/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsLoaderComponent.java b/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsLoaderComponent.java index 236d5cd730c4..17d5aa1007da 100644 --- a/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsLoaderComponent.java +++ b/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsLoaderComponent.java @@ -48,20 +48,20 @@ public class BreadcrumbsLoaderComponent extends AbstractProjectComponent { return webEditorOptions.isBreadcrumbsEnabled() || webEditorOptions.isBreadcrumbsEnabledInXml(); } - private static class MyFileEditorManagerListener implements FileEditorManagerListener { + private static class MyFileEditorManagerListener extends FileEditorManagerAdapter { public void fileOpened(final FileEditorManager source, final VirtualFile file) { if (isEnabled() && isSuitable(source.getProject(), file)) { final FileEditor[] fileEditors = source.getEditors(file); - for (final FileEditor each : fileEditors) { - if (each instanceof TextEditor) { - final BreadcrumbsXmlWrapper wrapper = new BreadcrumbsXmlWrapper(((TextEditor)each).getEditor()); + for (final FileEditor fileEditor : fileEditors) { + if (fileEditor instanceof TextEditor) { + final BreadcrumbsXmlWrapper wrapper = new BreadcrumbsXmlWrapper(((TextEditor)fileEditor).getEditor()); final JComponent c = wrapper.getComponent(); - source.addTopComponent(each, c); + source.addTopComponent(fileEditor, c); - Disposer.register(each, wrapper); - Disposer.register(each, new Disposable() { + Disposer.register(fileEditor, wrapper); + Disposer.register(fileEditor, new Disposable() { public void dispose() { - source.removeTopComponent(each, c); + source.removeTopComponent(fileEditor, c); } }); } @@ -74,11 +74,11 @@ public class BreadcrumbsLoaderComponent extends AbstractProjectComponent { return false; } - final FileViewProvider psiFile = PsiManager.getInstance(project).findViewProvider(file); + final FileViewProvider provider = PsiManager.getInstance(project).findViewProvider(file); - return psiFile != null - && hasNonEmptyHtml(psiFile) - && BreadcrumbsXmlWrapper.findInfoProvider(psiFile) != null; + return provider != null + && hasNonEmptyHtml(provider) + && BreadcrumbsXmlWrapper.findInfoProvider(provider) != null; } public static boolean hasNonEmptyHtml(FileViewProvider viewProvider) { @@ -94,11 +94,5 @@ public class BreadcrumbsLoaderComponent extends AbstractProjectComponent { } return false; } - - public void fileClosed(final FileEditorManager source, final VirtualFile file) { - } - - public void selectionChanged(final FileEditorManagerEvent event) { - } } } diff --git a/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java b/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java index 95b2b2815ecd..ea00e02f2023 100644 --- a/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java +++ b/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java @@ -34,13 +34,6 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vcs.FileStatusListener; import com.intellij.openapi.vcs.FileStatusManager; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.pom.PomManager; -import com.intellij.pom.PomModelAspect; -import com.intellij.pom.event.PomChangeSet; -import com.intellij.pom.event.PomModelEvent; -import com.intellij.pom.event.PomModelListener; -import com.intellij.pom.xml.XmlAspect; -import com.intellij.pom.xml.XmlChangeSet; import com.intellij.psi.*; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.update.MergingUpdateQueue; @@ -103,8 +96,7 @@ public class BreadcrumbsXmlWrapper implements BreadcrumbsItemListener(); myComponent.addBreadcrumbsItemListener(this); @@ -140,8 +153,7 @@ public class BreadcrumbsXmlWrapper implements BreadcrumbsItemListener