Merge branch 'master' into changeSignature
authorMaxim Medvedev <maxim.medvedev@jetbrains.com>
Tue, 1 Jun 2010 05:45:59 +0000 (09:45 +0400)
committerMaxim Medvedev <maxim.medvedev@jetbrains.com>
Tue, 1 Jun 2010 05:45:59 +0000 (09:45 +0400)
294 files changed:
java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java
java/compiler/impl/src/com/intellij/compiler/impl/CompilerErrorTreeView.java
java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactPackagingProcessingItem.java
java/execution/openapi/src/com/intellij/execution/configurations/JavaRunConfigurationModule.java
java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java
java/java-impl/src/com/intellij/codeInsight/completion/DefaultInsertHandler.java
java/java-impl/src/com/intellij/codeInsight/daemon/impl/actions/SuppressFix.java
java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveRedundantElseAction.java
java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SurroundWithArrayFix.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/AddDeprecationAnnotationFix.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/AddNullableNotNullAnnotationFix.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/AddOnDemandStaticImportAction.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/AddSingleMemberStaticImportAction.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/ColorChooserIntentionAction.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertAbsolutePathToRelativeIntentionAction.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateSubclassAction.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/InvertIfConditionAction.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/MakeTypeGenericAction.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/MoveInitializerToConstructorAction.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitDeclarationAction.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java
java/java-impl/src/com/intellij/psi/impl/AllowedApiFilterExtension.java [new file with mode: 0644]
java/java-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java
java/java-impl/src/com/intellij/psi/impl/file/PsiPackageImpl.java
java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceDialog.java
java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceProcessor.java
java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseDialog.java
java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseProcessor.java
java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperClassProcessor.java
java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassDialog.java
java/java-impl/src/com/intellij/refactoring/rename/RenameJavaClassProcessor.java
java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java
java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java
java/java-impl/src/com/intellij/refactoring/util/duplicates/MethodDuplicatesHandler.java
java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestAction.java
java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous-out.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous.java [new file with mode: 0644]
java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java [new file with mode: 0644]
java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java.after [new file with mode: 0644]
java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java [new file with mode: 0644]
java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after [new file with mode: 0644]
java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java [new file with mode: 0644]
java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java.after [new file with mode: 0644]
java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContext.java [new file with mode: 0644]
java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java [new file with mode: 0644]
java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java.after [new file with mode: 0644]
java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java [new file with mode: 0644]
java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java.after [new file with mode: 0644]
java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java [new file with mode: 0644]
java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java.after [new file with mode: 0644]
java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java
java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java
java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java
java/openapi/src/com/intellij/codeInsight/intention/AddAnnotationFix.java
java/openapi/src/com/intellij/psi/PsiQualifiedExpression.java [new file with mode: 0644]
java/openapi/src/com/intellij/psi/PsiSuperExpression.java
java/openapi/src/com/intellij/psi/PsiThisExpression.java
platform/icons/src/ide/emptyFatalError.png [new file with mode: 0755]
platform/icons/src/ide/error_notifications.png [changed mode: 0644->0755]
platform/icons/src/ide/fatalError.png [new file with mode: 0755]
platform/icons/src/ide/hectorNo.png [new file with mode: 0755]
platform/icons/src/ide/hectorOff.png [new file with mode: 0755]
platform/icons/src/ide/hectorOn.png [new file with mode: 0755]
platform/icons/src/ide/incomingChangesOff.png [new file with mode: 0755]
platform/icons/src/ide/incomingChangesOn.png [new file with mode: 0755]
platform/icons/src/ide/info_notifications.png [changed mode: 0644->0755]
platform/icons/src/ide/notifications.png [changed mode: 0644->0755]
platform/icons/src/ide/read_notifications.png [deleted file]
platform/icons/src/ide/readonly.png [new file with mode: 0755]
platform/icons/src/ide/readwrite.png [new file with mode: 0755]
platform/icons/src/ide/statusbar_arrows.png [new file with mode: 0644]
platform/icons/src/ide/warning_notifications.png [changed mode: 0644->0755]
platform/icons/src/process/step_passive.png [changed mode: 0644->0755]
platform/lang-api/src/com/intellij/codeInsight/intention/PsiElementBaseIntentionAction.java
platform/lang-api/src/com/intellij/execution/configurations/ModuleBasedConfiguration.java
platform/lang-api/src/com/intellij/openapi/module/ModuleUtil.java
platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java
platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/StatusBarUpdater.java [deleted file]
platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/actions/AbstractSuppressByNoInspectionCommentFix.java
platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java
platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java
platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java
platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateManagerImpl.java
platform/lang-impl/src/com/intellij/openapi/wm/impl/status/TogglePopupHintsPanel.java
platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java
platform/lang-impl/src/com/intellij/profile/codeInspection/InspectionProjectProfileManager.java
platform/platform-api/src/com/intellij/execution/process/ProcessTerminatedListener.java
platform/platform-api/src/com/intellij/notification/Notification.java
platform/platform-api/src/com/intellij/openapi/options/SearchableConfigurable.java
platform/platform-api/src/com/intellij/openapi/wm/CustomStatusBarWidget.java [moved from platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarPatch.java with 67% similarity]
platform/platform-api/src/com/intellij/openapi/wm/StatusBar.java
platform/platform-api/src/com/intellij/openapi/wm/StatusBarCustomComponentFactory.java
platform/platform-api/src/com/intellij/openapi/wm/StatusBarInfo.java [new file with mode: 0644]
platform/platform-api/src/com/intellij/openapi/wm/StatusBarWidget.java [new file with mode: 0644]
platform/platform-api/src/com/intellij/ui/StatusBarInformer.java [deleted file]
platform/platform-api/src/com/intellij/ui/components/labels/LinkLabel.java
platform/platform-api/src/com/intellij/util/ui/AnimatedIcon.java
platform/platform-impl/src/com/intellij/diagnostic/IdeMessagePanel.java
platform/platform-impl/src/com/intellij/ide/util/GotoLineNumberDialog.java
platform/platform-impl/src/com/intellij/notification/impl/IdeNotificationArea.java
platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java
platform/platform-impl/src/com/intellij/notification/impl/ProjectNotificationsComponent.java
platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationComponent.java [deleted file]
platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java
platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorComponent.java
platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java
platform/platform-impl/src/com/intellij/openapi/progress/impl/BackgroundableProcessIndicator.java
platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/RefreshProgress.java
platform/platform-impl/src/com/intellij/openapi/wm/ex/StatusBarEx.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/TestWindowManager.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EncodingPanel.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InlineProgressIndicator.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InsertOverwritePanel.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/MacStatusBarUI.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/MemoryUsagePanel.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PositionPanel.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ProcessIconWidget.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ShowProcessWindowAction.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarImpl.java [deleted file]
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarTooltipper.java [deleted file]
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarUI.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/TextPanel.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToggleReadOnlyAttributePanel.java
platform/platform-impl/src/com/intellij/ui/SplittingUtil.java [deleted file]
platform/platform-resources-en/src/messages/UIBundle.properties
platform/platform-resources/src/idea/Keymap_Default.xml
platform/usageView/src/com/intellij/usages/NamedPresentably.java [new file with mode: 0644]
platform/usageView/src/com/intellij/usages/PsiNamedElementUsageGroupBase.java
platform/usageView/src/com/intellij/usages/UsageGroup.java
platform/usageView/src/com/intellij/usages/impl/rules/FileGroupingRule.java
platform/util/src/com/intellij/ui/TableUtil.java
platform/util/src/com/intellij/util/lang/UrlClassLoader.java
platform/util/src/com/intellij/util/ui/UIUtil.java
platform/vcs-api/src/com/intellij/openapi/vcs/QuantitySelection.java [moved from plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/QuantitySelection.java with 96% similarity]
platform/vcs-api/src/com/intellij/openapi/vcs/SelectionManipulation.java [moved from plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SelectionManipulation.java with 94% similarity]
platform/vcs-api/src/com/intellij/openapi/vcs/SelectionResult.java [moved from plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SelectionResult.java with 91% similarity]
platform/vcs-api/src/com/intellij/openapi/vcs/SelectionState.java [new file with mode: 0644]
platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesPanel.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/IncomingChangesIndicator.java
platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java
plugins/IntelliLang/src/org/intellij/plugins/intelliLang/PatternBasedInjectionHelper.java
plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/AbstractLanguageInjectionSupport.java
plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/BaseInjection.java
plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/BaseInjectionPanel.form
plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/BaseInjectionPanel.java
plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditEditor.java
plugins/IntentionPowerPak/src/com/siyeh/ipp/base/Intention.java
plugins/IntentionPowerPak/src/com/siyeh/ipp/base/MutablyNamedIntention.java
plugins/IntentionPowerPak/src/com/siyeh/ipp/decls/MoveDeclarationIntention.java
plugins/IntentionPowerPak/src/com/siyeh/ipp/fqnames/ReplaceFullyQualifiedNameWithImportIntention.java
plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsExecution/CvsOperationExecutor.java
plugins/git4idea/src/git4idea/commands/GitFileUtils.java
plugins/git4idea/src/git4idea/i18n/GitBundle.properties
plugins/git4idea/src/git4idea/vfs/GitVFSListener.java
plugins/groovy/src/META-INF/intellilang-groovy-support.xml
plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/PatternEditorContextMembersProvider.java [new file with mode: 0644]
plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewScriptAction.java
plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/SuppressForMemberFix.java
plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/MethodLateBoundReferencesSearcher.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/expectedTypes/GroovyExpectedTypesProvider.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/toplevel/imports/GrImportStatementImpl.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MethodResolverProcessor.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/processors/ResolverProcessor.java
plugins/groovy/src/org/jetbrains/plugins/groovy/overrideImplement/GroovyOverrideImplementUtil.java
plugins/groovy/src/org/jetbrains/plugins/groovy/util/LibrariesUtil.java
plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTest.groovy
plugins/hg4idea/resources/org/zmlx/hg4idea/HgVcsMessages.properties
plugins/hg4idea/resources/python/filemerge.py [new file with mode: 0644]
plugins/hg4idea/resources/python/prompthooks.py [new file with mode: 0644]
plugins/hg4idea/src/META-INF/plugin.xml
plugins/hg4idea/src/org/zmlx/hg4idea/HgContentRevision.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgCurrentBranchStatusUpdater.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgErrorHandler.java [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/HgExecutableValidator.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgFileRevision.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgIdeConfigurable.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgIncomingStatusUpdater.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgOutgoingStatusUpdater.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgProjectConfigurable.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgRevisionNumber.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgUtil.java [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/HgVcs.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgVirtualFileListener.java
plugins/hg4idea/src/org/zmlx/hg4idea/action/HgAbstractFilesAction.java
plugins/hg4idea/src/org/zmlx/hg4idea/action/HgAbstractGlobalAction.java
plugins/hg4idea/src/org/zmlx/hg4idea/action/HgMarkResolved.java
plugins/hg4idea/src/org/zmlx/hg4idea/action/HgMercurialMenu.java
plugins/hg4idea/src/org/zmlx/hg4idea/action/HgMqRebaseAction.java
plugins/hg4idea/src/org/zmlx/hg4idea/action/HgRunConflictResolverAction.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgCatCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgChangesetsCommand.java [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgCloneCommand.java [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgCommandAuthenticator.java [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgCommandResult.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgCommandService.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgCommitCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgHeadsCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgIdentifyCommand.java [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgIncomingCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgLogCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgMergeCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgOutgoingCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgParentsCommand.java [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgPullCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgPushCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgResolveCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgRevertCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgRevisionsCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgStatusCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgTrackFileNamesAccrossRevisionsCommand.java [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgVersionCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgWorkingCopyRevisionsCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/ShellCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/SocketServer.java [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgCachingCommitedChangesProvider.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgCheckoutProvider.java [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgCommitedChangeList.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgCurrentBinaryContentRevision.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgCurrentContentRevision.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgCurrentContentRevisionFactory.java [deleted file]
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgDiffProvider.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgHistoryProvider.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgRollbackEnvironment.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/annotate/HgAnnotation.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/annotate/HgAnnotationProvider.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/commit/HgCheckinEnvironment.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/commit/HgCommitSession.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/update/HgConflictResolver.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/update/HgHeadMerger.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/update/HgIntegrateEnvironment.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/update/HgRegularUpdater.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/update/HgUpdateEnvironment.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/update/HgUpdater.java
plugins/hg4idea/src/org/zmlx/hg4idea/provider/update/HgUpdaterFactory.java
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgChangesetStatus.java
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgCloneDialog.form [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgCloneDialog.java [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgConfigurationIdePanel.form
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgConfigurationIdePanel.java
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgCurrentBranchStatus.java
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgIntegrateDialog.form
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgIntegrateDialog.java
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgSetExecutableDialog.form
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgSetExecutableDialog.java
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgUpdateDialog.form [new file with mode: 0644]
plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgUpdateDialog.java [new file with mode: 0644]
plugins/hg4idea/testSrc/org/zmlx/hg4idea/AbstractHgTestCase.java [new file with mode: 0644]
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgAddTestCase.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgCatTestCase.java [new file with mode: 0644]
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgCopyTestCase.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgDeleteTestCase.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgFromClonedTestCase.java [new file with mode: 0644]
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgLogTestCase.java [new file with mode: 0644]
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgMoveTestCase.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgRenameTestCase.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgResolveConflictTestCase.java [new file with mode: 0644]
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgRevertTestCase.java [new file with mode: 0644]
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgTestCase.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/HgUpdateTestCase.java [new file with mode: 0644]
plugins/java-i18n/src/com/intellij/codeInspection/i18n/SuppressByCommentOutAction.java
plugins/properties/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java
plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties
plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form
plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java
plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java
plugins/svn4idea/src/org/jetbrains/idea/svn/checkout/CheckoutEventHandler.java
plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/BranchMerger.java
plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/CopiesPanel.java
plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/QuickMerge.java
plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/ToBeMergedDialog.java
plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/Merger.java
plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/SvnIntegrateChangesTask.java
plugins/svn4idea/src/org/jetbrains/idea/svn/mergeinfo/OneRecursiveShotMergeInfoWorker.java
plugins/svn4idea/src/org/jetbrains/idea/svn/update/UpdateEventHandler.java
plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/QuickFixManagerImpl.java
plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/PasteProcessor.java
plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltResourceProvider.java
plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/validation/inspections/SuppressInspectionAction.java
resources/src/META-INF/IdeaPlugin.xml
xml/impl/src/com/intellij/codeInsight/completion/XmlAutoLookupHandler.java
xml/impl/src/com/intellij/javaee/ResourceRegistrarImpl.java
xml/impl/src/com/intellij/psi/impl/source/xml/XmlDoctypeImpl.java
xml/openapi/src/com/intellij/codeInspection/XmlSuppressableInspectionTool.java

index f9d22e8931f65cdefb7f953f636722114518d228..3e62d59e1d640b4aee7066228264de1439960139 100644 (file)
  */
 package com.intellij.compiler.impl;
 
-import com.intellij.CommonBundle;
-import com.intellij.analysis.AnalysisScope;
+import com.intellij.*;
+import com.intellij.analysis.*;
 import com.intellij.compiler.*;
-import com.intellij.compiler.make.CacheCorruptedException;
-import com.intellij.compiler.make.CacheUtils;
-import com.intellij.compiler.make.DependencyCache;
-import com.intellij.compiler.progress.CompilerTask;
-import com.intellij.diagnostic.IdeErrorsDialog;
-import com.intellij.diagnostic.PluginException;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.application.ModalityState;
+import com.intellij.compiler.make.*;
+import com.intellij.compiler.progress.*;
+import com.intellij.diagnostic.*;
+import com.intellij.openapi.application.*;
 import com.intellij.openapi.compiler.*;
 import com.intellij.openapi.compiler.Compiler;
-import com.intellij.openapi.compiler.ex.CompileContextEx;
-import com.intellij.openapi.compiler.ex.CompilerPathsEx;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.extensions.Extensions;
-import com.intellij.openapi.extensions.PluginId;
-import com.intellij.openapi.fileEditor.FileDocumentManager;
-import com.intellij.openapi.fileTypes.FileType;
-import com.intellij.openapi.fileTypes.FileTypeManager;
-import com.intellij.openapi.fileTypes.StdFileTypes;
-import com.intellij.openapi.module.LanguageLevelUtil;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.progress.ProcessCanceledException;
-import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.progress.ProgressManager;
-import com.intellij.openapi.project.DumbService;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.project.ProjectBundle;
-import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.compiler.ex.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.extensions.*;
+import com.intellij.openapi.fileEditor.*;
+import com.intellij.openapi.fileTypes.*;
+import com.intellij.openapi.module.*;
+import com.intellij.openapi.progress.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.projectRoots.*;
 import com.intellij.openapi.roots.*;
-import com.intellij.openapi.roots.ex.ProjectRootManagerEx;
-import com.intellij.openapi.roots.ui.configuration.CommonContentEntriesEditor;
-import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService;
-import com.intellij.openapi.ui.MessageType;
-import com.intellij.openapi.ui.Messages;
+import com.intellij.openapi.roots.ex.*;
+import com.intellij.openapi.roots.ui.configuration.*;
+import com.intellij.openapi.ui.*;
 import com.intellij.openapi.util.*;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.util.registry.Registry;
-import com.intellij.openapi.vfs.LocalFileSystem;
-import com.intellij.openapi.vfs.VfsUtil;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.vfs.VirtualFileManager;
-import com.intellij.openapi.wm.StatusBar;
-import com.intellij.openapi.wm.ToolWindowId;
-import com.intellij.openapi.wm.ToolWindowManager;
-import com.intellij.openapi.wm.WindowManager;
-import com.intellij.packageDependencies.DependenciesBuilder;
-import com.intellij.packageDependencies.ForwardDependenciesBuilder;
-import com.intellij.pom.java.LanguageLevel;
-import com.intellij.psi.PsiCompiledElement;
-import com.intellij.psi.PsiDocumentManager;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiManager;
-import com.intellij.util.Chunk;
-import com.intellij.util.LocalTimeCounter;
-import com.intellij.util.StringBuilderSpinAllocator;
-import com.intellij.util.ThrowableRunnable;
+import com.intellij.openapi.util.io.*;
+import com.intellij.openapi.util.registry.*;
+import com.intellij.openapi.vfs.*;
+import com.intellij.openapi.wm.*;
+import com.intellij.packageDependencies.*;
+import com.intellij.pom.java.*;
+import com.intellij.psi.*;
+import com.intellij.util.*;
 import com.intellij.util.concurrency.Semaphore;
-import com.intellij.util.containers.ContainerUtil;
+import com.intellij.util.containers.*;
 import com.intellij.util.containers.HashMap;
-import com.intellij.util.containers.MultiMap;
-import com.intellij.util.containers.OrderedSet;
-import gnu.trove.TObjectHashingStrategy;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
+import gnu.trove.*;
+import org.jetbrains.annotations.*;
 
 import java.io.*;
 import java.util.*;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
+import java.util.HashSet;
+import java.util.concurrent.*;
 
 public class CompileDriver {
   private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.impl.CompileDriver");
@@ -512,7 +480,7 @@ public class CompileDriver {
             final StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject);
             if (statusBar != null) { // because this code is in invoke later, the code may work for already closed project
               // in case another project was opened in the frame while the compiler was working (See SCR# 28591)
-              statusBar.setInfo(statusMessage);
+              StatusBar.Info.set(statusMessage, myProject);
               if (duration > ONE_MINUTE_MS) {
                 final MessageType messageType = errorCount > 0 ? MessageType.ERROR : warningCount > 0 ? MessageType.WARNING : MessageType.INFO;
                 ToolWindowManager.getInstance(myProject).notifyByBalloon(ToolWindowId.MESSAGES_WINDOW, messageType, statusMessage);
index de572869e7c54dfdf6b29832116946682c83cb38..5d399e4410f9d82d4a17d35037e430792b8b2ad4 100644 (file)
  */
 package com.intellij.compiler.impl;
 
-import com.intellij.codeInsight.daemon.impl.actions.SuppressFix;
-import com.intellij.codeInsight.daemon.impl.actions.SuppressForClassFix;
-import com.intellij.compiler.CompilerConfiguration;
-import com.intellij.compiler.CompilerConfigurationImpl;
-import com.intellij.compiler.CompilerWorkspaceConfiguration;
-import com.intellij.compiler.HelpID;
-import com.intellij.compiler.options.CompilerConfigurable;
+import com.intellij.codeInsight.daemon.impl.actions.*;
+import com.intellij.compiler.*;
+import com.intellij.compiler.options.*;
 import com.intellij.ide.errorTreeView.*;
-import com.intellij.ide.util.treeView.NodeDescriptor;
+import com.intellij.ide.util.treeView.*;
 import com.intellij.openapi.actionSystem.*;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.command.CommandProcessor;
-import com.intellij.openapi.compiler.CompilerBundle;
-import com.intellij.openapi.compiler.options.ExcludeEntryDescription;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.fileEditor.OpenFileDescriptor;
-import com.intellij.openapi.module.LanguageLevelUtil;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleUtil;
-import com.intellij.openapi.options.ShowSettingsUtil;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.projectRoots.JavaSdk;
-import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.roots.ModuleRootManager;
-import com.intellij.openapi.util.IconLoader;
-import com.intellij.openapi.vcs.FileStatusManager;
-import com.intellij.openapi.vfs.LocalFileSystem;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.pom.Navigatable;
-import com.intellij.pom.java.LanguageLevel;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.command.*;
+import com.intellij.openapi.compiler.*;
+import com.intellij.openapi.compiler.options.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.fileEditor.*;
+import com.intellij.openapi.module.*;
+import com.intellij.openapi.options.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.projectRoots.*;
+import com.intellij.openapi.roots.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.vcs.*;
+import com.intellij.openapi.vfs.*;
+import com.intellij.pom.*;
+import com.intellij.pom.java.*;
 import com.intellij.psi.*;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
 
@@ -222,7 +213,7 @@ public class CompilerErrorTreeView extends NewErrorTreeViewPanel {
       return new SuppressFix(id) {
         @Override
         @SuppressWarnings({"SimplifiableIfStatement"})
-        public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement context) {
+        public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement context) {
           if (getContainer(context) instanceof PsiClass) return false;
           return super.isAvailable(project, editor, context);
         }
index 790472ae45050e6a46c8a3067c7f21ead7894a75..9db67e89b0e3bc46304c5c72d3aeb74a0b515f05 100644 (file)
 
 package com.intellij.packaging.impl.compiler;
 
-import com.intellij.compiler.impl.packagingCompiler.DestinationInfo;
-import com.intellij.compiler.impl.FileProcessingCompilerStateCache;
-import com.intellij.openapi.compiler.FileProcessingCompiler;
-import com.intellij.openapi.compiler.ValidityState;
-import com.intellij.openapi.util.Pair;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.SmartList;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.compiler.impl.*;
+import com.intellij.compiler.impl.packagingCompiler.*;
+import com.intellij.openapi.compiler.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.vfs.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.io.IOException;
+import java.io.*;
+import java.util.*;
 
 /**
  * @author nik
@@ -80,7 +77,7 @@ public class ArtifactPackagingProcessingItem implements FileProcessingCompiler.P
 
   public List<DestinationInfo> getEnabledDestinations() {
     if (myEnabledDestinations == null) {
-      myEnabledDestinations = new ArrayList<DestinationInfo>();
+      myEnabledDestinations = new SmartList<DestinationInfo>();
       for (Pair<DestinationInfo, Boolean> destination : myDestinations) {
         if (destination.getSecond()) {
           myEnabledDestinations.add(destination.getFirst());
@@ -94,4 +91,4 @@ public class ArtifactPackagingProcessingItem implements FileProcessingCompiler.P
   public ValidityState getValidityState() {
     return new ArtifactPackagingItemValidityState(getEnabledDestinations(), mySourceFileModified, myOldState);
   }
-}
\ No newline at end of file
+}
index 0e83b49c8af1ca08471bdb573c2a425a68c1f670..439d18fc172128c8fe25de6ead06bcffe524789d 100644 (file)
  */
 package com.intellij.execution.configurations;
 
-import com.intellij.execution.ExecutionBundle;
-import com.intellij.execution.JavaExecutionUtil;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.module.ModuleUtil;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.JavaPsiFacade;
-import com.intellij.psi.PsiClass;
-import com.intellij.psi.PsiDocumentManager;
-import com.intellij.psi.search.GlobalSearchScope;
-import gnu.trove.THashSet;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.execution.*;
+import com.intellij.openapi.module.*;
+import com.intellij.openapi.project.*;
+import com.intellij.psi.*;
+import com.intellij.psi.search.*;
+import gnu.trove.*;
+import org.jetbrains.annotations.*;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Set;
+import java.util.*;
 
 /**
  * @author spleaner
@@ -77,7 +69,11 @@ public class JavaRunConfigurationModule extends RunConfigurationModule {
       return Arrays.asList(ModuleManager.getInstance(project).getModules());
     }
     else {
-      return ModuleUtil.collectModulesDependsOn(modules);
+      final Set<Module> result = new HashSet<Module>();
+      for (Module module : modules) {
+        ModuleUtil.collectModulesDependsOn(module, result);
+      }
+      return result;
     }
   }
 
index 73422a5172ce6cc553d8d51c96d81d013a06e532..aa82cc1db9ef42cc05f532c75f0e2e79df2761e8 100644 (file)
@@ -38,33 +38,30 @@ class ConstructorInsertHandler implements InsertHandler<LookupElementDecorator<L
   public void handleInsert(InsertionContext context, LookupElementDecorator<LookupItem> item) {
     @SuppressWarnings({"unchecked"}) final LookupItem<PsiClass> delegate = item.getDelegate();
 
+    final PsiElement position = SmartCompletionDecorator.getPosition(context, delegate);
+    final PsiExpression enclosing = PsiTreeUtil.getContextOfType(position, PsiExpression.class, true);
+    final PsiAnonymousClass anonymousClass = PsiTreeUtil.getParentOfType(position, PsiAnonymousClass.class);
+    final boolean inAnonymous = anonymousClass != null && anonymousClass.getParent() == enclosing;
+
     insertParentheses(context, delegate, delegate.getObject());
 
     DefaultInsertHandler.addImportForItem(context.getFile(), context.getStartOffset(), delegate);
 
-    final PsiElement position = SmartCompletionDecorator.getPosition(context, delegate);
-
-    final PsiExpression enclosing = PsiTreeUtil.getContextOfType(position, PsiExpression.class, true);
-    if (item.getUserData(LookupItem.BRACKETS_COUNT_ATTR) == null) {
-      final PsiAnonymousClass anonymousClass = PsiTreeUtil.getParentOfType(position, PsiAnonymousClass.class);
-      if (anonymousClass == null || anonymousClass.getParent() != enclosing) {
-
-        final PsiClass psiClass = (PsiClass)item.getObject();
 
-        if (psiClass.hasModifierProperty(PsiModifier.ABSTRACT) || psiClass.isInterface()) {
-          FeatureUsageTracker.getInstance().triggerFeatureUsed("editing.completion.smarttype.anonymous");
+    if (item.getUserData(LookupItem.BRACKETS_COUNT_ATTR) == null && !inAnonymous) {
+      if (((PsiClass)item.getObject()).hasModifierProperty(PsiModifier.ABSTRACT)) {
+        FeatureUsageTracker.getInstance().triggerFeatureUsed("editing.completion.smarttype.anonymous");
 
-          PostprocessReformattingAspect.getInstance(context.getProject()).doPostponedFormatting(context.getFile().getViewProvider());
+        PostprocessReformattingAspect.getInstance(context.getProject()).doPostponedFormatting(context.getFile().getViewProvider());
 
-          final Editor editor = context.getEditor();
-          final int offset = context.getTailOffset();
-          editor.getDocument().insertString(offset, " {}");
-          editor.getCaretModel().moveToOffset(offset + 2);
-          context.setLaterRunnable(generateAnonymousBody(editor, context.getFile()));
-        }
-        else {
-          FeatureUsageTracker.getInstance().triggerFeatureUsed("editing.completion.smarttype.afternew");
-        }
+        final Editor editor = context.getEditor();
+        final int offset = context.getTailOffset();
+        editor.getDocument().insertString(offset, " {}");
+        editor.getCaretModel().moveToOffset(offset + 2);
+        context.setLaterRunnable(generateAnonymousBody(editor, context.getFile()));
+      }
+      else {
+        FeatureUsageTracker.getInstance().triggerFeatureUsed("editing.completion.smarttype.afternew");
       }
     }
   }
index a699861def3e2c83d4aee5a153b5032f86682d45..0b4ddd7f2a0b2817eae8a7c0b8a6ab7d384266d5 100644 (file)
@@ -37,21 +37,14 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager;
 import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.util.IncorrectOperationException;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 public class DefaultInsertHandler extends TemplateInsertHandler implements Cloneable {
   private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.completion.DefaultInsertHandler");
 
-  protected InsertionContext myContext;
-  private LookupItem<?> myLookupItem;
-
-  private Project myProject;
-  private PsiFile myFile;
-  private Editor myEditor;
-  protected Document myDocument;
-  private InsertHandlerState myState;
   public static final DefaultInsertHandler NO_TAIL_HANDLER = new DefaultInsertHandler(){
     @Override
-    protected TailType getTailType(char completionChar) {
+    protected TailType getTailType(char completionChar, LookupItem item) {
       return TailType.NONE;
     }
   };
@@ -64,107 +57,105 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
 
   private void handleInsertInner(InsertionContext context, LookupItem item, final char completionChar) {
     LOG.assertTrue(CommandProcessor.getInstance().getCurrentCommand() != null);
-    PsiDocumentManager.getInstance(context.getProject()).commitDocument(context.getEditor().getDocument());
-    myContext = context;
-    myLookupItem = item;
+    final Project project = context.getProject();
+    final Editor editor = context.getEditor();
+    final Document document = editor.getDocument();
+    PsiDocumentManager.getInstance(project).commitDocument(document);
 
-    myProject = myContext.getProject();
-    myFile = myContext.getFile();
-    myEditor = myContext.getEditor();
-    myDocument = myEditor.getDocument();
+    final PsiFile file = context.getFile();
 
-    TailType tailType = getTailType(completionChar);
+    TailType tailType = getTailType(completionChar, item);
 
-    myState = new InsertHandlerState(myContext.getSelectionEndOffset(), myContext.getSelectionEndOffset());
+    InsertHandlerState state = new InsertHandlerState(context.getSelectionEndOffset(), context.getSelectionEndOffset());
 
-    final boolean needLeftParenth = isToInsertParenth();
-    final boolean hasParams = needLeftParenth && hasParams();
+    final boolean needLeftParenth = isToInsertParenth(context, item);
+    final boolean hasParams = needLeftParenth && hasParams(context, item);
 
     if (CompletionUtil.isOverwrite(item, completionChar)) {
-      removeEndOfIdentifier(needLeftParenth && hasParams);
+      removeEndOfIdentifier(needLeftParenth && hasParams, context);
     }
-    else if(myContext.getOffsetMap().getOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET) != myContext.getSelectionEndOffset()) {
+    else if(context.getOffsetMap().getOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET) != context.getSelectionEndOffset()) {
       JavaCompletionUtil.resetParensInfo(context.getOffsetMap());
     }
 
-    handleParenses(hasParams, needLeftParenth, tailType);
-    handleBrackets();
+    handleParentheses(hasParams, needLeftParenth, tailType, context, state);
+    handleBrackets(item, document, state);
 
-    if (myLookupItem.getObject() instanceof PsiVariable) {
-      if (completionChar == '!' && PsiType.BOOLEAN.isAssignableFrom(((PsiVariable) myLookupItem.getObject()).getType())) {
-        PsiDocumentManager.getInstance(myProject).commitDocument(myDocument);
+    if (item.getObject() instanceof PsiVariable) {
+      if (completionChar == '!' && PsiType.BOOLEAN.isAssignableFrom(((PsiVariable) item.getObject()).getType())) {
+        PsiDocumentManager.getInstance(project).commitDocument(document);
         final PsiReferenceExpression ref =
-            PsiTreeUtil.findElementOfClassAtOffset(myFile, myState.tailOffset - 1, PsiReferenceExpression.class, false);
+            PsiTreeUtil.findElementOfClassAtOffset(file, state.tailOffset - 1, PsiReferenceExpression.class, false);
         if (ref != null) {
           FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EXCLAMATION_FINISH);
-          myDocument.insertString(ref.getTextRange().getStartOffset(), "!");
-          myState.caretOffset++;
-          myState.tailOffset++;
+          document.insertString(ref.getTextRange().getStartOffset(), "!");
+          state.caretOffset++;
+          state.tailOffset++;
         }
       }
     }
 
-    myContext.setTailOffset(myState.tailOffset);
-    myState.caretOffset = processTail(tailType, myState.caretOffset, myState.tailOffset);
-    myEditor.getSelectionModel().removeSelection();
+    context.setTailOffset(state.tailOffset);
+    state.caretOffset = processTail(tailType, state.caretOffset, state.tailOffset, editor);
+    editor.getSelectionModel().removeSelection();
 
-    qualifyIfNeeded();
+    qualifyIfNeeded(context, item);
 
 
     if (needLeftParenth && hasParams){
       // Invoke parameters popup
-      AutoPopupController.getInstance(myProject).autoPopupParameterInfo(myEditor, null);
+      AutoPopupController.getInstance(project).autoPopupParameterInfo(editor, null);
     }
 
     if (tailType == TailType.DOT){
-      AutoPopupController.getInstance(myProject).autoPopupMemberLookup(myEditor, null);
+      AutoPopupController.getInstance(project).autoPopupMemberLookup(editor, null);
     }
 
     if (completionChar == '#') {
       context.setLaterRunnable(new Runnable() {
         public void run() {
-           new CodeCompletionHandlerBase(CompletionType.BASIC) {
-           }.invoke(myProject, myEditor, myFile);
+           new CodeCompletionHandlerBase(CompletionType.BASIC).invoke(project, editor, file);
         }
       });
     }
 
-    if (insertingAnnotation()) {
+    if (insertingAnnotation(context, item)) {
       // Check if someone inserts annotation class that require @
-      PsiElement elementAt = myFile.findElementAt(myContext.getStartOffset());
+      PsiElement elementAt = file.findElementAt(context.getStartOffset());
       final PsiElement parentElement = elementAt != null ? elementAt.getParent():null;
 
       if (elementAt instanceof PsiIdentifier &&
           (PsiTreeUtil.getParentOfType(elementAt, PsiAnnotationParameterList.class) != null ||
            parentElement instanceof PsiErrorElement && parentElement.getParent() instanceof PsiJavaFile // top level annotation without @
           )
-          && isAtTokenNeeded()) {
+          && isAtTokenNeeded(context)) {
         int expectedOffsetForAtToken = elementAt.getTextRange().getStartOffset();
-        myDocument.insertString(expectedOffsetForAtToken, "@");
+        document.insertString(expectedOffsetForAtToken, "@");
       }
     }
   }
 
-  private void qualifyIfNeeded() {
+  private static void qualifyIfNeeded(InsertionContext context, LookupElement item) {
     try{
-      if (myLookupItem.getObject() instanceof PsiField) {
-        PsiDocumentManager.getInstance(myFile.getProject()).commitAllDocuments();
-        PsiReference reference = myFile.findReferenceAt(myContext.getStartOffset());
+      final PsiFile file = context.getFile();
+      if (item.getObject() instanceof PsiField) {
+        PsiDocumentManager.getInstance(file.getProject()).commitAllDocuments();
+        PsiReference reference = file.findReferenceAt(context.getStartOffset());
         if (reference instanceof PsiReferenceExpression && !((PsiReferenceExpression) reference).isQualified()) {
-          final PsiField member = (PsiField)myLookupItem.getObject();
+          final PsiField member = (PsiField)item.getObject();
           final PsiVariable target =
-              JavaPsiFacade.getInstance(myProject).getResolveHelper().resolveReferencedVariable(member.getName(), (PsiElement)reference);
+              JavaPsiFacade.getInstance(context.getProject()).getResolveHelper().resolveReferencedVariable(member.getName(), (PsiElement)reference);
           if (member.getManager().areElementsEquivalent(target, JavaCompletionUtil.getOriginalElement(member))) return;
           
           final PsiClass psiClass = member.getContainingClass();
           if (psiClass != null && StringUtil.isNotEmpty(psiClass.getName())) {
-            myDocument.insertString(myContext.getStartOffset(), psiClass.getName() + ".");
+            context.getEditor().getDocument().insertString(context.getStartOffset(), psiClass.getName() + ".");
           }
         }
       }
-      addImportForItem(myFile, myContext.getStartOffset(), myLookupItem);
-      if (myContext.getTailOffset() < 0) {  //hack, hack, hack. ideally the tail offset just should survive after the importing stuff
-        myContext.setTailOffset(myEditor.getCaretModel().getOffset());
+      addImportForItem(file, context.getStartOffset(), item);
+      if (context.getTailOffset() < 0) {  //hack, hack, hack. ideally the tail offset just should survive after the importing stuff
+        context.setTailOffset(context.getEditor().getCaretModel().getOffset());
       }
     }
     catch(IncorrectOperationException e){
@@ -172,7 +163,7 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
     }                                                                       
   }
 
-  private boolean isAtTokenNeeded() {
+  private static boolean isAtTokenNeeded(InsertionContext myContext) {
     HighlighterIterator iterator = ((EditorEx)myContext.getEditor()).getHighlighter().createIterator(myContext.getStartOffset());
     LOG.assertTrue(iterator.getTokenType() == JavaTokenType.IDENTIFIER);
     iterator.retreat();
@@ -180,53 +171,54 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
     return iterator.getTokenType() != JavaTokenType.AT && iterator.getTokenType() != JavaTokenType.DOT;
   }
 
-  private void handleBrackets(){
+  private static void handleBrackets(LookupElement item, Document document, InsertHandlerState myState){
     // brackets
-    final Integer bracketsAttr = (Integer)myLookupItem.getUserData(LookupItem.BRACKETS_COUNT_ATTR);
+    final Integer bracketsAttr = (Integer)item.getUserData(LookupItem.BRACKETS_COUNT_ATTR);
     if (bracketsAttr != null){
       int count = bracketsAttr.intValue();
       if(count > 0)
         myState.caretOffset = myState.tailOffset + 1;
       for(int i = 0; i < count; i++){
-        myDocument.insertString(myState.tailOffset, "[]");
+        document.insertString(myState.tailOffset, "[]");
         myState.tailOffset += 2;
       }
     }
   }
 
-  private void handleParenses(final boolean hasParams, final boolean needParenth, TailType tailType){
+  private static void handleParentheses(final boolean hasParams, final boolean needParenth, TailType tailType, InsertionContext context, InsertHandlerState myState){
+    final Document document = context.getEditor().getDocument();
     boolean insertRightParenth = tailType != TailType.SMART_COMPLETION;
 
     if (needParenth){
-      if (myContext.getOffsetMap().getOffset(JavaCompletionUtil.LPAREN_OFFSET) >= 0 && myContext.getOffsetMap().getOffset(JavaCompletionUtil.ARG_LIST_END_OFFSET) >= 0){
-        myState.tailOffset = myContext.getOffsetMap().getOffset(JavaCompletionUtil.ARG_LIST_END_OFFSET);
-        if (myContext.getOffsetMap().getOffset(JavaCompletionUtil.RPAREN_OFFSET) < 0 && insertRightParenth){
-          myDocument.insertString(myState.tailOffset, ")");
+      if (context.getOffsetMap().getOffset(JavaCompletionUtil.LPAREN_OFFSET) >= 0 && context.getOffsetMap().getOffset(JavaCompletionUtil.ARG_LIST_END_OFFSET) >= 0){
+        myState.tailOffset = context.getOffsetMap().getOffset(JavaCompletionUtil.ARG_LIST_END_OFFSET);
+        if (context.getOffsetMap().getOffset(JavaCompletionUtil.RPAREN_OFFSET) < 0 && insertRightParenth){
+          document.insertString(myState.tailOffset, ")");
           myState.tailOffset += 1;
         }
         if (hasParams){
-          myState.caretOffset = myContext.getOffsetMap().getOffset(JavaCompletionUtil.LPAREN_OFFSET) + 1;
+          myState.caretOffset = context.getOffsetMap().getOffset(JavaCompletionUtil.LPAREN_OFFSET) + 1;
         }
         else{
-          myState.caretOffset = myContext.getOffsetMap().getOffset(JavaCompletionUtil.ARG_LIST_END_OFFSET);
+          myState.caretOffset = context.getOffsetMap().getOffset(JavaCompletionUtil.ARG_LIST_END_OFFSET);
         }
       }
       else{
-        final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(myProject);
-        myState.tailOffset = myContext.getSelectionEndOffset();
-        myState.caretOffset = myContext.getSelectionEndOffset();
+        final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(context.getProject());
+        myState.tailOffset = context.getSelectionEndOffset();
+        myState.caretOffset = context.getSelectionEndOffset();
 
         if(styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES){
-          myDocument.insertString(myState.tailOffset++, " ");
+          document.insertString(myState.tailOffset++, " ");
           myState.caretOffset ++;
         }
         if (insertRightParenth) {
-          final CharSequence charsSequence = myDocument.getCharsSequence();
+          final CharSequence charsSequence = document.getCharsSequence();
           if (charsSequence.length() <= myState.tailOffset || charsSequence.charAt(myState.tailOffset) != '(') {
-            myDocument.insertString(myState.tailOffset, "(");
+            document.insertString(myState.tailOffset, "(");
           }
 
-          myDocument.insertString(myState.tailOffset + 1, ")");
+          document.insertString(myState.tailOffset + 1, ")");
           if (hasParams){
             myState.tailOffset += 2;
             myState.caretOffset++;
@@ -243,26 +235,26 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
           }
         }
         else{
-          myDocument.insertString(myState.tailOffset++, "(");
+          document.insertString(myState.tailOffset++, "(");
           myState.caretOffset ++;
         }
 
         if(hasParams && styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES){
-          myDocument.insertString(myState.caretOffset++, " ");
+          document.insertString(myState.caretOffset++, " ");
           myState.tailOffset++;
         }
       }
     }
   }
 
-  protected boolean isToInsertParenth(){
-    return insertingAnnotationWithParameters();
+  protected static boolean isToInsertParenth(InsertionContext context, LookupElement item){
+    return insertingAnnotationWithParameters(context, item);
   }
 
-  private boolean hasParams(){
-    final String lookupString = myLookupItem.getLookupString();
+  private static boolean hasParams(InsertionContext context, LookupElement item){
+    final String lookupString = item.getLookupString();
     if (PsiKeyword.SYNCHRONIZED.equals(lookupString)) {
-      final PsiElement place = myFile.findElementAt(myContext.getStartOffset());
+      final PsiElement place = context.getFile().findElementAt(context.getStartOffset());
       return PsiTreeUtil.getParentOfType(place, PsiMember.class, PsiCodeBlock.class) instanceof PsiCodeBlock;
     }
     else if(PsiKeyword.CATCH.equals(lookupString) ||
@@ -270,21 +262,21 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
             PsiKeyword.WHILE.equals(lookupString) ||
             PsiKeyword.FOR.equals(lookupString))
       return true;
-    else if (insertingAnnotationWithParameters()) {
+    else if (insertingAnnotationWithParameters(context, item)) {
       return true;
     }
     return false;
   }
 
-  private boolean insertingAnnotationWithParameters() {
-    if(insertingAnnotation()) {
-      final Document document = myContext.getEditor().getDocument();
-      PsiDocumentManager.getInstance(myContext.getProject()).commitDocument(document);
-      PsiElement elementAt = myFile.findElementAt(myContext.getStartOffset());
+  private static boolean insertingAnnotationWithParameters(InsertionContext context, LookupElement item) {
+    if(insertingAnnotation(context, item)) {
+      final Document document = context.getEditor().getDocument();
+      PsiDocumentManager.getInstance(context.getProject()).commitDocument(document);
+      PsiElement elementAt = context.getFile().findElementAt(context.getStartOffset());
       if (elementAt instanceof PsiIdentifier) {
         final PsiModifierListOwner parent = PsiTreeUtil.getParentOfType(elementAt, PsiModifierListOwner.class, false, PsiCodeBlock.class);
         if (parent != null) {
-          for (PsiMethod m : ((PsiClass)myLookupItem.getObject()).getMethods()) {
+          for (PsiMethod m : ((PsiClass)item.getObject()).getMethods()) {
             if (!(m instanceof PsiAnnotationMethod)) continue;
             final PsiAnnotationMemberValue defaultValue = ((PsiAnnotationMethod)m).getDefaultValue();
             if (defaultValue == null) return true;
@@ -295,35 +287,38 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
     return false;
   }
 
-  private boolean insertingAnnotation() {
-    final Object obj = myLookupItem.getObject();
+  private static boolean insertingAnnotation(InsertionContext context, LookupElement item) {
+    final Object obj = item.getObject();
     if (!(obj instanceof PsiClass) || !((PsiClass)obj).isAnnotationType()) return false;
 
-    final Document document = myEditor.getDocument();
-    PsiDocumentManager.getInstance(myFile.getProject()).commitDocument(document);
-    final int offset = myContext.getStartOffset();
+    final Document document = context.getEditor().getDocument();
+    PsiDocumentManager.getInstance(context.getProject()).commitDocument(document);
+    final int offset = context.getStartOffset();
 
-    if (PsiTreeUtil.findElementOfClassAtOffset(myFile, offset, PsiImportStatement.class, false) != null) return false;
+    final PsiFile file = context.getFile();
+
+    if (PsiTreeUtil.findElementOfClassAtOffset(file, offset, PsiImportStatement.class, false) != null) return false;
 
     //outside of any class: we are surely inserting an annotation
-    if (PsiTreeUtil.findElementOfClassAtOffset(myFile, offset, PsiClass.class, false) == null) return true;
+    if (PsiTreeUtil.findElementOfClassAtOffset(file, offset, PsiClass.class, false) == null) return true;
 
     //the easiest check that there's a @ before the identifier
-    return PsiTreeUtil.findElementOfClassAtOffset(myFile, offset, PsiAnnotation.class, false) != null;
+    return PsiTreeUtil.findElementOfClassAtOffset(file, offset, PsiAnnotation.class, false) != null;
 
   }
 
-  protected void removeEndOfIdentifier(boolean needParenth){
-    JavaCompletionUtil.initOffsets(myContext.getFile(), myContext.getProject(), myContext.getOffsetMap());
-    myDocument.deleteString(myContext.getSelectionEndOffset(), myContext.getOffsetMap().getOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET));
-    if(myContext.getOffsetMap().getOffset(JavaCompletionUtil.LPAREN_OFFSET) > 0 && !needParenth){
-      myDocument.deleteString(myContext.getOffsetMap().getOffset(JavaCompletionUtil.LPAREN_OFFSET),
-                              myContext.getOffsetMap().getOffset(JavaCompletionUtil.ARG_LIST_END_OFFSET));
-      JavaCompletionUtil.resetParensInfo(myContext.getOffsetMap());
+  protected static void removeEndOfIdentifier(boolean needParenth, InsertionContext context){
+    final Document document = context.getEditor().getDocument();
+    JavaCompletionUtil.initOffsets(context.getFile(), context.getProject(), context.getOffsetMap());
+    document.deleteString(context.getSelectionEndOffset(), context.getOffsetMap().getOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET));
+    if(context.getOffsetMap().getOffset(JavaCompletionUtil.LPAREN_OFFSET) > 0 && !needParenth){
+      document.deleteString(context.getOffsetMap().getOffset(JavaCompletionUtil.LPAREN_OFFSET),
+                              context.getOffsetMap().getOffset(JavaCompletionUtil.ARG_LIST_END_OFFSET));
+      JavaCompletionUtil.resetParensInfo(context.getOffsetMap());
     }
   }
 
-  protected TailType getTailType(final char completionChar){
+  protected TailType getTailType(final char completionChar, LookupItem item){
     switch(completionChar){
       case '.': return TailType.DOT;
       case ',': return TailType.COMMA;
@@ -337,14 +332,14 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
       case '\"':
       case '[': return TailType.createSimpleTailType(completionChar);
     }
-    final TailType attr = myLookupItem.getTailType();
+    final TailType attr = item.getTailType();
     return attr == TailType.UNKNOWN ? TailType.NONE : attr;
   }
 
-  private int processTail(TailType tailType, int caretOffset, int tailOffset) {
-    myEditor.getCaretModel().moveToOffset(caretOffset);
-    tailType.processTail(myEditor, tailOffset);
-    return myEditor.getCaretModel().getOffset();
+  private static int processTail(TailType tailType, int caretOffset, int tailOffset, Editor editor) {
+    editor.getCaretModel().moveToOffset(caretOffset);
+    tailType.processTail(editor, tailOffset);
+    return editor.getCaretModel().getOffset();
   }
 
   @Override
@@ -392,6 +387,7 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
   private static void shortenReference(final PsiFile file, final int offset) throws IncorrectOperationException {
     final PsiDocumentManager manager = PsiDocumentManager.getInstance(file.getProject());
     final Document document = manager.getDocument(file);
+    assert document != null;
     manager.commitDocument(document);
     final PsiReference ref = file.findReferenceAt(offset);
     if (ref instanceof PsiJavaCodeReferenceElement) {
@@ -480,6 +476,7 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
     return toDelete;
   }
 
+  @Nullable
   static PsiElement resolveReference(final PsiReference psiReference) {
     if (psiReference instanceof PsiPolyVariantReference) {
       final ResolveResult[] results = ((PsiPolyVariantReference)psiReference).multiResolve(true);
index 1826a6ba4e5a345960fd2ea3933db598023a7380..4b84102324483bdf04569a89ac23f22f4676507d 100644 (file)
  */
 package com.intellij.codeInsight.daemon.impl.actions;
 
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
-import com.intellij.codeInsight.daemon.HighlightDisplayKey;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.daemon.*;
 import com.intellij.codeInspection.*;
-import com.intellij.lang.java.JavaLanguage;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleUtil;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.impl.storage.ClasspathStorage;
-import com.intellij.openapi.ui.Messages;
+import com.intellij.lang.java.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.module.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.roots.impl.storage.*;
+import com.intellij.openapi.ui.*;
 import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.JavaCodeStyleManager;
-import com.intellij.psi.impl.source.jsp.jspJava.JspHolderMethod;
-import com.intellij.psi.javadoc.PsiDocComment;
-import com.intellij.psi.javadoc.PsiDocTag;
-import com.intellij.psi.javadoc.PsiDocTagValue;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.codeStyle.*;
+import com.intellij.psi.impl.source.jsp.jspJava.*;
+import com.intellij.psi.javadoc.*;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 /**
  * @author ven
@@ -81,7 +76,7 @@ public class SuppressFix extends SuppressIntentionAction {
     return InspectionsBundle.message("suppress.inspection.family");
   }
 
-  public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement context) {
+  public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement context) {
     PsiDocCommentOwner container = getContainer(context);
     boolean isValid = container != null && !(container instanceof JspHolderMethod);
     if (!isValid) {
index 4f9d56c3e3a28d4da8a7160c979168eb0d6da2b6..404cfdd98054ee9da03c1327c5a2684d09494c14 100644 (file)
  */
 package com.intellij.codeInsight.daemon.impl.quickfix;
 
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.daemon.QuickFixBundle;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.daemon.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
 import com.intellij.psi.*;
 import com.intellij.psi.controlFlow.*;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.Nullable;
-import org.jetbrains.annotations.NotNull;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 /**
  * @author ven
@@ -44,7 +43,7 @@ public class RemoveRedundantElseAction extends PsiElementBaseIntentionAction {
     return QuickFixBundle.message("remove.redundant.else.fix");
   }
 
-  public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
+  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
     if (element instanceof PsiKeyword &&
         element.getParent() instanceof PsiIfStatement &&
         PsiKeyword.ELSE.equals(element.getText())) {
index fc87c9b150e35c72a770b4bcd8f3f311d8ac5371..f2c693530d3d842a6851cbeda2ac1955ae577503 100644 (file)
  */
 package com.intellij.codeInsight.daemon.impl.quickfix;
 
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.TargetElementUtil;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
 import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.JavaCodeStyleManager;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.psi.util.PsiUtil;
-import com.intellij.psi.util.TypeConversionUtil;
-import com.intellij.util.ArrayUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.codeStyle.*;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
-import java.util.Collection;
+import java.util.*;
 
 public class SurroundWithArrayFix extends PsiElementBaseIntentionAction {
   private final PsiCall myMethodCall;
@@ -55,7 +49,7 @@ public class SurroundWithArrayFix extends PsiElementBaseIntentionAction {
     return getText();
   }
 
-  public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) {
+  public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) {
     return getExpression(element) != null;
  }
 
index 3234e1bc583b6fac596b290b04721b2ad7cda401..5e56e77d8dc6e22c4c50113731e2dad2a811458e 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.intention.AddAnnotationFix;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
 import com.intellij.psi.*;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.*;
 
 public class AddDeprecationAnnotationFix extends AddAnnotationFix {
   public AddDeprecationAnnotationFix() {
@@ -36,7 +35,7 @@ public class AddDeprecationAnnotationFix extends AddAnnotationFix {
 
 
   @Override
-  public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) {
+  public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) {
     if (!super.isAvailable(project, editor, element)) {
       return false;
     }
index 0e0c056a31ca19f6b4dbcd08a0fdf8efeac894c5..e4d251f00d5456a0374ff6e26c9f8de3f6dd3c8d 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.AnnotationUtil;
-import com.intellij.codeInsight.intention.AddAnnotationFix;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
 import com.intellij.psi.*;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.*;
 
 public class AddNullableNotNullAnnotationFix extends AddAnnotationFix {
   public AddNullableNotNullAnnotationFix(final String annotation, final String annotationToRemove) {
@@ -40,7 +39,7 @@ public class AddNullableNotNullAnnotationFix extends AddAnnotationFix {
   }
 
   @Override
-  public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) {
+  public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) {
      if (!super.isAvailable(project, editor, element)) {
       return false;
     }
index 3c55df1d38021721076cbc815f1d57ff7ca173cc..670798b00dc0bbc822a6e5a8f3a0f8c09df626dd 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.highlighting.HighlightManager;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.colors.EditorColors;
-import com.intellij.openapi.editor.colors.EditorColorsManager;
-import com.intellij.openapi.project.Project;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.highlighting.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.editor.colors.*;
+import com.intellij.openapi.project.*;
 import com.intellij.psi.*;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.psi.util.PsiUtil;
-import com.intellij.util.IncorrectOperationException;
-import gnu.trove.TIntArrayList;
-import gnu.trove.TIntProcedure;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import gnu.trove.*;
+import org.jetbrains.annotations.*;
 
 /**
  * @author ven
@@ -44,8 +39,8 @@ public class AddOnDemandStaticImportAction extends PsiElementBaseIntentionAction
     return CodeInsightBundle.message("intention.add.on.demand.static.import.family");
   }
 
-  public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
-    if (element == null || !PsiUtil.isLanguageLevel5OrHigher(element)) return false;
+  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
+    if (!PsiUtil.isLanguageLevel5OrHigher(element)) return false;
     if (!(element instanceof PsiIdentifier) || !(element.getParent() instanceof PsiReferenceExpression)) {
       return false;
     }
index c2ac71cde06cb52ce1450ab9cf6f4cc3e19cf34b..2d36ed2489ce67923ca40281c4d9395bf52ffa17 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Key;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.*;
 import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.psi.util.PsiUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.impl.source.tree.java.*;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 public class AddSingleMemberStaticImportAction extends PsiElementBaseIntentionAction {
   private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.AddSingleMemberStaticImportAction");
@@ -43,8 +40,8 @@ public class AddSingleMemberStaticImportAction extends PsiElementBaseIntentionAc
     return CodeInsightBundle.message("intention.add.single.member.static.import.family");
   }
 
-  public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
-    if (element == null || !PsiUtil.isLanguageLevel5OrHigher(element)) return false;
+  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
+    if (!PsiUtil.isLanguageLevel5OrHigher(element)) return false;
     PsiFile file = element.getContainingFile();
     if (element instanceof PsiIdentifier && element.getParent() instanceof PsiReferenceExpression &&
         ((PsiReferenceExpression)element.getParent()).getQualifierExpression() != null) {
index 375643fa2b22ef56ccb9954b2d81559343cdc220..4d31a536726e12728e1d26bbaeeb61266c6f7172 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
-import com.intellij.patterns.PlatformPatterns;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
+import com.intellij.patterns.*;
 import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.CodeStyleManager;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.ui.ColorChooser;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.codeStyle.*;
+import com.intellij.psi.util.*;
+import com.intellij.ui.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 import java.awt.*;
 
 public class ColorChooserIntentionAction extends PsiElementBaseIntentionAction {
 
-  public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) {
+  public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) {
     if (PlatformPatterns.psiElement().inside(PlatformPatterns.psiElement(PsiNewExpression.class)).accepts(element)) {
       final PsiNewExpression expression = PsiTreeUtil.getParentOfType(element, PsiNewExpression.class, false);
       if (expression != null) {
index 21eebf076acea7b5f87b1e78531bb521e3ace776..f5cde3acaf88c5997021683a7db579eb431a4251 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiReference;
-import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference;
-import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference;
-import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceOwner;
-import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceSet;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
+import com.intellij.psi.*;
+import com.intellij.psi.impl.source.resolve.reference.impl.*;
+import com.intellij.psi.impl.source.resolve.reference.impl.providers.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 /**
  * @author spleaner
@@ -39,8 +34,7 @@ public class ConvertAbsolutePathToRelativeIntentionAction extends PsiElementBase
   }
 
   @Override
-  public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
-    if (element == null) return false;
+  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
     final PsiFile containingFile = element.getContainingFile();
     if (containingFile == null) return false;
 
index a504b6a7360264550a09e39a418b955f41be5cee..ca7987aadf45ed2c66d87cf81955b07ab260513c 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.codeInsight.CodeInsightUtil;
-import com.intellij.codeInsight.daemon.impl.analysis.HighlightNamesUtil;
-import com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind;
-import com.intellij.codeInsight.generation.OverrideImplementUtil;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory;
-import com.intellij.openapi.module.ModuleUtil;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.Messages;
-import com.intellij.openapi.util.TextRange;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.daemon.impl.analysis.*;
+import com.intellij.codeInsight.daemon.impl.quickfix.*;
+import com.intellij.codeInsight.generation.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.fileEditor.ex.*;
+import com.intellij.openapi.module.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.ui.*;
+import com.intellij.openapi.util.*;
 import com.intellij.psi.*;
-import com.intellij.psi.impl.source.PostprocessReformattingAspect;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.impl.source.*;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 public class CreateSubclassAction extends PsiElementBaseIntentionAction {
   private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.ImplementAbstractClassAction");
@@ -61,8 +58,7 @@ public class CreateSubclassAction extends PsiElementBaseIntentionAction {
     return CodeInsightBundle.message("intention.implement.abstract.class.family");
   }
 
-  public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
-    if (element == null) return false;
+  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
     PsiClass psiClass = PsiTreeUtil.getParentOfType(element, PsiClass.class);
     if (psiClass == null || psiClass.isAnnotationType() || psiClass.isEnum() || psiClass instanceof PsiAnonymousClass ||
         psiClass.hasModifierProperty(PsiModifier.FINAL)) {
index dbdb6975e1e0d7cd92be13fc3dbf7a9c68c230c7..de8a46a551a4ecda4d54a75ac0d2e3d4cd2ab767 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.codeInsight.CodeInsightServicesUtil;
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.TextRange;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.*;
 import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.CodeStyleManager;
+import com.intellij.psi.codeStyle.*;
 import com.intellij.psi.controlFlow.*;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
-import java.util.List;
+import java.util.*;
 
 public class InvertIfConditionAction extends PsiElementBaseIntentionAction {
   private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.InvertIfConditionAction");
 
-  public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
-    if (element == null) return false;
+  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
 
     int offset = editor.getCaretModel().getOffset();
     final PsiIfStatement ifStatement = PsiTreeUtil.getParentOfType(element, PsiIfStatement.class);
index 05f78aa4955da61c1b3d842dba1a616942c4c1b3..a93aa1027012b4f2ef77ed18ba8eb07cc7fb0d73 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.editor.CaretModel;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Pair;
-import com.intellij.pom.java.LanguageLevel;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.*;
 import com.intellij.psi.*;
-import com.intellij.psi.util.PsiUtil;
-import com.intellij.psi.util.TypeConversionUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 /**
  *  @author dsl
@@ -46,8 +42,7 @@ public class MakeTypeGenericAction extends PsiElementBaseIntentionAction {
     return CodeInsightBundle.message("intention.make.type.generic.text", variableName, newTypeName);
   }
 
-  public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
-    if (element == null) return false;
+  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
     if (!PsiUtil.isLanguageLevel5OrHigher(element)) return false;
     if (!element.isWritable()) return false;
     return findVariable(element) != null;
index 454a77dc13ba69db2a6f663ff04e812e6076b3f4..b14c6a53f4a6a3ad19301b3579fa1858c8ee4f59 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil;
-import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
-import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageUtils;
-import com.intellij.codeInsight.highlighting.HighlightManager;
-import com.intellij.codeInsight.intention.IntentionAction;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.codeInsight.intention.QuickFixFactory;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.colors.EditorColors;
-import com.intellij.openapi.editor.colors.EditorColorsManager;
-import com.intellij.openapi.editor.markup.TextAttributes;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Ref;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.daemon.impl.analysis.*;
+import com.intellij.codeInsight.daemon.impl.quickfix.*;
+import com.intellij.codeInsight.highlighting.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.editor.colors.*;
+import com.intellij.openapi.editor.markup.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.*;
 import com.intellij.psi.*;
-import com.intellij.psi.impl.source.jsp.jspJava.JspClass;
-import com.intellij.psi.javadoc.PsiDocComment;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.impl.source.jsp.jspJava.*;
+import com.intellij.psi.javadoc.*;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 import java.util.*;
 
@@ -54,8 +48,7 @@ public class MoveInitializerToConstructorAction extends PsiElementBaseIntentionA
     return CodeInsightBundle.message("intention.move.initializer.to.constructor");
   }
 
-  public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
-    if (element == null) return false;
+  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
     if (element instanceof PsiCompiledElement) return false;
     final PsiField field = PsiTreeUtil.getParentOfType(element, PsiField.class, false, PsiMember.class, PsiCodeBlock.class, PsiDocComment.class);
     if (field == null || field.hasModifierProperty(PsiModifier.STATIC)) return false;
index d34d8206f64c83c2b43ea5d770486661802d5819..def977c63ca28b825f0a875dc3e43087e3aa1068 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
 import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.CodeStyleManager;
-import com.intellij.psi.javadoc.PsiDocComment;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.codeStyle.*;
+import com.intellij.psi.javadoc.*;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 /**
  * @author max
@@ -37,8 +35,7 @@ public class SplitDeclarationAction extends PsiElementBaseIntentionAction {
     return CodeInsightBundle.message("intention.split.declaration.family");
   }
 
-  public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
-    if (element == null) return false;
+  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
 
     int offset = editor.getCaretModel().getOffset();
     if (!(element instanceof PsiJavaToken)) return false;
index ad524a3f2bc8594c054f7efbc18c6fec8f41e1eb..63b6cc80aab7d9c4a4fc4e26998571b2719747aa 100644 (file)
  */
 package com.intellij.codeInsight.intention.impl;
 
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.ScrollType;
-import com.intellij.openapi.project.Project;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
 import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.CodeStyleManager;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.codeStyle.*;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 /**
  * @author mike
@@ -35,8 +32,7 @@ import org.jetbrains.annotations.Nullable;
 public class SplitIfAction extends PsiElementBaseIntentionAction {
   private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.SplitIfAction");
 
-  public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
-    if (element == null) return false;
+  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
 
     if (!(element instanceof PsiJavaToken)) {
       return false;
diff --git a/java/java-impl/src/com/intellij/psi/impl/AllowedApiFilterExtension.java b/java/java-impl/src/com/intellij/psi/impl/AllowedApiFilterExtension.java
new file mode 100644 (file)
index 0000000..455ba39
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2000-2010 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * User: anna
+ * Date: 28-May-2010
+ */
+package com.intellij.psi.impl;
+
+import com.intellij.openapi.extensions.*;
+import com.intellij.psi.*;
+import org.jetbrains.annotations.*;
+
+public abstract class AllowedApiFilterExtension {
+  public static final ExtensionPointName<AllowedApiFilterExtension> EP_NAME = ExtensionPointName.create("com.intellij.allowedApiFilter");
+
+  public abstract boolean isClassForbidden(@NotNull String fqn, @NotNull PsiElement place);
+
+  public static boolean isClassAllowed(@NotNull String fqn, @NotNull PsiElement place) {
+    for (AllowedApiFilterExtension extension : Extensions.getExtensions(EP_NAME)) {
+      if (extension.isClassForbidden(fqn, place)) return false;
+    }
+    return true;
+  }
+}
index 797385f2f5129962bda6a83b671d7c17f6a5031a..0db41dc1a9ebe7a72e6290fb487711a84d00a7ab 100644 (file)
@@ -301,12 +301,9 @@ public class PsiSuperMethodImplUtil {
     CachedValue<Map<MethodSignature, HierarchicalMethodSignature>> value = aClass.getUserData(SIGNATURES_KEY);
     if (value == null) {
       BySignaturesCachedValueProvider provider = new BySignaturesCachedValueProvider(aClass);
-      value = CachedValuesManager.getManager(aClass.getProject()).createCachedValue(provider, false);
-      //Do not cache for nonphysical elements
-      if (aClass.isPhysical()) {
-        UserDataHolderEx dataHolder = (UserDataHolderEx)aClass;
-        value = dataHolder.putUserDataIfAbsent(SIGNATURES_KEY, value);
-      }
+      UserDataHolderEx dataHolder = (UserDataHolderEx)aClass;
+      value = dataHolder.putUserDataIfAbsent(SIGNATURES_KEY,
+                                             CachedValuesManager.getManager(aClass.getProject()).createCachedValue(provider, false));
     }
 
     return value.getValue();
index 30b807bf0d47e2231ca28145110c6f203017ae60..bd788595660062781103d3122c4de26c22264ba5 100644 (file)
@@ -496,7 +496,8 @@ public class PsiPackageImpl extends PsiElementBase implements PsiPackage, Querya
     if (classHint == null || classHint.shouldProcess(ElementClassHint.DeclaractionKind.CLASS)) {
       NameHint nameHint = processor.getHint(NameHint.KEY);
       if (nameHint != null) {
-        if (processClassesByName(processor, state, place, scope, nameHint.getName(state))) return false;
+        final String shortName = nameHint.getName(state);
+        if (containsClassNamed(shortName) && processClassesByName(processor, state, place, scope, shortName)) return false;
       }
       else if (prefixMatcher != null && migration == null) {
         for (String className : getClassNamesCache()) {
index 646e8ec342cb9d8292f99532ac50d5f335aa5995..1ab4fe729c40423d7b5140ae27df606484a90e75 100644 (file)
  */
 package com.intellij.refactoring.extractInterface;
 
-import com.intellij.openapi.project.Project;
+import com.intellij.openapi.project.*;
 import com.intellij.psi.*;
-import com.intellij.refactoring.HelpID;
-import com.intellij.refactoring.JavaRefactoringSettings;
-import com.intellij.refactoring.RefactoringBundle;
-import com.intellij.refactoring.classMembers.DelegatingMemberInfoModel;
-import com.intellij.refactoring.classMembers.MemberInfoBase;
-import com.intellij.refactoring.extractSuperclass.ExtractSuperBaseDialog;
-import com.intellij.refactoring.extractSuperclass.ExtractSuperBaseProcessor;
-import com.intellij.refactoring.ui.MemberSelectionPanel;
-import com.intellij.refactoring.util.DocCommentPolicy;
-import com.intellij.refactoring.util.classMembers.MemberInfo;
+import com.intellij.refactoring.*;
+import com.intellij.refactoring.classMembers.*;
+import com.intellij.refactoring.extractSuperclass.*;
+import com.intellij.refactoring.ui.*;
+import com.intellij.refactoring.util.*;
+import com.intellij.refactoring.util.classMembers.*;
 
 import javax.swing.*;
 import java.awt.*;
@@ -112,7 +108,7 @@ class ExtractInterfaceDialog extends ExtractSuperBaseDialog {
 
     _panel = new JPanel(new BorderLayout());
     myPackageLabel = new JLabel();
-    myPackageLabel.setText(RefactoringBundle.message("package.for.new.interface"));
+    myPackageLabel.setText(getPackageNameLabelText());
 
     _panel.add(myPackageLabel, BorderLayout.NORTH);
     _panel.add(myPackageNameField, BorderLayout.CENTER);
@@ -144,6 +140,11 @@ class ExtractInterfaceDialog extends ExtractSuperBaseDialog {
     return myInterfaceNameLabel;
   }
 
+  @Override
+  protected String getPackageNameLabelText() {
+    return isExtractSuperclass() ? RefactoringBundle.message("package.for.new.interface") : "Package name for original class";
+  }
+
   protected JLabel getPackageNameLabel() {
     return myPackageLabel;
   }
index 39adc1f9a2256e0ff8d42d56d39dae071c978299..774d74e79f37618bd4c9e17d4b6cde90827794cb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2010 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 package com.intellij.refactoring.extractInterface;
 
-import com.intellij.openapi.project.Project;
+import com.intellij.openapi.project.*;
 import com.intellij.psi.*;
-import com.intellij.refactoring.extractSuperclass.ExtractSuperBaseProcessor;
-import com.intellij.refactoring.util.DocCommentPolicy;
-import com.intellij.refactoring.util.classMembers.MemberInfo;
-import com.intellij.util.IncorrectOperationException;
+import com.intellij.refactoring.extractSuperclass.*;
+import com.intellij.refactoring.util.*;
+import com.intellij.refactoring.util.classMembers.*;
+import com.intellij.util.*;
 
 /**
  * @author dsl
@@ -37,7 +37,7 @@ public class ExtractInterfaceProcessor extends ExtractSuperBaseProcessor {
   }
 
   protected PsiClass extractSuper(String superClassName) throws IncorrectOperationException {
-    return ExtractInterfaceHandler.extractInterface(myTargetDirectory, myClass, superClassName, myMemberInfos, myJavaDocPolicy);
+    return ExtractInterfaceHandler.extractInterface(myClass.getContainingFile().getContainingDirectory(), myClass, superClassName, myMemberInfos, myJavaDocPolicy);
   }
 
   protected boolean isSuperInheritor(PsiClass aClass) {
index 4d2ebcfa25a611a887ca5604a3a15076a3cace5a..5107c82f3dc0ff6bb5d23cc3904302e0b5a90e77 100644 (file)
  */
 package com.intellij.refactoring.extractSuperclass;
 
-import com.intellij.ide.util.PackageUtil;
-import com.intellij.openapi.command.CommandProcessor;
-import com.intellij.openapi.help.HelpManager;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.ProjectFileIndex;
-import com.intellij.openapi.roots.ProjectRootManager;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.ide.util.*;
+import com.intellij.openapi.command.*;
+import com.intellij.openapi.help.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.roots.*;
+import com.intellij.openapi.util.text.*;
+import com.intellij.openapi.vfs.*;
 import com.intellij.psi.*;
-import com.intellij.refactoring.RefactoringBundle;
-import com.intellij.refactoring.ui.DocCommentPanel;
-import com.intellij.refactoring.ui.PackageNameReferenceEditorCombo;
-import com.intellij.refactoring.ui.RefactoringDialog;
-import com.intellij.refactoring.util.CommonRefactoringUtil;
-import com.intellij.refactoring.util.RefactoringMessageUtil;
-import com.intellij.refactoring.util.classMembers.MemberInfo;
-import com.intellij.ui.RecentsManager;
-import com.intellij.util.IncorrectOperationException;
+import com.intellij.refactoring.*;
+import com.intellij.refactoring.ui.*;
+import com.intellij.refactoring.util.*;
+import com.intellij.refactoring.util.classMembers.*;
+import com.intellij.ui.*;
+import com.intellij.util.*;
 
 import javax.swing.*;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.util.List;
+import java.awt.event.*;
+import java.util.*;
 
 /**
  * @author dsl
@@ -132,11 +127,13 @@ public abstract class ExtractSuperBaseDialog extends RefactoringDialog {
 
   protected void updateDialogForExtractSubclass() {
     getClassNameLabel().setText(RefactoringBundle.message("extractSuper.rename.original.class.to"));
+    getPackageNameLabel().setText(getPackageNameLabelText());
     getPreviewAction().setEnabled(true);
   }
 
   protected void updateDialogForExtractSuperclass() {
     getClassNameLabel().setText(getClassNameLabelText());
+    getPackageNameLabel().setText(getPackageNameLabelText());
     getPreviewAction().setEnabled(false);
   }
 
@@ -158,6 +155,8 @@ public abstract class ExtractSuperBaseDialog extends RefactoringDialog {
 
   protected abstract JLabel getPackageNameLabel();
 
+  protected abstract String getPackageNameLabelText();
+
   protected abstract String getEntityName();
 
   public int getJavaDocPolicy() {
index 0ab66518f2506606a5dcf6433967f1d8c205558c..41bbc173a766dfebb6cd9d5e22364dcef57d68a2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2010 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 package com.intellij.refactoring.extractSuperclass;
 
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Comparing;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.*;
 import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.JavaCodeStyleManager;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.search.searches.ReferencesSearch;
-import com.intellij.psi.util.InheritanceUtil;
-import com.intellij.psi.util.MethodSignatureUtil;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.refactoring.RefactoringBundle;
-import com.intellij.refactoring.turnRefsToSuper.TurnRefsToSuperProcessorBase;
-import com.intellij.refactoring.util.DocCommentPolicy;
-import com.intellij.refactoring.util.classMembers.MemberInfo;
-import com.intellij.usageView.UsageInfo;
-import com.intellij.usageView.UsageViewDescriptor;
-import com.intellij.usageView.UsageViewUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.ArrayList;
-import java.util.Collection;
+import com.intellij.psi.codeStyle.*;
+import com.intellij.psi.search.*;
+import com.intellij.psi.search.searches.*;
+import com.intellij.psi.util.*;
+import com.intellij.refactoring.*;
+import com.intellij.refactoring.turnRefsToSuper.*;
+import com.intellij.refactoring.util.*;
+import com.intellij.refactoring.util.classMembers.*;
+import com.intellij.usageView.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
+
+import java.util.*;
 
 /**
  * @author dsl
@@ -125,6 +120,11 @@ public abstract class ExtractSuperBaseProcessor extends TurnRefsToSuperProcessor
       final String oldQualifiedName = myClass.getQualifiedName();
       myClass.setName(myNewClassName);
       PsiClass superClass = extractSuper(superClassName);
+      final PsiDirectory initialDirectory = myClass.getContainingFile().getContainingDirectory();
+      if (myTargetDirectory != initialDirectory) {
+        myTargetDirectory.add(myClass.getContainingFile().copy());
+        myClass.getContainingFile().delete();
+      }
       for (final UsageInfo usage : usages) {
         if (usage instanceof BindToOldUsageInfo) {
           final PsiReference reference = usage.getReference();
index 679183079b8f71b3d50ad7c718dc3a292b0c3a84..1633ab297da40054077fe758256ae557787646f3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2010 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 package com.intellij.refactoring.extractSuperclass;
 
-import com.intellij.openapi.project.Project;
+import com.intellij.openapi.project.*;
 import com.intellij.psi.*;
-import com.intellij.refactoring.util.DocCommentPolicy;
-import com.intellij.refactoring.util.classMembers.MemberInfo;
-import com.intellij.util.IncorrectOperationException;
+import com.intellij.refactoring.util.*;
+import com.intellij.refactoring.util.classMembers.*;
+import com.intellij.util.*;
 
 /**
  * @author dsl
@@ -34,7 +34,7 @@ public class ExtractSuperClassProcessor extends ExtractSuperBaseProcessor {
 
 
   protected PsiClass extractSuper(final String superClassName) throws IncorrectOperationException {
-    return ExtractSuperClassUtil.extractSuperClass(myProject, myTargetDirectory, superClassName, myClass, myMemberInfos, myJavaDocPolicy);
+    return ExtractSuperClassUtil.extractSuperClass(myProject, myClass.getContainingFile().getContainingDirectory(), superClassName, myClass, myMemberInfos, myJavaDocPolicy);
   }
 
   protected boolean isSuperInheritor(PsiClass aClass) {
index 5929516883cbe3c4b740831d636606c92122e007..d6aef307ab967c1dfcbf722985334a92aea7e782 100644 (file)
  */
 package com.intellij.refactoring.extractSuperclass;
 
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.PsiClass;
-import com.intellij.psi.PsiMember;
-import com.intellij.psi.PsiMethod;
-import com.intellij.refactoring.HelpID;
-import com.intellij.refactoring.JavaRefactoringSettings;
-import com.intellij.refactoring.RefactoringBundle;
-import com.intellij.refactoring.classMembers.MemberInfoChange;
-import com.intellij.refactoring.classMembers.MemberInfoModel;
-import com.intellij.refactoring.memberPullUp.PullUpHelper;
-import com.intellij.refactoring.ui.MemberSelectionPanel;
-import com.intellij.refactoring.util.DocCommentPolicy;
-import com.intellij.refactoring.util.classMembers.InterfaceContainmentVerifier;
-import com.intellij.refactoring.util.classMembers.MemberInfo;
-import com.intellij.refactoring.util.classMembers.UsesAndInterfacesDependencyMemberInfoModel;
+import com.intellij.openapi.project.*;
+import com.intellij.psi.*;
+import com.intellij.refactoring.*;
+import com.intellij.refactoring.classMembers.*;
+import com.intellij.refactoring.memberPullUp.*;
+import com.intellij.refactoring.ui.*;
+import com.intellij.refactoring.util.*;
+import com.intellij.refactoring.util.classMembers.*;
 
 import javax.swing.*;
 import java.awt.*;
-import java.util.ArrayList;
+import java.util.*;
 import java.util.List;
 
 class ExtractSuperclassDialog extends ExtractSuperBaseDialog {
@@ -96,7 +89,7 @@ class ExtractSuperclassDialog extends ExtractSuperBaseDialog {
 
     _panel = new JPanel(new BorderLayout());
     myPackageLabel = new JLabel();
-    myPackageLabel.setText(RefactoringBundle.message("package.for.new.superclass"));
+    myPackageLabel.setText(getPackageNameLabelText());
     _panel.add(myPackageLabel, BorderLayout.NORTH);
     _panel.add(myPackageNameField, BorderLayout.CENTER);
     //_panel.add(myBtnPackageChooser, BorderLayout.EAST);
@@ -120,6 +113,11 @@ class ExtractSuperclassDialog extends ExtractSuperBaseDialog {
     return myPackageLabel;
   }
 
+  @Override
+  protected String getPackageNameLabelText() {
+    return isExtractSuperclass() ? RefactoringBundle.message("package.for.new.superclass") : "Package name for original class";
+  }
+
   protected String getEntityName() {
     return RefactoringBundle.message("ExtractSuperClass.superclass");
   }
index f3a71534b293ba5df3c8d5f763e3eb4de5f38c7f..92a5a3a3a1d44531dccf411827539b67d3f05981 100644 (file)
  */
 package com.intellij.refactoring.rename;
 
-import com.intellij.codeInsight.ChangeContextUtil;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Comparing;
-import com.intellij.openapi.util.Pair;
+import com.intellij.codeInsight.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.*;
 import com.intellij.psi.*;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.search.LocalSearchScope;
-import com.intellij.psi.search.searches.ClassInheritorsSearch;
-import com.intellij.psi.search.searches.ReferencesSearch;
+import com.intellij.psi.search.*;
+import com.intellij.psi.search.searches.*;
 import com.intellij.psi.util.ClassUtil;
-import com.intellij.refactoring.HelpID;
-import com.intellij.refactoring.JavaRefactoringSettings;
-import com.intellij.refactoring.RefactoringBundle;
-import com.intellij.refactoring.listeners.RefactoringElementListener;
-import com.intellij.refactoring.util.MoveRenameUsageInfo;
-import com.intellij.refactoring.util.RefactoringUtil;
-import com.intellij.usageView.UsageInfo;
-import com.intellij.util.IncorrectOperationException;
-import com.intellij.util.containers.MultiMap;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.refactoring.*;
+import com.intellij.refactoring.listeners.*;
+import com.intellij.refactoring.util.*;
+import com.intellij.usageView.*;
+import com.intellij.util.*;
+import com.intellij.util.containers.*;
+import org.jetbrains.annotations.*;
 
 import java.util.*;
-import java.util.regex.Pattern;
+import java.util.HashSet;
+import java.util.regex.*;
 
 /**
  * @author yole
@@ -217,7 +210,7 @@ public class RenameJavaClassProcessor extends RenamePsiElementProcessor {
         }
       }
     }
-    else {
+    else if (!(aClass instanceof PsiTypeParameter)) {
       final String qualifiedNameAfterRename = RenameUtil.getQualifiedNameAfterRename(aClass.getQualifiedName(), newName);
       Project project = element.getProject();
       final PsiClass conflictingClass =
index 33309695429d3e6a33b029be8b88856f142cecce..8249dc4eb6ce590a9a63182b9e4c1ac2aedc6084 100644 (file)
@@ -413,19 +413,27 @@ public class RefactoringUtil {
   }
 
   public static PsiThisExpression createThisExpression(PsiManager manager, PsiClass qualifierClass) throws IncorrectOperationException {
-    PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
-    if (qualifierClass != null) {
-      PsiThisExpression qualifiedThis = (PsiThisExpression)factory.createExpressionFromText("q.this", null);
-      qualifiedThis = (PsiThisExpression)CodeStyleManager.getInstance(manager.getProject()).reformat(qualifiedThis);
-      PsiJavaCodeReferenceElement thisQualifier = qualifiedThis.getQualifier();
-      LOG.assertTrue(thisQualifier != null);
-      thisQualifier.bindToElement(qualifierClass);
-      return qualifiedThis;
-    }
-    else {
-      return (PsiThisExpression)factory.createExpressionFromText("this", null);
-    }
-  }
+    return RefactoringUtil.<PsiThisExpression>createQualifiedExpression(manager, qualifierClass, "this");
+  }
+
+  public static PsiSuperExpression createSuperExpression(PsiManager manager, PsiClass qualifierClass) throws IncorrectOperationException {
+    return RefactoringUtil.<PsiSuperExpression>createQualifiedExpression(manager, qualifierClass, "super");
+  }
+
+  private static <T extends PsiQualifiedExpression> T createQualifiedExpression(PsiManager manager, PsiClass qualifierClass, String qName) throws IncorrectOperationException {
+     PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
+     if (qualifierClass != null) {
+       T qualifiedThis = (T)factory.createExpressionFromText("q." + qName, null);
+       qualifiedThis = (T)CodeStyleManager.getInstance(manager.getProject()).reformat(qualifiedThis);
+       PsiJavaCodeReferenceElement thisQualifier = qualifiedThis.getQualifier();
+       LOG.assertTrue(thisQualifier != null);
+       thisQualifier.bindToElement(qualifierClass);
+       return qualifiedThis;
+     }
+     else {
+       return (T)factory.createExpressionFromText(qName, null);
+     }
+   }
 
   /**
    * removes a reference to the specified class from the reference list given
index 02c42ead0b0bffd03eb5c09417923d6979aec258..0f51665108ac0dcdcb2da9e48fd3058c5d67dff8 100644 (file)
  */
 package com.intellij.refactoring.util.duplicates;
 
-import com.intellij.codeInsight.PsiEquivalenceUtil;
-import com.intellij.lang.ASTNode;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.util.Comparing;
-import com.intellij.openapi.util.Key;
-import com.intellij.openapi.util.Pair;
+import com.intellij.codeInsight.*;
+import com.intellij.lang.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.util.*;
 import com.intellij.psi.*;
 import com.intellij.psi.controlFlow.*;
-import com.intellij.psi.impl.source.PsiImmediateClassType;
-import com.intellij.psi.tree.IElementType;
-import com.intellij.psi.util.InheritanceUtil;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.psi.util.PsiUtil;
-import com.intellij.psi.util.TypeConversionUtil;
-import com.intellij.refactoring.extractMethod.InputVariables;
-import com.intellij.refactoring.util.RefactoringUtil;
-import com.intellij.util.ArrayUtil;
-import com.intellij.util.IncorrectOperationException;
-import com.intellij.util.containers.IntArrayList;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.impl.source.*;
+import com.intellij.psi.tree.*;
+import com.intellij.psi.util.*;
+import com.intellij.refactoring.extractMethod.*;
+import com.intellij.refactoring.util.*;
+import com.intellij.util.*;
+import com.intellij.util.containers.*;
+import org.jetbrains.annotations.*;
 
 import java.util.*;
 
@@ -384,6 +378,12 @@ public class DuplicatesFinder {
       final PsiExpression candidateQualifier = candidateRefExpr.getQualifierExpression();
       if (patternQualifier == null) {
         PsiClass contextClass = PsiTreeUtil.getParentOfType(pattern, PsiClass.class);
+        if (candidateQualifier instanceof PsiReferenceExpression) {
+          final PsiElement resolved = ((PsiReferenceExpression)candidateQualifier).resolve();
+          if (resolved instanceof PsiClass && contextClass != null && contextClass.isInheritor((PsiClass)resolved, true)) {
+            return true;
+          }
+        }
         return contextClass != null && match.registerInstanceExpression(candidateQualifier, contextClass);
       } else {
         if (candidateQualifier == null) {
@@ -406,7 +406,19 @@ public class DuplicatesFinder {
                 if (contextClass != null && InheritanceUtil.isInheritorOrSelf(thisClass, contextClass, true)) {
                   contextClass = thisClass;
                 }
+                final PsiClass thisCandidate = RefactoringUtil.getThisClass(candidate);
+                if (thisCandidate != null && InheritanceUtil.isInheritorOrSelf(thisCandidate, contextClass, true)) {
+                  contextClass = thisCandidate;
+                }
                 return contextClass != null && match.putParameter(parameter, RefactoringUtil.createThisExpression(patternQualifier.getManager(), contextClass));
+              } else if (patternQualifier instanceof PsiReferenceExpression) {
+                final PsiElement resolved = ((PsiReferenceExpression)patternQualifier).resolve();
+                if (resolved instanceof PsiClass) {
+                  final PsiClass classContext = PsiTreeUtil.getParentOfType(candidate, PsiClass.class);
+                  if (classContext != null && classContext.isInheritor((PsiClass)resolved, true)) {
+                    return true;
+                  }
+                }
               }
 
               return false;
@@ -437,6 +449,13 @@ public class DuplicatesFinder {
         final PsiElement candidateContextClass = candidateQualifier == null ? PsiTreeUtil.getParentOfType(candidate, PsiClass.class) : candidateQualifier.resolve();
         return contextClass == candidateContextClass;
       }
+    } else if (pattern instanceof PsiSuperExpression) {
+      final PsiJavaCodeReferenceElement qualifier = ((PsiSuperExpression)pattern).getQualifier();
+      final PsiElement contextClass = qualifier == null ? PsiTreeUtil.getParentOfType(pattern, PsiClass.class) : qualifier.resolve();
+      if (candidate instanceof PsiSuperExpression) {
+        final PsiJavaCodeReferenceElement candidateQualifier = ((PsiSuperExpression)candidate).getQualifier();
+        return contextClass == (candidateQualifier != null ? candidateQualifier.resolve() : PsiTreeUtil.getParentOfType(candidate, PsiClass.class));
+      }
     }
 
     PsiElement[] children1 = getFilteredChildren(pattern);
index 546b6f4606c961e8f7a0bb36198e7e7dbd1c867c..bb27d8b637fb5c7a63e87e3fb3b8797254f53154 100644 (file)
@@ -257,7 +257,12 @@ public class MethodDuplicatesHandler implements RefactoringActionHandler {
         } else if (needStaticQualifier || myMethod.hasModifierProperty(PsiModifier.STATIC)) {
           qualifierExpression.replace(factory.createReferenceExpression(containingClass));
         } else {
-          qualifierExpression.replace(RefactoringUtil.createThisExpression(containingClass.getManager(), containingClass));
+          final PsiClass psiClass = PsiTreeUtil.getParentOfType(match.getMatchStart(), PsiClass.class);
+          if (psiClass != null && psiClass.isInheritor(containingClass, true)) {
+            qualifierExpression.replace(RefactoringUtil.createSuperExpression(containingClass.getManager(), psiClass));
+          } else {
+            qualifierExpression.replace(RefactoringUtil.createThisExpression(containingClass.getManager(), containingClass));
+          }
         }
       }
       VisibilityUtil.escalateVisibility(myMethod, match.getMatchStart());
index 3918fdbde1ea2326aad0eb64492f442c991d6037..327d062ed71ea4aba2bd1eb6820c16cae046316c 100644 (file)
  */
 package com.intellij.testIntegration.createTest;
 
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.codeInsight.CodeInsightUtil;
-import com.intellij.codeInsight.daemon.impl.analysis.HighlightNamesUtil;
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.extensions.Extensions;
-import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleUtil;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.ProjectRootManager;
-import com.intellij.openapi.ui.Messages;
-import com.intellij.openapi.util.TextRange;
-import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInsight.daemon.impl.analysis.*;
+import com.intellij.codeInsight.intention.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.extensions.*;
+import com.intellij.openapi.fileEditor.ex.*;
+import com.intellij.openapi.module.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.roots.*;
+import com.intellij.openapi.ui.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.vfs.*;
 import com.intellij.psi.*;
-import com.intellij.psi.impl.source.PostprocessReformattingAspect;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.refactoring.util.classMembers.MemberInfo;
-import com.intellij.testIntegration.TestFrameworkDescriptor;
-import com.intellij.testIntegration.TestIntegrationUtils;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Collection;
+import com.intellij.psi.impl.source.*;
+import com.intellij.psi.search.*;
+import com.intellij.psi.util.*;
+import com.intellij.refactoring.util.classMembers.*;
+import com.intellij.testIntegration.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
+
+import java.util.*;
 
 public class CreateTestAction extends PsiElementBaseIntentionAction {
   @NotNull
@@ -54,8 +50,7 @@ public class CreateTestAction extends PsiElementBaseIntentionAction {
     return getText();
   }
 
-  public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
-    if (element == null) return false;
+  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
     if (Extensions.getExtensions(TestFrameworkDescriptor.EXTENSION_NAME).length == 0) return false;
 
     if (!isAvailableForElement(element)) return false;
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous-out.java b/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous-out.java
new file mode 100644 (file)
index 0000000..3c29042
--- /dev/null
@@ -0,0 +1,19 @@
+public class Foo {
+
+  public Foo() {
+    Runnable r = new Runnable() {
+      public void run() {
+        Goo<String> g = new Goo<String>() {
+            @Override
+            void foo() {
+                <selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
+            }
+        };
+      }
+    };
+  }
+}
+
+abstract class Goo<T> {
+  abstract void foo();
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous.java b/java/java-tests/testData/codeInsight/completion/smartType/NewAbstractInsideAnonymous.java
new file mode 100644 (file)
index 0000000..b3a1417
--- /dev/null
@@ -0,0 +1,14 @@
+public class Foo {
+
+  public Foo() {
+    Runnable r = new Runnable() {
+      public void run() {
+        Goo<String> g = new G<caret>
+      }
+    };
+  }
+}
+
+abstract class Goo<T> {
+  abstract void foo();
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java
new file mode 100644 (file)
index 0000000..b084a06
--- /dev/null
@@ -0,0 +1,17 @@
+public class aa {
+    public static boolean isVis<caret>ualUpdate(int update_type) {
+        return update_type <= Iaaa.FULL_QUOTE_VISUAL;
+    }
+}
+
+interface Iaaa {
+    int FULL_QUOTE_VISUAL = 0;
+}
+
+class a implements Iaaa {
+    int update_type = 8;
+
+    public static boolean blabla(int update_type) {
+        return update_type <= FULL_QUOTE_VISUAL;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CandidateUnqualifiedStaticAccess.java.after
new file mode 100644 (file)
index 0000000..ee79c53
--- /dev/null
@@ -0,0 +1,17 @@
+public class aa {
+    public static boolean isVisualUpdate(int update_type) {
+        return update_type <= Iaaa.FULL_QUOTE_VISUAL;
+    }
+}
+
+interface Iaaa {
+    int FULL_QUOTE_VISUAL = 0;
+}
+
+class a implements Iaaa {
+    int update_type = 8;
+
+    public static boolean blabla(int update_type) {
+        return aa.isVisualUpdate(update_type);
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java
new file mode 100644 (file)
index 0000000..3b99a58
--- /dev/null
@@ -0,0 +1,14 @@
+public class BaseClass extends JComponent {
+}
+
+class SubClass extends BaseClass {
+ void a() {
+  System.out.println(getLocation());
+ }
+}
+
+class Util {
+ public static void met<caret>hod(BaseClass base) {
+  System.out.println(base.getLocation());
+ }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after
new file mode 100644 (file)
index 0000000..181a189
--- /dev/null
@@ -0,0 +1,14 @@
+public class BaseClass extends JComponent {
+}
+
+class SubClass extends BaseClass {
+ void a() {
+     Util.method(SubClass.this);
+ }
+}
+
+class Util {
+ public static void method(BaseClass base) {
+  System.out.println(base.getLocation());
+ }
+}
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java
new file mode 100644 (file)
index 0000000..4683cf7
--- /dev/null
@@ -0,0 +1,11 @@
+public class a {
+  void f<caret>oo() {
+    System.out.println();
+  }
+}
+
+class b extends a {
+  void foo() {
+    System.out.println();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/InsertSuperQualifierWhenNameConflicts.java.after
new file mode 100644 (file)
index 0000000..7cb7457
--- /dev/null
@@ -0,0 +1,11 @@
+public class a {
+  void foo() {
+    System.out.println();
+  }
+}
+
+class b extends a {
+  void foo() {
+      b.super.foo();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContext.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContext.java
new file mode 100644 (file)
index 0000000..a1d887e
--- /dev/null
@@ -0,0 +1,17 @@
+public class a {
+    public void login() {
+        System.out.println();
+    }
+}
+
+class b extends a {
+    public void doL<caret>ogin() throws Exception {
+        super.login();
+    }
+}
+
+class c extends a {
+    public void doLogin() throws Exception {
+        super.login();
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java
new file mode 100644 (file)
index 0000000..cfa8195
--- /dev/null
@@ -0,0 +1,20 @@
+public class a {
+    public void login() {
+        System.out.println();
+    }
+}
+
+class b extends a {
+    public void doL<caret>ogin() throws Exception {
+        super.login();
+    }
+
+    public void foo() throws Exception {
+      new Runnable() {
+        public void run() {
+          b.super.login();
+        }
+      }.run();
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/SuperInTheSameContextQualified.java.after
new file mode 100644 (file)
index 0000000..8fdb60b
--- /dev/null
@@ -0,0 +1,20 @@
+public class a {
+    public void login() {
+        System.out.println();
+    }
+}
+
+class b extends a {
+    public void doLogin() throws Exception {
+        super.login();
+    }
+
+    public void foo() throws Exception {
+      new Runnable() {
+        public void run() {
+            doLogin();
+        }
+      }.run();
+    }
+}
+
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java
new file mode 100644 (file)
index 0000000..0fba02b
--- /dev/null
@@ -0,0 +1,17 @@
+public class aa {
+    public static boolean isVisualUpdate(int update_type) {
+        return update_type <= Iaaa.FULL_QUOTE_VISUAL;
+    }
+}
+
+interface Iaaa {
+    int FULL_QUOTE_VISUAL = 0;
+}
+
+class a implements Iaaa {
+    int update_type = 8;
+
+    public static boolean blab<caret>la(int update_type) {
+        return update_type <= FULL_QUOTE_VISUAL;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/UnqualifiedStaticAccess.java.after
new file mode 100644 (file)
index 0000000..440f2b0
--- /dev/null
@@ -0,0 +1,17 @@
+public class aa {
+    public static boolean isVisualUpdate(int update_type) {
+        return a.blabla(update_type);
+    }
+}
+
+interface Iaaa {
+    int FULL_QUOTE_VISUAL = 0;
+}
+
+class a implements Iaaa {
+    int update_type = 8;
+
+    public static boolean blabla(int update_type) {
+        return update_type <= FULL_QUOTE_VISUAL;
+    }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java b/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java
new file mode 100644 (file)
index 0000000..2bc8f20
--- /dev/null
@@ -0,0 +1,3 @@
+public class Test<T<caret> extends String> {}
+
+class P {}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java.after
new file mode 100644 (file)
index 0000000..b4f9ab0
--- /dev/null
@@ -0,0 +1,3 @@
+public class Test<P extends String> {}
+
+class P {}
\ No newline at end of file
index 2eb7e0ff5d59ddf2e5c3b9e9eb3b901bc4e59345..9932fd9378752e79cdc805975de2e807d5dfeea3 100644 (file)
@@ -951,6 +951,8 @@ public class SmartTypeCompletionTest extends LightCompletionTestCase {
 
   public void testEnumAsDefaultAnnotationParam() throws Throwable { doTest(); }
 
+  public void testNewAbstractInsideAnonymous() throws Throwable { doTest(); }
+
   public void testFilterPrivateConstructors() throws Throwable { doTest(); }
 
   public void testExplicitMethodTypeParametersQualify() throws Throwable { doTest(); }
index 147c3e6c6ed7b17b2e5aee2306e1e8d606e5a7ba..50ad3f4967235ea4dbedeebbc4309d8ef94a38d2 100644 (file)
@@ -49,4 +49,30 @@ public class FindMethodDuplicatesMiscTest extends FindMethodDuplicatesBaseTest {
   public void testDetectNameConflictsWithStatic() throws Exception {
     doTest();
   }
+
+  public void testCorrectThis() throws Exception {
+    doTest();
+  }
+
+  public void testSuperInTheSameContext() throws Exception {
+    doTest(false);
+  }
+
+  public void testSuperInTheSameContextQualified() throws Exception {
+    doTest();
+  }
+
+  public void testInsertSuperQualifierWhenNameConflicts() throws Exception {
+    doTest();
+  }
+
+  public void testUnqualifiedStaticAccess() throws Exception {
+    doTest();
+  }
+
+  public void testCandidateUnqualifiedStaticAccess() throws Exception {
+    doTest();
+  }
+
+
 }
\ No newline at end of file
index 1a069c4712fa57c32d186d8dc1631c2e07d3d3e3..9a7d0c9fb162393bb0f8cfa5447668a8dd7533e0 100644 (file)
@@ -1,18 +1,17 @@
 package com.intellij.refactoring;
 
-import com.intellij.JavaTestUtil;
-import com.intellij.codeInsight.TargetElementUtilBase;
-import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
-import com.intellij.psi.PsiElement;
-import com.intellij.refactoring.rename.RenameProcessor;
-import com.intellij.refactoring.rename.RenameUtil;
-import com.intellij.refactoring.util.MoveRenameUsageInfo;
-import com.intellij.testFramework.LightCodeInsightTestCase;
-import com.intellij.usageView.UsageInfo;
-import org.junit.Assert;
-
-import java.util.HashMap;
+import com.intellij.*;
+import com.intellij.codeInsight.*;
+import com.intellij.openapi.projectRoots.*;
+import com.intellij.openapi.projectRoots.impl.*;
+import com.intellij.psi.*;
+import com.intellij.refactoring.rename.*;
+import com.intellij.refactoring.util.*;
+import com.intellij.testFramework.*;
+import com.intellij.usageView.*;
+import org.junit.*;
+
+import java.util.*;
 
 /**
  * @author sashache
@@ -157,6 +156,10 @@ public class RenameCollisionsTest extends LightCodeInsightTestCase {
     fail("Conflicts were not found");
   }
 
+  public void testRenameTypeParameterToExistingClassName() throws Exception {
+    doTest("P");
+  }
+
   private void doTest(final String newName) throws Exception {
     configureByFile(BASE_PATH + getTestName(false) + ".java");
     PsiElement element = TargetElementUtilBase
index f66e320f9af6d19e37f5dbe4aa34b3b8f32ba064..b1ce685924102fc1bdd55c8a8eea789fd868c422 100644 (file)
 
 package com.intellij.codeInsight.intention;
 
-import com.intellij.codeInsight.AnnotationUtil;
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.ExternalAnnotationsManager;
-import com.intellij.codeInspection.LocalQuickFix;
-import com.intellij.codeInspection.ProblemDescriptor;
-import com.intellij.lang.findUsages.FindUsagesProvider;
-import com.intellij.lang.findUsages.LanguageFindUsages;
-import com.intellij.openapi.command.undo.UndoUtil;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.CaretModel;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInspection.*;
+import com.intellij.lang.findUsages.*;
+import com.intellij.openapi.command.undo.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
 import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
-import com.intellij.psi.codeStyle.JavaCodeStyleManager;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.psi.util.PsiUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.psi.codeStyle.*;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 /**
  * @author ven
@@ -104,8 +94,8 @@ public class AddAnnotationFix extends PsiElementBaseIntentionAction implements L
     return listOwner;
   }
 
-  public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) {
-    if (element == null || !element.isValid()) return false;
+  public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) {
+    if (!element.isValid()) return false;
     if (!PsiUtil.isLanguageLevel5OrHigher(element)) return false;
     final PsiModifierListOwner owner;
     if (myModifierListOwner != null) {
@@ -139,7 +129,7 @@ public class AddAnnotationFix extends PsiElementBaseIntentionAction implements L
       final int position = caretModel.getOffset();
       element = file.findElementAt(position);
     }
-    return isAvailable(project, editor, element);
+    return element != null && isAvailable(project, editor, element);
   }
 
   public void invoke(@NotNull final Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
diff --git a/java/openapi/src/com/intellij/psi/PsiQualifiedExpression.java b/java/openapi/src/com/intellij/psi/PsiQualifiedExpression.java
new file mode 100644 (file)
index 0000000..58ea092
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2010 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.psi;
+
+import org.jetbrains.annotations.Nullable;
+
+public interface PsiQualifiedExpression extends PsiExpression {
+  @Nullable
+  PsiJavaCodeReferenceElement getQualifier();
+}
\ No newline at end of file
index 858bceef4d2084165fa29f53523a3cbdf97a477d..95215d17ea358be071b7fd532348d84e07ffbc26 100644 (file)
@@ -21,7 +21,7 @@ import org.jetbrains.annotations.Nullable;
  * Represents a Java <code>super</code> expression in a super method call. Note that the qualifier of
  * a super constructor call is represented as a {@link PsiKeyword} rather than a <code>PsiSuperExpression</code>.  
  */
-public interface PsiSuperExpression extends PsiExpression {
+public interface PsiSuperExpression extends PsiQualifiedExpression {
   /**
    * Returns the expression representing the class name qualifying the <code>super</code>
    * expression.
index 9436a891711fb05ee32a696e86da81fa6f82a38e..673e75188f4f9a762ef639534385dfb3ddfeb44c 100644 (file)
@@ -20,7 +20,7 @@ import org.jetbrains.annotations.Nullable;
 /**
  * Represents a Java <code>this</code> expression.
  */
-public interface PsiThisExpression extends PsiExpression {
+public interface PsiThisExpression extends PsiQualifiedExpression {
   /**
    * Returns the expression representing the class name qualifying the <code>this</code>
    * expression.
diff --git a/platform/icons/src/ide/emptyFatalError.png b/platform/icons/src/ide/emptyFatalError.png
new file mode 100755 (executable)
index 0000000..7594291
Binary files /dev/null and b/platform/icons/src/ide/emptyFatalError.png differ
old mode 100644 (file)
new mode 100755 (executable)
index ef68f6a..eb7a60a
Binary files a/platform/icons/src/ide/error_notifications.png and b/platform/icons/src/ide/error_notifications.png differ
diff --git a/platform/icons/src/ide/fatalError.png b/platform/icons/src/ide/fatalError.png
new file mode 100755 (executable)
index 0000000..a4e89ef
Binary files /dev/null and b/platform/icons/src/ide/fatalError.png differ
diff --git a/platform/icons/src/ide/hectorNo.png b/platform/icons/src/ide/hectorNo.png
new file mode 100755 (executable)
index 0000000..9328a08
Binary files /dev/null and b/platform/icons/src/ide/hectorNo.png differ
diff --git a/platform/icons/src/ide/hectorOff.png b/platform/icons/src/ide/hectorOff.png
new file mode 100755 (executable)
index 0000000..7633890
Binary files /dev/null and b/platform/icons/src/ide/hectorOff.png differ
diff --git a/platform/icons/src/ide/hectorOn.png b/platform/icons/src/ide/hectorOn.png
new file mode 100755 (executable)
index 0000000..f5e1dbd
Binary files /dev/null and b/platform/icons/src/ide/hectorOn.png differ
diff --git a/platform/icons/src/ide/incomingChangesOff.png b/platform/icons/src/ide/incomingChangesOff.png
new file mode 100755 (executable)
index 0000000..ff844dc
Binary files /dev/null and b/platform/icons/src/ide/incomingChangesOff.png differ
diff --git a/platform/icons/src/ide/incomingChangesOn.png b/platform/icons/src/ide/incomingChangesOn.png
new file mode 100755 (executable)
index 0000000..47740a5
Binary files /dev/null and b/platform/icons/src/ide/incomingChangesOn.png differ
old mode 100644 (file)
new mode 100755 (executable)
index eab7574..c221932
Binary files a/platform/icons/src/ide/info_notifications.png and b/platform/icons/src/ide/info_notifications.png differ
old mode 100644 (file)
new mode 100755 (executable)
index 0a76ee6..91b2201
Binary files a/platform/icons/src/ide/notifications.png and b/platform/icons/src/ide/notifications.png differ
diff --git a/platform/icons/src/ide/read_notifications.png b/platform/icons/src/ide/read_notifications.png
deleted file mode 100644 (file)
index 77bedbc..0000000
Binary files a/platform/icons/src/ide/read_notifications.png and /dev/null differ
diff --git a/platform/icons/src/ide/readonly.png b/platform/icons/src/ide/readonly.png
new file mode 100755 (executable)
index 0000000..a73f553
Binary files /dev/null and b/platform/icons/src/ide/readonly.png differ
diff --git a/platform/icons/src/ide/readwrite.png b/platform/icons/src/ide/readwrite.png
new file mode 100755 (executable)
index 0000000..469f8f1
Binary files /dev/null and b/platform/icons/src/ide/readwrite.png differ
diff --git a/platform/icons/src/ide/statusbar_arrows.png b/platform/icons/src/ide/statusbar_arrows.png
new file mode 100644 (file)
index 0000000..92e314a
Binary files /dev/null and b/platform/icons/src/ide/statusbar_arrows.png differ
old mode 100644 (file)
new mode 100755 (executable)
index ac2d621..1d55285
Binary files a/platform/icons/src/ide/warning_notifications.png and b/platform/icons/src/ide/warning_notifications.png differ
old mode 100644 (file)
new mode 100755 (executable)
index 0d878a6..c553769
Binary files a/platform/icons/src/process/step_passive.png and b/platform/icons/src/process/step_passive.png differ
index bb23165dd5cafd27bba7013261ad440b4d4a580d..adc150baa41e8150c066b361f39c4811c57ae83f 100644 (file)
  */
 package com.intellij.codeInsight.intention;
 
-import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
-import com.intellij.openapi.editor.CaretModel;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.codeInsight.intention.impl.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
+import com.intellij.psi.*;
+import org.jetbrains.annotations.*;
 
 public abstract class PsiElementBaseIntentionAction extends BaseIntentionAction {
 
@@ -42,12 +39,14 @@ public abstract class PsiElementBaseIntentionAction extends BaseIntentionAction
    * @param element the element under caret.
    * @return true if the intention is available, false otherwise.
    */
-  public abstract boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element);
+  public abstract boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element);
 
   public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
     if (!file.getManager().isInProject(file)) return false;
     final CaretModel caretModel = editor.getCaretModel();
     final int position = caretModel.getOffset();
-    return isAvailable(project, editor, file.findElementAt(position));
+    final PsiElement element = file.findElementAt(position);
+    if (element == null) return false;
+    return isAvailable(project, editor, element);
   }
 }
\ No newline at end of file
index b6a9d206982415ddda18eefef37a759e14b4e48f..0cde5d9df65edc6b83dbdae4e9edf9ae7e9b2481 100644 (file)
 
 package com.intellij.execution.configurations;
 
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.module.ModuleUtil;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.InvalidDataException;
-import com.intellij.openapi.util.WriteExternalException;
-import org.jdom.Element;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.Arrays;
-import java.util.Collection;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.module.*;
+import com.intellij.openapi.util.*;
+import org.jdom.*;
+import org.jetbrains.annotations.*;
+
+import java.util.*;
 
 public abstract class ModuleBasedConfiguration<ConfigurationModule extends RunConfigurationModule> extends RuntimeConfiguration {
   private static final Logger LOG = Logger.getInstance("#com.intellij.execution.configurations.ModuleBasedConfiguration");
@@ -106,7 +100,10 @@ public abstract class ModuleBasedConfiguration<ConfigurationModule extends RunCo
   public void restoreOriginalModule(final Module originalModule) {
     if (originalModule == null) return;
     final Module[] classModules = getModules();
-    final Collection<Module> modules = ModuleUtil.collectModulesDependsOn(Arrays.asList(classModules));
+    final Set<Module> modules = new HashSet<Module>();
+    for (Module classModule : classModules) {
+      ModuleUtil.collectModulesDependsOn(classModule, modules);
+    }
     if (modules.contains(originalModule)) setModule(originalModule);
   }
 }
index ad0737d53169e0903f9c80df99c8d56ea13c1594..c5e1ef4a5db0fa32110cbab18bb678a642b8a512 100644 (file)
  */
 package com.intellij.openapi.module;
 
-import com.intellij.openapi.application.ReadAction;
-import com.intellij.openapi.application.Result;
-import com.intellij.openapi.project.Project;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.project.*;
 import com.intellij.openapi.roots.*;
-import com.intellij.openapi.util.Key;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.PsiDirectory;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.vfs.*;
+import com.intellij.psi.*;
 import com.intellij.util.containers.HashSet;
-import com.intellij.util.graph.Graph;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.util.graph.*;
+import org.jetbrains.annotations.*;
 
 import java.util.*;
 
@@ -169,6 +165,7 @@ public class ModuleUtil {
     return element.getUserData(KEY_MODULE);
   }
 
+  //ignores export flag
   public static void getDependencies(@NotNull Module module, Set<Module> modules) {
     if (modules.contains(module)) return;
     modules.add(module);
@@ -178,16 +175,32 @@ public class ModuleUtil {
     }
   }
 
-  public static Collection<Module> collectModulesDependsOn(@NotNull final Collection<Module> modules) {
-    if (modules.isEmpty()) return Collections.emptyList();
-    final HashSet<Module> result = new HashSet<Module>();
-    final Project project = modules.iterator().next().getProject();
-    final ModuleManager moduleManager = ModuleManager.getInstance(project);
-    for (final Module module : modules) {
-      result.add(module);
-      result.addAll(moduleManager.getModuleDependentModules(module));
+  /**
+   * collect transitive module dependants
+   * @param module to find dependencies on
+   * @param result resulted set
+   */
+  public static void collectModulesDependsOn(@NotNull final Module module, final Set<Module> result) {
+    if (result.contains(module)) return;
+    result.add(module);
+    final ModuleManager moduleManager = ModuleManager.getInstance(module.getProject());
+    final List<Module> dependentModules = moduleManager.getModuleDependentModules(module);
+    for (final Module dependentModule : dependentModules) {
+      final OrderEntry[] orderEntries = ModuleRootManager.getInstance(dependentModule).getOrderEntries();
+      for (OrderEntry o : orderEntries) {
+        if (o instanceof ModuleOrderEntry) {
+          final ModuleOrderEntry orderEntry = (ModuleOrderEntry)o;
+          if (orderEntry.getModule() == module) {
+            if (orderEntry.isExported()) {
+              collectModulesDependsOn(dependentModule, result);
+            } else {
+              result.add(dependentModule);
+            }
+            break;
+          }
+        }
+      }
     }
-    return result;
   }
 
   @NotNull
index 6c14fadc30d7cb817304bcac90ca8b558b2e51ef..98e0398777e2ecee6b6687f846b740e0982f5890 100644 (file)
 
 package com.intellij.codeInsight.daemon.impl;
 
-import com.intellij.codeHighlighting.BackgroundEditorHighlighter;
-import com.intellij.codeHighlighting.HighlightingPass;
+import com.intellij.codeHighlighting.*;
 import com.intellij.codeHighlighting.Pass;
-import com.intellij.codeHighlighting.TextEditorHighlightingPass;
-import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
-import com.intellij.codeInsight.daemon.DaemonCodeAnalyzerSettings;
-import com.intellij.codeInsight.daemon.LineMarkerInfo;
-import com.intellij.codeInsight.daemon.ReferenceImporter;
-import com.intellij.codeInsight.hint.HintManager;
-import com.intellij.codeInsight.intention.impl.IntentionHintComponent;
-import com.intellij.concurrency.Job;
-import com.intellij.lang.annotation.HighlightSeverity;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.codeInsight.daemon.*;
+import com.intellij.codeInsight.hint.*;
+import com.intellij.codeInsight.intention.impl.*;
+import com.intellij.concurrency.*;
+import com.intellij.lang.annotation.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.diagnostic.*;
 import com.intellij.openapi.editor.Document;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.ex.EditorMarkupModel;
-import com.intellij.openapi.editor.markup.MarkupModel;
-import com.intellij.openapi.editor.markup.RangeHighlighter;
-import com.intellij.openapi.extensions.Extensions;
-import com.intellij.openapi.fileEditor.FileEditor;
-import com.intellij.openapi.fileEditor.TextEditor;
-import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
-import com.intellij.openapi.fileTypes.FileType;
-import com.intellij.openapi.fileTypes.StdFileTypes;
-import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.project.Project;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.editor.ex.*;
+import com.intellij.openapi.editor.markup.*;
+import com.intellij.openapi.extensions.*;
+import com.intellij.openapi.fileEditor.*;
+import com.intellij.openapi.fileEditor.impl.text.*;
+import com.intellij.openapi.fileTypes.*;
+import com.intellij.openapi.progress.*;
+import com.intellij.openapi.project.*;
 import com.intellij.openapi.util.*;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.vfs.VirtualFileManager;
-import com.intellij.packageDependencies.DependencyValidationManager;
-import com.intellij.psi.PsiCompiledElement;
-import com.intellij.psi.PsiDocumentManager;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiFileSystemItem;
-import com.intellij.psi.search.scope.packageSet.NamedScope;
-import com.intellij.psi.search.scope.packageSet.NamedScopeManager;
-import com.intellij.psi.search.scope.packageSet.NamedScopesHolder;
-import com.intellij.util.Alarm;
-import com.intellij.util.SmartList;
-import com.intellij.util.containers.ContainerUtil;
-import gnu.trove.THashMap;
-import gnu.trove.THashSet;
-import org.jdom.Element;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import org.jetbrains.annotations.TestOnly;
+import com.intellij.openapi.vfs.*;
+import com.intellij.packageDependencies.*;
+import com.intellij.psi.*;
+import com.intellij.psi.search.scope.packageSet.*;
+import com.intellij.util.*;
+import com.intellij.util.containers.*;
+import gnu.trove.*;
+import org.jdom.*;
+import org.jetbrains.annotations.*;
 
 import java.util.*;
 
@@ -101,7 +82,6 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx
   @NonNls private static final String FILE_TAG = "file";
   @NonNls private static final String URL_ATT = "url";
   private DaemonListeners myDaemonListeners;
-  private StatusBarUpdater myStatusBarUpdater;
   private final PassExecutorService myPassExecutorService;
   private static final Key<List<HighlightInfo>> HIGHLIGHTS_TO_REMOVE_KEY = Key.create("HIGHLIGHTS_TO_REMOVE");
   private int myModificationCount = 0;
@@ -146,9 +126,6 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx
 
   public void projectOpened() {
     assert !myInitialized : "Double Initializing";
-    myStatusBarUpdater = new StatusBarUpdater(myProject);
-    Disposer.register(myProject, myStatusBarUpdater);
-
     myDaemonListeners = new DaemonListeners(myProject, this, myEditorTracker);
     Disposer.register(myProject, myDaemonListeners);
     reloadScopes();
@@ -474,11 +451,6 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx
     markup.putUserData(HIGHLIGHTS_IN_EDITOR_DOCUMENT_KEY, Collections.unmodifiableList(highlightsToSet));
 
     markup.putUserData(HIGHLIGHTS_TO_REMOVE_KEY, Collections.unmodifiableList(highlightsToRemove));
-
-    DaemonCodeAnalyzer codeAnalyzer = DaemonCodeAnalyzer.getInstance(project);
-    if (codeAnalyzer instanceof DaemonCodeAnalyzerImpl && ((DaemonCodeAnalyzerImpl)codeAnalyzer).myStatusBarUpdater != null) {
-      ((DaemonCodeAnalyzerImpl)codeAnalyzer).myStatusBarUpdater.updateStatus();
-    }
   }
 
   private static void stripWarningsCoveredByErrors(final Project project, List<HighlightInfo> highlights, MarkupModel markup) {
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/StatusBarUpdater.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/StatusBarUpdater.java
deleted file mode 100644 (file)
index fe9e057..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-
-/*
- * Copyright 2000-2009 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.intellij.codeInsight.daemon.impl;
-
-import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
-import com.intellij.openapi.Disposable;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.editor.Document;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.EditorFactory;
-import com.intellij.openapi.editor.event.CaretEvent;
-import com.intellij.openapi.editor.event.CaretListener;
-import com.intellij.openapi.editor.ex.DocumentEx;
-import com.intellij.openapi.fileEditor.FileEditorManager;
-import com.intellij.openapi.fileEditor.FileEditorManagerAdapter;
-import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
-import com.intellij.openapi.fileEditor.FileEditorManagerListener;
-import com.intellij.openapi.project.DumbAwareRunnable;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.wm.StatusBar;
-import com.intellij.openapi.wm.WindowManager;
-import com.intellij.openapi.wm.ex.StatusBarEx;
-
-public class StatusBarUpdater implements Disposable {
-  private final Project myProject;
-  private final UpdateStatusRunnable myUpdateStatusRunnable = new UpdateStatusRunnable();
-
-  public StatusBarUpdater(Project project) {
-    myProject = project;
-
-    CaretListener caretListener = new CaretListener() {
-      public void caretPositionChanged(CaretEvent e) {
-        ApplicationManager.getApplication().invokeLater(myUpdateStatusRunnable);
-      }
-    };
-    EditorFactory.getInstance().getEventMulticaster().addCaretListener(caretListener, this);
-
-    project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerAdapter() {
-      @Override
-      public void selectionChanged(FileEditorManagerEvent event) {
-        ApplicationManager.getApplication().invokeLater(myUpdateStatusRunnable);
-      }
-    });
-  }
-
-  public void dispose() {
-  }
-
-  public void updateStatus() {
-    Editor editor = FileEditorManager.getInstance(myProject).getSelectedTextEditor();
-    if (editor == null || !editor.getContentComponent().hasFocus()){
-      return;
-    }
-
-    final Document document = editor.getDocument();
-    if (document instanceof DocumentEx && ((DocumentEx)document).isInBulkUpdate()) return;
-
-    int offset = editor.getCaretModel().getOffset();
-    DaemonCodeAnalyzer codeAnalyzer = DaemonCodeAnalyzer.getInstance(myProject);
-    HighlightInfo info = ((DaemonCodeAnalyzerImpl)codeAnalyzer).findHighlightByOffset(document, offset, false);
-    String text = info != null && info.description != null ? info.description : "";
-
-    StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject);
-    if (statusBar instanceof StatusBarEx) {
-      StatusBarEx barEx = (StatusBarEx)statusBar;
-      if (!text.equals(barEx.getInfo())){
-        statusBar.setInfo(text);
-      }
-      barEx.update(editor);
-    }
-  }
-
-  private class UpdateStatusRunnable implements DumbAwareRunnable {
-    public void run() {
-      if (!myProject.isDisposed()) {
-        updateStatus();
-      }
-    }
-  }
-}
\ No newline at end of file
index b1d8f4be16302d6455e2714231df251e3c43c1b0..1268698df18a8b07a0a1f94aeb87b71c19890737 100644 (file)
 
 package com.intellij.codeInsight.daemon.impl.actions;
 
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInspection.InspectionsBundle;
-import com.intellij.codeInspection.SuppressIntentionAction;
-import com.intellij.codeInspection.SuppressionUtil;
-import com.intellij.lang.Commenter;
-import com.intellij.lang.LanguageCommenters;
-import com.intellij.openapi.command.undo.UndoUtil;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.fileTypes.LanguageFileType;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.PsiComment;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiParserFacade;
-import com.intellij.psi.PsiWhiteSpace;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Collections;
-import java.util.List;
+import com.intellij.codeInsight.*;
+import com.intellij.codeInspection.*;
+import com.intellij.lang.*;
+import com.intellij.openapi.command.undo.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.fileTypes.*;
+import com.intellij.openapi.project.*;
+import com.intellij.psi.*;
+import com.intellij.psi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
+
+import java.util.*;
 
 /**
  * @author Roman.Chernyatchik
@@ -94,8 +86,8 @@ public abstract class AbstractSuppressByNoInspectionCommentFix extends SuppressI
     container.getParent().addBefore(comment, container);
   }
 
-  public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement context) {
-    return context != null && context.getManager().isInProject(context) && getContainer(context) != null;
+  public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement context) {
+    return context.getManager().isInProject(context) && getContainer(context) != null;
   }
 
   public void invoke(final Project project, @Nullable Editor editor, final PsiElement element) throws IncorrectOperationException {
index 8167486e69e9e6ebe1d709fb20904a9073f37e91..a430ebb611288d871915bf8c6d8b9dfc153732dc 100644 (file)
 
 package com.intellij.codeInsight.hint;
 
-import com.intellij.lang.parameterInfo.ParameterInfoHandler;
-import com.intellij.lang.parameterInfo.ParameterInfoUIContextEx;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.psi.PsiElement;
-import com.intellij.ui.SideBorder;
-import com.intellij.ui.SplittingUtil;
-import com.intellij.ui.StrikeoutLabel;
-import com.intellij.util.ui.UIUtil;
-import org.jetbrains.annotations.NotNull;
+import com.intellij.lang.parameterInfo.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.psi.*;
+import com.intellij.ui.*;
+import com.intellij.util.ui.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
-import javax.swing.border.Border;
-import javax.swing.border.LineBorder;
+import javax.swing.border.*;
 import java.awt.*;
-import java.util.EnumSet;
+import java.util.*;
 
 class ParameterInfoComponent extends JPanel{
   private final Object[] myObjects;
@@ -182,7 +178,7 @@ class ParameterInfoComponent extends JPanel{
     public void setup(String text, int highlightStartOffset, int highlightEndOffset, boolean isDisabled, boolean strikeout, boolean isDisabledBeforeHighlight, Color background) {
       removeAll();
 
-      String[] lines = SplittingUtil.splitText(text, getFontMetrics(BOLD_FONT), myWidthLimit, ',');
+      String[] lines = UIUtil.splitText(text, getFontMetrics(BOLD_FONT), myWidthLimit, ',');
 
       myOneLineComponents = new OneLineComponent[lines.length];
 
index ff423b6dc5e1db52d846de254af6f17a2dda5923..4318a65a2cb6573a0aab4fc83267c3c224af71e7 100644 (file)
 package com.intellij.codeInsight.problems;
 
 import com.intellij.codeInsight.daemon.impl.*;
-import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder;
-import com.intellij.lang.annotation.HighlightSeverity;
-import com.intellij.openapi.Disposable;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.application.impl.LaterInvocator;
-import com.intellij.openapi.editor.Document;
-import com.intellij.openapi.extensions.Extensions;
-import com.intellij.openapi.fileEditor.FileDocumentManager;
-import com.intellij.openapi.fileEditor.FileEditor;
-import com.intellij.openapi.fileEditor.FileEditorManager;
-import com.intellij.openapi.fileEditor.TextEditor;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleUtil;
-import com.intellij.openapi.progress.ProcessCanceledException;
-import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.progress.ProgressManager;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.Condition;
-import com.intellij.openapi.util.Disposer;
-import com.intellij.openapi.util.TextRange;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.openapi.vcs.FileStatusListener;
-import com.intellij.openapi.vcs.FileStatusManager;
+import com.intellij.codeInsight.daemon.impl.analysis.*;
+import com.intellij.lang.annotation.*;
+import com.intellij.openapi.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.application.impl.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.extensions.*;
+import com.intellij.openapi.fileEditor.*;
+import com.intellij.openapi.module.*;
+import com.intellij.openapi.progress.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.util.text.*;
+import com.intellij.openapi.vcs.*;
 import com.intellij.openapi.vfs.*;
-import com.intellij.openapi.wm.StatusBar;
-import com.intellij.openapi.wm.WindowManager;
-import com.intellij.openapi.wm.ex.StatusBarEx;
-import com.intellij.problems.Problem;
-import com.intellij.problems.WolfTheProblemSolver;
+import com.intellij.openapi.wm.*;
+import com.intellij.openapi.wm.ex.*;
+import com.intellij.problems.*;
 import com.intellij.psi.*;
-import com.intellij.util.containers.ContainerUtil;
-import gnu.trove.THashMap;
-import gnu.trove.THashSet;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
+import com.intellij.util.containers.*;
+import gnu.trove.*;
+import org.jetbrains.annotations.*;
 
 import java.util.*;
 
@@ -316,10 +302,10 @@ public class WolfTheProblemSolverImpl extends WolfTheProblemSolver {
     return true;
   }
 
-  private static String saveStatusBarInfo(StatusBar statusBar) {
+  private static String saveStatusBarInfo(final StatusBar statusBar) {
     String oldInfo = null;
     if (statusBar instanceof StatusBarEx) {
-      oldInfo = ((StatusBarEx)statusBar).getInfo();
+      oldInfo = statusBar.getInfo();
     }
     return oldInfo;
   }
index d3e2b4d0baea0b1de98043917a9ae36980b982e9..129497e0e2c291c51e0fba62b038568fef382fb6 100644 (file)
 
 package com.intellij.find.findUsages;
 
-import com.intellij.codeInsight.hint.HintManager;
-import com.intellij.codeInsight.hint.HintManagerImpl;
-import com.intellij.codeInsight.hint.HintUtil;
-import com.intellij.find.FindBundle;
-import com.intellij.lang.findUsages.LanguageFindUsages;
-import com.intellij.navigation.NavigationItem;
-import com.intellij.openapi.actionSystem.ActionManager;
-import com.intellij.openapi.actionSystem.AnAction;
-import com.intellij.openapi.actionSystem.IdeActions;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.codeInsight.hint.*;
+import com.intellij.find.*;
+import com.intellij.lang.findUsages.*;
+import com.intellij.navigation.*;
+import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.diagnostic.*;
 import com.intellij.openapi.editor.Document;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.extensions.Extensions;
-import com.intellij.openapi.fileEditor.FileEditor;
-import com.intellij.openapi.fileEditor.FileEditorLocation;
-import com.intellij.openapi.fileEditor.TextEditor;
-import com.intellij.openapi.keymap.KeymapUtil;
-import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.progress.ProgressManager;
-import com.intellij.openapi.progress.Task;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.Messages;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.extensions.*;
+import com.intellij.openapi.fileEditor.*;
+import com.intellij.openapi.keymap.*;
+import com.intellij.openapi.progress.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.ui.*;
 import com.intellij.openapi.util.*;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.openapi.wm.StatusBar;
-import com.intellij.openapi.wm.WindowManager;
+import com.intellij.openapi.util.text.*;
+import com.intellij.openapi.wm.*;
 import com.intellij.psi.*;
-import com.intellij.psi.search.LocalSearchScope;
-import com.intellij.psi.search.SearchScope;
-import com.intellij.ui.LightweightHint;
+import com.intellij.psi.search.*;
+import com.intellij.ui.*;
 import com.intellij.ui.content.Content;
-import com.intellij.usageView.UsageInfo;
+import com.intellij.usageView.*;
 import com.intellij.usageView.UsageViewManager;
-import com.intellij.usageView.UsageViewUtil;
 import com.intellij.usages.*;
-import com.intellij.usages.impl.UsageViewManagerImpl;
-import com.intellij.util.Processor;
-import com.intellij.util.containers.ContainerUtil;
-import org.jdom.Element;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.usages.impl.*;
+import com.intellij.util.*;
+import com.intellij.util.containers.*;
+import org.jdom.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.atomic.AtomicInteger;
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.*;
 
 public class FindUsagesManager implements JDOMExternalizable {
   private static final Logger LOG = Logger.getInstance("#com.intellij.find.findParameterUsages.FindUsagesManager");
@@ -446,8 +430,7 @@ public class FindUsagesManager implements JDOMExternalizable {
   }
 
   private void clearStatusBar() {
-    StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject);
-    statusBar.setInfo("");
+    StatusBar.Info.set("", myProject);
   }
 
   private static String getSearchAgainMessage(PsiElement element, final FileSearchScope direction) {
@@ -481,8 +464,7 @@ public class FindUsagesManager implements JDOMExternalizable {
       showEditorHint(message, textEditor.getEditor());
     }
     else {
-      StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject);
-      statusBar.setInfo(message);
+      StatusBar.Info.set(message, myProject);
     }
   }
 
index 0c621b525bac6e4e1c9574e58c1a925112a92f31..d0f28ce7a50cb99d6801820297faefb1243590c5 100644 (file)
@@ -21,6 +21,7 @@ import com.intellij.ide.fileTemplates.FileTemplate;
 import com.intellij.ide.fileTemplates.FileTemplateManager;
 import com.intellij.ide.fileTemplates.InternalTemplateBean;
 import com.intellij.ide.plugins.IdeaPluginDescriptorImpl;
+import com.intellij.ide.plugins.cl.PluginClassLoader;
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.application.ApplicationNamesInfo;
 import com.intellij.openapi.application.PathManager;
@@ -788,11 +789,14 @@ public class FileTemplateManagerImpl extends FileTemplateManager implements Expo
 
       Set<VirtualFile> dirList = new THashSet<VirtualFile>();
 
-      appendDefaultTemplatesDirFromClassloader(FileTemplateManagerImpl.class.getClassLoader(), dirList);
       PluginDescriptor[] plugins = ApplicationManager.getApplication().getPlugins();
       for (PluginDescriptor plugin : plugins) {
         if (plugin instanceof IdeaPluginDescriptorImpl && ((IdeaPluginDescriptorImpl)plugin).isEnabled()) {
-          appendDefaultTemplatesDirFromClassloader(plugin.getPluginClassLoader(), dirList);
+          final ClassLoader loader = plugin.getPluginClassLoader();
+          if (loader instanceof PluginClassLoader && ((PluginClassLoader)loader).getUrls().isEmpty()) {
+            continue; // development mode, when IDEA_CORE's loader contains all the classpath
+          }
+          appendDefaultTemplatesDirFromClassloader(loader, dirList);
         }
       }
 
index 98b893f1c6d90e3f9fd6a1b9553e955cf8c697fc..7876b29fe6940f03b8a14b818d408336f64bb789 100644 (file)
 
 package com.intellij.openapi.wm.impl.status;
 
-import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
-import com.intellij.codeInsight.daemon.impl.HectorComponent;
-import com.intellij.codeInsight.daemon.impl.analysis.HighlightLevelUtil;
-import com.intellij.ide.DataManager;
-import com.intellij.openapi.actionSystem.PlatformDataKeys;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.fileEditor.FileEditorManager;
-import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.IconLoader;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.wm.StatusBar;
-import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiManager;
-import com.intellij.ui.UIBundle;
-import com.intellij.ui.awt.RelativePoint;
-import com.intellij.util.ui.EmptyIcon;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.codeInsight.daemon.*;
+import com.intellij.codeInsight.daemon.impl.*;
+import com.intellij.codeInsight.daemon.impl.analysis.*;
+import com.intellij.ide.*;
+import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.fileEditor.*;
+import com.intellij.openapi.fileEditor.ex.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.vfs.*;
+import com.intellij.openapi.wm.*;
+import com.intellij.profile.codeInspection.*;
+import com.intellij.psi.*;
+import com.intellij.ui.*;
+import com.intellij.ui.awt.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
 import java.awt.*;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
+import java.awt.event.*;
+
+public class TogglePopupHintsPanel implements StatusBarWidget, StatusBarWidget.IconPresentation {
+  private static final Icon INSPECTIONS_ICON = IconLoader.getIcon("/ide/hectorOn.png");
+  private static final Icon INSPECTIONS_OFF_ICON = IconLoader.getIcon("/ide/hectorOff.png");
+  private static final Icon EMPTY_ICON = IconLoader.getIcon("/ide/hectorNo.png");
+
+  private Icon myCurrentIcon;
+  private String myToolTipText;
+  private StatusBar myStatusBar;
+
+  public TogglePopupHintsPanel(@NotNull final Project project) {
+    myCurrentIcon = EMPTY_ICON;
+    project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerAdapter() {
+      @Override
+      public void selectionChanged(FileEditorManagerEvent event) {
+        updateStatus();
+      }
+
+      @Override
+      public void fileOpened(FileEditorManager source, VirtualFile file) {
+        updateStatus();
+      }
+    });
+  }
 
-public class TogglePopupHintsPanel extends JPanel implements StatusBarPatch{
-  private static final Icon INSPECTIONS_ICON = IconLoader.getIcon("/objectBrowser/showGlobalInspections.png");
-  private static final Icon INSPECTIONS_OFF_ICON = IconLoader.getIcon("/general/inspectionsOff.png");
-  private static final Icon EMPTY_ICON = new EmptyIcon(INSPECTIONS_ICON.getIconWidth(), INSPECTIONS_ICON.getIconHeight());
+  public void dispose() {
+  }
 
-  private final JLabel myHectorLabel = new JLabel(EMPTY_ICON);
+  @NotNull
+  public Icon getIcon() {
+    return myCurrentIcon;
+  }
 
-  public TogglePopupHintsPanel(final StatusBar statusBar) {
-    super(new GridBagLayout());
-    myHectorLabel.addMouseListener(new MouseAdapter() {
-      public void mouseClicked(MouseEvent e) {
+  public String getTooltipText() {
+    return myToolTipText;
+  }
+
+  public Consumer<MouseEvent> getClickConsumer() {
+    return new Consumer<MouseEvent>() {
+      public void consume(final MouseEvent e) {
         Point point = new Point(0, 0);
         final PsiFile file = getCurrentFile();
         if (file != null) {
@@ -59,33 +85,36 @@ public class TogglePopupHintsPanel extends JPanel implements StatusBarPatch{
           final HectorComponent component = new HectorComponent(file);
           final Dimension dimension = component.getPreferredSize();
           point = new Point(point.x - dimension.width, point.y - dimension.height);
-          component.showComponent(new RelativePoint(TogglePopupHintsPanel.this, point));
+          component.showComponent(new RelativePoint(e.getComponent(), point));
         }
       }
-    });
-    myHectorLabel.setIconTextGap(0);
-
-    add(myHectorLabel, new GridBagConstraints(0, 0, 1, 1, 0, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-
-    StatusBarTooltipper.install(this, myHectorLabel, statusBar);
+    };
   }
 
+  @NotNull
+  public String ID() {
+    return "InspectionProfile";
+  }
 
-
-  public JComponent getComponent() {
+  public Presentation getPresentation(@NotNull Type type) {
     return this;
   }
 
+  public void install(@NotNull final StatusBar statusBar) {
+    myStatusBar = statusBar;
+  }
+
   public String updateStatusBar(final Editor selected, final JComponent componentSelected) {
-    updateStatus();
-    String text = componentSelected == null ? null : componentSelected.getToolTipText();
-    setCursor(Cursor.getPredefinedCursor(text == null ? Cursor.DEFAULT_CURSOR : Cursor.HAND_CURSOR));
-    return text;
+    //updateStatus();
+    //String text = componentSelected == null ? null : componentSelected.getToolTipText();
+    //setCursor(Cursor.getPredefinedCursor(text == null ? Cursor.DEFAULT_CURSOR : Cursor.HAND_CURSOR));
+    return "";
   }
 
   public void clear() {
-    myHectorLabel.setIcon(EMPTY_ICON);
-    myHectorLabel.setToolTipText(null);
+    myCurrentIcon = EMPTY_ICON;
+    myToolTipText = null;
+    myStatusBar.updateWidget(ID());
   }
 
   public void updateStatus() {
@@ -94,21 +123,22 @@ public class TogglePopupHintsPanel extends JPanel implements StatusBarPatch{
 
   private void updateStatus(PsiFile file) {
     if (isStateChangeable(file)) {
-      String tooltip;
       if (HighlightLevelUtil.shouldInspect(file)) {
-        myHectorLabel.setIcon(INSPECTIONS_ICON);
-        tooltip =  "Current inspection profile: " + InspectionProjectProfileManager.getInstance(file.getProject()).getInspectionProfile().getName() + ". ";
+        myCurrentIcon = INSPECTIONS_ICON;
+        myToolTipText =  "Current inspection profile: " + InspectionProjectProfileManager.getInstance(file.getProject()).getInspectionProfile().getName() + ". ";
       }
       else {
-        myHectorLabel.setIcon(INSPECTIONS_OFF_ICON);
-        tooltip = "Inspections are off. ";
+        myCurrentIcon = INSPECTIONS_OFF_ICON;
+        myToolTipText = "Inspections are off. ";
       }
-      myHectorLabel.setToolTipText(tooltip + UIBundle.message("popup.hints.panel.click.to.configure.highlighting.tooltip.text"));
+      myToolTipText += UIBundle.message("popup.hints.panel.click.to.configure.highlighting.tooltip.text");
     }
     else {
-      myHectorLabel.setIcon(EMPTY_ICON);
-      myHectorLabel.setToolTipText(null);
+      myCurrentIcon = EMPTY_ICON;
+      myToolTipText = null;
     }
+
+    myStatusBar.updateWidget(ID());
   }
 
   private static boolean isStateChangeable(PsiFile file) {
@@ -131,10 +161,6 @@ public class TogglePopupHintsPanel extends JPanel implements StatusBarPatch{
 
   @Nullable
   private Project getCurrentProject() {
-    return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(this));
-  }
-
-  public Point getToolTipLocation(MouseEvent event) {
-    return new Point(0, -20);
+    return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext((Component) myStatusBar));
   }
 }
index d320a53b8622992911d4ed51bbf22879b68ceb31..04c6aa50b38142a73f2c8ac9b2ad614118afa323 100644 (file)
 
 package com.intellij.packageDependencies.ui;
 
-import com.intellij.CommonBundle;
-import com.intellij.analysis.AnalysisScope;
-import com.intellij.analysis.AnalysisScopeBundle;
-import com.intellij.analysis.PerformAnalysisInBackgroundOption;
-import com.intellij.codeInsight.hint.HintUtil;
-import com.intellij.ide.CommonActionsManager;
-import com.intellij.ide.ExporterToTextFile;
-import com.intellij.openapi.Disposable;
+import com.intellij.*;
+import com.intellij.analysis.*;
+import com.intellij.codeInsight.hint.*;
+import com.intellij.ide.*;
+import com.intellij.openapi.*;
 import com.intellij.openapi.actionSystem.*;
-import com.intellij.openapi.actionSystem.ex.ComboBoxAction;
-import com.intellij.openapi.components.PathMacroManager;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.extensions.Extensions;
-import com.intellij.openapi.help.HelpManager;
-import com.intellij.openapi.options.ShowSettingsUtil;
-import com.intellij.openapi.progress.ProgressManager;
-import com.intellij.openapi.project.DumbAware;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.ProjectFileIndex;
-import com.intellij.openapi.roots.ProjectRootManager;
-import com.intellij.openapi.ui.Messages;
-import com.intellij.openapi.ui.Splitter;
-import com.intellij.openapi.ui.popup.JBPopupFactory;
-import com.intellij.openapi.util.Disposer;
-import com.intellij.openapi.util.IconLoader;
-import com.intellij.openapi.util.JDOMUtil;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.wm.StatusBar;
-import com.intellij.openapi.wm.WindowManager;
+import com.intellij.openapi.actionSystem.ex.*;
+import com.intellij.openapi.components.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.extensions.*;
+import com.intellij.openapi.help.*;
+import com.intellij.openapi.options.*;
+import com.intellij.openapi.progress.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.roots.*;
+import com.intellij.openapi.ui.*;
+import com.intellij.openapi.ui.popup.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.util.text.*;
+import com.intellij.openapi.vfs.*;
+import com.intellij.openapi.wm.*;
 import com.intellij.packageDependencies.*;
-import com.intellij.packageDependencies.actions.AnalyzeDependenciesHandler;
-import com.intellij.packageDependencies.actions.BackwardDependenciesHandler;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiManager;
-import com.intellij.psi.search.scope.packageSet.NamedScope;
-import com.intellij.psi.search.scope.packageSet.PackageSet;
+import com.intellij.packageDependencies.actions.*;
+import com.intellij.psi.*;
+import com.intellij.psi.search.scope.packageSet.*;
 import com.intellij.ui.*;
 import com.intellij.ui.content.Content;
 import com.intellij.ui.treeStructure.Tree;
-import com.intellij.usageView.UsageViewBundle;
+import com.intellij.usageView.*;
 import com.intellij.util.*;
-import com.intellij.util.ui.UIUtil;
-import com.intellij.util.ui.tree.TreeUtil;
-import org.jdom.Document;
-import org.jdom.Element;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.util.ui.*;
+import com.intellij.util.ui.tree.*;
+import org.jdom.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreePath;
+import javax.swing.event.*;
+import javax.swing.tree.*;
 import java.awt.*;
 import java.util.*;
 import java.util.List;
@@ -177,16 +158,14 @@ public class DependenciesPanel extends JPanel implements Disposable, DataProvide
           PackageDependenciesNode selectedNode = (PackageDependenciesNode)path.getLastPathComponent();
           traverseToLeaves(selectedNode, denyRules, allowRules);
         }
-        final StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject);
         if (denyRules.length() + allowRules.length() > 0) {
-          statusBar.setInfo(AnalysisScopeBundle.message("status.bar.rule.violation.message",
+          StatusBar.Info.set(AnalysisScopeBundle.message("status.bar.rule.violation.message",
                                                         ((denyRules.length() == 0 || allowRules.length() == 0) ? 1 : 2),
                                                         (denyRules.length() > 0 ? denyRules.toString() + (allowRules.length() > 0 ? "; " : "") : " ") +
-                                                        (allowRules.length() > 0 ? allowRules.toString() : " ")));
-
+                                                        (allowRules.length() > 0 ? allowRules.toString() : " ")), myProject);
         }
         else {
-          statusBar.setInfo(AnalysisScopeBundle.message("status.bar.no.rule.violation.message"));
+          StatusBar.Info.set(AnalysisScopeBundle.message("status.bar.no.rule.violation.message"), myProject);
         }
       }
     });
index 2d383bc79d91f804a267694f52d39ee364e0e07d..c02a4763989bccb480429bac2e4ff77e34d00ae6 100644 (file)
  */
 package com.intellij.profile.codeInspection;
 
-import com.intellij.codeInsight.daemon.impl.SeverityRegistrar;
-import com.intellij.codeInsight.daemon.impl.analysis.HighlightingSettingsPerFile;
-import com.intellij.codeInspection.InspectionProfile;
-import com.intellij.codeInspection.ex.InspectionProfileImpl;
-import com.intellij.codeInspection.ex.InspectionProfileWrapper;
-import com.intellij.openapi.application.Application;
-import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.codeInsight.daemon.impl.*;
+import com.intellij.codeInsight.daemon.impl.analysis.*;
+import com.intellij.codeInspection.*;
+import com.intellij.codeInspection.ex.*;
+import com.intellij.openapi.application.*;
 import com.intellij.openapi.components.*;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.startup.StartupManager;
-import com.intellij.openapi.util.Disposer;
-import com.intellij.openapi.util.InvalidDataException;
-import com.intellij.openapi.util.WriteExternalException;
-import com.intellij.openapi.wm.WindowManager;
-import com.intellij.openapi.wm.ex.StatusBarEx;
-import com.intellij.openapi.wm.impl.status.TogglePopupHintsPanel;
-import com.intellij.openapi.Disposable;
-import com.intellij.packageDependencies.DependencyValidationManager;
-import com.intellij.profile.DefaultProjectProfileManager;
-import com.intellij.profile.Profile;
-import com.intellij.psi.PsiElement;
-import org.jdom.Element;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.startup.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.wm.*;
+import com.intellij.openapi.wm.ex.*;
+import com.intellij.openapi.wm.impl.status.*;
+import com.intellij.packageDependencies.*;
+import com.intellij.profile.*;
+import com.intellij.psi.*;
+import org.jdom.*;
+import org.jetbrains.annotations.*;
+
+import java.util.*;
 
 /**
  * User: anna
@@ -110,8 +100,6 @@ public class InspectionProjectProfileManager extends DefaultProjectProfileManage
     return getInspectionProfile();
   }
 
-
-
   public InspectionProfileWrapper getProfileWrapper(){
     final InspectionProfile profile = getInspectionProfile();
     final String profileName = profile.getName();
@@ -151,13 +139,8 @@ public class InspectionProjectProfileManager extends DefaultProjectProfileManage
 
   public void projectOpened() {
     myStatusBar = (StatusBarEx)WindowManager.getInstance().getStatusBar(myProject);
-    myTogglePopupHintsPanel = new TogglePopupHintsPanel(myStatusBar);
-    myStatusBar.addFileStatusComponent(myTogglePopupHintsPanel);
-    Disposer.register(myProject, new Disposable() {
-      public void dispose() {
-        myStatusBar.removeFileStatusComponent(myTogglePopupHintsPanel);
-      }
-    });
+    myTogglePopupHintsPanel = new TogglePopupHintsPanel(myProject);
+    myStatusBar.addWidget(myTogglePopupHintsPanel, myProject);
     StartupManager.getInstance(myProject).registerPostStartupActivity(new Runnable() {
       public void run() {
         final Set<Profile> profiles = new HashSet<Profile>();
index 28f3ed9b2a5c9f730612ad9493a191690fafd3ed..31cf488773e370255b65fca8d41b51e024465100 100644 (file)
  */
 package com.intellij.execution.process;
 
-import com.intellij.ide.IdeBundle;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Key;
-import com.intellij.openapi.wm.WindowManager;
-import org.jetbrains.annotations.NonNls;
+import com.intellij.ide.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.wm.*;
+import org.jetbrains.annotations.*;
 
 /**
  * @author dyoma
@@ -67,7 +67,7 @@ public class ProcessTerminatedListener extends ProcessAdapter {
     if (myProject != null) ApplicationManager.getApplication().invokeLater(new Runnable(){
       public void run() {
         if (myProject.isDisposed()) return;
-        WindowManager.getInstance().getStatusBar(myProject).setInfo(message);
+        StatusBar.Info.set(message, myProject);
       }
     });
   }
index d29f3bc140299848775e908e913a05db374e711c..1e0b655a107c52b65eb18339e541b1b547aac335 100644 (file)
  */
 package com.intellij.notification;
 
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.ui.popup.Balloon;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.ui.popup.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
-import java.lang.ref.WeakReference;
+import java.lang.ref.*;
 
 /**
  * @author spleaner
@@ -98,6 +97,13 @@ public class Notification {
   public void setBalloon(@Nullable final Balloon balloon) {
     if (balloon != null) {
       myBalloonRef = new WeakReference<Balloon>(balloon);
+    } else {
+      myBalloonRef = null;
     }
   }
+
+  @Nullable
+  public Balloon getBalloon() {
+    return myBalloonRef == null ? null : myBalloonRef.get();
+  }
 }
index 0780db7eb11286488018ec90fcc0d73f5f36642e..a6ad4140f6e29fa3d3c2c7b7193399ae0239ec92 100644 (file)
@@ -17,6 +17,7 @@
 package com.intellij.openapi.options;
 
 import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
@@ -26,6 +27,7 @@ import javax.swing.*;
  * Date: 08-Feb-2006
  */
 public interface SearchableConfigurable extends Configurable {
+  @NotNull
   @NonNls String getId();
 
   @Nullable Runnable enableSearch(String option);
similarity index 67%
rename from platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarPatch.java
rename to platform/platform-api/src/com/intellij/openapi/wm/CustomStatusBarWidget.java
index a6a32add40db2cc622f06283ebef74961bad8238..7bb8b840e481e8422fce652375d3db1d9e4e5674 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2010 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.intellij.openapi.wm.impl.status;
-
-import com.intellij.openapi.editor.Editor;
+package com.intellij.openapi.wm;
 
 import javax.swing.*;
 
 /**
- * @author cdr
+ * User: spLeaner
  */
-public interface StatusBarPatch {
-  JComponent getComponent();
+public interface CustomStatusBarWidget extends StatusBarWidget {
 
-  //returns updated tooltip/text
-  String updateStatusBar(Editor selected, final JComponent componentSelected);
+  JComponent getComponent();
 
-  void clear();
 }
index c6d6881fb4710293326c3e3428da9c6221055c73..0972e4a3f238b3c70974920a778da86b2c207de8 100644 (file)
  */
 package com.intellij.openapi.wm;
 
-import org.jetbrains.annotations.Nullable;
-import org.jetbrains.annotations.NotNull;
+import com.intellij.openapi.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.startup.*;
+import com.intellij.util.messages.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
 import java.awt.*;
 
-public interface StatusBar {
-  /**
-   * Set status bar text
-   * @param s text to be shown in the status bar
-   */
-  void setInfo(@Nullable String s);
+/**
+ * @author spleaner
+ */
+public interface StatusBar extends StatusBarInfo {
+  @SuppressWarnings({"AbstractClassNeverImplemented"})
+  abstract class Info implements StatusBarInfo {
+    public static final Topic<StatusBarInfo> TOPIC = Topic.create("IdeStatusBar.Text", StatusBarInfo.class);
 
-  /**
-   * Add arbitrary component indicating something related to status in the status bar. The component shall be
-   * small enough to keep visual status bar appearance metaphor.
-   * @param c - custom component to be added to the status bar.
-   */
-  void addCustomIndicationComponent(@NotNull JComponent c);
+    private Info() {}
+
+    public static void set(@Nullable final String text, @Nullable final Project project) {
+      if (project != null && !project.isInitialized() && !project.isDisposed()) {
+        StartupManager.getInstance(project).runWhenProjectIsInitialized(new Runnable() {
+           public void run() {
+             project.getMessageBus().syncPublisher(TOPIC).setInfo(text);
+           }
+         });
+        return;
+      }
+
+      final MessageBus bus = project == null ? ApplicationManager.getApplication().getMessageBus() : project.getMessageBus();
+      bus.syncPublisher(TOPIC).setInfo(text);
+    }
+  }
+
+  void addWidget(@NotNull StatusBarWidget widget);
+  void addWidget(@NotNull StatusBarWidget widget, @NotNull String anchor);
+  
+  void addWidget(@NotNull StatusBarWidget widget, @NotNull Disposable parentDisposable);
+  void addWidget(@NotNull StatusBarWidget widget, @NotNull String anchor, @NotNull Disposable parentDisposable);
 
   /**
-   * Shows animated notification popup.
-   * @param content Content of the notification
-   * @param backgroundColor background color for the notification. Be sure use light colors since bright onces
-   * look noisy. See {@link com.intellij.ui.LightColors} for convinient colors
+   * @deprecated use addWidget instead
    */
-  void fireNotificationPopup(@NotNull JComponent content, final Color backgroundColor);
-
+  @Deprecated
+  void addCustomIndicationComponent(@NotNull JComponent c);
   void removeCustomIndicationComponent(@NotNull JComponent c);
 
-  void startRefreshIndication(String tooltipText);
+  void removeWidget(@NotNull String id);
+  void updateWidget(@NotNull String id);
 
-  void stopRefreshIndication();
+  void fireNotificationPopup(@NotNull JComponent content, Color backgroundColor);
 }
index 662f066dae11657f1b0c45942279a055a77eb533..d61be79530268dfddeec84838d7b673cbfa954d4 100644 (file)
  */
 package com.intellij.openapi.wm;
 
-import com.intellij.openapi.extensions.ExtensionPointName;
-import org.jetbrains.annotations.NotNull;
+import com.intellij.openapi.extensions.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
-import java.util.EventListener;
+import java.util.*;
 
+/**
+ * @deprecated use StatusBarWidget instead
+ */
+@Deprecated
 public abstract class StatusBarCustomComponentFactory<T extends JComponent> implements EventListener {
   public static final ExtensionPointName<StatusBarCustomComponentFactory> EP_NAME = ExtensionPointName.create("com.intellij.statusBarComponent");
 
diff --git a/platform/platform-api/src/com/intellij/openapi/wm/StatusBarInfo.java b/platform/platform-api/src/com/intellij/openapi/wm/StatusBarInfo.java
new file mode 100644 (file)
index 0000000..61285dc
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2000-2010 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.openapi.wm;
+
+import org.jetbrains.annotations.*;
+
+/**
+ * User: spLeaner
+ */
+public interface StatusBarInfo {
+
+  /**
+   * Set status bar text
+   * @param s text to be shown in the status bar
+   */
+  void setInfo(@Nullable String s);
+  
+  String getInfo();
+}
diff --git a/platform/platform-api/src/com/intellij/openapi/wm/StatusBarWidget.java b/platform/platform-api/src/com/intellij/openapi/wm/StatusBarWidget.java
new file mode 100644 (file)
index 0000000..da7aef1
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2000-2010 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.openapi.wm;
+
+import com.intellij.openapi.*;
+import com.intellij.openapi.ui.popup.*;
+import com.intellij.openapi.util.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
+
+import javax.swing.*;
+import javax.swing.border.*;
+import java.awt.*;
+import java.awt.event.*;
+
+/**
+ * User: spLeaner
+ */
+public interface StatusBarWidget extends Disposable {
+
+  enum Type {
+    DEFAULT, MAC
+  }
+
+  interface Presentation {
+    @Nullable
+    String getTooltipText();
+
+    @Nullable
+    Consumer<MouseEvent> getClickConsumer();
+  }
+
+  interface IconPresentation extends Presentation {
+    @NotNull
+    Icon getIcon();
+  }
+
+  interface TextPresentation extends Presentation {
+    @NotNull
+    String getText();
+
+    @NotNull
+    String getMaxPossibleText();
+  }
+
+  interface MultipleTextValuesPresentation extends Presentation {
+    @NotNull
+    ListPopup getPopupStep();
+
+    @Nullable
+    String getSelectedValue();
+
+    @NotNull
+    String getMaxValue();
+  }
+
+  @NotNull
+  String ID();
+
+  @Nullable
+  Presentation getPresentation(@NotNull Type type);
+
+  void install(@NotNull final StatusBar statusBar);
+
+  class WidgetBorder implements Border {
+    public static final WidgetBorder INSTANCE = new WidgetBorder();
+
+    private static final Color TOP = new Color(227, 227, 227);
+    private static final Color LEFT1_FROM = new Color(161, 161, 161);
+    private static final Color LEFT1_TO = new Color(133, 133, 133);
+    private static final Color LEFT2_FROM = new Color(220, 220, 220);
+    private static final Color LEFT2_TO = new Color(184, 184, 184);
+    private static final Color LEFT1_FROM_INACTIVE = new Color(190, 190, 190);
+    private static final Color PIXEL = LEFT1_FROM_INACTIVE;
+    private static final Color LEFT1_TO_INACTIVE = new Color(180, 180, 180);
+
+    private static final Color SEPARATOR_COLOR = new Color(215, 215, 215);
+
+    public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) {
+      final Graphics2D g2 = (Graphics2D)g.create();
+      if (SystemInfo.isMac) {
+        final Window window = SwingUtilities.getWindowAncestor(c);
+        if (window != null && window.isActive()) {
+          g2.setPaint(new GradientPaint(0, 0, LEFT1_FROM, 0, height, LEFT1_TO));
+          g2.drawLine(x, y, x, y + height);
+
+          g2.setPaint(new GradientPaint(0, 0, LEFT2_FROM, 0, height, LEFT2_TO));
+          g2.drawLine(x + 1, y, x + 1, y + height);
+
+          g2.setColor(PIXEL);
+          g2.drawLine(x, y, x, y);
+
+          g2.setColor(TOP);
+          g2.drawLine(x + 2, y, x + width - 2, y);
+        }
+        else {
+          g2.setPaint(new GradientPaint(0, 0, LEFT1_FROM_INACTIVE, 0, height, LEFT1_TO_INACTIVE));
+          g2.drawLine(x, y, x, y + height);
+        }
+      } else {
+        g2.setColor(SEPARATOR_COLOR);
+        g2.drawLine(x, y, x, y + height);
+      }
+
+      g2.dispose();
+    }
+
+    public Insets getBorderInsets(Component c) {
+      return new Insets(2, SystemInfo.isMac ? 4 : 4, 2, 2);
+    }
+
+    public boolean isBorderOpaque() {
+      return false;
+    }
+  }
+}
diff --git a/platform/platform-api/src/com/intellij/ui/StatusBarInformer.java b/platform/platform-api/src/com/intellij/ui/StatusBarInformer.java
deleted file mode 100644 (file)
index c10526f..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2000-2009 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.intellij.ui;
-
-import com.intellij.openapi.wm.StatusBar;
-import com.intellij.openapi.wm.IdeFrame;
-
-import javax.swing.*;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.*;
-
-import org.jetbrains.annotations.Nullable;
-
-public class StatusBarInformer {
-
-  private String myText;
-  private StatusBar myStatusBar;
-  private JComponent myComponent;
-
-  public StatusBarInformer(final JComponent component, String text) {
-    this(component, text, null);
-  }
-
-  public StatusBarInformer(final JComponent component, String text, StatusBar statusBar) {
-    myText = text;
-    myStatusBar = statusBar;
-    myComponent = component;
-    myComponent.addMouseListener(new MouseAdapter() {
-      public void mouseEntered(final MouseEvent e) {
-        final StatusBar bar = getStatusBar();
-        final String text = getText();
-        if (bar != null) {
-          bar.setInfo(text);
-        }
-        myComponent.setToolTipText(text);
-      }
-
-      public void mouseExited(final MouseEvent e) {
-        final StatusBar bar = getStatusBar();
-        if (bar != null) {
-          bar.setInfo(null);
-        }
-        myComponent.setToolTipText(null);
-      }
-    });
-  }
-
-  @Nullable
-  protected String getText() {
-    return myText;
-  }
-
-  @Nullable
-  protected StatusBar getStatusBar() {
-    if (myStatusBar != null) return myStatusBar;
-    final Window window = SwingUtilities.getWindowAncestor(myComponent);
-    if (window instanceof IdeFrame) {
-      return ((IdeFrame)window).getStatusBar();
-    }
-    return null;
-  }
-}
index b1c4a46625baf85f4a74a562376b7da8c9e8164a..9eb23857245028213c9c6e6a4e8f5215c0274877 100644 (file)
  */
 package com.intellij.ui.components.labels;
 
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.project.ProjectManager;
-import com.intellij.openapi.util.IconLoader;
-import com.intellij.openapi.wm.WindowManager;
-import com.intellij.openapi.wm.StatusBar;
-import com.intellij.ui.UI;
-import com.intellij.util.ui.UIUtil;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.wm.*;
+import com.intellij.ui.*;
+import com.intellij.util.ui.*;
 
 import javax.swing.*;
-import javax.swing.border.Border;
+import javax.swing.border.*;
 import java.awt.*;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseMotionListener;
-import java.util.HashSet;
-import java.util.Set;
+import java.awt.event.*;
+import java.util.*;
 
 /**
  * @author kir
@@ -246,14 +241,11 @@ public class LinkLabel extends JLabel {
     setActive(false);
   }
 
-  private void setStatusBarText(String statusBarText) {
+  private static void setStatusBarText(String statusBarText) {
     if (ApplicationManager.getApplication() == null) return; // makes this component work in UIDesigner preview.
     final Project[] projects = ProjectManager.getInstance().getOpenProjects();
     for (Project project : projects) {
-      final StatusBar bar = WindowManager.getInstance().getStatusBar(project);
-      if (bar != null) {
-        bar.setInfo(statusBarText);
-      }
+      StatusBar.Info.set(statusBarText, project);
     }
   }
 
index 72144f1242a1c50a10148bfffeb087f88735245b..2fba827b999525e7689eb44ddddcbab5ffb3d9d6 100644 (file)
@@ -16,7 +16,7 @@
 
 package com.intellij.util.ui;
 
-import com.intellij.openapi.Disposable;
+import com.intellij.openapi.*;
 
 import javax.swing.*;
 import java.awt.*;
@@ -186,6 +186,9 @@ public abstract class AnimatedIcon extends JComponent implements Disposable {
     return myPaintPassive ? myPassiveIcon : myEmptyPassiveIcon;
   }
 
+  public boolean isRunning() {
+    return myAnimator.isRunning();
+  }
 
   public boolean isAnimated() {
     return true;
index d833ef360c87f9aba925e4022144dbcba3b0f546..fb63a9a7f551f24bd6328cc0a859bc5afbcb1456 100644 (file)
  */
 package com.intellij.diagnostic;
 
-import com.intellij.concurrency.JobScheduler;
-import com.intellij.ide.util.PropertiesComponent;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.util.IconLoader;
-import com.intellij.openapi.wm.impl.status.StatusBarPatch;
-import com.intellij.ui.LightColors;
-import com.intellij.ui.popup.NotificationPopup;
+import com.intellij.concurrency.*;
+import com.intellij.ide.util.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.wm.*;
+import com.intellij.ui.*;
+import com.intellij.ui.popup.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
 import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.concurrent.TimeUnit;
+import java.awt.event.*;
+import java.util.concurrent.*;
 
-public class IdeMessagePanel extends JPanel implements MessagePoolListener, StatusBarPatch {
+public class IdeMessagePanel extends JPanel implements MessagePoolListener, CustomStatusBarWidget {
   private final IconPane myIdeFatal;
 
   private final IconPane[] myIcons;
@@ -42,11 +39,12 @@ public class IdeMessagePanel extends JPanel implements MessagePoolListener, Stat
   private boolean myOpeningInProgress;
   private final MessagePool myMessagePool;
   private boolean myNotificationPopupAlreadyShown = false;
-  private final Icon myIcon = IconLoader.getIcon("/general/ideFatalError.png");
+  private final Icon myIcon = IconLoader.getIcon("/ide/fatalError.png");
+  private final Icon myEmptyIcon = IconLoader.getIcon("/ide/emptyFatalError.png");
 
   public IdeMessagePanel(MessagePool messagePool) {
     super(new BorderLayout());
-    myIdeFatal = new IconPane(myIcon,
+    myIdeFatal = new IconPane(myIcon, myEmptyIcon,
                               DiagnosticBundle.message("error.notification.empty.text"), new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         openFatals();
@@ -63,18 +61,27 @@ public class IdeMessagePanel extends JPanel implements MessagePoolListener, Stat
 
     JobScheduler.getScheduler().scheduleAtFixedRate(new Blinker(), (long)1, (long)1, TimeUnit.SECONDS);
     updateFatalErrorsIcon();
+
+    setOpaque(false);
   }
 
-  public JComponent getComponent() {
-    return this;
+  @NotNull
+  public String ID() {
+    return "FatalError";
   }
 
-  public String updateStatusBar(final Editor selected, final JComponent componentSelected) {
+  public Presentation getPresentation(@NotNull Type type) {
     return null;
   }
 
-  public void clear() {
+  public void dispose() {
+  }
 
+  public void install(@NotNull StatusBar statusBar) {
+  }
+
+  public JComponent getComponent() {
+    return this;
   }
 
   private void openFatals() {
@@ -222,12 +229,14 @@ public class IdeMessagePanel extends JPanel implements MessagePoolListener, Stat
     private boolean myIsActive;
     private final ActionListener myListener;
 
-    public IconPane(Icon aIcon, String aEmptyText, ActionListener aListener) {
-      myIcon = new IconWrapper(aIcon);
+    public IconPane(Icon aIcon, Icon offIcon, String aEmptyText, ActionListener aListener) {
+      myIcon = new IconWrapper(aIcon, offIcon);
       myEmptyText = aEmptyText;
       myListener = aListener;
       setIcon(myIcon);
 
+      setBorder(BorderFactory.createEmptyBorder(0, 1, 0, 1));
+
       addMouseListener(new MouseAdapter() {
         public void mouseClicked(MouseEvent e) {
           if (myIsActive) {
@@ -268,9 +277,11 @@ public class IdeMessagePanel extends JPanel implements MessagePoolListener, Stat
     private final Icon myIcon;
     private boolean myEnabled;
     private boolean myShouldPaint = true;
+    private Icon myOffIcon;
 
-    public IconWrapper(Icon aIcon) {
+    public IconWrapper(Icon aIcon, Icon offIcon) {
       myIcon = aIcon;
+      myOffIcon = offIcon;
     }
 
     public void setIconPainted(boolean aPainted) {
@@ -288,6 +299,8 @@ public class IdeMessagePanel extends JPanel implements MessagePoolListener, Stat
     public void paintIcon(Component c, Graphics g, int x, int y) {
       if (myEnabled && myShouldPaint) {
         myIcon.paintIcon(c, g, x, y);
+      } else if (myOffIcon != null) {
+        myOffIcon.paintIcon(c, g, x, y);
       }
     }
 
index ea6282d016e407591841acd2ab8334ed6f2e3267..d0a2f8b9b8c1693b570fe354b16525ee3c5b4f8c 100644 (file)
  */
 package com.intellij.ide.util;
 
-import com.intellij.ide.IdeBundle;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.LogicalPosition;
-import com.intellij.openapi.editor.ScrollType;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.DialogWrapper;
+import com.intellij.ide.*;
+import com.intellij.openapi.application.ex.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.ui.*;
 
 import javax.swing.*;
 import java.awt.*;
 
 public class GotoLineNumberDialog extends DialogWrapper {
-  private JLabel myLabel;
   private JTextField myField;
+  private JTextField myOffsetField;
   private final Editor myEditor;
 
   public GotoLineNumberDialog(Project project, Editor editor){
@@ -40,6 +39,22 @@ public class GotoLineNumberDialog extends DialogWrapper {
   protected void doOKAction(){
     final LogicalPosition currentPosition = myEditor.getCaretModel().getLogicalPosition();
     int lineNumber = getLineNumber(currentPosition.line + 1);
+    if (isInternal() && myOffsetField.getText().length() > 0) {
+      try {
+        final int offset = Integer.parseInt(myOffsetField.getText());
+        if (offset < myEditor.getDocument().getTextLength()) {
+          myEditor.getCaretModel().moveToOffset(offset);
+          myEditor.getScrollingModel().scrollToCaret(ScrollType.CENTER);
+          myEditor.getSelectionModel().removeSelection();
+          super.doOKAction();
+        }
+        return;
+      }
+      catch (NumberFormatException e) {
+        return;
+      }
+    }
+
     if (lineNumber <= 0) return;
 
     int columnNumber = getColumnNumber(currentPosition.column);
@@ -76,6 +91,10 @@ public class GotoLineNumberDialog extends DialogWrapper {
     }
   }
 
+  private static boolean isInternal() {
+    return ApplicationManagerEx.getApplicationEx().isInternal();
+  }
+
   public JComponent getPreferredFocusedComponent() {
     return myField;
   }
@@ -108,8 +127,8 @@ public class GotoLineNumberDialog extends DialogWrapper {
     gbConstraints.weightx = 0;
     gbConstraints.weighty = 1;
     gbConstraints.anchor = GridBagConstraints.EAST;
-    myLabel = new JLabel(IdeBundle.message("editbox.line.number"));
-    panel.add(myLabel, gbConstraints);
+    JLabel label = new JLabel(IdeBundle.message("editbox.line.number"));
+    panel.add(label, gbConstraints);
 
     gbConstraints.fill = GridBagConstraints.BOTH;
     gbConstraints.weightx = 1;
@@ -117,6 +136,20 @@ public class GotoLineNumberDialog extends DialogWrapper {
     panel.add(myField, gbConstraints);
     myField.setToolTipText(IdeBundle.message("tooltip.syntax.linenumber.columnnumber"));
 
+    if (isInternal()) {
+      gbConstraints.gridy = 1;
+      gbConstraints.weightx = 0;
+      gbConstraints.weighty = 1;
+      gbConstraints.anchor = GridBagConstraints.EAST;
+      final JLabel offsetLabel = new JLabel("Offset:");
+      panel.add(offsetLabel, gbConstraints);
+
+      gbConstraints.fill = GridBagConstraints.BOTH;
+      gbConstraints.weightx = 1;
+      myOffsetField = new MyTextField();
+      panel.add(myOffsetField, gbConstraints);
+    }
+
     return panel;
   }
 }
index b217777b66cef5502193d546d746b7c78e558082..1b53b9dda8f988493c57cd3082789a6c744ac30c 100644 (file)
  */
 package com.intellij.notification.impl;
 
-import com.intellij.ide.DataManager;
-import com.intellij.notification.impl.ui.NotificationComponent;
-import com.intellij.openapi.actionSystem.PlatformDataKeys;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.wm.impl.status.StatusBarImpl;
-import com.intellij.openapi.wm.impl.status.StatusBarPatch;
-import com.intellij.openapi.wm.impl.status.StatusBarTooltipper;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.ide.*;
+import com.intellij.notification.*;
+import com.intellij.notification.impl.ui.*;
+import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.ui.popup.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.wm.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.lang.ref.*;
 
 /**
  * @author spleaner
  */
-public class IdeNotificationArea implements StatusBarPatch {
-  private final NotificationComponent myNotificationComponent;
+public class IdeNotificationArea implements StatusBarWidget, StatusBarWidget.IconPresentation, NotificationModelListener {
+  private static final Icon EMPTY_ICON = IconLoader.getIcon("/ide/notifications.png");
+  private static final Icon ERROR_ICON = IconLoader.getIcon("/ide/error_notifications.png");
+  private static final Icon WARNING_ICON = IconLoader.getIcon("/ide/warning_notifications.png");
+  private static final Icon INFO_ICON = IconLoader.getIcon("/ide/info_notifications.png");
 
-  public IdeNotificationArea(final StatusBarImpl statusBar) {
-    myNotificationComponent = new NotificationComponent(this);
+  private WeakReference<JBPopup> myPopupRef;
+  private Icon myCurrentIcon = EMPTY_ICON;
+  private StatusBar myStatusBar;
 
-    StatusBarTooltipper.install(this, statusBar);
+  public IdeNotificationArea() {
   }
 
-  public JComponent getComponent() {
-    return myNotificationComponent;
+  public Presentation getPresentation(@NotNull Type type) {
+    return this;
+  }
+
+  public void dispose() {
+    getManager().removeListener(this); // clean up
+    cancelPopup();
+  }
+
+  public void install(@NotNull StatusBar statusBar) {
+    myStatusBar = statusBar;
+    getManager().addListener(this);
+  }
+
+  private void cancelPopup() {
+    if (myPopupRef != null) {
+      final JBPopup popup = myPopupRef.get();
+      if (popup != null) {
+        popup.cancel();
+      }
+
+      myPopupRef = null;
+    }
   }
 
   @Nullable
-  public String updateStatusBar(final Editor selected, final JComponent componentSelected) {
+  private Project getProject() {
+    return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext((Component) myStatusBar));
+  }
+
+  public Consumer<MouseEvent> getClickConsumer() {
+    return new Consumer<MouseEvent>() {
+      public void consume(MouseEvent mouseEvent) {
+        toggleList();
+      }
+    };
+  }
+
+  private static NotificationsManagerImpl getManager() {
+    return NotificationsManagerImpl.getNotificationsManagerImpl();
+  }
+
+  private void toggleList() {
+    JBPopup popup = null;
+    if (myPopupRef != null) {
+      popup = myPopupRef.get();
+      myPopupRef = null;
+    }
+
+    if (popup != null && popup.isVisible()) {
+      popup.cancel();
+    } else {
+      myPopupRef = new WeakReference<JBPopup>(NotificationsListPanel.show(getProject(), (JComponent) myStatusBar));
+    }
+  }
+
+  @NotNull
+  public Icon getIcon() {
+    return myCurrentIcon;
+  }
+
+  public String getTooltipText() {
     final NotificationsManagerImpl manager = NotificationsManagerImpl.getNotificationsManagerImpl();
     if (manager.hasNotifications(getProject())) {
       final int count = manager.count(getProject());
       return String.format("%s notification%s pending", count, count == 1 ? "" : "s");
     }
 
-    return null;
+    return "No new notifications";
   }
 
-  public void clear() {
+  @NotNull
+  public String ID() {
+    return "Notifications";
   }
 
-  @Nullable
-  public Project getProject() {
-    return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(myNotificationComponent));
+  public void updateStatus() {
+    final NotificationsManagerImpl manager = getManager();
+
+    Icon icon = EMPTY_ICON;
+    final NotificationType maximumType = manager.getMaximumType(getProject());
+    if (maximumType != null) {
+      switch (maximumType) {
+        case WARNING:
+          icon = WARNING_ICON;
+          break;
+        case ERROR:
+          icon = ERROR_ICON;
+          break;
+        case INFORMATION:
+        default:
+          icon = INFO_ICON;
+          break;
+      }
+    }
+
+    myCurrentIcon = icon;
+    if (manager.count(getProject()) == 0) {
+      cancelPopup();
+    }
+
+    myStatusBar.updateWidget(ID());
+  }
+
+  public void notificationsAdded(@NotNull final Notification... notifications) {
+    SwingUtilities.invokeLater(new Runnable() {
+      public void run() {
+        updateStatus();
+      }
+    });
+  }
+
+  public void notificationsRead(@NotNull Notification... notification) {
+    SwingUtilities.invokeLater(new Runnable() {
+      public void run() {
+        updateStatus();
+      }
+    });
+  }
+
+  @SuppressWarnings({"SSBasedInspection"})
+  public void notificationsRemoved(@NotNull final Notification... notifications) {
+    SwingUtilities.invokeLater(new Runnable() {
+      public void run() {
+        updateStatus();
+      }
+    });
   }
 }
index f7f4f6bbbcf3527bf87fb5b09b4d1828c54b29af..1cdbd388400cd5dab2b7cf0cd28397211bdfdff3 100644 (file)
 package com.intellij.notification.impl;
 
 import com.intellij.notification.*;
-import com.intellij.notification.impl.ui.NotificationsUtil;
-import com.intellij.openapi.Disposable;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.components.ApplicationComponent;
-import com.intellij.openapi.components.ServiceManager;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.popup.Balloon;
-import com.intellij.openapi.ui.popup.BalloonBuilder;
-import com.intellij.openapi.ui.popup.JBPopupFactory;
-import com.intellij.openapi.util.Disposer;
-import com.intellij.openapi.wm.WindowManager;
-import com.intellij.openapi.wm.impl.IdeFrameImpl;
-import com.intellij.ui.BalloonLayout;
-import com.intellij.ui.SystemNotifications;
-import com.intellij.ui.components.panels.NonOpaquePanel;
-import com.intellij.util.ArrayUtil;
-import com.intellij.util.PairFunction;
-import com.intellij.util.ui.UIUtil;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.notification.impl.ui.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.components.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.ui.popup.*;
+import com.intellij.openapi.wm.*;
+import com.intellij.openapi.wm.impl.*;
+import com.intellij.ui.*;
+import com.intellij.ui.components.panels.*;
+import com.intellij.util.*;
+import com.intellij.util.ui.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
-import javax.swing.border.EmptyBorder;
-import javax.swing.event.HyperlinkListener;
+import javax.swing.border.*;
+import javax.swing.event.*;
 import java.awt.*;
-import java.util.ArrayList;
-import java.util.Collection;
+import java.util.*;
 import java.util.List;
 
 /**
@@ -193,6 +184,13 @@ public class NotificationsManagerImpl extends NotificationsManager implements No
     }
 
     final Balloon balloon = builder.createBalloon();
+    balloon.addListener(new JBPopupAdapter() {
+      @Override
+      public void onClosed(LightweightWindowEvent event) {
+        notification.setBalloon(null);
+      }
+    });
+
     notification.setBalloon(balloon);
 
     final Runnable show = new Runnable() {
@@ -209,13 +207,6 @@ public class NotificationsManagerImpl extends NotificationsManager implements No
         if (window instanceof IdeFrameImpl) {
           final BalloonLayout balloonLayout = ((IdeFrameImpl)window).getBalloonLayout();
           balloonLayout.add(balloon);
-          if (project != null) {
-            Disposer.register(project, new Disposable() {
-              public void dispose() {
-                balloon.hide();
-              }
-            });
-          }
         }
       }
     };
index 2b9270b43267fc94eeedab26fb8c17440079b0ba..2920f3cdb7f00487307fd561c0e24666137fd1b1 100644 (file)
  */
 package com.intellij.notification.impl;
 
-import com.intellij.notification.Notifications;
-import com.intellij.notification.Notification;
-import com.intellij.notification.NotificationDisplayType;
-import com.intellij.openapi.application.Application;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.components.ProjectComponent;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Disposer;
-import com.intellij.openapi.Disposable;
-import org.jetbrains.annotations.NotNull;
+import com.intellij.notification.*;
+import com.intellij.openapi.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.components.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.ui.popup.*;
+import com.intellij.openapi.util.*;
+import org.jetbrains.annotations.*;
+
+import java.util.*;
 
 /**
  * @author spleaner
@@ -58,6 +58,11 @@ public class ProjectNotificationsComponent implements Notifications, ProjectComp
   }
 
   public void projectClosed() {
+    final Collection<Notification> collection = NotificationsManagerImpl.getNotificationsManagerImpl().getByType(null, myProject);
+    for (final Notification notification : collection) {
+      final Balloon balloon = notification.getBalloon();
+      if (balloon != null) balloon.hide();
+    }
   }
 
   private static boolean isDummyEnvironment() {
diff --git a/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationComponent.java b/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationComponent.java
deleted file mode 100644 (file)
index da70c98..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright 2000-2009 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.intellij.notification.impl.ui;
-
-import com.intellij.concurrency.JobScheduler;
-import com.intellij.notification.Notification;
-import com.intellij.notification.NotificationType;
-import com.intellij.notification.impl.*;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.popup.JBPopup;
-import com.intellij.openapi.util.IconLoader;
-import com.intellij.util.ui.UIUtil;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.image.BufferedImage;
-import java.lang.ref.WeakReference;
-import java.util.concurrent.TimeUnit;
-
-/**
- * @author spleaner
- */
-public class NotificationComponent extends JLabel implements NotificationModelListener {
-  private static final Icon EMPTY_ICON = IconLoader.getIcon("/ide/notifications.png");
-  private static final Icon READ_ICON = IconLoader.getIcon("/ide/read_notifications.png");
-  private static final Icon ERROR_ICON = IconLoader.getIcon("/ide/error_notifications.png");
-  private static final Icon WARNING_ICON = IconLoader.getIcon("/ide/warning_notifications.png");
-  private static final Icon INFO_ICON = IconLoader.getIcon("/ide/info_notifications.png");
-
-  private WeakReference<JBPopup> myPopupRef;
-
-  private BlinkIconWrapper myCurrentIcon;
-  private final boolean myBlinkIcon = true;
-  private final IdeNotificationArea myArea;
-
-  public NotificationComponent(@NotNull final IdeNotificationArea area) {
-    myArea = area;
-
-    addMouseListener(new MouseAdapter() {
-      @Override
-      public void mousePressed(final MouseEvent e) {
-        if (UIUtil.isActionClick(e)) {
-          toggleList();
-        }
-      }
-    });
-
-    myCurrentIcon = new BlinkIconWrapper(EMPTY_ICON, false);
-    setIcon(myCurrentIcon);
-
-    JobScheduler.getScheduler().scheduleAtFixedRate(new IconBlinker(), (long)1, (long)1, TimeUnit.SECONDS);
-  }
-
-  private static NotificationsManagerImpl getManager() {
-    return NotificationsManagerImpl.getNotificationsManagerImpl();
-  }
-
-  @Override
-  public void removeNotify() {
-    getManager().removeListener(this); // clean up
-
-    cancelPopup();
-    super.removeNotify();
-  }
-
-  private void cancelPopup() {
-    if (myPopupRef != null) {
-      final JBPopup popup = myPopupRef.get();
-      if (popup != null) {
-        popup.cancel();
-      }
-
-      myPopupRef = null;
-    }
-  }
-
-  public void addNotify() {
-    super.addNotify();
-
-    getManager().addListener(this);
-  }
-
-  private void toggleList() {
-    JBPopup popup = null;
-    if (myPopupRef != null) {
-      popup = myPopupRef.get();
-      myPopupRef = null;
-    }
-
-    if (popup != null && popup.isVisible()) {
-      popup.cancel();
-    } else {
-      myPopupRef = new WeakReference<JBPopup>(NotificationsListPanel.show(getProject(), this));
-    }
-  }
-
-  public void updateStatus() {
-    final NotificationsManagerImpl manager = getManager();
-
-    Icon icon = EMPTY_ICON;
-    final NotificationType maximumType = manager.getMaximumType(getProject());
-    if (maximumType != null) {
-      switch (maximumType) {
-        case WARNING:
-          icon = WARNING_ICON;
-          break;
-        case ERROR:
-          icon = ERROR_ICON;
-          break;
-        case INFORMATION:
-        default:
-          icon = INFO_ICON;
-          break;
-      }
-    }
-
-    myCurrentIcon = new BlinkIconWrapper(icon, false);
-    setIcon(myCurrentIcon);
-
-    if (manager.count(getProject()) == 0) {
-      cancelPopup();
-    }
-
-    repaint();
-  }
-
-  @Nullable
-  public Project getProject() {
-    return myArea.getProject();
-  }
-
-  @SuppressWarnings({"SSBasedInspection"})
-  public void notificationsAdded(@NotNull final Notification... notifications) {
-    SwingUtilities.invokeLater(new Runnable() {
-      public void run() {
-        updateStatus();
-      }
-    });
-  }
-
-  public void notificationsRead(@NotNull Notification... notification) {
-    SwingUtilities.invokeLater(new Runnable() {
-      public void run() {
-        updateStatus();
-      }
-    });
-  }
-
-  @SuppressWarnings({"SSBasedInspection"})
-  public void notificationsRemoved(@NotNull final Notification... notifications) {
-    SwingUtilities.invokeLater(new Runnable() {
-      public void run() {
-        updateStatus();
-      }
-    });
-  }
-
-  private void blinkIcon(boolean visible) {
-    myCurrentIcon.setPaint(visible);
-  }
-
-  private class IconBlinker implements Runnable {
-    private boolean myVisible;
-
-    public void run() {
-      myVisible = !myVisible;
-      blinkIcon(myVisible);
-    }
-  }
-
-  private class BlinkIconWrapper implements Icon {
-    private final Icon myOriginal;
-    private boolean myPaint;
-    private final boolean myBlink;
-    private BufferedImage myGrayscaleImage;
-
-    private BlinkIconWrapper(@NotNull final Icon original, final boolean blink) {
-      myOriginal = original;
-      myBlink = blink;
-    }
-
-    public void setPaint(final boolean paint) {
-      if (paint != myPaint) {
-        SwingUtilities.invokeLater(new Runnable() {
-          public void run() {
-            repaint();
-          }
-        });
-      }
-
-      myPaint = paint;
-    }
-
-    public void paintIcon(Component c, Graphics g, int x, int y) {
-      if (!myBlinkIcon) {
-        if (myGrayscaleImage == null) {
-          myGrayscaleImage = new BufferedImage(myOriginal.getIconWidth(), myOriginal.getIconHeight(), BufferedImage.TYPE_BYTE_GRAY);
-          final Graphics2D gi = myGrayscaleImage.createGraphics();
-
-          gi.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f));
-
-          myOriginal.paintIcon(c, gi, 0, 0);
-          gi.dispose();
-        }
-
-        g.drawImage(myGrayscaleImage, x, y, null);
-      }
-      else if (!myBlink || !myPaint) {
-        myOriginal.paintIcon(c, g, x, y);
-      }
-    }
-
-    public int getIconWidth() {
-      return myOriginal.getIconWidth();
-    }
-
-    public int getIconHeight() {
-      return myOriginal.getIconHeight();
-    }
-  }
-}
index 72699885e6f7aa6518f358a68876d919a814829c..ae9c89fc0cef3a9ed3ff96c20f8c67e4368e3dd8 100644 (file)
  */
 package com.intellij.openapi.fileEditor.impl;
 
-import com.intellij.AppTopics;
-import com.intellij.ProjectTopics;
-import com.intellij.ide.IdeBundle;
-import com.intellij.ide.plugins.PluginManager;
-import com.intellij.ide.ui.UISettings;
-import com.intellij.ide.ui.UISettingsListener;
-import com.intellij.injected.editor.VirtualFileWindow;
-import com.intellij.openapi.Disposable;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.application.ModalityState;
-import com.intellij.openapi.application.ex.ApplicationManagerEx;
-import com.intellij.openapi.application.impl.LaterInvocator;
+import com.intellij.*;
+import com.intellij.ide.*;
+import com.intellij.ide.plugins.*;
+import com.intellij.ide.ui.*;
+import com.intellij.injected.editor.*;
+import com.intellij.openapi.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.application.ex.*;
+import com.intellij.openapi.application.impl.*;
 import com.intellij.openapi.command.CommandProcessor;
-import com.intellij.openapi.components.ProjectComponent;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.ex.EditorEx;
-import com.intellij.openapi.extensions.Extensions;
+import com.intellij.openapi.components.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.editor.ex.*;
+import com.intellij.openapi.extensions.*;
 import com.intellij.openapi.fileEditor.*;
-import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
-import com.intellij.openapi.fileEditor.ex.FileEditorProviderManager;
-import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory;
-import com.intellij.openapi.fileEditor.impl.text.TextEditorImpl;
-import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
-import com.intellij.openapi.fileTypes.FileTypeEvent;
-import com.intellij.openapi.fileTypes.FileTypeListener;
-import com.intellij.openapi.project.DumbAware;
-import com.intellij.openapi.project.DumbAwareRunnable;
-import com.intellij.openapi.project.DumbService;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.project.impl.ProjectImpl;
-import com.intellij.openapi.roots.ModuleRootEvent;
-import com.intellij.openapi.roots.ModuleRootListener;
-import com.intellij.openapi.startup.StartupManager;
+import com.intellij.openapi.fileEditor.FileEditorProvider;
+import com.intellij.openapi.fileEditor.ex.*;
+import com.intellij.openapi.fileEditor.impl.text.*;
+import com.intellij.openapi.fileTypes.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.project.impl.*;
+import com.intellij.openapi.roots.*;
+import com.intellij.openapi.startup.*;
 import com.intellij.openapi.util.*;
-import com.intellij.openapi.vcs.FileStatus;
-import com.intellij.openapi.vcs.FileStatusListener;
-import com.intellij.openapi.vcs.FileStatusManager;
+import com.intellij.openapi.vcs.*;
 import com.intellij.openapi.vfs.*;
-import com.intellij.openapi.wm.ToolWindowManager;
-import com.intellij.openapi.wm.WindowManager;
-import com.intellij.openapi.wm.ex.StatusBarEx;
-import com.intellij.openapi.wm.ex.WindowManagerEx;
-import com.intellij.openapi.wm.impl.FrameTitleBuilder;
-import com.intellij.openapi.wm.impl.IdeFrameImpl;
-import com.intellij.util.containers.ContainerUtil;
-import com.intellij.util.messages.MessageBusConnection;
-import com.intellij.util.messages.impl.MessageListenerList;
-import com.intellij.util.ui.update.MergingUpdateQueue;
-import com.intellij.util.ui.update.Update;
-import org.jdom.Element;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.openapi.wm.*;
+import com.intellij.openapi.wm.ex.*;
+import com.intellij.openapi.wm.impl.*;
+import com.intellij.util.containers.*;
+import com.intellij.util.messages.*;
+import com.intellij.util.messages.impl.*;
+import com.intellij.util.ui.update.*;
+import org.jdom.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
 import java.awt.*;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
+import java.beans.*;
+import java.io.*;
+import java.util.*;
 import java.util.List;
 
 /**
@@ -1177,6 +1157,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
         }
       }
       else if (VirtualFile.PROP_WRITABLE.equals(e.getPropertyName()) || VirtualFile.PROP_ENCODING.equals(e.getPropertyName())) {
+        // TODO: message bus?
         updateIconAndStatusbar(e);
       }
     }
@@ -1189,7 +1170,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
         if (file.equals(getSelectedFiles()[0])) { // update "write" status
           final StatusBarEx statusBar = (StatusBarEx)WindowManager.getInstance().getStatusBar(myProject);
           assert statusBar != null;
-          statusBar.update(getSelectedTextEditor());
+          statusBar.updateWidgets();
         }
       }
     }
index 09f62b91eb21d9b82b0a26b28aa5954c34977556..24a42e3b6fd40cfa7fb5a5add51609d99ce13e02 100644 (file)
  */
 package com.intellij.openapi.fileEditor.impl.text;
 
-import com.intellij.AppTopics;
-import com.intellij.ide.ui.customization.CustomActionsSchema;
+import com.intellij.*;
+import com.intellij.ide.ui.customization.*;
 import com.intellij.openapi.actionSystem.*;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.Document;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.EditorFactory;
-import com.intellij.openapi.editor.colors.EditorColorsManager;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.diagnostic.*;
+import com.intellij.openapi.editor.*;
+import com.intellij.openapi.editor.colors.*;
 import com.intellij.openapi.editor.event.*;
-import com.intellij.openapi.editor.ex.EditorEx;
-import com.intellij.openapi.editor.ex.EditorMarkupModel;
-import com.intellij.openapi.editor.highlighter.EditorHighlighter;
-import com.intellij.openapi.editor.highlighter.EditorHighlighterFactory;
-import com.intellij.openapi.editor.impl.EditorImpl;
-import com.intellij.openapi.fileEditor.FileDocumentManager;
-import com.intellij.openapi.fileEditor.FileEditor;
-import com.intellij.openapi.fileEditor.FileEditorManager;
-import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl;
-import com.intellij.openapi.fileTypes.FileTypeEvent;
-import com.intellij.openapi.fileTypes.FileTypeListener;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.vfs.VirtualFileAdapter;
-import com.intellij.openapi.vfs.VirtualFileEvent;
-import com.intellij.openapi.vfs.VirtualFilePropertyEvent;
-import com.intellij.openapi.wm.WindowManager;
-import com.intellij.openapi.wm.ex.StatusBarEx;
-import com.intellij.util.EditorPopupHandler;
-import com.intellij.util.messages.MessageBusConnection;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.openapi.editor.ex.*;
+import com.intellij.openapi.editor.highlighter.*;
+import com.intellij.openapi.editor.impl.*;
+import com.intellij.openapi.fileEditor.*;
+import com.intellij.openapi.fileEditor.impl.*;
+import com.intellij.openapi.fileTypes.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.vfs.*;
+import com.intellij.openapi.wm.*;
+import com.intellij.openapi.wm.ex.*;
+import com.intellij.util.*;
+import com.intellij.util.messages.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
 import java.awt.*;
-import java.awt.event.MouseEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
+import java.awt.event.*;
+import java.beans.*;
 
 /**
  * @author Anton Katilin
@@ -151,7 +139,7 @@ class TextEditorComponent extends JPanel implements DataProvider{
   void deselectNotify(){
     StatusBarEx statusBar = (StatusBarEx)WindowManager.getInstance().getStatusBar(myProject);
     if (statusBar == null) return;
-    statusBar.clear();
+    //statusBar.clear();
   }
 
   private static void assertThread(){
@@ -261,7 +249,7 @@ class TextEditorComponent extends JPanel implements DataProvider{
   private void updateStatusBar(){
     final StatusBarEx statusBar = (StatusBarEx)WindowManager.getInstance().getStatusBar(myProject);
     if (statusBar == null) return;
-    statusBar.update(getEditor());
+    statusBar.updateWidgets(); // TODO: do we need this?!
   }
 
   @Nullable
index 8257814751288482bf88a73f095413a4509ea5a3..7f5af334afcb1d51435fa533882ced46cff95836 100644 (file)
  */
 package com.intellij.openapi.keymap.impl;
 
-import com.intellij.ide.DataManager;
-import com.intellij.ide.IdeEventQueue;
-import com.intellij.ide.impl.DataManagerImpl;
-import com.intellij.openapi.Disposable;
+import com.intellij.ide.*;
+import com.intellij.ide.impl.*;
+import com.intellij.openapi.*;
 import com.intellij.openapi.actionSystem.*;
-import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
-import com.intellij.openapi.actionSystem.ex.ActionUtil;
-import com.intellij.openapi.actionSystem.impl.PresentationFactory;
-import com.intellij.openapi.application.Application;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.application.ModalityState;
-import com.intellij.openapi.keymap.KeyMapBundle;
-import com.intellij.openapi.keymap.Keymap;
-import com.intellij.openapi.keymap.KeymapManager;
-import com.intellij.openapi.keymap.KeymapUtil;
-import com.intellij.openapi.keymap.impl.keyGestures.KeyboardGestureProcessor;
-import com.intellij.openapi.keymap.impl.ui.ShortcutTextField;
-import com.intellij.openapi.project.DumbAware;
-import com.intellij.openapi.project.DumbService;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.popup.JBPopup;
-import com.intellij.openapi.util.Disposer;
-import com.intellij.openapi.util.Pair;
-import com.intellij.openapi.util.SystemInfo;
-import com.intellij.openapi.util.registry.Registry;
-import com.intellij.openapi.wm.StatusBar;
-import com.intellij.openapi.wm.WindowManager;
-import com.intellij.openapi.wm.ex.StatusBarEx;
-import com.intellij.openapi.wm.impl.FloatingDecorator;
-import com.intellij.openapi.wm.impl.IdeFrameImpl;
-import com.intellij.openapi.wm.impl.IdeGlassPaneEx;
-import com.intellij.ui.popup.AbstractPopup;
-import com.intellij.util.Alarm;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.openapi.actionSystem.ex.*;
+import com.intellij.openapi.actionSystem.impl.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.keymap.*;
+import com.intellij.openapi.keymap.impl.keyGestures.*;
+import com.intellij.openapi.keymap.impl.ui.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.ui.popup.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.util.registry.*;
+import com.intellij.openapi.wm.*;
+import com.intellij.openapi.wm.ex.*;
+import com.intellij.openapi.wm.impl.*;
+import com.intellij.ui.popup.*;
+import com.intellij.util.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
-import javax.swing.plaf.basic.ComboPopup;
+import javax.swing.plaf.basic.*;
 import java.awt.*;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.awt.im.InputContext;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
+import java.awt.event.*;
+import java.awt.im.*;
+import java.lang.reflect.*;
+import java.util.*;
 import java.util.List;
 
 /**
@@ -99,10 +82,7 @@ public final class IdeKeyEventDispatcher implements Disposable {
         if (myContext != null) {
           Project project = PlatformDataKeys.PROJECT.getData(myContext.getDataContext());
           if (project != null) {
-            StatusBar status = WindowManager.getInstance().getStatusBar(project);
-            if (status != null) {
-              status.setInfo(null);
-            }
+            StatusBar.Info.set(null, project);
           }
         }
       }
@@ -291,10 +271,7 @@ public final class IdeKeyEventDispatcher implements Disposable {
       myFirstKeyStroke=null;
       setState(KeyState.STATE_INIT);
       Project project = PlatformDataKeys.PROJECT.getData(myContext.getDataContext());
-      StatusBar bar = WindowManager.getInstance().getStatusBar(project);
-      if (bar != null) {
-        bar.setInfo(null);
-      }
+      StatusBar.Info.set(null, project);
       return false;
     }
 
@@ -418,10 +395,7 @@ public final class IdeKeyEventDispatcher implements Disposable {
         message.append(")");
       }
 
-      StatusBar bar = WindowManager.getInstance().getStatusBar(project);
-      if (bar != null) {
-        bar.setInfo(message.toString());
-      }
+      StatusBar.Info.set(message.toString(), project);
 
       mySecondStrokeTimeout.cancelAllRequests();
       mySecondStrokeTimeout.addRequest(mySecondStrokeTimeoutRunnable, Registry.intValue("actionSystem.secondKeystrokeTimout"));
index 5f34bcceca5a9783dcb96aeda639270b46485b98..6443fa76b7a0d7bd9f78c563a676257fe844fd7f 100644 (file)
  */
 package com.intellij.openapi.progress.impl;
 
-import com.intellij.openapi.progress.PerformInBackgroundOption;
-import com.intellij.openapi.progress.Task;
-import com.intellij.openapi.progress.TaskInfo;
-import com.intellij.openapi.progress.util.ProgressWindow;
+import com.intellij.openapi.progress.*;
+import com.intellij.openapi.progress.util.*;
 import com.intellij.openapi.project.*;
-import com.intellij.openapi.wm.IdeFrame;
-import com.intellij.openapi.wm.WindowManager;
-import com.intellij.openapi.wm.ex.StatusBarEx;
-import com.intellij.openapi.wm.ex.WindowManagerEx;
-import org.jetbrains.annotations.Nls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.openapi.wm.*;
+import com.intellij.openapi.wm.ex.*;
+import org.jetbrains.annotations.*;
 
 public class BackgroundableProcessIndicator extends ProgressWindow {
   protected StatusBarEx myStatusBar;
@@ -140,7 +134,7 @@ public class BackgroundableProcessIndicator extends ProgressWindow {
   }
 
   private void doBackground() {
-    myStatusBar.add(this, myInfo);
+    myStatusBar.addProgress(this, myInfo);
   }
 
   public void dispose() {
index 6216183514e86cc4bb5d64f9e492567856b22590..83868e75c1b9bd7599fcdf1a5029b8b941eacf7a 100644 (file)
  */
 package com.intellij.openapi.vfs.newvfs;
 
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.progress.util.ProgressIndicatorBase;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.project.ProjectManager;
-import com.intellij.openapi.wm.WindowManager;
-import com.intellij.openapi.wm.ex.StatusBarEx;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.progress.util.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.wm.*;
+import com.intellij.openapi.wm.ex.*;
 
 import javax.swing.*;
 
@@ -50,7 +49,7 @@ public class RefreshProgress extends ProgressIndicatorBase {
         }
 
         for (Project project : projects) {
-          final StatusBarEx statusBar = (StatusBarEx)windowManager.getStatusBar(project);
+          final StatusBarEx statusBar = (StatusBarEx) windowManager.getStatusBar(project);
           if (statusBar == null) continue;
 
           statusBar.startRefreshIndication(myMessage);
@@ -75,7 +74,7 @@ public class RefreshProgress extends ProgressIndicatorBase {
         }
 
         for (Project project : projects) {
-          final StatusBarEx statusBar = (StatusBarEx)windowManager.getStatusBar(project);
+          final StatusBarEx statusBar = (StatusBarEx) windowManager.getStatusBar(project);
           if (statusBar == null) continue;
 
           statusBar.stopRefreshIndication();
index 097c5a1d1255a607c958d616ed75a6454b22f7b7..993a03137b965fd14c4f4965a9fe36b163d8f809 100644 (file)
  */
 package com.intellij.openapi.wm.ex;
 
-import com.intellij.notification.impl.IdeNotificationArea;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.progress.TaskInfo;
-import com.intellij.openapi.ui.MessageType;
-import com.intellij.openapi.ui.popup.BalloonHandler;
-import com.intellij.openapi.wm.StatusBar;
-import com.intellij.openapi.wm.impl.status.StatusBarPatch;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.openapi.*;
+import com.intellij.openapi.progress.*;
+import com.intellij.openapi.ui.*;
+import com.intellij.openapi.ui.popup.*;
+import com.intellij.openapi.wm.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
-import javax.swing.event.HyperlinkListener;
+import javax.swing.event.*;
 
-public interface StatusBarEx extends StatusBar {
-  String getInfo();
-
-  void clear();
-
-  void addFileStatusComponent(StatusBarPatch component);
+/**
+ * @author spleaner
+ */
+public interface StatusBarEx extends StatusBar, Disposable {
+  void startRefreshIndication(String tooltipText);
+  void stopRefreshIndication();
 
-  void removeFileStatusComponent(StatusBarPatch component);
+  BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, @NotNull String htmlBody);
+  BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, @NotNull String htmlBody, @Nullable Icon icon, @Nullable HyperlinkListener listener);
 
-  void cleanupCustomComponents();
+  void addProgress(ProgressIndicatorEx indicator, TaskInfo info);
 
-  void add(ProgressIndicatorEx indicator, TaskInfo info);
+  void updateWidgets();
 
   boolean isProcessWindowOpen();
 
   void setProcessWindowOpen(boolean open);
-
-  BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, @NotNull String htmlBody);
-
-  BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, @NotNull String htmlBody, @Nullable Icon icon, @Nullable HyperlinkListener listener);
-
-  void update(Editor editor);
-
-  void dispose();
-
-  IdeNotificationArea getNotificationArea();
 }
index d117e027b65da04986606b54ce67642f1e56d195..caef891f1da13617ab9bb03eec098996a287ca2d 100644 (file)
  */
 package com.intellij.openapi.wm.impl;
 
-import com.intellij.ide.AppLifecycleListener;
-import com.intellij.ide.DataManager;
+import com.intellij.ide.*;
 import com.intellij.ide.impl.ProjectUtil;
-import com.intellij.ide.ui.UISettings;
-import com.intellij.openapi.MnemonicHelper;
-import com.intellij.openapi.actionSystem.ActionManager;
-import com.intellij.openapi.actionSystem.DataProvider;
-import com.intellij.openapi.actionSystem.PlatformDataKeys;
-import com.intellij.openapi.application.Application;
-import com.intellij.openapi.application.ApplicationInfo;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.application.ModalityState;
-import com.intellij.openapi.application.ex.ApplicationInfoEx;
-import com.intellij.openapi.application.ex.ApplicationManagerEx;
-import com.intellij.openapi.keymap.KeymapManager;
-import com.intellij.openapi.project.DumbAwareRunnable;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.project.ProjectManager;
-import com.intellij.openapi.util.registry.Registry;
-import com.intellij.openapi.wm.IdeFrame;
-import com.intellij.openapi.wm.ex.LayoutFocusTraversalPolicyExt;
-import com.intellij.openapi.wm.ex.StatusBarEx;
-import com.intellij.ui.AppUIUtil;
-import com.intellij.ui.BalloonLayout;
-import com.intellij.ui.FocusTrackback;
-import com.intellij.util.ui.UIUtil;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import com.intellij.ide.ui.*;
+import com.intellij.openapi.*;
+import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.application.*;
+import com.intellij.openapi.application.ex.*;
+import com.intellij.openapi.keymap.*;
+import com.intellij.openapi.project.*;
+import com.intellij.openapi.util.*;
+import com.intellij.openapi.util.registry.*;
+import com.intellij.openapi.wm.*;
+import com.intellij.openapi.wm.ex.*;
+import com.intellij.openapi.wm.impl.status.*;
+import com.intellij.ui.*;
+import com.intellij.util.ui.*;
+import org.jetbrains.annotations.*;
 
 import javax.swing.*;
 import java.awt.*;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.File;
+import java.awt.event.*;
+import java.io.*;
 
 /**
  * @author Anton Katilin
@@ -168,7 +156,7 @@ public class IdeFrameImpl extends JFrame implements IdeFrame, DataProvider {
     );
   }
 
-  public StatusBarEx getStatusBar() {
+  public StatusBar getStatusBar() {
     return ((IdeRootPane)getRootPane()).getStatusBar();
   }
 
@@ -226,12 +214,14 @@ public class IdeFrameImpl extends JFrame implements IdeFrame, DataProvider {
   }
 
   public void setProject(final Project project) {
-    getStatusBar().cleanupCustomComponents();
     myProject = project;
     if (project != null) {
       if (myRootPane != null) {
         myRootPane.installNorthComponents(project);
       }
+
+      project.getMessageBus().connect().subscribe(StatusBar.Info.TOPIC, myRootPane.getStatusBar());
+      installDefaultProjectStatusBarWidgets(myProject);
     }
     else {
       if (myRootPane != null) { //already disposed
@@ -244,6 +234,37 @@ public class IdeFrameImpl extends JFrame implements IdeFrame, DataProvider {
     }
   }
 
+  private void installDefaultProjectStatusBarWidgets(@NotNull final Project project) {
+    final StatusBar statusBar = getStatusBar();
+
+    final PositionPanel positionPanel = new PositionPanel(project);
+    statusBar.addWidget(positionPanel, "before Notifications");
+