diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java index 95b0458d257a..f7d635a2a15f 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java @@ -49,6 +49,15 @@ public class IdeaProjectSettingsService extends ProjectSettingsService implement }); } + public void openGlobalLibraries() { + final ProjectStructureConfigurable config = ProjectStructureConfigurable.getInstance(myProject); + ShowSettingsUtil.getInstance().editConfigurable(myProject, config, new Runnable() { + public void run() { + config.selectGlobalLibraries(true); + } + }); + } + @Override public boolean canOpenModuleSettings() { return true; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java index fca175a3bee8..7988292deeaa 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java @@ -413,6 +413,11 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se return navigateTo(place, requestFocus); } + public ActionCallback selectGlobalLibraries(final boolean requestFocus) { + Place place = createPlaceFor(myGlobalLibrariesConfig); + return navigateTo(place, requestFocus); + } + public ActionCallback selectProjectOrGlobalLibrary(@NotNull Library library, boolean requestFocus) { Place place = createProjectOrGlobalLibraryPlace(library); return navigateTo(place, requestFocus); diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java index ba8cd9f2fbdd..ae481741180c 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java @@ -409,6 +409,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo if (myEditor == null) { myEditor = createEditor(); + myEditor.getScrollPane().setBorder(null); myHyperlinks = new EditorHyperlinkSupport(myEditor, myProject); requestFlushImmediately(); myMainPanel.add(createCenterComponent(), BorderLayout.CENTER); diff --git a/platform/lang-impl/src/com/intellij/ide/util/FileStructurePopup.java b/platform/lang-impl/src/com/intellij/ide/util/FileStructurePopup.java index fe4c75286032..7ac417792b1c 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/FileStructurePopup.java +++ b/platform/lang-impl/src/com/intellij/ide/util/FileStructurePopup.java @@ -43,10 +43,7 @@ import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; -import com.intellij.ui.ScrollPaneFactory; -import com.intellij.ui.SimpleTextAttributes; -import com.intellij.ui.SpeedSearchComparator; -import com.intellij.ui.TreeSpeedSearch; +import com.intellij.ui.*; import com.intellij.ui.popup.AbstractPopup; import com.intellij.ui.speedSearch.ElementFilter; import com.intellij.ui.speedSearch.SpeedSearchUtil; @@ -397,7 +394,9 @@ public class FileStructurePopup implements Disposable { } myPrefferedWidth = Math.max(comboPanel.getPreferredSize().width, 350); panel.add(comboPanel, BorderLayout.NORTH); - panel.add(ScrollPaneFactory.createScrollPane(myAbstractTreeBuilder.getTree()), BorderLayout.CENTER); + JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myAbstractTreeBuilder.getTree()); + scrollPane.setBorder(IdeBorderFactory.createBorder(SideBorder.TOP | SideBorder.BOTTOM)); + panel.add(scrollPane, BorderLayout.CENTER); panel.add(createSouthPanel(), BorderLayout.SOUTH); return panel; diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ProjectSettingsService.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ProjectSettingsService.java index 5c016d814afd..0a0f04fd7f67 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ProjectSettingsService.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ProjectSettingsService.java @@ -42,6 +42,9 @@ public class ProjectSettingsService { public void openProjectSettings() { } + public void openGlobalLibraries() { + } + public void openModuleSettings(final Module module) { } diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileTreeModelBuilder.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileTreeModelBuilder.java index 32396c8643e1..2d5ad682d109 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileTreeModelBuilder.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/FileTreeModelBuilder.java @@ -448,7 +448,7 @@ public class FileTreeModelBuilder { PackageDependenciesNode directoryNode = myModuleDirNodes.get(virtualFile); if (directoryNode != null) { if (myCompactEmptyMiddlePackages) { - DirectoryNode nestedNode = ((DirectoryNode)directoryNode).getCompactedDirNode(); + final DirectoryNode nestedNode = ((DirectoryNode)directoryNode).getCompactedDirNode(); if (nestedNode != null) { //decompact boolean expand = false; if (myTree != null){ @@ -465,7 +465,12 @@ public class FileTreeModelBuilder { parentWrapper.add(nestedNode); nestedNode.removeUpReference(); if (myTree != null && expand) { - myTree.expandPath(new TreePath(nestedNode.getPath())); + final Runnable expandRunnable = new Runnable() { + public void run() { + myTree.expandPath(new TreePath(nestedNode.getPath())); + } + }; + SwingUtilities.invokeLater(expandRunnable); } return parentWrapper; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ast/DelegatedMethodsContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ast/DelegatedMethodsContributor.java index 267617a9d1df..8c39af2ba2ce 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ast/DelegatedMethodsContributor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ast/DelegatedMethodsContributor.java @@ -20,7 +20,10 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.impl.light.LightMethodBuilder; import com.intellij.psi.impl.light.LightMirrorMethod; -import com.intellij.psi.util.*; +import com.intellij.psi.util.CachedValue; +import com.intellij.psi.util.MethodSignature; +import com.intellij.psi.util.PsiUtil; +import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.hash.HashSet; import org.jetbrains.annotations.NotNull; @@ -154,35 +157,20 @@ public class DelegatedMethodsContributor extends AstTransformContributor { /** * The key method of contributor. It collects all delegating methods of clazz * - * If the return value is null, the result can be cached. It means that no already processed classes was touched by current processing. In - * other case some delegated methods can be missed. - * * @param clazz class to process * @param processed already visited classes * @param collector result collection - * @return classes which were visited during current processing and were in processed at the very beginning of processing */ - @Nullable - private static Set process(PsiClass clazz, - PsiSubstitutor superClassSubsitutor, - Set processed, - List collector, - GrTypeDefinition classToDelegateTo) { - final CachedValue data = clazz.getUserData(CACHED_DELEGATED_METHODS); - if (data != null) { - ContainerUtil.addAll(collector, data.getValue()); - return null; - } - - final Set myProcessed = new HashSet(); - myProcessed.addAll(processed); - - Set alreadyVisited = null; + private static void process(PsiClass clazz, + PsiSubstitutor superClassSubsitutor, + Set processed, + List collector, + GrTypeDefinition classToDelegateTo) { final List result = new ArrayList(); //process super methods before delegated methods for (PsiClassType superType : clazz.getSuperTypes()) { - alreadyVisited = processClassInner(superType, superClassSubsitutor, true, result, classToDelegateTo, processed, alreadyVisited); + processClassInner(superType, superClassSubsitutor, true, result, classToDelegateTo, processed); } if (clazz instanceof GrTypeDefinition) { @@ -194,64 +182,36 @@ public class DelegatedMethodsContributor extends AstTransformContributor { final PsiType type = field.getDeclaredType(); if (!(type instanceof PsiClassType)) continue; - alreadyVisited = processClassInner((PsiClassType)type, superClassSubsitutor, shouldDelegateDeprecated(delegate), result, classToDelegateTo, processed, alreadyVisited); + processClassInner((PsiClassType)type, superClassSubsitutor, shouldDelegateDeprecated(delegate), result, classToDelegateTo, processed); } } collector.addAll(result); - - if (alreadyVisited == null || !ContainerUtil.intersects(myProcessed, alreadyVisited)) { - final CachedValue value = - CachedValuesManager.getManager(clazz.getProject()).createCachedValue(new CachedValueProvider() { - @Override - public Result compute() { - return Result.create(result.toArray(new PsiMethod[result.size()]), PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT); - } - }); - clazz.putUserData(CACHED_DELEGATED_METHODS, value); - } - - return alreadyVisited; } - @Nullable - private static Set processClassInner(PsiClassType type, - PsiSubstitutor superClassSubstitutor, - boolean deprecated, - List result, - GrTypeDefinition classToDelegateTo, - Set processed, - @Nullable Set alreadyVisited) { + private static void processClassInner(PsiClassType type, + PsiSubstitutor superClassSubstitutor, + boolean deprecated, + List result, + GrTypeDefinition classToDelegateTo, + Set processed) { final PsiClassType.ClassResolveResult resolveResult = type.resolveGenerics(); final PsiClass psiClass = resolveResult.getElement(); - if (psiClass == null) return alreadyVisited; + if (psiClass == null) return; + final String qname = psiClass.getQualifiedName(); - if (CommonClassNames.JAVA_LANG_OBJECT.equals(qname)) return alreadyVisited; - if (GroovyCommonClassNames.GROOVY_OBJECT.equals(qname)) return alreadyVisited; - if (GroovyCommonClassNames.GROOVY_OBJECT_SUPPORT.equals(qname)) return alreadyVisited; + if (CommonClassNames.JAVA_LANG_OBJECT.equals(qname)) return; + if (GroovyCommonClassNames.GROOVY_OBJECT.equals(qname)) return; + if (GroovyCommonClassNames.GROOVY_OBJECT_SUPPORT.equals(qname)) return; final PsiSubstitutor substitutor = TypesUtil.composeSubstitutors(resolveResult.getSubstitutor(), superClassSubstitutor); - if (processed.contains(psiClass)) { - if (alreadyVisited == null) alreadyVisited = new HashSet(); - alreadyVisited.add(psiClass); - return alreadyVisited; - } + if (processed.contains(psiClass)) return; processed.add(psiClass); collectMethods(psiClass, substitutor, deprecated, classToDelegateTo, result); - final Set _alreadyVisited = process(psiClass, substitutor, processed, result, classToDelegateTo); - - if (_alreadyVisited != null) { - if (alreadyVisited == null) { - alreadyVisited = _alreadyVisited; - } - else { - alreadyVisited.addAll(_alreadyVisited); - } - } - return alreadyVisited; + process(psiClass, substitutor, processed, result, classToDelegateTo); } private static void collectMethods(PsiClass currentClass, diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleStructureSynchronizer.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleStructureSynchronizer.java index 2cdb96c9d68a..04321da4d48d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleStructureSynchronizer.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleStructureSynchronizer.java @@ -227,6 +227,7 @@ public class MvcModuleStructureSynchronizer extends AbstractProjectComponent { ApplicationManager.getApplication().assertIsDispatchThread(); synchronized (myActions) { if (myActions.isEmpty()) { + if (myProject.isDisposed()) return; StartupManager.getInstance(myProject).runWhenProjectIsInitialized(new DumbAwareRunnable() { public void run() { ApplicationManager.getApplication().invokeLater(new Runnable() { diff --git a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.form b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.form index fa8e1f60e5b8..90db52f6e012 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.form +++ b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.form @@ -8,8 +8,7 @@ - - + @@ -19,6 +18,7 @@ + @@ -31,6 +31,7 @@ +