summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2013-08-15 14:06:37 -0700
committerTor Norbye <tnorbye@google.com>2013-08-15 14:06:37 -0700
commita3c36999a717e0d9923378ca5e0ae1160118c1e6 (patch)
treeeda7fde5565d08649c0f5952e957a5ff4b2070d5 /plugins
parentd1129abbe4dc0ce9bbad9118a35a85dbebc8758f (diff)
downloadidea-a3c36999a717e0d9923378ca5e0ae1160118c1e6.tar.gz
Snapshot 13baaa319cd568c4e19b9232b24f2002f2631688 from master branch of git://git.jetbrains.org/idea/community.git
Change-Id: I2ede7fef748e781ed425346a4e03e721bf4d2610
Diffstat (limited to 'plugins')
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties10
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/InspectionGadgetsFix.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EmptyStatementBodyInspection.java6
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryContinueInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/TooBroadScopeInspectionBase.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyCatchBlockInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyFinallyBlockInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyTryBlockInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/JavaLangImportInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/OnDemandImportInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/SamePackageImportInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/SingleClassImportInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/UnusedImportInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspection.java4
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javabeans/ClassWithoutConstructorInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/AutoUnboxingInspection.java24
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/ExpectedExceptionNeverThrownInspection.java34
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FileTypeUtils.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java6
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/security/DesignForExtensionInspection.java2
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/EqualsCalledOnEnumConstantInspection.java60
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/EmptySynchronizedStatementInspection.java2
-rw-r--r--plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/ClassInTopLevelPackageInspection.java2
-rw-r--r--plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/ClassNameDiffersFromFileNameInspection.java2
-rw-r--r--plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/EmptyClassInspection.java2
-rw-r--r--plugins/InspectionGadgets/src/com/siyeh/ig/imports/StaticImportInspection.java2
-rw-r--r--plugins/InspectionGadgets/src/com/siyeh/ig/migration/WhileCanBeForeachInspection.java99
-rw-r--r--plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/Cast.after.java12
-rw-r--r--plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/Cast.java13
-rw-r--r--plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/This.after.java18
-rw-r--r--plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/This.java19
-rw-r--r--plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/AutoUnboxing.java3
-rw-r--r--plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/expected.xml8
-rw-r--r--plugins/InspectionGadgets/test/com/siyeh/igtest/migration/while_can_be_foreach/WhileCanBeForeachInspection.java22
-rw-r--r--plugins/InspectionGadgets/test/com/siyeh/igtest/style/equals_called_on_enum_constant/EqualsCalled.java9
-rw-r--r--plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/migration/WhileCanBeForeachFixTest.java38
-rw-r--r--plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/ExpectedExceptionNeverThrownInspectionTest.java47
-rw-r--r--plugins/IntelliLang/IntelliLang-tests/test/org/intellij/plugins/intelliLang/ReferenceInjectionTest.java20
-rw-r--r--plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java12
-rw-r--r--plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java76
-rw-r--r--plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/LanguageReference.java28
-rw-r--r--plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/UnknownLanguageID.java5
-rw-r--r--plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java12
-rw-r--r--plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/AbstractLanguageInjectionSupport.java4
-rw-r--r--plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java39
-rw-r--r--plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/ValueRegExpAnnotator.java3
-rw-r--r--plugins/IntelliLang/src/org/intellij/plugins/intelliLang/references/InjectedReferencesContributor.java40
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/braces/RemoveBracesIntention.java4
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/conditional/ReplaceConditionalWithIfPredicate.java3
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/enumswitch/CreateEnumSwitchBranchesIntention.java134
-rw-r--r--plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/BeforeDefault_after.java20
-rw-r--r--plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/Multiple.java10
-rw-r--r--plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/Multiple_after.java14
-rw-r--r--plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/enumswitch/EnumSwitchBranchesIntentionTest.java4
-rw-r--r--plugins/android/lib/guava-13.0.1.jarbin1891110 -> 0 bytes
-rw-r--r--plugins/android/lib/jarutils.jarbin14712 -> 0 bytes
-rw-r--r--plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java2
-rw-r--r--plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/ui/experts/SelectLocationStep.java5
-rw-r--r--plugins/devkit/src/run/PluginRunConfigurationEditor.java3
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/GithubCreatePullRequestAction.java435
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java5
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/GithubSettings.java2
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java5
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java13
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/api/GithubApiUtil.java12
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/api/GithubErrorMessageRaw.java25
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java20
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepositoryEditor.java15
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreateGistDialog.java7
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java23
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestPanel.form14
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestPanel.java17
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.form15
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.java18
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.form9
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.java39
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/ui/GithubShareDialog.java10
-rw-r--r--plugins/github/src/org/jetbrains/plugins/github/ui/GithubSharePanel.java17
-rw-r--r--plugins/github/test/org/jetbrains/plugins/github/GithubCreateGistTestBase.java2
-rw-r--r--plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTest.java3
-rw-r--r--plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTestBase.java22
-rw-r--r--plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTest.java13
-rw-r--r--plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTestBase.java32
-rw-r--r--plugins/github/test/org/jetbrains/plugins/github/test/GithubTest.java32
-rw-r--r--plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java61
-rw-r--r--plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationAction.java2
-rw-r--r--plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java21
-rw-r--r--plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineServerConfiguration.java23
-rw-r--r--plugins/gradle/gradle.iml230
-rw-r--r--plugins/gradle/lib/gradle-1.7-src.zipbin9683593 -> 0 bytes
-rw-r--r--plugins/gradle/lib/gradle-1.8-20130730220035+0000-src.zipbin0 -> 4144626 bytes
-rw-r--r--plugins/gradle/lib/gradle-base-services-1.8-20130730220035+0000.jar (renamed from plugins/gradle/lib/gradle-base-services-1.7.jar)bin108801 -> 114967 bytes
-rw-r--r--plugins/gradle/lib/gradle-core-1.8-20130730220035+0000.jar (renamed from plugins/gradle/lib/gradle-core-1.7.jar)bin1701085 -> 1718991 bytes
-rw-r--r--plugins/gradle/lib/gradle-messaging-1.8-20130730220035+0000.jar (renamed from plugins/gradle/lib/gradle-messaging-1.7.jar)bin236931 -> 236949 bytes
-rw-r--r--plugins/gradle/lib/gradle-tooling-api-1.8-20130730220035+0000.jar (renamed from plugins/gradle/lib/gradle-tooling-api-1.7.jar)bin165483 -> 150565 bytes
-rw-r--r--plugins/gradle/lib/gradle-wrapper-1.7.jarbin23496 -> 0 bytes
-rw-r--r--plugins/gradle/lib/gradle-wrapper-1.8-20130730220035+0000.jarbin0 -> 23509 bytes
-rw-r--r--plugins/gradle/resources/i18n/GradleBundle.properties2
-rw-r--r--plugins/gradle/src/org/jetbrains/plugins/gradle/GradleManager.java13
-rw-r--r--plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java11
-rw-r--r--plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java31
-rw-r--r--plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java2
-rw-r--r--plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleProjectImportBuilder.java5
-rw-r--r--plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/GradleProjectSettingsControl.java3
-rw-r--r--plugins/gradle/src/org/jetbrains/plugins/gradle/settings/ClassHolder.java88
-rw-r--r--plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleExecutionSettings.java9
-rw-r--r--plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleLocalSettings.java5
-rw-r--r--plugins/gradle/src/org/jetbrains/plugins/gradle/util/GradleUtil.java22
-rw-r--r--plugins/groovy/src/META-INF/plugin.xml4
-rw-r--r--plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/GroovyLanguageInjectionSupport.java22
-rw-r--r--plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyMembersWithDocSelectioner.java3
-rw-r--r--plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyStatementSelectioner.java3
-rw-r--r--plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyWordSelectionHandler.java3
-rw-r--r--plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java2
-rw-r--r--plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcFramework.java2
-rw-r--r--plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.java5
-rw-r--r--plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java3
-rw-r--r--plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java4
-rw-r--r--plugins/groovy/test/org/jetbrains/plugins/groovy/lang/formatter/EnterActionTest.groovy10
-rw-r--r--plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java3
-rw-r--r--plugins/junit/src/com/intellij/execution/junit/TestObject.java1
-rw-r--r--plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java11
-rw-r--r--plugins/junit/src/com/intellij/execution/junit2/ui/TestsPacketsReceiver.java1
-rw-r--r--plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenConstants.java2
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/DependencyId.java63
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenConfigurationProducer.java3
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenExternalParameters.java3
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunner.java2
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerPanel.java18
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerParametersPanel.form1
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerSettings.java28
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerSettingsEditor.java5
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.java19
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/MavenProjectsNavigator.java10
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenModelPropertiesPatcher.java75
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPluginDescriptor.java44
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPluginParamInfo.java23
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPropertiesGenerator.java20
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/buildHelper/MavenBuildHelperPropertyGenerator.java34
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenConsoleImpl.java6
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java15
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenShowEffectivePom.java11
-rw-r--r--plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java12
-rw-r--r--plugins/maven/src/main/resources/META-INF/plugin.xml3
-rw-r--r--plugins/maven/src/test/java/org/jetbrains/idea/maven/plugins/MavenBuildHelperPluginTest.groovy102
-rw-r--r--plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java16
-rw-r--r--plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java9
-rw-r--r--plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java5
-rw-r--r--plugins/tasks/tasks-core/src/com/intellij/tasks/actions/SwitchTaskCombo.java3
-rw-r--r--plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java16
-rw-r--r--plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraRepositoryEditor.java13
-rw-r--r--plugins/tasks/tasks-core/src/com/intellij/tasks/trello/TrelloRepository.java61
-rw-r--r--plugins/tasks/tasks-core/src/com/intellij/tasks/trello/TrelloRepositoryEditor.java245
-rw-r--r--plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloBoard.java4
-rw-r--r--plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloList.java19
-rw-r--r--plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloModel.java14
-rw-r--r--plugins/terminal/lib/jediterm-pty-0.08.jarbin141566 -> 140785 bytes
-rw-r--r--plugins/terminal/lib/jediterm.in38
-rwxr-xr-xplugins/terminal/lib/macosx/x86_64/libpty.dylibbin0 -> 14176 bytes
-rw-r--r--plugins/terminal/lib/pty4j-0.2.jarbin38674 -> 0 bytes
-rw-r--r--plugins/terminal/lib/pty4j-0.3.jarbin0 -> 42041 bytes
-rw-r--r--plugins/terminal/lib/win/x86/libwinpty.dllbin0 -> 39424 bytes
-rw-r--r--plugins/terminal/lib/win/x86/winpty-agent.exebin0 -> 44032 bytes
-rw-r--r--plugins/terminal/lib/win/x86_64/libwinpty.dllbin0 -> 46592 bytes
-rw-r--r--plugins/terminal/lib/win/x86_64/winpty-agent.exebin0 -> 52224 bytes
-rw-r--r--plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalStarter.java47
-rw-r--r--plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalWidget.java8
-rw-r--r--plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java45
-rw-r--r--plugins/terminal/src/org/jetbrains/plugins/terminal/OpenLocalTerminalAction.java10
-rw-r--r--plugins/terminal/terminal.iml2
-rw-r--r--plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.java4
-rw-r--r--plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java4
-rw-r--r--plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java3
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/LightToolWindow.java3
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/componentTree/ComponentTree.java5
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/componentTree/TreeEditableArea.java4
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/designSurface/tools/CreationTool.java9
-rw-r--r--plugins/ui-designer-core/src/com/intellij/designer/propertyTable/RadPropertyTable.java4
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/ErrorAnalyzer.java4
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/ComponentTree.java4
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/button.pngbin340 -> 394 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/button@2x.pngbin0 -> 737 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/buttonGroup.pngbin179 -> 316 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/buttonGroup@2x.pngbin0 -> 681 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/checkBox.pngbin380 -> 426 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/checkBox@2x.pngbin0 -> 739 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/chooseLocale.pngbin340 -> 308 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/chooseLocale@2x.pngbin0 -> 362 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode.pngbin111 -> 158 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode@2x.pngbin0 -> 165 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode@2x_dark.pngbin0 -> 167 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode_dark.pngbin0 -> 155 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/comboBox.pngbin233 -> 277 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/comboBox@2x.pngbin0 -> 398 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/dataBindingWizard.pngbin919 -> 669 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/dataBindingWizard@2x.pngbin0 -> 1129 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell.pngbin109 -> 190 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell@2x.pngbin0 -> 251 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell@2x_dark.pngbin0 -> 252 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell_dark.pngbin0 -> 190 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag.pngbin199 -> 279 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag@2x.pngbin0 -> 351 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag@2x_dark.pngbin0 -> 354 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag_dark.pngbin0 -> 278 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/editorPane.pngbin450 -> 378 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/editorPane@2x.pngbin0 -> 693 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode.pngbin115 -> 169 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode@2x.pngbin0 -> 182 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode@2x_dark.pngbin0 -> 178 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode_dark.pngbin0 -> 165 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/formattedTextField.pngbin375 -> 206 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/formattedTextField@2x.pngbin0 -> 287 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer.pngbin160 -> 322 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer@2x.pngbin0 -> 559 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer@2x_dark.pngbin0 -> 561 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer_dark.pngbin0 -> 322 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft.pngbin106 -> 138 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft@2x.pngbin0 -> 180 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft@2x_dark.pngbin0 -> 180 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft_dark.pngbin0 -> 138 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight.pngbin105 -> 139 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight@2x.pngbin0 -> 189 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight@2x_dark.pngbin0 -> 190 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight_dark.pngbin0 -> 139 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove.pngbin107 -> 138 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove@2x.pngbin0 -> 176 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove@2x_dark.pngbin0 -> 176 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove_dark.pngbin0 -> 138 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow.pngbin108 -> 144 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow@2x.pngbin0 -> 184 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow@2x_dark.pngbin0 -> 185 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow_dark.pngbin0 -> 145 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression.pngbin197 -> 370 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression@2x.pngbin0 -> 753 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression@2x_dark.pngbin0 -> 751 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression_dark.pngbin0 -> 370 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/label.pngbin494 -> 351 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/label@2x.pngbin0 -> 857 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/label@2x_dark.pngbin0 -> 868 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/label_dark.pngbin0 -> 376 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/list.pngbin375 -> 411 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/list@2x.pngbin0 -> 569 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener.pngbin575 -> 614 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener@2x.pngbin0 -> 1278 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener@2x_dark.pngbin0 -> 1294 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener_dark.pngbin0 -> 646 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel.pngbin448 -> 170 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel@2x.pngbin0 -> 195 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel@2x_dark.pngbin0 -> 210 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel_dark.pngbin0 -> 179 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/passwordField.pngbin325 -> 314 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/passwordField@2x.pngbin0 -> 457 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar.pngbin201 -> 235 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar@2x.pngbin0 -> 296 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar@2x_dark.pngbin0 -> 308 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar_dark.pngbin0 -> 236 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/radioButton.pngbin471 -> 606 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/radioButton@2x.pngbin0 -> 1255 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollPane.pngbin327 -> 403 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollPane@2x.pngbin0 -> 656 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollbar.pngbin366 -> 337 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollbar@2x.pngbin0 -> 563 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator.pngbin195 -> 219 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator@2x.pngbin0 -> 245 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator@2x_dark.pngbin0 -> 249 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator_dark.pngbin0 -> 223 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider.pngbin197 -> 322 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider@2x.pngbin0 -> 719 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider@2x_dark.pngbin0 -> 726 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider_dark.pngbin0 -> 341 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/spinner.pngbin359 -> 338 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/spinner@2x.pngbin0 -> 502 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn.pngbin106 -> 139 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn@2x.pngbin0 -> 183 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn@2x_dark.pngbin0 -> 183 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn_dark.pngbin0 -> 139 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitPane.pngbin409 -> 245 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitPane@2x.pngbin0 -> 347 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow.pngbin109 -> 146 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow@2x.pngbin0 -> 187 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow@2x_dark.pngbin0 -> 188 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow_dark.pngbin0 -> 147 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/tabbedPane.pngbin343 -> 265 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/tabbedPane@2x.pngbin0 -> 320 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/table.pngbin173 -> 311 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/table@2x.pngbin0 -> 322 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/textArea.pngbin394 -> 237 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/textArea@2x.pngbin0 -> 301 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField.pngbin429 -> 304 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField@2x.pngbin0 -> 401 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField@2x_dark.pngbin0 -> 380 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField_dark.pngbin0 -> 291 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/textPane.pngbin440 -> 331 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/textPane@2x.pngbin0 -> 556 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner.pngbin339 -> 448 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner@2x.pngbin0 -> 828 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner@2x_dark.pngbin0 -> 790 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner_dark.pngbin0 -> 433 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbar.pngbin481 -> 219 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbar@2x.pngbin0 -> 273 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator.pngbin180 -> 273 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator@2x.pngbin0 -> 336 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator@2x_dark.pngbin0 -> 334 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator_dark.pngbin0 -> 270 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree.pngbin217 -> 456 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree@2x.pngbin0 -> 789 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree@2x_dark.pngbin0 -> 794 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree_dark.pngbin0 -> 452 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown-small.pngbin695 -> 624 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown-small@2x.pngbin0 -> 1486 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown.pngbin779 -> 624 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown@2x.pngbin0 -> 1486 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer.pngbin149 -> 346 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer@2x.pngbin0 -> 601 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer@2x_dark.pngbin0 -> 602 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer_dark.pngbin0 -> 347 bytes
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/PropertyInspectorTable.java4
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadContainer.java2
-rw-r--r--plugins/ui-designer/src/com/intellij/uiDesigner/snapShooter/CreateSnapShotAction.java2
-rw-r--r--plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/XPathStringLiteralSelectioner.java4
-rw-r--r--plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/quickfix/DownloadManager.java230
-rw-r--r--plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltConfigurationProducer.java3
324 files changed, 2345 insertions, 1320 deletions
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
index e0b804182b35..7da4e0620beb 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
@@ -742,7 +742,7 @@ misordered.assert.equals.parameters.display.name=Misordered 'assertEquals()' arg
unnecessary.constructor.display.name=Redundant no-arg constructor
method.name.same.as.parent.name.display.name=Method name same as parent class name
java.lang.reflect.display.name=Use of 'java.lang.reflect'
-while.can.be.foreach.display.name='while' loop replaceable with 'for each'
+while.can.be.foreach.display.name='while' loop replaceable with 'foreach'
big.decimal.equals.display.name='equals()' called on java.math.BigDecimal
wait.not.in.synchronized.context.display.name='wait()' while not synchronized
implicit.call.to.super.display.name=Implicit call to 'super()'
@@ -761,7 +761,7 @@ chained.method.call.display.name=Chained method calls
notify.not.in.synchronized.context.display.name='notify()' or 'notifyAll()' while not synchronized
safe.lock.display.name=Lock acquired but not safely unlocked
system.run.finalizers.on.exit.display.name=Call to 'System.runFinalizersOnExit()'
-for.can.be.foreach.display.name='for' loop replaceable with 'for each'
+for.can.be.foreach.display.name='for' loop replaceable with 'foreach'
type.parameter.extends.object.display.name=Type parameter explicitly extends 'java.lang.Object'
marker.interface.display.name=Marker interface
limited.scope.inner.class.display.name=Limited-scope inner class
@@ -994,8 +994,8 @@ for.loop.replaceable.by.while.problem.descriptor=<code>#ref</code> loop statemen
unnecessary.default.problem.descriptor=<code>#ref</code> branch is unnecessary #loc
unnecessary.boxing.problem.descriptor=Unnecessary boxing <code>#ref</code> #loc
unnecessary.unboxing.problem.descriptor=Unnecessary unboxing <code>#ref</code> #loc
-for.can.be.foreach.problem.descriptor=<code>#ref</code> loop replaceable with 'for each' #loc
-while.can.be.foreach.problem.descriptor=<code>#ref</code> loop replaceable with 'for each' #loc
+for.can.be.foreach.problem.descriptor=<code>#ref</code> loop replaceable with 'foreach' #loc
+while.can.be.foreach.problem.descriptor=<code>#ref</code> loop replaceable with 'foreach' #loc
too.broad.scope.problem.descriptor=Scope of variable <code>#ref</code> is too broad #loc
return.this.problem.descriptor=Return of <code>#ref</code> #loc
constant.on.lhs.of.comparison.problem.descriptor=<code>#ref</code>: constant on left side of comparison #loc
@@ -1201,7 +1201,7 @@ for.loop.with.missing.component.problem.descriptor5=<code>#ref</code> statement
for.loop.with.missing.component.problem.descriptor6=<code>#ref</code> statement lacks condition and update #loc
for.loop.with.missing.component.problem.descriptor7=<code>#ref</code> statement lacks initializer, condition and update #loc
if.statement.with.identical.branches.collapse.quickfix=Collapse 'if' statement
-foreach.replace.quickfix=Replace with 'for each'
+foreach.replace.quickfix=Replace with 'foreach'
unnecessary.boxing.remove.quickfix=Remove boxing
unnecessary.unboxing.remove.quickfix=Remove unboxing
misordered.assert.equals.parameters.flip.quickfix=Flip compared arguments
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/InspectionGadgetsFix.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/InspectionGadgetsFix.java
index 4ad523c1a662..1aa6827a32c5 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/InspectionGadgetsFix.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/InspectionGadgetsFix.java
@@ -127,7 +127,7 @@ public abstract class InspectionGadgetsFix implements LocalQuickFix {
final Project project = statement.getProject();
final CodeStyleManager styleManager = CodeStyleManager.getInstance(project);
final JavaCodeStyleManager javaStyleManager = JavaCodeStyleManager.getInstance(project);
- if (FileTypeUtils.isInJsp(statement)) {
+ if (FileTypeUtils.isInServerPageFile(statement)) {
final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project);
final PsiFile jspFile = PsiUtilCore.getTemplateLanguageFile(statement);
if (jspFile == null) {
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EmptyStatementBodyInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EmptyStatementBodyInspection.java
index 722c2d1396d1..5e3b4c4d185c 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EmptyStatementBodyInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EmptyStatementBodyInspection.java
@@ -106,7 +106,7 @@ public class EmptyStatementBodyInspection extends BaseInspection {
}
private void checkLoopStatement(PsiLoopStatement statement) {
- if (FileTypeUtils.isInJsp(statement)) {
+ if (FileTypeUtils.isInServerPageFile(statement)) {
return;
}
final PsiStatement body = statement.getBody();
@@ -119,7 +119,7 @@ public class EmptyStatementBodyInspection extends BaseInspection {
@Override
public void visitIfStatement(@NotNull PsiIfStatement statement) {
super.visitIfStatement(statement);
- if (FileTypeUtils.isInJsp(statement)) {
+ if (FileTypeUtils.isInServerPageFile(statement)) {
return;
}
final PsiStatement thenBranch = statement.getThenBranch();
@@ -140,7 +140,7 @@ public class EmptyStatementBodyInspection extends BaseInspection {
@Override
public void visitSwitchStatement(PsiSwitchStatement statement) {
super.visitSwitchStatement(statement);
- if (FileTypeUtils.isInJsp(statement)) {
+ if (FileTypeUtils.isInServerPageFile(statement)) {
return;
}
final PsiCodeBlock body = statement.getBody();
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryContinueInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryContinueInspection.java
index 05b4bb65b334..36a0dc906022 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryContinueInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryContinueInspection.java
@@ -70,7 +70,7 @@ public class UnnecessaryContinueInspection extends BaseInspection {
@Override
public void visitContinueStatement(@NotNull PsiContinueStatement statement) {
- if (FileTypeUtils.isInJsp(statement.getContainingFile())) {
+ if (FileTypeUtils.isInServerPageFile(statement.getContainingFile())) {
return;
}
final PsiStatement continuedStatement = statement.findContinuedStatement();
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java
index 42d07b5fce94..5c8f1df3857b 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/UnnecessaryReturnInspection.java
@@ -80,7 +80,7 @@ public class UnnecessaryReturnInspection extends BaseInspection {
@Override
public void visitReturnStatement(@NotNull PsiReturnStatement statement) {
super.visitReturnStatement(statement);
- if (FileTypeUtils.isInJsp(statement.getContainingFile())) {
+ if (FileTypeUtils.isInServerPageFile(statement.getContainingFile())) {
return;
}
if (statement.getReturnValue() != null) {
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/TooBroadScopeInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/TooBroadScopeInspectionBase.java
index ca336ff2cdfa..07b77868fcce 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/TooBroadScopeInspectionBase.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/TooBroadScopeInspectionBase.java
@@ -216,7 +216,7 @@ public class TooBroadScopeInspectionBase extends BaseInspection {
return;
}
}
- if (insertionPoint != null && FileTypeUtils.isInJsp(insertionPoint)) {
+ if (insertionPoint != null && FileTypeUtils.isInServerPageFile(insertionPoint)) {
PsiElement elementBefore = insertionPoint.getPrevSibling();
elementBefore = PsiTreeUtil.skipSiblingsBackward(elementBefore, PsiWhiteSpace.class);
if (elementBefore instanceof PsiDeclarationStatement) {
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyCatchBlockInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyCatchBlockInspection.java
index f5db89a1e4c9..207e5e790c9b 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyCatchBlockInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyCatchBlockInspection.java
@@ -119,7 +119,7 @@ public class EmptyCatchBlockInspection extends BaseInspection {
@Override
public void visitTryStatement(@NotNull PsiTryStatement statement) {
super.visitTryStatement(statement);
- if (FileTypeUtils.isInJsp(statement.getContainingFile())) {
+ if (FileTypeUtils.isInServerPageFile(statement.getContainingFile())) {
return;
}
if (m_ignoreTestCases && TestUtils.isInTestCode(statement)) {
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyFinallyBlockInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyFinallyBlockInspection.java
index d2e428efa669..41ed5757eee9 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyFinallyBlockInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyFinallyBlockInspection.java
@@ -150,7 +150,7 @@ public class EmptyFinallyBlockInspection extends BaseInspection {
public void visitTryStatement(
@NotNull PsiTryStatement statement) {
super.visitTryStatement(statement);
- if (FileTypeUtils.isInJsp(statement.getContainingFile())) {
+ if (FileTypeUtils.isInServerPageFile(statement.getContainingFile())) {
return;
}
final PsiCodeBlock finallyBlock = statement.getFinallyBlock();
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyTryBlockInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyTryBlockInspection.java
index 346d07f11bf8..57003f5f4a0a 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyTryBlockInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/errorhandling/EmptyTryBlockInspection.java
@@ -54,7 +54,7 @@ public class EmptyTryBlockInspection extends BaseInspection {
@Override
public void visitTryStatement(@NotNull PsiTryStatement statement) {
super.visitTryStatement(statement);
- if (FileTypeUtils.isInJsp(statement.getContainingFile())) {
+ if (FileTypeUtils.isInServerPageFile(statement.getContainingFile())) {
return;
}
final PsiCodeBlock finallyBlock = statement.getTryBlock();
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/JavaLangImportInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/JavaLangImportInspection.java
index 691ccef9331f..36c31ac74792 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/JavaLangImportInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/JavaLangImportInspection.java
@@ -60,7 +60,7 @@ public class JavaLangImportInspection extends BaseInspection {
if (!(aClass.getParent() instanceof PsiJavaFile)) {
return;
}
- if (FileTypeUtils.isInJsp(aClass.getContainingFile())) {
+ if (FileTypeUtils.isInServerPageFile(aClass.getContainingFile())) {
return;
}
final PsiJavaFile file = (PsiJavaFile)aClass.getContainingFile();
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/OnDemandImportInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/OnDemandImportInspection.java
index 0115add4d475..d9d9dd9445c2 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/OnDemandImportInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/OnDemandImportInspection.java
@@ -51,7 +51,7 @@ public class OnDemandImportInspection extends BaseInspection {
return;
}
final PsiJavaFile file = (PsiJavaFile)parent;
- if (FileTypeUtils.isInJsp(aClass.getContainingFile())) {
+ if (FileTypeUtils.isInServerPageFile(aClass.getContainingFile())) {
return;
}
if (!file.getClasses()[0].equals(aClass)) {
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/SamePackageImportInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/SamePackageImportInspection.java
index 5764a3022f83..579a20bd8861 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/SamePackageImportInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/SamePackageImportInspection.java
@@ -59,7 +59,7 @@ public class SamePackageImportInspection extends BaseInspection {
if (!(parent instanceof PsiJavaFile)) {
return;
}
- if (FileTypeUtils.isInJsp(importList)) {
+ if (FileTypeUtils.isInServerPageFile(importList)) {
return;
}
final PsiJavaFile javaFile = (PsiJavaFile)parent;
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/SingleClassImportInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/SingleClassImportInspection.java
index f358ed0421f3..91692ab21eb2 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/SingleClassImportInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/SingleClassImportInspection.java
@@ -54,7 +54,7 @@ public class SingleClassImportInspection extends BaseInspection {
if (!(aClass.getParent() instanceof PsiJavaFile)) {
return;
}
- if (FileTypeUtils.isInJsp(aClass.getContainingFile())) {
+ if (FileTypeUtils.isInServerPageFile(aClass.getContainingFile())) {
return;
}
final PsiJavaFile file = (PsiJavaFile)aClass.getParent();
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/UnusedImportInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/UnusedImportInspection.java
index 3df4e44f2f99..49c58d15ba56 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/UnusedImportInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/UnusedImportInspection.java
@@ -58,7 +58,7 @@ public class UnusedImportInspection extends BaseInspection {
@Override
public void visitJavaFile(PsiJavaFile file) {
- if (FileTypeUtils.isInJsp(file)) {
+ if (FileTypeUtils.isInServerPageFile(file)) {
return;
}
final PsiClass[] classes = file.getClasses();
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspection.java
index f62c0bb899f4..da421765b2ea 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/PrivateMemberAccessBetweenOuterAndInnerClassInspection.java
@@ -170,7 +170,7 @@ public class PrivateMemberAccessBetweenOuterAndInnerClassInspection
@Override
public void visitNewExpression(PsiNewExpression expression) {
- if (FileTypeUtils.isInJsp(expression)) {
+ if (FileTypeUtils.isInServerPageFile(expression)) {
return;
}
super.visitNewExpression(expression);
@@ -214,7 +214,7 @@ public class PrivateMemberAccessBetweenOuterAndInnerClassInspection
@Override
public void visitReferenceExpression(
@NotNull PsiReferenceExpression expression) {
- if (FileTypeUtils.isInJsp(expression)) {
+ if (FileTypeUtils.isInServerPageFile(expression)) {
// disable for jsp files IDEADEV-12957
return;
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javabeans/ClassWithoutConstructorInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javabeans/ClassWithoutConstructorInspection.java
index 96567a0c06d0..c7c734b55f93 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javabeans/ClassWithoutConstructorInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javabeans/ClassWithoutConstructorInspection.java
@@ -104,7 +104,7 @@ public class ClassWithoutConstructorInspection extends BaseInspection {
public void visitClass(@NotNull PsiClass aClass) {
// no call to super, so it doesn't drill down
if (aClass.isInterface() || aClass.isEnum() ||
- aClass.isAnnotationType() || FileTypeUtils.isInJsp(aClass)) {
+ aClass.isAnnotationType() || FileTypeUtils.isInServerPageFile(aClass)) {
return;
}
if (aClass instanceof PsiTypeParameter ||
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/AutoUnboxingInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/AutoUnboxingInspection.java
index 5d6f7139b2f2..0befc94fb7ad 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/AutoUnboxingInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/AutoUnboxingInspection.java
@@ -57,19 +57,6 @@ public class AutoUnboxingInspection extends BaseInspection {
s_unboxingMethods.put("char", "charValue");
}
- @NonNls static final Set<String> unboxableTypes = new HashSet(9);
- static {
- unboxableTypes.add(CommonClassNames.JAVA_LANG_BYTE);
- unboxableTypes.add(CommonClassNames.JAVA_LANG_SHORT);
- unboxableTypes.add(CommonClassNames.JAVA_LANG_INTEGER);
- unboxableTypes.add(CommonClassNames.JAVA_LANG_LONG);
- unboxableTypes.add(CommonClassNames.JAVA_LANG_FLOAT);
- unboxableTypes.add(CommonClassNames.JAVA_LANG_DOUBLE);
- unboxableTypes.add(CommonClassNames.JAVA_LANG_BOOLEAN);
- unboxableTypes.add(CommonClassNames.JAVA_LANG_CHARACTER);
- unboxableTypes.add(CommonClassNames.JAVA_LANG_OBJECT);
- }
-
@Override
@NotNull
public String getDisplayName() {
@@ -384,7 +371,7 @@ public class AutoUnboxingInspection extends BaseInspection {
if (TypeConversionUtil.isPrimitiveAndNotNull(expressionType)) {
return;
}
- if (!isUnboxable(expressionType)) {
+ if (!TypeConversionUtil.isAssignableFromPrimitiveWrapper(expressionType)) {
return;
}
final PsiType expectedType = ExpectedTypeUtils.findExpectedType(expression, false, true);
@@ -393,14 +380,5 @@ public class AutoUnboxingInspection extends BaseInspection {
}
registerError(expression, expression);
}
-
- private static boolean isUnboxable(PsiType type) {
- if (!(type instanceof PsiClassType)) {
- return false;
- }
- final PsiClassType classType = (PsiClassType)type;
- final PsiClass aClass = classType.resolve();
- return aClass != null && unboxableTypes.contains(aClass.getQualifiedName());
- }
}
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/ExpectedExceptionNeverThrownInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/ExpectedExceptionNeverThrownInspection.java
index a969b2f6e43e..98ec40b4dd99 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/ExpectedExceptionNeverThrownInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/ExpectedExceptionNeverThrownInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2011 Bas Leijdekkers
+ * Copyright 2010-2013 Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -27,23 +27,19 @@ import org.jetbrains.annotations.NotNull;
import java.util.Set;
-public class ExpectedExceptionNeverThrownInspection
- extends BaseInspection {
+public class ExpectedExceptionNeverThrownInspection extends BaseInspection {
@Nls
@NotNull
@Override
public String getDisplayName() {
- return InspectionGadgetsBundle.message(
- "expected.exception.never.thrown.display.name");
+ return InspectionGadgetsBundle.message("expected.exception.never.thrown.display.name");
}
@NotNull
@Override
protected String buildErrorString(Object... infos) {
final PsiMethod method = (PsiMethod)infos[0];
- return InspectionGadgetsBundle.message(
- "expected.exception.never.thrown.problem.descriptor",
- method.getName());
+ return InspectionGadgetsBundle.message("expected.exception.never.thrown.problem.descriptor", method.getName());
}
@Override
@@ -51,19 +47,16 @@ public class ExpectedExceptionNeverThrownInspection
return new ExpectedExceptionNeverThrownVisitor();
}
- private static class ExpectedExceptionNeverThrownVisitor
- extends BaseInspectionVisitor {
+ private static class ExpectedExceptionNeverThrownVisitor extends BaseInspectionVisitor {
@Override
public void visitMethod(PsiMethod method) {
super.visitMethod(method);
- final PsiAnnotation annotation =
- AnnotationUtil.findAnnotation(method, "org.junit.Test");
+ final PsiAnnotation annotation = AnnotationUtil.findAnnotation(method, "org.junit.Test");
if (annotation == null) {
return;
}
- final PsiAnnotationParameterList parameterList =
- annotation.getParameterList();
+ final PsiAnnotationParameterList parameterList = annotation.getParameterList();
final PsiNameValuePair[] attributes = parameterList.getAttributes();
PsiAnnotationMemberValue value = null;
for (PsiNameValuePair attribute : attributes) {
@@ -79,22 +72,19 @@ public class ExpectedExceptionNeverThrownInspection
if (body == null) {
return;
}
- final PsiClassObjectAccessExpression classObjectAccessExpression =
- (PsiClassObjectAccessExpression)value;
- final PsiTypeElement operand =
- classObjectAccessExpression.getOperand();
+ final PsiClassObjectAccessExpression classObjectAccessExpression = (PsiClassObjectAccessExpression)value;
+ final PsiTypeElement operand = classObjectAccessExpression.getOperand();
final PsiType type = operand.getType();
if (!(type instanceof PsiClassType)) {
return;
}
final PsiClassType classType = (PsiClassType)type;
final PsiClass aClass = classType.resolve();
- if (InheritanceUtil.isInheritor(aClass,
- CommonClassNames.JAVA_LANG_RUNTIME_EXCEPTION)) {
+ if (InheritanceUtil.isInheritor(aClass, CommonClassNames.JAVA_LANG_RUNTIME_EXCEPTION) ||
+ InheritanceUtil.isInheritor(aClass, CommonClassNames.JAVA_LANG_ERROR)) {
return;
}
- final Set<PsiClassType> exceptionsThrown =
- ExceptionUtils.calculateExceptionsThrown(body);
+ final Set<PsiClassType> exceptionsThrown = ExceptionUtils.calculateExceptionsThrown(body);
if (exceptionsThrown.contains(classType)) {
return;
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FileTypeUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FileTypeUtils.java
index 7f07a6bcad31..788812176db3 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FileTypeUtils.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FileTypeUtils.java
@@ -20,7 +20,7 @@ import com.intellij.psi.ServerPageFile;
import com.intellij.psi.util.PsiUtilCore;
public class FileTypeUtils {
- public static boolean isInJsp(PsiElement file) {
+ public static boolean isInServerPageFile(PsiElement file) {
return PsiUtilCore.getTemplateLanguageFile(file) instanceof ServerPageFile;
}
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java
index 591f3266d920..2d1dfe539a43 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java
@@ -124,7 +124,7 @@ public class ImportUtils {
return false;
}
field = containingClass.findFieldByName(shortName, true);
- if (field != null && PsiUtil.isAccessible(field, containingClass, null)) {
+ if (field != null && PsiUtil.isAccessible(containingClass.getProject(), field, containingClass, null)) {
return false;
}
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java
index 0d83164dff0e..da190753b191 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java
@@ -15,6 +15,7 @@
*/
package com.siyeh.ig.psiutils;
+import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
@@ -531,11 +532,12 @@ public class WeakestTypeFinder {
}
@Nullable
- private static PsiClass getVisibleInheritor(PsiClass superClass, PsiElement context) {
+ private static PsiClass getVisibleInheritor(@NotNull PsiClass superClass, PsiElement context) {
final Query<PsiClass> search = DirectClassInheritorsSearch.search(superClass, context.getResolveScope());
+ Project project = superClass.getProject();
for (PsiClass aClass : search) {
if (superClass.isInheritor(aClass, true)) {
- if (PsiUtil.isAccessible(aClass, context, null)) {
+ if (PsiUtil.isAccessible(project, aClass, context, null)) {
return aClass;
}
else {
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/security/DesignForExtensionInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/security/DesignForExtensionInspection.java
index 04052a32324d..7df6ad23aacd 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/security/DesignForExtensionInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/security/DesignForExtensionInspection.java
@@ -47,7 +47,7 @@ public class DesignForExtensionInspection extends BaseInspection {
@Override
public void visitMethod(PsiMethod method) {
- if (FileTypeUtils.isInJsp(method)) {
+ if (FileTypeUtils.isInServerPageFile(method)) {
// IDEADEV-25538
return;
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/EqualsCalledOnEnumConstantInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/EqualsCalledOnEnumConstantInspection.java
index 08adf0c66e43..a134ce56f388 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/EqualsCalledOnEnumConstantInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/EqualsCalledOnEnumConstantInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2008 Bas Leijdekkers
+ * Copyright 2008-2013 Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@ import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.tree.IElementType;
-import com.intellij.util.IncorrectOperationException;
+import com.intellij.psi.util.TypeConversionUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -35,15 +35,13 @@ public class EqualsCalledOnEnumConstantInspection extends BaseInspection {
@Nls
@NotNull
public String getDisplayName() {
- return InspectionGadgetsBundle.message(
- "equals.called.on.enum.constant.display.name");
+ return InspectionGadgetsBundle.message("equals.called.on.enum.constant.display.name");
}
@Override
@NotNull
protected String buildErrorString(Object... infos) {
- return InspectionGadgetsBundle.message(
- "equals.called.on.enum.constant.problem.descriptor");
+ return InspectionGadgetsBundle.message("equals.called.on.enum.constant.problem.descriptor");
}
@Override
@@ -56,19 +54,16 @@ public class EqualsCalledOnEnumConstantInspection extends BaseInspection {
return new EqualsCalledOnEnumValueFix();
}
- private static class EqualsCalledOnEnumValueFix
- extends InspectionGadgetsFix {
+ private static class EqualsCalledOnEnumValueFix extends InspectionGadgetsFix {
@Override
@NotNull
public String getName() {
- return InspectionGadgetsBundle.message(
- "equals.called.on.enum.constant.quickfix");
+ return InspectionGadgetsBundle.message("equals.called.on.enum.constant.quickfix");
}
@Override
- protected void doFix(Project project, ProblemDescriptor descriptor)
- throws IncorrectOperationException {
+ protected void doFix(Project project, ProblemDescriptor descriptor) {
final PsiElement element = descriptor.getPsiElement();
final PsiElement parent = element.getParent();
if (parent == null) {
@@ -78,18 +73,14 @@ public class EqualsCalledOnEnumConstantInspection extends BaseInspection {
if (!(grandParent instanceof PsiMethodCallExpression)) {
return;
}
- final PsiMethodCallExpression methodCallExpression =
- (PsiMethodCallExpression)grandParent;
- final PsiExpressionList argumentList =
- methodCallExpression.getArgumentList();
+ final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)grandParent;
+ final PsiExpressionList argumentList = methodCallExpression.getArgumentList();
final PsiExpression[] arguments = argumentList.getExpressions();
if (arguments.length > 1) {
return;
}
- final PsiReferenceExpression methodExpression =
- methodCallExpression.getMethodExpression();
- final PsiExpression qualifier =
- methodExpression.getQualifierExpression();
+ final PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression();
+ final PsiExpression qualifier = methodExpression.getQualifierExpression();
if (qualifier == null) {
return;
}
@@ -99,8 +90,7 @@ public class EqualsCalledOnEnumConstantInspection extends BaseInspection {
final PsiPrefixExpression prefixExpression;
if (greatGrandParent instanceof PsiPrefixExpression) {
prefixExpression = (PsiPrefixExpression)greatGrandParent;
- final IElementType tokenType =
- prefixExpression.getOperationTokenType();
+ final IElementType tokenType = prefixExpression.getOperationTokenType();
not = JavaTokenType.EXCL == tokenType;
}
else {
@@ -121,8 +111,7 @@ public class EqualsCalledOnEnumConstantInspection extends BaseInspection {
replaceExpression(prefixExpression, newExpression.toString());
}
else {
- replaceExpression(methodCallExpression,
- newExpression.toString());
+ replaceExpression(methodCallExpression, newExpression.toString());
}
}
}
@@ -132,22 +121,25 @@ public class EqualsCalledOnEnumConstantInspection extends BaseInspection {
return new EqualsCalledOnEnumValueVisitor();
}
- private static class EqualsCalledOnEnumValueVisitor
- extends BaseInspectionVisitor {
+ private static class EqualsCalledOnEnumValueVisitor extends BaseInspectionVisitor {
@Override
- public void visitMethodCallExpression(
- @NotNull PsiMethodCallExpression expression) {
+ public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
if (!MethodCallUtils.isEqualsCall(expression)) {
return;
}
- final PsiReferenceExpression methodExpression =
- expression.getMethodExpression();
- final PsiExpression qualifier =
- methodExpression.getQualifierExpression();
- if (!TypeUtils.expressionHasTypeOrSubtype(qualifier,
- CommonClassNames.JAVA_LANG_ENUM)) {
+ final PsiReferenceExpression methodExpression = expression.getMethodExpression();
+ final PsiExpression qualifier = methodExpression.getQualifierExpression();
+ if (qualifier == null || !TypeUtils.expressionHasTypeOrSubtype(qualifier, CommonClassNames.JAVA_LANG_ENUM)) {
+ return;
+ }
+ final PsiExpressionList argumentList = expression.getArgumentList();
+ final PsiExpression[] arguments = argumentList.getExpressions();
+ final PsiType comparedTypeErasure = TypeConversionUtil.erasure(qualifier.getType());
+ final PsiType comparisonTypeErasure = TypeConversionUtil.erasure(arguments[0].getType());
+ if (comparedTypeErasure == null || comparisonTypeErasure == null ||
+ !TypeConversionUtil.areTypesConvertible(comparedTypeErasure, comparisonTypeErasure)) {
return;
}
registerMethodCallError(expression, expression);
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/EmptySynchronizedStatementInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/EmptySynchronizedStatementInspection.java
index 5707639cadbb..43060f727079 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/EmptySynchronizedStatementInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/EmptySynchronizedStatementInspection.java
@@ -52,7 +52,7 @@ public class EmptySynchronizedStatementInspection extends BaseInspection {
public void visitSynchronizedStatement(
@NotNull PsiSynchronizedStatement statement) {
super.visitSynchronizedStatement(statement);
- if (FileTypeUtils.isInJsp(statement.getContainingFile())) {
+ if (FileTypeUtils.isInServerPageFile(statement.getContainingFile())) {
return;
}
final PsiCodeBlock body = statement.getBody();
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/ClassInTopLevelPackageInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/ClassInTopLevelPackageInspection.java
index c55b406145c3..9b5861c3b660 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/ClassInTopLevelPackageInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/ClassInTopLevelPackageInspection.java
@@ -70,7 +70,7 @@ public class ClassInTopLevelPackageInspection extends BaseInspection {
@Override
public void visitClass(@NotNull PsiClass aClass) {
// no call to super, so that it doesn't drill down to inner classes
- if (FileTypeUtils.isInJsp(aClass)) {
+ if (FileTypeUtils.isInServerPageFile(aClass)) {
return;
}
if (ClassUtils.isInnerClass(aClass)) {
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/ClassNameDiffersFromFileNameInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/ClassNameDiffersFromFileNameInspection.java
index e8c9f4305a95..cd7c3c0f7a26 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/ClassNameDiffersFromFileNameInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/ClassNameDiffersFromFileNameInspection.java
@@ -71,7 +71,7 @@ public class ClassNameDiffersFromFileNameInspection extends BaseInspection {
@Override
public void visitClass(@NotNull PsiClass aClass) {
// no call to super, so that it doesn't drill down to inner classes
- if (FileTypeUtils.isInJsp(aClass)) {
+ if (FileTypeUtils.isInServerPageFile(aClass)) {
return;
}
final PsiElement parent = aClass.getParent();
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/EmptyClassInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/EmptyClassInspection.java
index fce8f899721c..85b42f1ebd4b 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/EmptyClassInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/EmptyClassInspection.java
@@ -126,7 +126,7 @@ public class EmptyClassInspection extends BaseInspection {
@Override
public void visitClass(@NotNull PsiClass aClass) {
//don't call super, to prevent drilldown
- if (FileTypeUtils.isInJsp(aClass.getContainingFile())) {
+ if (FileTypeUtils.isInServerPageFile(aClass.getContainingFile())) {
return;
}
if (aClass.isInterface() || aClass.isEnum() || aClass.isAnnotationType()) {
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/imports/StaticImportInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/imports/StaticImportInspection.java
index def9d4ffbd87..167e8007f640 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/imports/StaticImportInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/imports/StaticImportInspection.java
@@ -277,7 +277,7 @@ public class StaticImportInspection extends BaseInspection {
return;
}
final PsiJavaFile file = (PsiJavaFile)parent;
- if (FileTypeUtils.isInJsp(file)) {
+ if (FileTypeUtils.isInServerPageFile(file)) {
return;
}
if (!file.getClasses()[0].equals(aClass)) {
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/migration/WhileCanBeForeachInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/migration/WhileCanBeForeachInspection.java
index b2feda02fc0e..b659021e92a5 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/migration/WhileCanBeForeachInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/migration/WhileCanBeForeachInspection.java
@@ -104,13 +104,30 @@ public class WhileCanBeForeachInspection extends BaseInspection {
}
final PsiReferenceExpression methodExpression = initializer.getMethodExpression();
final PsiExpression collection = methodExpression.getQualifierExpression();
+ final PsiType collectionType;
if (collection == null) {
+ final PsiClass aClass = PsiTreeUtil.getParentOfType(whileStatement, PsiClass.class);
+ if (aClass == null) {
+ return;
+ }
+ final PsiElementFactory factory = JavaPsiFacade.getElementFactory(whileStatement.getProject());
+ collectionType = factory.createType(aClass);
+ }
+ else {
+ collectionType = collection.getType();
+ }
+ if (collectionType == null) {
return;
}
- final PsiType contentType = getContentType(collection.getType(), collection);
+ final PsiType contentType = getContentType(collectionType, CommonClassNames.JAVA_LANG_ITERABLE, whileStatement);
if (contentType == null) {
return;
}
+ final PsiType iteratorType = iterator.getType();
+ final PsiType iteratorContentType = getContentType(iteratorType, "java.util.Iterator", whileStatement);
+ if (iteratorContentType == null) {
+ return;
+ }
final Project project = whileStatement.getProject();
final PsiStatement firstStatement = getFirstStatement(body);
final boolean isDeclaration = isIteratorNextDeclaration(firstStatement, iterator, contentType);
@@ -130,28 +147,28 @@ public class WhileCanBeForeachInspection extends BaseInspection {
if (collection instanceof PsiReferenceExpression) {
final PsiJavaCodeReferenceElement referenceElement = (PsiJavaCodeReferenceElement)collection;
final String collectionName = referenceElement.getReferenceName();
- contentVariableName = createNewVariableName(whileStatement, contentType, collectionName);
+ contentVariableName = createNewVariableName(whileStatement, iteratorContentType, collectionName);
}
else {
- contentVariableName = createNewVariableName(whileStatement, contentType, null);
+ contentVariableName = createNewVariableName(whileStatement, iteratorContentType, null);
}
statementToSkip = null;
}
- final CodeStyleSettings codeStyleSettings = CodeStyleSettingsManager.getSettings(project);
@NonNls final StringBuilder out = new StringBuilder();
out.append("for(");
- if (codeStyleSettings.GENERATE_FINAL_PARAMETERS) {
+ if (CodeStyleSettingsManager.getSettings(project).GENERATE_FINAL_PARAMETERS) {
out.append("final ");
}
- final PsiType iteratorContentType = getContentType(iterator.getType(), iterator);
- if (iteratorContentType == null) {
- return;
- }
out.append(iteratorContentType.getCanonicalText()).append(' ').append(contentVariableName).append(": ");
if (!TypeConversionUtil.isAssignable(iteratorContentType, contentType)) {
out.append("(java.lang.Iterable<").append(iteratorContentType.getCanonicalText()).append(">)");
}
- out.append(collection.getText()).append(')');
+ if (collection == null) {
+ out.append("this");
+ } else {
+ out.append(collection.getText());
+ }
+ out.append(')');
replaceIteratorNext(body, contentVariableName, iterator, contentType, statementToSkip, out);
final Query<PsiReference> query = ReferencesSearch.search(iterator, iterator.getUseScope());
@@ -187,24 +204,41 @@ public class WhileCanBeForeachInspection extends BaseInspection {
}
@Nullable
- private static PsiType getContentType(PsiType type, PsiElement context) {
+ private static PsiType getContentType(PsiType type, String containerClassName, PsiElement context) {
if (!(type instanceof PsiClassType)) {
return null;
}
final PsiClassType classType = (PsiClassType)type;
- final PsiType[] parameters = classType.getParameters();
- if (parameters.length == 1) {
- final PsiType parameterType = parameters[0];
- if (parameterType instanceof PsiCapturedWildcardType) {
- final PsiCapturedWildcardType wildcardType = (PsiCapturedWildcardType)parameterType;
- final PsiType bound = wildcardType.getUpperBound();
- if (bound != null) {
- return bound;
+ final PsiClassType.ClassResolveResult resolveResult = classType.resolveGenerics();
+ final PsiClass aClass = resolveResult.getElement();
+ final Project project = context.getProject();
+
+ if (aClass == null) {
+ return null;
+ }
+ final PsiClass iterableClass = JavaPsiFacade.getInstance(project).findClass(containerClassName, aClass.getResolveScope());
+ if (iterableClass == null) {
+ return null;
+ }
+ final PsiSubstitutor substitutor1 = resolveResult.getSubstitutor();
+ final PsiSubstitutor substitutor = TypeConversionUtil.getClassSubstitutor(iterableClass, aClass, substitutor1);
+ if (substitutor == null) {
+ return null;
+ }
+ PsiType parameterType = substitutor.substitute(iterableClass.getTypeParameters()[0]);
+ if (parameterType instanceof PsiCapturedWildcardType) {
+ parameterType = ((PsiCapturedWildcardType)parameterType).getWildcard();
+ }
+ if (parameterType != null) {
+ if (parameterType instanceof PsiWildcardType) {
+ if (((PsiWildcardType)parameterType).isExtends()) {
+ return ((PsiWildcardType)parameterType).getBound();
+ }
+ else {
+ return null;
}
}
- else if (parameterType != null) {
- return parameterType;
- }
+ return parameterType;
}
return TypeUtils.getObjectType(context);
}
@@ -320,7 +354,7 @@ public class WhileCanBeForeachInspection extends BaseInspection {
baseName = "value";
}
}
- if (baseName == null || baseName.length() == 0) {
+ if (baseName == null || baseName.isEmpty()) {
baseName = "value";
}
return codeStyleManager.suggestUniqueVariableName(baseName, scope, true);
@@ -395,19 +429,24 @@ public class WhileCanBeForeachInspection extends BaseInspection {
return false;
}
final PsiExpression qualifier = initialMethodExpression.getQualifierExpression();
- if (qualifier == null) {
+ if (qualifier instanceof PsiSuperExpression) {
return false;
}
- final PsiType qualifierType = qualifier.getType();
- if (!(qualifierType instanceof PsiClassType)) {
- return false;
+ final PsiClass qualifierClass;
+ if (qualifier != null) {
+ final PsiType qualifierType = qualifier.getType();
+ if (!(qualifierType instanceof PsiClassType)) {
+ return false;
+ }
+ qualifierClass = ((PsiClassType)qualifierType).resolve();
+ }
+ else {
+ qualifierClass = PsiTreeUtil.getParentOfType(whileStatement, PsiClass.class);
}
- final PsiClass qualifierClass = ((PsiClassType)qualifierType).resolve();
if (qualifierClass == null) {
return false;
}
- if (!InheritanceUtil.isInheritor(qualifierClass, CommonClassNames.JAVA_LANG_ITERABLE) &&
- !InheritanceUtil.isInheritor(qualifierClass, CommonClassNames.JAVA_UTIL_COLLECTION)) {
+ if (!InheritanceUtil.isInheritor(qualifierClass, CommonClassNames.JAVA_LANG_ITERABLE)) {
return false;
}
final PsiExpression condition = whileStatement.getCondition();
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/Cast.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/Cast.after.java
new file mode 100644
index 000000000000..66bed9bde7a0
--- /dev/null
+++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/Cast.after.java
@@ -0,0 +1,12 @@
+package com.siyeh.igfixes.migration.while_can_be_foreach;
+
+import java.util.Iterator;
+import java.util.List;
+
+class Cast {
+ void m(List ss) {
+ for (String s : (Iterable<String>) ss) {
+ System.out.println(s);
+ }
+ }
+}
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/Cast.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/Cast.java
new file mode 100644
index 000000000000..8552ddaa3fd3
--- /dev/null
+++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/Cast.java
@@ -0,0 +1,13 @@
+package com.siyeh.igfixes.migration.while_can_be_foreach;
+
+import java.util.Iterator;
+import java.util.List;
+
+class Cast {
+ void m(List ss) {
+ final Iterator<String> iterator = ss.iterator();
+ while<caret> (iterator.hasNext()) {
+ System.out.println(iterator.next());
+ }
+ }
+}
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/This.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/This.after.java
new file mode 100644
index 000000000000..436a4597e100
--- /dev/null
+++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/This.after.java
@@ -0,0 +1,18 @@
+package com.siyeh.igfixes.migration.while_can_be_foreach;
+
+import java.util.Iterator;
+import java.util.List;
+
+class This implements Iterable {
+
+ void m() {
+ for (Object o : this) {
+ System.out.println(o);
+ }
+ }
+
+ @Override
+ public Iterator iterator() {
+ return null;
+ }
+}
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/This.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/This.java
new file mode 100644
index 000000000000..90134d288d86
--- /dev/null
+++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/migration/while_can_be_foreach/This.java
@@ -0,0 +1,19 @@
+package com.siyeh.igfixes.migration.while_can_be_foreach;
+
+import java.util.Iterator;
+import java.util.List;
+
+class This implements Iterable {
+
+ void m() {
+ final Iterator iterator = iterator();
+ <caret>while (iterator.hasNext()) {
+ System.out.println(iterator.next());
+ }
+ }
+
+ @Override
+ public Iterator iterator() {
+ return null;
+ }
+}
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/AutoUnboxing.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/AutoUnboxing.java
index cc872129b63e..a39bd53e4407 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/AutoUnboxing.java
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/AutoUnboxing.java
@@ -54,8 +54,9 @@ public class AutoUnboxing {
}
}
- void m(Object o, Boolean b) {
+ void m(Object o, Boolean b, Number n) {
if ((boolean) o) {}
if ((boolean) b) {}
+ if ((int)n) {}
}
}
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/expected.xml
index b42d1de62abf..431f5ca55078 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/expected.xml
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_unboxing/expected.xml
@@ -98,4 +98,12 @@
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Auto-unboxing</problem_class>
<description>Auto-unboxing &lt;code&gt;b&lt;/code&gt; #loc</description>
</problem>
+
+ <problem>
+ <file>AutoUnboxing.java</file>
+ <line>60</line>
+ <problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Auto-unboxing</problem_class>
+ <description>Auto-unboxing &lt;code&gt;n&lt;/code&gt; #loc</description>
+ </problem>
+
</problems> \ No newline at end of file
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/while_can_be_foreach/WhileCanBeForeachInspection.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/while_can_be_foreach/WhileCanBeForeachInspection.java
index 58b0d2f61df3..9452d00db652 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/while_can_be_foreach/WhileCanBeForeachInspection.java
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/while_can_be_foreach/WhileCanBeForeachInspection.java
@@ -99,3 +99,25 @@ public class WhileCanBeForeachInspection {
}
}
}
+class Base implements Iterable<String> {
+ @Override
+ public Iterator<String> iterator() {
+ return null;
+ }
+}
+
+class Sub extends Base {
+ @Override
+ public Iterator<String> iterator() {
+ ArrayList<String> strings = new ArrayList<String>();
+ Iterator<String> superIterator = super.iterator();
+
+ while (superIterator.hasNext()) {
+ String str = superIterator.next();
+
+ strings.add(str + str);
+ }
+
+ return strings.iterator();
+ }
+} \ No newline at end of file
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/style/equals_called_on_enum_constant/EqualsCalled.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/style/equals_called_on_enum_constant/EqualsCalled.java
index 72cd8bf7f181..195c38b8e6e6 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/style/equals_called_on_enum_constant/EqualsCalled.java
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/style/equals_called_on_enum_constant/EqualsCalled.java
@@ -13,3 +13,12 @@ public class EqualsCalled {
A.equals(1);
}
}
+class Main {
+ enum Suit {
+ SPADES, HEARTS, DIAMONDS, CLUBS
+ }
+
+ private boolean equalsType(Suit suit, String type) {
+ return suit.equals(type);
+ }
+}
diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/migration/WhileCanBeForeachFixTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/migration/WhileCanBeForeachFixTest.java
new file mode 100644
index 000000000000..0b2d7d2f9e5e
--- /dev/null
+++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/migration/WhileCanBeForeachFixTest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2000-2012 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.siyeh.ig.fixes.migration;
+
+import com.siyeh.InspectionGadgetsBundle;
+import com.siyeh.ig.IGQuickFixesTestCase;
+import com.siyeh.ig.migration.UnnecessaryBoxingInspection;
+import com.siyeh.ig.migration.WhileCanBeForeachInspection;
+
+public class WhileCanBeForeachFixTest extends IGQuickFixesTestCase {
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ myFixture.enableInspections(new WhileCanBeForeachInspection());
+ myDefaultHint = InspectionGadgetsBundle.message("foreach.replace.quickfix");
+ }
+
+ public void testThis() { doTest(); }
+ public void testCast() { doTest(); }
+
+ @Override
+ protected String getRelativePath() {
+ return "migration/while_can_be_foreach";
+ }
+}
diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/ExpectedExceptionNeverThrownInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/ExpectedExceptionNeverThrownInspectionTest.java
new file mode 100644
index 000000000000..e057666843c8
--- /dev/null
+++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/junit/ExpectedExceptionNeverThrownInspectionTest.java
@@ -0,0 +1,47 @@
+/**
+ * (c) 2013 Desert Island BV
+ * created: 14 08 2013
+ */
+package com.siyeh.ig.junit;
+
+import com.intellij.codeInspection.LocalInspectionTool;
+import com.siyeh.ig.LightInspectionTestCase;
+
+/**
+ * @author Bas Leijdekkers
+ */
+public class ExpectedExceptionNeverThrownInspectionTest extends LightInspectionTestCase {
+ @Override
+ protected LocalInspectionTool getInspection() {
+ return new ExpectedExceptionNeverThrownInspection();
+ }
+
+ @Override
+ protected String[] getEnvironmentClasses() {
+ return new String[] {"package org.junit; " +
+ "public @interface Test {\n" +
+ " java.lang.Class<? extends java.lang.Throwable> expected() default org.junit.Test.None.class;" +
+ "}"};
+ }
+
+ public void testSimple() {
+ doTest("class X {" +
+ " @org.junit.Test(expected=/*Expected 'java.io.IOException' never thrown in body of 'test()'*/java.io.IOException/**/.class)" +
+ " public void test() {}" +
+ "}");
+ }
+
+ public void testError() {
+ doTest("class X {" +
+ " @org.junit.Test(expected = Error.class)" +
+ " public void test() {}" +
+ "}");
+ }
+
+ public void testRuntimeException() {
+ doTest("class X {" +
+ " @org.junit.Test(expected = IllegalArgumentException.class)" +
+ " public void test() {}" +
+ "}");
+ }
+}
diff --git a/plugins/IntelliLang/IntelliLang-tests/test/org/intellij/plugins/intelliLang/ReferenceInjectionTest.java b/plugins/IntelliLang/IntelliLang-tests/test/org/intellij/plugins/intelliLang/ReferenceInjectionTest.java
index 75fead477579..14222289e26c 100644
--- a/plugins/IntelliLang/IntelliLang-tests/test/org/intellij/plugins/intelliLang/ReferenceInjectionTest.java
+++ b/plugins/IntelliLang/IntelliLang-tests/test/org/intellij/plugins/intelliLang/ReferenceInjectionTest.java
@@ -6,7 +6,7 @@ import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiReference;
import com.intellij.psi.impl.PsiModificationTrackerImpl;
import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase;
+import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import org.intellij.plugins.intelliLang.inject.InjectLanguageAction;
import org.intellij.plugins.intelliLang.inject.UnInjectLanguageAction;
import org.intellij.plugins.intelliLang.references.FileReferenceInjector;
@@ -18,7 +18,7 @@ import org.jdom.Element;
* @author Dmitry Avdeev
* Date: 02.08.13
*/
-public class ReferenceInjectionTest extends LightPlatformCodeInsightFixtureTestCase {
+public class ReferenceInjectionTest extends LightCodeInsightFixtureTestCase {
public void testInjectReference() throws Exception {
@@ -87,11 +87,20 @@ public class ReferenceInjectionTest extends LightPlatformCodeInsightFixtureTestC
assertNull(getInjectedReferences());
}
+ public void testInjectByAnnotation() throws Exception {
+ myFixture.configureByText("Foo.java", "class Foo {\n" +
+ " @org.intellij.lang.annotations.Language(\"file-reference\")\n" +
+ " String bar() {\n" +
+ " return \"<error descr=\"Cannot resolve file 'unknown.file'\">unknown.file</error>\";\n" +
+ " } \n" +
+ "}");
+ myFixture.testHighlighting();
+ }
+
private PsiReference[] getInjectedReferences() {
PsiElement element = myFixture.getFile().findElementAt(myFixture.getCaretOffset());
element = PsiTreeUtil.getParentOfType(element, PsiLanguageInjectionHost.class);
assertNotNull(element);
- element.getReferences();
return InjectedReferencesContributor.getInjectedReferences(element);
}
@@ -106,9 +115,4 @@ public class ReferenceInjectionTest extends LightPlatformCodeInsightFixtureTestC
myFixture.disableInspections(new InjectedReferencesInspection());
super.tearDown();
}
-
- @Override
- protected boolean isWriteActionRequired() {
- return false;
- }
}
diff --git a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java
index b2f1360b59d9..32378d0bc46c 100644
--- a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java
+++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java
@@ -28,6 +28,7 @@ import com.intellij.patterns.ElementPattern;
import com.intellij.psi.*;
import com.intellij.psi.impl.java.stubs.index.JavaAnnotationIndex;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.injection.ReferenceInjector;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
@@ -374,8 +375,15 @@ public class ConcatenationInjector implements ConcatenationAwareInjector {
}
private void processInjectionWithContext(BaseInjection injection, boolean settingsAvailable) {
- final Language language = InjectedLanguage.findLanguageById(injection.getInjectedLanguageId());
- if (language == null) return;
+ Language language = InjectedLanguage.findLanguageById(injection.getInjectedLanguageId());
+ if (language == null) {
+ ReferenceInjector injector = ReferenceInjector.findById(injection.getInjectedLanguageId());
+ if (injector != null) {
+ language = injector.toLanguage();
+ }
+ else return;
+ }
+
final boolean separateFiles = !injection.isSingleFile() && StringUtil.isNotEmpty(injection.getValuePattern());
final Ref<Boolean> unparsableRef = Ref.create(myUnparsable);
diff --git a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java
index 7bf11d2cdb65..a45393313a21 100644
--- a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java
+++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java
@@ -19,6 +19,7 @@ package org.intellij.plugins.intelliLang.inject.java;
import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.daemon.impl.quickfix.OrderEntryFix;
import com.intellij.lang.Language;
+import com.intellij.lang.injection.MultiHostRegistrar;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.Result;
@@ -40,10 +41,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.ui.SimpleColoredText;
import com.intellij.ui.SimpleTextAttributes;
-import com.intellij.util.ArrayUtil;
-import com.intellij.util.Consumer;
-import com.intellij.util.NullableFunction;
-import com.intellij.util.PlatformIcons;
+import com.intellij.util.*;
import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashSet;
import org.intellij.plugins.intelliLang.AdvancedSettingsUI;
@@ -103,7 +101,7 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
public boolean addInjectionInPlace(final Language language, final PsiLanguageInjectionHost psiElement) {
if (!isMine(psiElement)) return false;
- return doInjectInJava(psiElement.getProject(), psiElement, language.getID());
+ return doInjectInJava(psiElement.getProject(), psiElement, psiElement, language.getID());
}
public boolean removeInjectionInPlace(final PsiLanguageInjectionHost psiElement) {
@@ -141,7 +139,8 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
if (injectionsMap.isEmpty() || !annotations.isEmpty()) return false;
final BaseInjection originalInjection = injectionsMap.keySet().iterator().next();
- final MethodParameterInjection methodParameterInjection = createFrom(psiElement.getProject(), originalInjection, injectionsMap.get(originalInjection).first, false);
+ final MethodParameterInjection methodParameterInjection = createFrom(psiElement.getProject(), originalInjection,
+ injectionsMap.get(originalInjection).first, false);
final MethodParameterInjection copy = methodParameterInjection.copy();
final BaseInjection newInjection = showInjectionUI(project, methodParameterInjection);
if (newInjection != null) {
@@ -182,43 +181,66 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
else return new BaseInjection(JAVA_SUPPORT_ID);
}
- private static boolean doInjectInJava(final Project project, final PsiElement host, final String languageId) {
- final PsiElement target = ContextComputationProcessor.getTopLevelInjectionTarget(host);
+ private static boolean doInjectInJava(final Project project,
+ final PsiElement psiElement,
+ PsiLanguageInjectionHost host,
+ final String languageId) {
+ final PsiElement target = ContextComputationProcessor.getTopLevelInjectionTarget(psiElement);
final PsiElement parent = target.getParent();
if (parent instanceof PsiReturnStatement ||
parent instanceof PsiMethod ||
parent instanceof PsiNameValuePair) {
- return doInjectInJavaMethod(project, findPsiMethod(parent), -1, languageId);
+ return doInjectInJavaMethod(project, findPsiMethod(parent), -1, host, languageId);
}
else if (parent instanceof PsiExpressionList && parent.getParent() instanceof PsiCallExpression) {
- return doInjectInJavaMethod(project, findPsiMethod(parent), findParameterIndex(target, (PsiExpressionList)parent), languageId);
+ return doInjectInJavaMethod(project, findPsiMethod(parent), findParameterIndex(target, (PsiExpressionList)parent), host, languageId);
}
else if (parent instanceof PsiAssignmentExpression) {
final PsiExpression psiExpression = ((PsiAssignmentExpression)parent).getLExpression();
if (psiExpression instanceof PsiReferenceExpression) {
final PsiElement element = ((PsiReferenceExpression)psiExpression).resolve();
if (element != null) {
- return doInjectInJava(project, element, languageId);
+ return doInjectInJava(project, element, host, languageId);
}
}
}
else if (parent instanceof PsiVariable) {
- if (doAddLanguageAnnotation(project, (PsiModifierListOwner)parent, languageId)) return true;
+ if (doAddLanguageAnnotation(project, (PsiModifierListOwner)parent, host, languageId)) return true;
}
else if (target instanceof PsiVariable) {
- if (doAddLanguageAnnotation(project, (PsiModifierListOwner)target, languageId)) return true;
+ if (doAddLanguageAnnotation(project, (PsiModifierListOwner)target, host, languageId)) return true;
}
return false;
}
- public static boolean doAddLanguageAnnotation(final Project project, final PsiModifierListOwner modifierListOwner, final String languageId) {
- if (!Configuration.getProjectInstance(project).getAdvancedConfiguration().isSourceModificationAllowed()) return false;
+ public static boolean doAddLanguageAnnotation(final Project project,
+ final PsiModifierListOwner modifierListOwner,
+ @NotNull PsiLanguageInjectionHost host,
+ final String languageId) {
if (modifierListOwner.getModifierList() == null || !PsiUtil.isLanguageLevel5OrHigher(modifierListOwner)) return false;
- if (!OrderEntryFix.isAnnotationsJarInPath(ModuleUtilCore.findModuleForPsiElement(modifierListOwner))) {
+ final Configuration.AdvancedConfiguration configuration = Configuration.getProjectInstance(project).getAdvancedConfiguration();
+ if (!configuration.isSourceModificationAllowed()) {
// todo add languageId comment
+ host.putUserData(InjectLanguageAction.FIX_KEY, new Processor<PsiLanguageInjectionHost>() {
+ @Override
+ public boolean process(PsiLanguageInjectionHost host) {
+ boolean allowed = configuration.isSourceModificationAllowed();
+ configuration.setSourceModificationAllowed(true);
+ try {
+ return doInjectInJava(project, host, host, languageId);
+ }
+ finally {
+ configuration.setSourceModificationAllowed(allowed);
+ }
+ }
+ });
+
return false;
}
- new WriteCommandAction(project, modifierListOwner.getContainingFile()) {
+ if (!OrderEntryFix.ensureAnnotationsJarInPath(ModuleUtilCore.findModuleForPsiElement(modifierListOwner))) {
+ return false;
+ }
+ new WriteCommandAction(modifierListOwner.getProject(), modifierListOwner.getContainingFile()) {
protected void run(final Result result) throws Throwable {
JVMElementFactory factory = JVMElementFactories.getFactory(modifierListOwner.getLanguage(), modifierListOwner.getProject());
if (factory == null) {
@@ -243,19 +265,21 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
public static boolean doInjectInJavaMethod(@NotNull final Project project,
@Nullable final PsiMethod psiMethod,
final int parameterIndex,
- @NotNull final String languageId) {
+ @NotNull PsiLanguageInjectionHost host, @NotNull final String languageId) {
if (psiMethod == null) return false;
if (parameterIndex < -1) return false;
if (parameterIndex >= psiMethod.getParameterList().getParametersCount()) return false;
final PsiModifierList methodModifiers = psiMethod.getModifierList();
if (methodModifiers.hasModifierProperty(PsiModifier.PRIVATE) || methodModifiers.hasModifierProperty(PsiModifier.PACKAGE_LOCAL)) {
- return doAddLanguageAnnotation(project, parameterIndex >= 0? psiMethod.getParameterList().getParameters()[parameterIndex] : psiMethod, languageId);
+ return doAddLanguageAnnotation(project, parameterIndex >= 0? psiMethod.getParameterList().getParameters()[parameterIndex] : psiMethod,
+ host, languageId);
}
final PsiClass containingClass = psiMethod.getContainingClass();
assert containingClass != null;
final PsiModifierList classModifiers = containingClass.getModifierList();
if (classModifiers != null && (classModifiers.hasModifierProperty(PsiModifier.PRIVATE) || classModifiers.hasModifierProperty(PsiModifier.PACKAGE_LOCAL))) {
- return doAddLanguageAnnotation(project, parameterIndex >= 0? psiMethod.getParameterList().getParameters()[parameterIndex] : psiMethod, languageId);
+ return doAddLanguageAnnotation(project, parameterIndex >= 0? psiMethod.getParameterList().getParameters()[parameterIndex] : psiMethod,
+ host, languageId);
}
final String className = containingClass.getQualifiedName();
@@ -427,7 +451,8 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
if (!visitedSignatures.add(methodInfo.getMethodSignature())) continue;
if (isInjectable(method.getReturnType(), method.getProject())) {
final int parameterIndex = -1;
- int index = ArrayUtil.find(injection.getInjectionPlaces(), new InjectionPlace(compiler.compileElementPattern(getPatternStringForJavaPlace(method, parameterIndex)), true));
+ int index = ArrayUtilRt.find(injection.getInjectionPlaces(), new InjectionPlace(
+ compiler.compileElementPattern(getPatternStringForJavaPlace(method, parameterIndex)), true));
final InjectionPlace place = index > -1 ? injection.getInjectionPlaces()[index] : null;
methodInfo.setReturnFlag(place != null && place.isEnabled() || includeAllPlaces);
add = true;
@@ -436,7 +461,9 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
for (int i = 0; i < parameters.length; i++) {
final PsiParameter p = parameters[i];
if (isInjectable(p.getType(), p.getProject())) {
- int index = ArrayUtil.find(injection.getInjectionPlaces(), new InjectionPlace(compiler.compileElementPattern(getPatternStringForJavaPlace(method, i)), true));
+ int index = ArrayUtilRt.find(injection.getInjectionPlaces(),
+ new InjectionPlace(compiler.compileElementPattern(getPatternStringForJavaPlace(method, i)),
+ true));
final InjectionPlace place = index > -1 ? injection.getInjectionPlaces()[index] : null;
methodInfo.getParamFlags()[i] = place != null && place.isEnabled() || includeAllPlaces;
add = true;
@@ -519,6 +546,11 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
}
@Override
+ public void getLanguagesToInject(@NotNull MultiHostRegistrar registrar, @NotNull PsiElement context) {
+
+ }
+
+ @Override
public String getHelpId() {
return "reference.settings.injection.language.injection.settings.java.parameter";
}
diff --git a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/LanguageReference.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/LanguageReference.java
index 1cd96284c005..c6cc44a12198 100644
--- a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/LanguageReference.java
+++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/LanguageReference.java
@@ -17,18 +17,19 @@ package org.intellij.plugins.intelliLang.inject.java;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
-import com.intellij.lang.Language;
-import com.intellij.openapi.fileTypes.FileType;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiLiteralExpression;
+import com.intellij.psi.injection.Injectable;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
-import com.intellij.util.ui.EmptyIcon;
+import org.intellij.plugins.intelliLang.inject.InjectLanguageAction;
import org.intellij.plugins.intelliLang.inject.InjectedLanguage;
import org.intellij.plugins.intelliLang.util.StringLiteralReference;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.List;
+
/**
* Provides completion for available Language-IDs in
* <pre>@Language("[ctrl-space]")</pre>
@@ -50,22 +51,13 @@ final class LanguageReference extends StringLiteralReference {
@NotNull
public Object[] getVariants() {
- final String[] ids = InjectedLanguage.getAvailableLanguageIDs();
- return ContainerUtil.map2Array(ids, LookupElement.class, new Function<String, LookupElement>() {
- public LookupElement fun(String s) {
- final Language l = InjectedLanguage.findLanguageById(s);
- assert l != null;
-
- final FileType ft = l.getAssociatedFileType();
- if (ft != null) {
- return LookupElementBuilder.create(s).withIcon(ft.getIcon()).withTypeText(ft.getDescription());
-// } else if (l == StdLanguages.EL) {
-// // IDEA-10012
-// return new LanguageLookupValue(s, StdFileTypes.JSP.getIcon(), "Expression Language");
- }
- return LookupElementBuilder.create(s).withIcon(EmptyIcon.ICON_16);
+ List<Injectable> list = InjectLanguageAction.getAllInjectables();
+ return ContainerUtil.map2Array(list, LookupElement.class, new Function<Injectable, LookupElement>() {
+ @Override
+ public LookupElement fun(Injectable injectable) {
+ return LookupElementBuilder.create(injectable.getId()).withIcon(injectable.getIcon()).withTailText(
+ "(" + injectable.getDisplayName() + ")", true);
}
});
}
-
}
diff --git a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/UnknownLanguageID.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/UnknownLanguageID.java
index 0fb9b31883e9..8e33447dba20 100644
--- a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/UnknownLanguageID.java
+++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/UnknownLanguageID.java
@@ -19,8 +19,8 @@ import com.intellij.codeHighlighting.HighlightDisplayLevel;
import com.intellij.codeInspection.LocalInspectionTool;
import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.codeInspection.ProblemsHolder;
-import com.intellij.lang.Language;
import com.intellij.psi.*;
+import com.intellij.psi.injection.ReferenceInjector;
import com.intellij.psi.util.PsiTreeUtil;
import org.intellij.plugins.intelliLang.Configuration;
import org.intellij.plugins.intelliLang.inject.InjectedLanguage;
@@ -68,8 +68,7 @@ public class UnknownLanguageID extends LocalInspectionTool {
final Object id = JavaPsiFacade.getInstance(expression.getProject()).
getConstantEvaluationHelper().computeConstantExpression(expression);
if (id instanceof String) {
- final Language language = InjectedLanguage.findLanguageById((String)id);
- if (language == null) {
+ if (InjectedLanguage.findLanguageById((String)id) == null && ReferenceInjector.findById((String)id) == null) {
holder.registerProblem(expression, "Unknown language '" + id + "'", ProblemHighlightType.LIKE_UNKNOWN_SYMBOL);
}
}
diff --git a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java
index 2397b47701e5..0b4360c34a81 100644
--- a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java
+++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java
@@ -44,7 +44,7 @@ public class AnnotationUtilEx {
* @see AnnotationUtilEx#getAnnotatedElementFor(com.intellij.psi.PsiElement, LookupType)
*/
public enum LookupType {
- PREFER_CONTEXT, PREFER_DECLARATION, CONTEXT_ONLY, DECLRARATION_ONLY
+ PREFER_CONTEXT, PREFER_DECLARATION, CONTEXT_ONLY, DECLARATION_ONLY
}
/**
@@ -55,13 +55,13 @@ public class AnnotationUtilEx {
@Nullable
public static PsiModifierListOwner getAnnotatedElementFor(@Nullable PsiElement element, LookupType type) {
while (element != null) {
- if (type == LookupType.PREFER_DECLARATION || type == LookupType.DECLRARATION_ONLY) {
+ if (type == LookupType.PREFER_DECLARATION || type == LookupType.DECLARATION_ONLY) {
if (element instanceof PsiReferenceExpression) {
final PsiElement e = ((PsiReferenceExpression)element).resolve();
if (e instanceof PsiModifierListOwner) {
return (PsiModifierListOwner)e;
}
- if (type == LookupType.DECLRARATION_ONLY) {
+ if (type == LookupType.DECLARATION_ONLY) {
return null;
}
}
@@ -105,7 +105,7 @@ public class AnnotationUtilEx {
// If no annotation has been found through the usage context, check if the element
// (i.e. the element the reference refers to) is annotated itself
- if (type != LookupType.DECLRARATION_ONLY) {
+ if (type != LookupType.DECLARATION_ONLY) {
if (element instanceof PsiReferenceExpression) {
final PsiElement e = ((PsiReferenceExpression)element).resolve();
if (e instanceof PsiModifierListOwner) {
@@ -186,7 +186,7 @@ public class AnnotationUtilEx {
* <p/>
* The <code>annotationName</code> parameter is a pair of the target annotation class' fully qualified name as a
* String and as a Set. This is done for performance reasons because the Set is required by the
- * {@link com.intellij.codeInsight.AnnotationUtil} utility class and allows to avoid unecessary object constructions.
+ * {@link com.intellij.codeInsight.AnnotationUtil} utility class and allows to avoid unnecessary object constructions.
*/
@NotNull
public static PsiAnnotation[] getAnnotationFrom(PsiModifierListOwner owner,
@@ -206,7 +206,7 @@ public class AnnotationUtilEx {
* <p/>
* The <code>annotationName</code> parameter is a pair of the target annotation class' fully qualified name as a
* String and as a Set. This is done for performance reasons because the Set is required by the
- * {@link com.intellij.codeInsight.AnnotationUtil} utility class and allows to avoid unecessary object constructions.
+ * {@link com.intellij.codeInsight.AnnotationUtil} utility class and allows to avoid unnecessary object constructions.
*/
public static PsiAnnotation[] getAnnotationsFromImpl(PsiModifierListOwner owner,
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/AbstractLanguageInjectionSupport.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/AbstractLanguageInjectionSupport.java
index bcfd9c5c2b8a..80e5577f9aa7 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/AbstractLanguageInjectionSupport.java
+++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/AbstractLanguageInjectionSupport.java
@@ -17,6 +17,7 @@
package org.intellij.plugins.intelliLang.inject;
import com.intellij.lang.Language;
+import com.intellij.lang.injection.MultiHostRegistrar;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.fileTypes.FileTypeManager;
@@ -62,6 +63,9 @@ public abstract class AbstractLanguageInjectionSupport extends LanguageInjection
return InjectorUtils.findCommentInjection(host, "comment", commentRef);
}
+ public void getLanguagesToInject(@NotNull MultiHostRegistrar registrar, @NotNull PsiElement context) {
+ }
+
public boolean addInjectionInPlace(final Language language, final PsiLanguageInjectionHost psiElement) {
return false;
}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java
index 6ff3d9856996..0d6a2be57bf5 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java
+++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java
@@ -17,27 +17,31 @@ package org.intellij.plugins.intelliLang.inject;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.codeInsight.hint.HintManager;
+import com.intellij.codeInsight.hint.QuestionAction;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.injected.editor.EditorWindow;
import com.intellij.lang.Language;
import com.intellij.lang.injection.InjectedLanguageManager;
+import com.intellij.openapi.actionSystem.ActionManager;
+import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.JBPopup;
import com.intellij.openapi.ui.popup.PopupChooserBuilder;
import com.intellij.openapi.util.Condition;
+import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiLanguageInjectionHost;
-import com.intellij.psi.PsiManager;
+import com.intellij.psi.*;
import com.intellij.psi.impl.PsiModificationTrackerImpl;
+import com.intellij.psi.injection.Injectable;
+import com.intellij.psi.injection.ReferenceInjector;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.ui.ColoredListCellRendererWrapper;
import com.intellij.ui.SimpleTextAttributes;
@@ -48,9 +52,7 @@ import com.intellij.util.IncorrectOperationException;
import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
import org.intellij.plugins.intelliLang.Configuration;
-import com.intellij.psi.injection.Injectable;
import org.intellij.plugins.intelliLang.references.InjectedReferencesContributor;
-import com.intellij.psi.injection.ReferenceInjector;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -64,6 +66,7 @@ import java.util.List;
public class InjectLanguageAction implements IntentionAction {
@NonNls private static final String INJECT_LANGUAGE_FAMILY = "Inject Language/Reference";
public static final String LAST_INJECTED_LANGUAGE = "LAST_INJECTED_LANGUAGE";
+ public static final Key<Processor<PsiLanguageInjectionHost>> FIX_KEY = Key.create("inject fix key");
public static List<Injectable> getAllInjectables() {
Language[] languages = InjectedLanguage.getAvailableLanguages();
@@ -120,12 +123,13 @@ public class InjectLanguageAction implements IntentionAction {
});
}
- public static void invokeImpl(Project project, Editor editor, PsiFile file, Injectable injectable) {
+ public static void invokeImpl(Project project, Editor editor, final PsiFile file, Injectable injectable) {
final PsiLanguageInjectionHost host = findInjectionHost(editor, file);
if (host == null) return;
if (defaultFunctionalityWorked(host, injectable.getId())) return;
try {
+ host.putUserData(FIX_KEY, null);
Language language = injectable.toLanguage();
for (LanguageInjectionSupport support : InjectorUtils.getActiveInjectionSupports()) {
if (support.isApplicableTo(host) && support.addInjectionInPlace(language, host)) {
@@ -133,7 +137,26 @@ public class InjectLanguageAction implements IntentionAction {
}
}
if (TemporaryPlacesRegistry.getInstance(project).getLanguageInjectionSupport().addInjectionInPlace(language, host)) {
- HintManager.getInstance().showInformationHint(editor, StringUtil.escapeXml(language.getDisplayName()) + " was temporarily injected");
+ final Processor<PsiLanguageInjectionHost> data = host.getUserData(FIX_KEY);
+ String text = StringUtil.escapeXml(language.getDisplayName()) + " was temporarily injected.";
+ if (data != null) {
+ if (!ApplicationManager.getApplication().isUnitTestMode()) {
+ final SmartPsiElementPointer<PsiLanguageInjectionHost> pointer =
+ SmartPointerManager.getInstance(project).createSmartPsiElementPointer(host);
+ final TextRange range = host.getTextRange();
+ HintManager.getInstance().showQuestionHint(editor, text + "<br>Do you want to insert annotation? " + KeymapUtil
+ .getFirstKeyboardShortcutText(ActionManager.getInstance().getAction(IdeActions.ACTION_SHOW_INTENTION_ACTIONS)),
+ range.getStartOffset(), range.getEndOffset(), new QuestionAction() {
+ @Override
+ public boolean execute() {
+ return data.process(pointer.getElement());
+ }
+ });
+ }
+ }
+ else {
+ HintManager.getInstance().showInformationHint(editor, text);
+ }
}
}
finally {
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/ValueRegExpAnnotator.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/ValueRegExpAnnotator.java
index 2db97ef0c5fe..81a47321d0f6 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/ValueRegExpAnnotator.java
+++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/ValueRegExpAnnotator.java
@@ -26,6 +26,7 @@ import org.intellij.lang.regexp.psi.RegExpBranch;
import org.intellij.lang.regexp.psi.RegExpGroup;
import org.intellij.lang.regexp.psi.RegExpPattern;
import org.intellij.lang.regexp.psi.RegExpRecursiveElementVisitor;
+import org.jetbrains.annotations.NotNull;
/**
* Annotator that is used to validate the "Value-Pattern" textfield: The regex entered there should contain exactly
@@ -42,7 +43,7 @@ public class ValueRegExpAnnotator implements Annotator {
public ValueRegExpAnnotator() {
}
- public void annotate(PsiElement psiElement, AnnotationHolder holder) {
+ public void annotate(@NotNull PsiElement psiElement, @NotNull AnnotationHolder holder) {
if (psiElement instanceof RegExpFile && psiElement.getCopyableUserData(KEY) == Boolean.TRUE) {
final PsiElement pattern = psiElement.getFirstChild();
if (!(pattern instanceof RegExpPattern)) {
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/references/InjectedReferencesContributor.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/references/InjectedReferencesContributor.java
index 69d781992881..0ee07affca98 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/references/InjectedReferencesContributor.java
+++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/references/InjectedReferencesContributor.java
@@ -16,12 +16,15 @@
package org.intellij.plugins.intelliLang.references;
import com.intellij.openapi.util.Key;
+import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.TextRange;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.*;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedReferenceVisitor;
import com.intellij.psi.injection.ReferenceInjector;
-import com.intellij.util.ArrayUtil;
import com.intellij.util.ProcessingContext;
+import com.intellij.util.SmartList;
import org.intellij.plugins.intelliLang.Configuration;
import org.intellij.plugins.intelliLang.inject.InjectedLanguage;
import org.intellij.plugins.intelliLang.inject.InjectorUtils;
@@ -31,6 +34,7 @@ import org.intellij.plugins.intelliLang.inject.config.BaseInjection;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -48,6 +52,7 @@ public class InjectedReferencesContributor extends PsiReferenceContributor {
@Nullable
public static PsiReference[] getInjectedReferences(PsiElement element) {
+ element.getReferences();
return element.getUserData(INJECTED_REFERENCES);
}
@@ -56,40 +61,53 @@ public class InjectedReferencesContributor extends PsiReferenceContributor {
registrar.registerReferenceProvider(PlatformPatterns.psiElement(), new PsiReferenceProvider() {
@NotNull
@Override
- public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) {
+ public PsiReference[] getReferencesByElement(@NotNull final PsiElement element, @NotNull final ProcessingContext context) {
ReferenceInjector[] extensions = ReferenceInjector.EXTENSION_POINT_NAME.getExtensions();
- PsiReference[] references = new PsiReference[0];
+ final List<PsiReference> references = new SmartList<PsiReference>();
Configuration configuration = Configuration.getProjectInstance(element.getProject());
- boolean injected = false;
+ final Ref<Boolean> injected = new Ref<Boolean>(Boolean.FALSE);
for (ReferenceInjector injector : extensions) {
Collection<BaseInjection> injections = configuration.getInjectionsByLanguageId(injector.getId());
for (BaseInjection injection : injections) {
if (injection.acceptForReference(element)) {
- injected = true;
+ injected.set(Boolean.TRUE);
LanguageInjectionSupport support = InjectorUtils.findInjectionSupport(injection.getSupportId());
element.putUserData(LanguageInjectionSupport.INJECTOR_SUPPORT, support);
List<TextRange> area = injection.getInjectedArea(element);
for (TextRange range : area) {
- references = ArrayUtil.mergeArrays(references, injector.getReferences(element, context, range));
+ references.addAll(Arrays.asList(injector.getReferences(element, context, range)));
}
}
}
}
if (element instanceof PsiLanguageInjectionHost) {
- TemporaryPlacesRegistry registry = TemporaryPlacesRegistry.getInstance(element.getProject());
+ final TemporaryPlacesRegistry registry = TemporaryPlacesRegistry.getInstance(element.getProject());
InjectedLanguage language = registry.getLanguageFor((PsiLanguageInjectionHost)element, element.getContainingFile());
if (language != null) {
ReferenceInjector injector = ReferenceInjector.findById(language.getID());
if (injector != null) {
- injected = true;
+ injected.set(Boolean.TRUE);
element.putUserData(LanguageInjectionSupport.INJECTOR_SUPPORT, registry.getLanguageInjectionSupport());
TextRange range = ElementManipulators.getValueTextRange(element);
- references = ArrayUtil.mergeArrays(references, injector.getReferences(element, context, range));
+ references.addAll(Arrays.asList(injector.getReferences(element, context, range)));
}
}
+ else {
+ InjectedLanguageUtil.enumerate(element, element.getContainingFile(), false, new InjectedReferenceVisitor() {
+ @Override
+ public void visitInjectedReference(@NotNull ReferenceInjector injector, @NotNull List<PsiLanguageInjectionHost.Shred> places) {
+ injected.set(Boolean.TRUE);
+ element.putUserData(LanguageInjectionSupport.INJECTOR_SUPPORT, registry.getLanguageInjectionSupport());
+ for (PsiLanguageInjectionHost.Shred place : places) {
+ references.addAll(Arrays.asList(injector.getReferences(element, context, place.getRangeInsideHost())));
+ }
+ }
+ });
+ }
}
- element.putUserData(INJECTED_REFERENCES, injected ? references : null);
- return references;
+ PsiReference[] array = references.toArray(new PsiReference[references.size()]);
+ element.putUserData(INJECTED_REFERENCES, injected.get() ? array : null);
+ return array;
}
});
}
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/braces/RemoveBracesIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/braces/RemoveBracesIntention.java
index 658665d46555..b977e1c43cfd 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/braces/RemoveBracesIntention.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/braces/RemoveBracesIntention.java
@@ -15,9 +15,9 @@
*/
package com.siyeh.ipp.braces;
-import com.intellij.openapi.vfs.newvfs.impl.StubVirtualFile;
import com.intellij.psi.*;
import com.intellij.util.IncorrectOperationException;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import com.siyeh.ipp.base.PsiElementPredicate;
import org.jetbrains.annotations.NotNull;
@@ -40,7 +40,7 @@ public class RemoveBracesIntention extends BaseBracesIntention {
final PsiFile file = statement.getContainingFile();
//this intention doesn't work in JSP files, as it can't tell about tags
// inside the braces
- return !JspPsiUtil.isInJspFile(file);
+ return !FileTypeUtils.isInServerPageFile(file);
}
};
}
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/conditional/ReplaceConditionalWithIfPredicate.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/conditional/ReplaceConditionalWithIfPredicate.java
index e3b8c7a02edd..5fe305e286cc 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/conditional/ReplaceConditionalWithIfPredicate.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/conditional/ReplaceConditionalWithIfPredicate.java
@@ -17,6 +17,7 @@ package com.siyeh.ipp.conditional;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import com.siyeh.ipp.base.PsiElementPredicate;
class ReplaceConditionalWithIfPredicate implements PsiElementPredicate {
@@ -30,7 +31,7 @@ class ReplaceConditionalWithIfPredicate implements PsiElementPredicate {
if (parent instanceof PsiExpressionStatement) {
return false;
}
- if (JspPsiUtil.isInJspFile(element)) {
+ if (FileTypeUtils.isInServerPageFile(element)) {
return false;
}
final PsiMember member = PsiTreeUtil.getParentOfType(element, PsiMember.class);
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/enumswitch/CreateEnumSwitchBranchesIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/enumswitch/CreateEnumSwitchBranchesIntention.java
index c82d84242192..59d1f366d1f6 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/enumswitch/CreateEnumSwitchBranchesIntention.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/enumswitch/CreateEnumSwitchBranchesIntention.java
@@ -22,7 +22,9 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
public class CreateEnumSwitchBranchesIntention extends Intention {
@@ -34,6 +36,7 @@ public class CreateEnumSwitchBranchesIntention extends Intention {
public void processIntention(@NotNull PsiElement element) {
if (element instanceof PsiWhiteSpace) {
element = element.getPrevSibling();
+ assert element != null;
}
final PsiSwitchStatement switchStatement = (PsiSwitchStatement)element;
final PsiCodeBlock body = switchStatement.getBody();
@@ -50,62 +53,105 @@ public class CreateEnumSwitchBranchesIntention extends Intention {
return;
}
final PsiField[] fields = enumClass.getFields();
- final List<String> missingEnumElements = new ArrayList<String>(fields.length);
+ final List<PsiEnumConstant> missingEnumElements = new ArrayList<PsiEnumConstant>(fields.length);
for (final PsiField field : fields) {
- if (field instanceof PsiEnumConstant) {
- missingEnumElements.add(field.getName());
+ if (!(field instanceof PsiEnumConstant)) {
+ continue;
}
+ final PsiEnumConstant enumConstant = (PsiEnumConstant)field;
+ missingEnumElements.add(enumConstant);
}
- if (body != null) {
- final PsiStatement[] statements = body.getStatements();
- for (final PsiStatement statement : statements) {
- if (!(statement instanceof PsiSwitchLabelStatement)) {
- continue;
- }
- final PsiSwitchLabelStatement labelStatement = (PsiSwitchLabelStatement)statement;
- final PsiExpression value = labelStatement.getCaseValue();
- if (!(value instanceof PsiReferenceExpression)) {
- continue;
- }
- final PsiReferenceExpression reference = (PsiReferenceExpression)value;
- final PsiElement resolved = reference.resolve();
- if (!(resolved instanceof PsiEnumConstant)) {
- continue;
- }
- final PsiEnumConstant enumConstant = (PsiEnumConstant)resolved;
- missingEnumElements.remove(enumConstant.getName());
+ if (body == null) {
+ // replace entire switch statement if no code block is present
+ @NonNls final StringBuilder newStatementText = new StringBuilder();
+ newStatementText.append("switch(").append(switchExpression.getText()).append("){");
+ for (PsiEnumConstant missingEnumElement : missingEnumElements) {
+ newStatementText.append("case ").append(missingEnumElement.getName()).append(": break;");
+ }
+ newStatementText.append('}');
+ replaceStatement(newStatementText.toString(), switchStatement);
+ return;
+ }
+ final Map<PsiEnumConstant, PsiEnumConstant> nextEnumConstants = new HashMap<PsiEnumConstant, PsiEnumConstant>(fields.length);
+ PsiEnumConstant previous = null;
+ for (PsiEnumConstant enumConstant : missingEnumElements) {
+ if (previous != null) {
+ nextEnumConstants.put(previous, enumConstant);
}
+ previous = enumConstant;
+ }
+ final PsiStatement[] statements = body.getStatements();
+ for (final PsiStatement statement : statements) {
+ missingEnumElements.remove(findEnumConstant(statement));
}
- @NonNls final StringBuilder newStatementText = new StringBuilder();
- newStatementText.append("switch(").append(switchExpression.getText()).append("){");
- if (body != null) {
- int position = 0;
- final PsiElement[] children = body.getChildren();
- for (position = 1; position < children.length - 1; position++) {
- final PsiElement child = children[position];
- if (child instanceof PsiSwitchLabelStatement) {
- final PsiSwitchLabelStatement switchLabelStatement = (PsiSwitchLabelStatement)child;
- if (switchLabelStatement.isDefaultCase()) {
- break;
- }
+ PsiEnumConstant nextEnumConstant = getNextEnumConstant(nextEnumConstants, missingEnumElements);
+ PsiElement bodyElement = body.getFirstBodyElement();
+ while (bodyElement != null) {
+ while (nextEnumConstant != null && findEnumConstant(bodyElement) == nextEnumConstant) {
+ addSwitchLabelStatementBefore(missingEnumElements.get(0), bodyElement);
+ missingEnumElements.remove(0);
+ if (missingEnumElements.isEmpty()) {
+ break;
}
- newStatementText.append(child.getText());
+ nextEnumConstant = getNextEnumConstant(nextEnumConstants, missingEnumElements);
}
- appendMissingEnumCases(missingEnumElements, newStatementText);
- for (; position< children.length - 1; position++) {
- newStatementText.append(children[position].getText());
+ if (isDefaultSwitchLabelStatement(bodyElement)) {
+ for (PsiEnumConstant missingEnumElement : missingEnumElements) {
+ addSwitchLabelStatementBefore(missingEnumElement, bodyElement);
+ }
+ missingEnumElements.clear();
+ break;
+ }
+ bodyElement = bodyElement.getNextSibling();
+ }
+ if (!missingEnumElements.isEmpty()) {
+ final PsiElement lastChild = body.getLastChild();
+ for (PsiEnumConstant missingEnumElement : missingEnumElements) {
+ addSwitchLabelStatementBefore(missingEnumElement, lastChild);
}
}
- else {
- appendMissingEnumCases(missingEnumElements, newStatementText);
+ }
+
+ private static void addSwitchLabelStatementBefore(PsiEnumConstant missingEnumElement, PsiElement anchor) {
+ final PsiElement parent = anchor.getParent();
+ final PsiElementFactory factory = JavaPsiFacade.getElementFactory(anchor.getProject());
+ final PsiStatement caseStatement = factory.createStatementFromText("case " + missingEnumElement.getName() + ":", anchor);
+ parent.addBefore(caseStatement, anchor);
+ final PsiStatement breakStatement = factory.createStatementFromText("break;", anchor);
+ parent.addBefore(breakStatement, anchor);
+ }
+
+ private static PsiEnumConstant findEnumConstant(PsiElement element) {
+ if (!(element instanceof PsiSwitchLabelStatement)) {
+ return null;
+ }
+ final PsiSwitchLabelStatement switchLabelStatement = (PsiSwitchLabelStatement)element;
+ final PsiExpression value = switchLabelStatement.getCaseValue();
+ if (!(value instanceof PsiReferenceExpression)) {
+ return null;
+ }
+ final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)value;
+ final PsiElement target = referenceExpression.resolve();
+ if (!(target instanceof PsiEnumConstant)) {
+ return null;
+ }
+ return (PsiEnumConstant)target;
+ }
+
+ private static PsiEnumConstant getNextEnumConstant(Map<PsiEnumConstant, PsiEnumConstant> nextEnumConstants,
+ List<PsiEnumConstant> missingEnumElements) {
+ PsiEnumConstant nextEnumConstant = nextEnumConstants.get(missingEnumElements.get(0));
+ while (missingEnumElements.contains(nextEnumConstant)) {
+ nextEnumConstant = nextEnumConstants.get(nextEnumConstant);
}
- newStatementText.append('}');
- replaceStatement(newStatementText.toString(), switchStatement);
+ return nextEnumConstant;
}
- private static void appendMissingEnumCases(List<String> missingEnumElements, @NonNls StringBuilder newStatementText) {
- for (String missingEnumElement : missingEnumElements) {
- newStatementText.append("case ").append(missingEnumElement).append(": break;");
+ private static boolean isDefaultSwitchLabelStatement(PsiElement element) {
+ if (!(element instanceof PsiSwitchLabelStatement)) {
+ return false;
}
+ final PsiSwitchLabelStatement switchLabelStatement = (PsiSwitchLabelStatement)element;
+ return switchLabelStatement.isDefaultCase();
}
} \ No newline at end of file
diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/BeforeDefault_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/BeforeDefault_after.java
index 7a69b04e6403..be209306e2b4 100644
--- a/plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/BeforeDefault_after.java
+++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/BeforeDefault_after.java
@@ -4,15 +4,15 @@ class BeforeDefault {
enum Status { ACTIVE, INACTIVE, ERROR }
private void foo (Status status) {
- switch (status) {
- case ACTIVE:
- break;
- case INACTIVE:
- break;
- case ERROR:
- break;
- default:
- throw new IllegalArgumentException("Unknown Status " + status);
- }
+ switch (status) {
+ case ACTIVE:
+ break;
+ case INACTIVE:
+ break;
+ case ERROR:
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown Status " + status);
+ }
}
} \ No newline at end of file
diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/Multiple.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/Multiple.java
new file mode 100644
index 000000000000..a96ac718cdbb
--- /dev/null
+++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/Multiple.java
@@ -0,0 +1,10 @@
+class Main {
+ enum Status { ACTIVE, INACTIVE, ERROR }
+
+ private void foo (Status status) {
+ switch<caret> (status) {
+ case ERROR:
+ break;
+ }
+ }
+} \ No newline at end of file
diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/Multiple_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/Multiple_after.java
new file mode 100644
index 000000000000..3bdf9e5f632f
--- /dev/null
+++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/enumswitch/Multiple_after.java
@@ -0,0 +1,14 @@
+class Main {
+ enum Status { ACTIVE, INACTIVE, ERROR }
+
+ private void foo (Status status) {
+ switch (status) {
+ case ACTIVE:
+ break;
+ case INACTIVE:
+ break;
+ case ERROR:
+ break;
+ }
+ }
+} \ No newline at end of file
diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/enumswitch/EnumSwitchBranchesIntentionTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/enumswitch/EnumSwitchBranchesIntentionTest.java
index b8ae35f25f74..0cee31ba1abd 100644
--- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/enumswitch/EnumSwitchBranchesIntentionTest.java
+++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/enumswitch/EnumSwitchBranchesIntentionTest.java
@@ -18,10 +18,14 @@ package com.siyeh.ipp.enumswitch;
import com.siyeh.IntentionPowerPackBundle;
import com.siyeh.ipp.IPPTestCase;
+/**
+ * @see CreateEnumSwitchBranchesIntention
+ */
public class EnumSwitchBranchesIntentionTest extends IPPTestCase {
public void testWithoutBraces() { doTest(); }
public void testBeforeDefault() { doTest(); }
+ public void testMultiple() { doTest(); }
public void testNoActionAfterBraces() { assertIntentionNotAvailable(); }
@Override
diff --git a/plugins/android/lib/guava-13.0.1.jar b/plugins/android/lib/guava-13.0.1.jar
deleted file mode 100644
index 09c5449115df..000000000000
--- a/plugins/android/lib/guava-13.0.1.jar
+++ /dev/null
Binary files differ
diff --git a/plugins/android/lib/jarutils.jar b/plugins/android/lib/jarutils.jar
deleted file mode 100644
index 1259ccfd6e44..000000000000
--- a/plugins/android/lib/jarutils.jar
+++ /dev/null
Binary files differ
diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java
index 8e7ae3a0cff0..1534e16bd7cf 100644
--- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java
+++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java
@@ -830,7 +830,7 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis
return;
}
if (configName != null) {
- for (RunConfiguration configuration : runManager.getConfigurations(type)) {
+ for (RunConfiguration configuration : runManager.getConfigurationsList(type)) {
if (configName.equals(configuration.getName())) {
final List<AntBeforeRunTask> tasks = runManager.getBeforeRunTasks(configuration, AntBeforeRunTaskProvider.ID);
if (!tasks.isEmpty()) {
diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/ui/experts/SelectLocationStep.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/ui/experts/SelectLocationStep.java
index e53fb4ecb704..3cb19b6200db 100644
--- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/ui/experts/SelectLocationStep.java
+++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/ui/experts/SelectLocationStep.java
@@ -29,6 +29,7 @@ import com.intellij.openapi.fileChooser.ex.FileDrop;
import com.intellij.openapi.fileChooser.ex.FileTextFieldImpl;
import com.intellij.openapi.fileChooser.ex.LocalFsFinder;
import com.intellij.openapi.fileChooser.impl.FileChooserFactoryImpl;
+import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vfs.VfsUtil;
@@ -295,8 +296,8 @@ public abstract class SelectLocationStep extends WizardStep {
}
protected void onSetActive(final boolean active) {
- final String tooltip = AnAction.createTooltipText(ActionsBundle.message("action.FileChooser.TogglePathShowing.text"),
- ActionManager.getInstance().getAction("FileChooser.TogglePathShowing"));
+ final String tooltip = KeymapUtil.createTooltipText(ActionsBundle.message("action.FileChooser.TogglePathShowing.text"),
+ ActionManager.getInstance().getAction("FileChooser.TogglePathShowing"));
setToolTipText(tooltip);
}
diff --git a/plugins/devkit/src/run/PluginRunConfigurationEditor.java b/plugins/devkit/src/run/PluginRunConfigurationEditor.java
index 8b4ae5bdf778..a5165334b1df 100644
--- a/plugins/devkit/src/run/PluginRunConfigurationEditor.java
+++ b/plugins/devkit/src/run/PluginRunConfigurationEditor.java
@@ -185,7 +185,4 @@ public class PluginRunConfigurationEditor extends SettingsEditor<PluginRunConfig
public RawCommandLineEditor getProgramParameters() {
return myProgramParameters.getComponent();
}
-
- public void disposeEditor() {
- }
}
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubCreatePullRequestAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubCreatePullRequestAction.java
index 472be8864dd7..99bf9aff7edd 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubCreatePullRequestAction.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubCreatePullRequestAction.java
@@ -15,6 +15,7 @@
*/
package org.jetbrains.plugins.github;
+import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.components.ServiceManager;
@@ -24,28 +25,45 @@ import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.ui.DialogWrapper;
+import com.intellij.openapi.ui.Splitter;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.openapi.vcs.VcsException;
+import com.intellij.openapi.vcs.changes.Change;
+import com.intellij.openapi.vcs.changes.ui.ChangesBrowser;
import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.ui.TabbedPaneImpl;
+import com.intellij.util.Consumer;
import com.intellij.util.Function;
import com.intellij.util.ThrowableConsumer;
import com.intellij.util.containers.ContainerUtil;
+import com.intellij.util.containers.HashSet;
+import com.intellij.util.ui.UIUtil;
import git4idea.DialogManager;
+import git4idea.GitCommit;
import git4idea.GitLocalBranch;
+import git4idea.GitRemoteBranch;
+import git4idea.changes.GitChangeUtils;
import git4idea.commands.Git;
import git4idea.commands.GitCommandResult;
+import git4idea.history.GitHistoryUtils;
import git4idea.repo.GitRemote;
import git4idea.repo.GitRepository;
+import git4idea.ui.GitCommitListPanel;
+import icons.Git4ideaIcons;
import icons.GithubIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.github.api.*;
import org.jetbrains.plugins.github.ui.GithubCreatePullRequestDialog;
+import javax.swing.*;
+import java.awt.*;
import java.io.IOException;
-import java.util.ArrayList;
+import java.util.*;
import java.util.List;
import static org.jetbrains.plugins.github.GithubUtil.setVisibleEnabled;
@@ -69,11 +87,6 @@ public class GithubCreatePullRequestAction extends DumbAwareAction {
return;
}
- if (!GithubSettings.getInstance().isAuthConfigured()) {
- setVisibleEnabled(e, false, false);
- return;
- }
-
final GitRepository gitRepository = GithubUtil.getGitRepository(project, file);
if (gitRepository == null) {
setVisibleEnabled(e, false, false);
@@ -108,6 +121,7 @@ public class GithubCreatePullRequestAction extends DumbAwareAction {
GithubNotifications.showError(project, CANNOT_CREATE_PULL_REQUEST, "Can't find git repository");
return;
}
+ repository.update();
final Pair<GitRemote, String> remote = GithubUtil.findGithubRemote(repository);
if (remote == null) {
@@ -136,9 +150,24 @@ public class GithubCreatePullRequestAction extends DumbAwareAction {
if (info == null) {
return;
}
+ final Set<RemoteBranch> branches = getAvailableBranchesFromGit(repository);
+ branches.addAll(info.getBranches());
- String suggestedBranch = info.getRepo().getParent() == null ? null : info.getRepo().getParent().getUserName() + ":master";
- final GithubCreatePullRequestDialog dialog = new GithubCreatePullRequestDialog(project, info.getBranches(), suggestedBranch);
+ GithubRepo parent = info.getRepo().getParent();
+ String suggestedBranch = parent == null ? null : parent.getUserName() + ":" + parent.getDefaultBranch();
+ Collection<String> suggestions = ContainerUtil.map(branches, new Function<RemoteBranch, String>() {
+ @Override
+ public String fun(RemoteBranch remoteBranch) {
+ return remoteBranch.getReference();
+ }
+ });
+ Consumer<String> showDiff = new Consumer<String>() {
+ @Override
+ public void consume(String s) {
+ showDiffByRef(project, s, branches, repository, currentBranch.getName());
+ }
+ };
+ final GithubCreatePullRequestDialog dialog = new GithubCreatePullRequestDialog(project, suggestions, suggestedBranch, showDiff);
DialogManager.show(dialog);
if (!dialog.isOK()) {
return;
@@ -155,9 +184,20 @@ public class GithubCreatePullRequestAction extends DumbAwareAction {
return;
}
- LOG.info("Performing create request");
- indicator.setText("Performing create request...");
- GithubPullRequest request = createPullRequest(project, info, dialog, currentBranch.getName(), upstreamUserAndRepo);
+ String from = info.getRepo().getUserName() + ":" + currentBranch.getName();
+ String onto = dialog.getTargetBranch();
+ GithubAuthData auth = info.getAuthData();
+
+ GithubFullPath targetRepo = findTargetRepository(project, auth, onto, info.getRepo(), upstreamUserAndRepo, branches);
+ if (targetRepo == null) {
+ GithubNotifications.showError(project, CANNOT_CREATE_PULL_REQUEST, "Can't find repository for specified branch: " + onto);
+ return;
+ }
+
+ LOG.info("Creating pull request");
+ indicator.setText("Creating pull request...");
+ GithubPullRequest request =
+ createPullRequest(project, auth, targetRepo, dialog.getRequestTitle(), dialog.getDescription(), from, onto);
if (request == null) {
return;
}
@@ -185,7 +225,7 @@ public class GithubCreatePullRequestAction extends DumbAwareAction {
reposRef.set(GithubApiUtil.getDetailedRepoInfo(authData, userAndRepo.getUser(), userAndRepo.getRepository()));
}
});
- List<String> branches = loadAvailableBranches(project, auth, reposRef.get(), upstreamUserAndRepo);
+ List<RemoteBranch> branches = loadAvailableBranchesFromGithub(project, auth, reposRef.get(), upstreamUserAndRepo);
githubInfoRef.set(new GithubInfo(auth, reposRef.get(), branches));
}
catch (IOException e) {
@@ -204,43 +244,22 @@ public class GithubCreatePullRequestAction extends DumbAwareAction {
}
@Nullable
- private static GithubPullRequest createPullRequest(@NotNull Project project,
- @NotNull GithubInfo info,
- @NotNull final GithubCreatePullRequestDialog dialog,
- @NotNull final String headBranch,
- @Nullable final GithubFullPath upstreamPath) {
- GithubAuthData auth = info.getAuthData();
- GithubRepoDetailed repo = info.getRepo();
-
- String from = repo.getUserName() + ":" + headBranch;
- String onto = dialog.getTargetBranch();
-
- GithubFullPath target = getTargetRepository(project, auth, onto, repo, upstreamPath);
- if (target == null) {
- GithubNotifications.showError(project, CANNOT_CREATE_PULL_REQUEST, "Can't find repository for specified branch: " + onto);
- return null;
- }
-
- try {
- return GithubApiUtil
- .createPullRequest(auth, target.getUser(), target.getRepository(), dialog.getRequestTitle(), dialog.getDescription(), from, onto);
- }
- catch (IOException e) {
- GithubNotifications.showError(project, CANNOT_CREATE_PULL_REQUEST, e);
- return null;
- }
- }
-
- @Nullable
- private static GithubFullPath getTargetRepository(@NotNull Project project,
- @NotNull GithubAuthData auth,
- @NotNull String onto,
- @NotNull GithubRepoDetailed repo,
- @Nullable GithubFullPath upstreamPath) {
+ private static GithubFullPath findTargetRepository(@NotNull Project project,
+ @NotNull GithubAuthData auth,
+ @NotNull String onto,
+ @NotNull GithubRepoDetailed repo,
+ @Nullable GithubFullPath upstreamPath,
+ @NotNull Collection<RemoteBranch> branches) {
String targetUser = onto.substring(0, onto.indexOf(':'));
@Nullable GithubRepo parent = repo.getParent();
@Nullable GithubRepo source = repo.getSource();
+ for (RemoteBranch branch : branches) {
+ if (StringUtil.equalsIgnoreCase(targetUser, branch.getUser()) && branch.getRepo() != null) {
+ return new GithubFullPath(branch.getUser(), branch.getRepo());
+ }
+ }
+
if (isRepoOwner(targetUser, repo)) {
return repo.getFullPath();
}
@@ -281,11 +300,47 @@ public class GithubCreatePullRequestAction extends DumbAwareAction {
return StringUtil.equalsIgnoreCase(user, repo.getUserName());
}
- private static List<String> loadAvailableBranches(@NotNull final Project project,
- @NotNull final GithubAuthData auth,
- @NotNull final GithubRepoDetailed repo,
- @Nullable final GithubFullPath upstreamPath) {
- List<String> result = new ArrayList<String>();
+ @Nullable
+ private static GithubPullRequest createPullRequest(@NotNull Project project,
+ @NotNull GithubAuthData auth,
+ @NotNull GithubFullPath targetRepo,
+ @NotNull String title,
+ @NotNull String description,
+ @NotNull String from,
+ @NotNull String onto) {
+ try {
+ return GithubApiUtil.createPullRequest(auth, targetRepo.getUser(), targetRepo.getRepository(), title, description, from, onto);
+ }
+ catch (IOException e) {
+ GithubNotifications.showError(project, CANNOT_CREATE_PULL_REQUEST, e);
+ return null;
+ }
+ }
+
+ @NotNull
+ private static Set<RemoteBranch> getAvailableBranchesFromGit(@NotNull GitRepository gitRepository) {
+ Set<RemoteBranch> result = new HashSet<RemoteBranch>();
+ for (GitRemoteBranch remoteBranch : gitRepository.getBranches().getRemoteBranches()) {
+ for (String url : remoteBranch.getRemote().getUrls()) {
+ if (GithubUrlUtil.isGithubUrl(url)) {
+ GithubFullPath path = GithubUrlUtil.getUserAndRepositoryFromRemoteUrl(url);
+ if (path != null) {
+ result.add(new RemoteBranch(path.getUser(), remoteBranch.getNameForRemoteOperations(), path.getRepository(),
+ remoteBranch.getNameForLocalOperations()));
+ break;
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+ @NotNull
+ private static List<RemoteBranch> loadAvailableBranchesFromGithub(@NotNull final Project project,
+ @NotNull final GithubAuthData auth,
+ @NotNull final GithubRepoDetailed repo,
+ @Nullable final GithubFullPath upstreamPath) {
+ List<RemoteBranch> result = new ArrayList<RemoteBranch>();
try {
final GithubRepo parent = repo.getParent();
final GithubRepo source = repo.getSource();
@@ -311,13 +366,13 @@ public class GithubCreatePullRequestAction extends DumbAwareAction {
}
@NotNull
- private static List<String> getBranches(@NotNull GithubAuthData auth, @NotNull final String user, @NotNull String repo)
+ private static List<RemoteBranch> getBranches(@NotNull GithubAuthData auth, @NotNull final String user, @NotNull final String repo)
throws IOException {
List<GithubBranch> branches = GithubApiUtil.getRepoBranches(auth, user, repo);
- return ContainerUtil.map(branches, new Function<GithubBranch, String>() {
+ return ContainerUtil.map(branches, new Function<GithubBranch, RemoteBranch>() {
@Override
- public String fun(GithubBranch branch) {
- return user + ":" + branch.getName();
+ public RemoteBranch fun(GithubBranch branch) {
+ return new RemoteBranch(user, branch.getName(), repo);
}
});
}
@@ -336,12 +391,244 @@ public class GithubCreatePullRequestAction extends DumbAwareAction {
return StringUtil.equalsIgnoreCase(repo1.getUser(), repo2.getUserName());
}
+ private static void showDiffByRef(@NotNull Project project,
+ @Nullable String ref,
+ @NotNull Set<RemoteBranch> branches,
+ @NotNull GitRepository gitRepository,
+ @NotNull String currentBranch) {
+ RemoteBranch branch = findRemoteBranch(branches, ref);
+ if (branch == null || branch.getLocalBranch() == null) {
+ GithubNotifications.showErrorDialog(project, "Can't show diff", "Can't find local branch");
+ return;
+ }
+ String targetBranch = branch.getLocalBranch();
+
+ DiffInfo info = getDiffInfo(project, gitRepository, currentBranch, targetBranch);
+ if (info == null) {
+ GithubNotifications.showErrorDialog(project, "Can't show diff", "Can't get diff info");
+ return;
+ }
+
+ GithubCreatePullRequestDiffDialog dialog = new GithubCreatePullRequestDiffDialog(project, info);
+ dialog.show();
+ }
+
+ @Nullable
+ private static RemoteBranch findRemoteBranch(@NotNull Set<RemoteBranch> branches, @Nullable String ref) {
+ if (ref == null) {
+ return null;
+ }
+ List<String> list = StringUtil.split(ref, ":");
+ if (list.size() != 2) {
+ return null;
+ }
+ for (RemoteBranch branch : branches) {
+ if (StringUtil.equalsIgnoreCase(list.get(0), branch.getUser()) && StringUtil.equals(list.get(1), branch.getBranch())) {
+ return branch;
+ }
+ }
+
+ return null;
+ }
+
+ @Nullable
+ private static DiffInfo getDiffInfo(@NotNull final Project project,
+ @NotNull final GitRepository repository,
+ @NotNull final String currentBranch,
+ @NotNull final String targetBranch) {
+ final Ref<DiffInfo> infoRef = new Ref<DiffInfo>();
+ ProgressManager.getInstance().run(new Task.Modal(project, "Access to GitHub", true) {
+ public void run(@NotNull ProgressIndicator indicator) {
+ try {
+ List<GitCommit> commits = GitHistoryUtils.history(project, repository.getRoot(), targetBranch + "..");
+ Collection<Change> diff =
+ GitChangeUtils.getDiff(repository.getProject(), repository.getRoot(), targetBranch, currentBranch, null);
+ infoRef.set(new DiffInfo(targetBranch, currentBranch, commits, diff));
+ }
+ catch (VcsException e) {
+ LOG.info(e);
+ }
+ }
+ });
+ return infoRef.get();
+ }
+
+ private static class GithubCreatePullRequestDiffDialog extends DialogWrapper {
+ @NotNull private final Project myProject;
+ @NotNull private final DiffInfo myInfo;
+ private JPanel myLogPanel;
+
+ public GithubCreatePullRequestDiffDialog(@NotNull Project project, @NotNull DiffInfo info) {
+ super(project, false);
+ myProject = project;
+ myInfo = info;
+ setTitle(String.format("Comparing %s with %s", info.getFrom(), info.getTo()));
+ setModal(false);
+ init();
+ }
+
+ @Override
+ protected JComponent createCenterPanel() {
+ myLogPanel = new GithubCreatePullRequestLogPanel(myProject, myInfo);
+ JPanel diffPanel = new GithubCreatePullRequestDiffPanel(myProject, myInfo);
+
+ TabbedPaneImpl tabbedPane = new TabbedPaneImpl(SwingConstants.TOP);
+ tabbedPane.addTab("Log", Git4ideaIcons.Branch, myLogPanel);
+ tabbedPane.addTab("Diff", AllIcons.Actions.Diff, diffPanel);
+ tabbedPane.setKeyboardNavigation(TabbedPaneImpl.DEFAULT_PREV_NEXT_SHORTCUTS);
+ return tabbedPane;
+ }
+
+ @NotNull
+ @Override
+ protected Action[] createActions() {
+ return new Action[0];
+ }
+
+ @Override
+ protected String getDimensionServiceKey() {
+ return "Github.CreatePullRequestDiffDialog";
+ }
+ }
+
+ private static class GithubCreatePullRequestDiffPanel extends JPanel {
+
+ private final Project myProject;
+ private final DiffInfo myInfo;
+
+ public GithubCreatePullRequestDiffPanel(@NotNull Project project, @NotNull DiffInfo info) {
+ super(new BorderLayout(UIUtil.DEFAULT_VGAP, UIUtil.DEFAULT_HGAP));
+ myProject = project;
+ myInfo = info;
+
+ add(createCenterPanel());
+ }
+
+ private JComponent createCenterPanel() {
+ List<Change> diff = new ArrayList<Change>(myInfo.getDiff());
+ final ChangesBrowser changesBrowser =
+ new ChangesBrowser(myProject, null, diff, null, false, true, null, ChangesBrowser.MyUseCase.COMMITTED_CHANGES, null);
+ changesBrowser.setChangesToDisplay(diff);
+ return changesBrowser;
+ }
+ }
+
+ private static class GithubCreatePullRequestLogPanel extends JPanel {
+ private final Project myProject;
+ private final DiffInfo myInfo;
+
+ private GitCommitListPanel myCommitPanel;
+
+ GithubCreatePullRequestLogPanel(@NotNull Project project, @NotNull DiffInfo info) {
+ super(new BorderLayout(UIUtil.DEFAULT_HGAP, UIUtil.DEFAULT_VGAP));
+ myProject = project;
+ myInfo = info;
+
+ add(createCenterPanel());
+ }
+
+ private JComponent createCenterPanel() {
+ final ChangesBrowser changesBrowser = new ChangesBrowser(myProject, null, Collections.<Change>emptyList(), null, false, true, null,
+ ChangesBrowser.MyUseCase.COMMITTED_CHANGES, null);
+
+ myCommitPanel =
+ new GitCommitListPanel(myInfo.getCommits(), String.format("Branch %s is fully merged to %s", myInfo.getFrom(), myInfo.getTo()));
+ addSelectionListener(myCommitPanel, changesBrowser);
+
+ myCommitPanel.registerDiffAction(changesBrowser.getDiffAction());
+
+ Splitter rootPanel = new Splitter(false, 0.7f);
+ rootPanel.setSecondComponent(changesBrowser);
+ rootPanel.setFirstComponent(myCommitPanel);
+
+ return rootPanel;
+ }
+
+ private static void addSelectionListener(@NotNull GitCommitListPanel sourcePanel, @NotNull final ChangesBrowser changesBrowser) {
+ sourcePanel.addListSelectionListener(new Consumer<GitCommit>() {
+ @Override
+ public void consume(GitCommit commit) {
+ changesBrowser.setChangesToDisplay(commit.getChanges());
+ }
+ });
+ }
+
+ }
+
+ private static class RemoteBranch {
+ @NotNull final String myUser;
+ @NotNull final String myBranch;
+
+ @Nullable final String myRepo;
+ @Nullable final String myLocalBranch;
+
+ private RemoteBranch(@NotNull String user, @NotNull String branch) {
+ this(user, branch, null, null);
+ }
+
+ private RemoteBranch(@NotNull String user, @NotNull String branch, @NotNull String repo) {
+ this(user, branch, repo, null);
+ }
+
+ public RemoteBranch(@NotNull String user, @NotNull String branch, @Nullable String repo, @Nullable String localBranch) {
+ myUser = user;
+ myBranch = branch;
+ myRepo = repo;
+ myLocalBranch = localBranch;
+ }
+
+ @NotNull
+ public String getReference() {
+ return myUser + ":" + myBranch;
+ }
+
+ @NotNull
+ public String getUser() {
+ return myUser;
+ }
+
+ @NotNull
+ public String getBranch() {
+ return myBranch;
+ }
+
+ @Nullable
+ public String getRepo() {
+ return myRepo;
+ }
+
+ @Nullable
+ public String getLocalBranch() {
+ return myLocalBranch;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ RemoteBranch that = (RemoteBranch)o;
+
+ if (!StringUtil.equalsIgnoreCase(myUser, that.myUser)) return false;
+ if (!StringUtil.equalsIgnoreCase(myBranch, that.myBranch)) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = myUser.hashCode();
+ result = 31 * result + myBranch.hashCode();
+ return result;
+ }
+ }
+
private static class GithubInfo {
@NotNull private final GithubRepoDetailed myRepo;
@NotNull private final GithubAuthData myAuthData;
- @NotNull private final List<String> myBranches;
+ @NotNull private final List<RemoteBranch> myBranches;
- private GithubInfo(@NotNull GithubAuthData authData, @NotNull GithubRepoDetailed repo, @NotNull List<String> branches) {
+ private GithubInfo(@NotNull GithubAuthData authData, @NotNull GithubRepoDetailed repo, @NotNull List<RemoteBranch> branches) {
myAuthData = authData;
myRepo = repo;
myBranches = branches;
@@ -358,8 +645,42 @@ public class GithubCreatePullRequestAction extends DumbAwareAction {
}
@NotNull
- public List<String> getBranches() {
+ public List<RemoteBranch> getBranches() {
return myBranches;
}
}
+
+ private static class DiffInfo {
+ @NotNull private final List<GitCommit> commits;
+ @NotNull private final Collection<Change> diff;
+ @NotNull private final String from;
+ @NotNull private final String to;
+
+ private DiffInfo(@NotNull String from, @NotNull String to, @NotNull List<GitCommit> commits, @NotNull Collection<Change> diff) {
+ this.commits = commits;
+ this.diff = diff;
+ this.from = from;
+ this.to = to;
+ }
+
+ @NotNull
+ public List<GitCommit> getCommits() {
+ return commits;
+ }
+
+ @NotNull
+ public Collection<Change> getDiff() {
+ return diff;
+ }
+
+ @NotNull
+ public String getFrom() {
+ return from;
+ }
+
+ @NotNull
+ public String getTo() {
+ return to;
+ }
+ }
}
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java
index bdbf6b0dc635..a9edef5d2e9b 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java
@@ -72,11 +72,6 @@ public class GithubRebaseAction extends DumbAwareAction {
return;
}
- if (!GithubSettings.getInstance().isAuthConfigured()) {
- setVisibleEnabled(e, false, false);
- return;
- }
-
final GitRepository gitRepository = GithubUtil.getGitRepository(project, file);
if (gitRepository == null) {
setVisibleEnabled(e, false, false);
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubSettings.java b/plugins/github/src/org/jetbrains/plugins/github/GithubSettings.java
index ebe8d6fb8831..5b599b2d700e 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubSettings.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubSettings.java
@@ -76,7 +76,7 @@ public class GithubSettings implements PersistentStateComponent<GithubSettings.S
@Nullable
public String getLogin() {
- return StringUtil.notNullize(myState.LOGIN);
+ return myState.LOGIN;
}
@NotNull
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java
index 233079fc341a..3893969c1a32 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java
@@ -421,6 +421,11 @@ public class GithubShareAction extends DumbAwareAction {
sink.put(VcsDataKeys.COMMIT_MESSAGE_CONTROL, myCommitMessagePanel);
}
}
+
+ @Override
+ protected String getDimensionServiceKey() {
+ return "Github.UntrackedFilesDialog";
+ }
}
private static class GithubInfo {
diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java b/plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java
index b961d421cd0b..da71c4a854c0 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/GithubUtil.java
@@ -115,18 +115,13 @@ public class GithubUtil {
@NotNull String host,
@NotNull ThrowableConvertor<GithubAuthData, T, IOException> task) throws IOException {
GithubSettings settings = GithubSettings.getInstance();
- GithubAuthData auth;
- if (settings.getAuthType() == GithubAuthData.AuthType.BASIC &&
- StringUtil.equalsIgnoreCase(GithubUrlUtil.getApiUrl(host), GithubUrlUtil.getApiUrl(settings.getHost()))) {
- auth = settings.getAuthData();
- }
- else {
- auth = GithubAuthData.createAnonymous();
- }
+ GithubAuthData auth = null;
try {
- if (auth.getAuthType() != GithubAuthData.AuthType.BASIC) {
+ if (settings.getAuthType() != GithubAuthData.AuthType.BASIC ||
+ !StringUtil.equalsIgnoreCase(GithubUrlUtil.getApiUrl(host), GithubUrlUtil.getApiUrl(settings.getHost()))) {
throw new GithubAuthenticationException("Bad authentication type");
}
+ auth = settings.getAuthData();
return task.convert(auth);
}
catch (GithubAuthenticationException e) {
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubApiUtil.java b/plugins/github/src/org/jetbrains/plugins/github/api/GithubApiUtil.java
index d83eec467cf7..50da928fd7d2 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/api/GithubApiUtil.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/api/GithubApiUtil.java
@@ -89,7 +89,8 @@ public class GithubApiUtil {
@NotNull HttpVerb verb) throws IOException {
HttpMethod method = null;
try {
- method = doREST(auth, path, requestBody, headers, verb);
+ String uri = GithubUrlUtil.getApiUrl(auth.getHost()) + path;
+ method = doREST(auth, uri, requestBody, headers, verb);
checkStatusCode(method);
@@ -127,12 +128,11 @@ public class GithubApiUtil {
@NotNull
private static HttpMethod doREST(@NotNull final GithubAuthData auth,
- @NotNull String path,
+ @NotNull final String uri,
@Nullable final String requestBody,
@NotNull final Collection<Header> headers,
@NotNull final HttpVerb verb) throws IOException {
HttpClient client = getHttpClient(auth.getBasicAuth());
- String uri = GithubUrlUtil.getApiUrl(auth.getHost()) + path;
return GithubSslSupport.getInstance()
.executeSelfSignedCertificateAwareRequest(client, uri, new ThrowableConvertor<String, HttpMethod, IOException>() {
@Override
@@ -221,7 +221,8 @@ public class GithubApiUtil {
return method.getStatusText() + " - " + error.getMessage();
}
}
- catch (IOException ignore) {
+ catch (IOException e) {
+ LOG.info(e);
}
return method.getStatusText();
}
@@ -373,7 +374,8 @@ public class GithubApiUtil {
public static Collection<String> getTokenScopes(@NotNull GithubAuthData auth) throws IOException {
HttpMethod method = null;
try {
- method = doREST(auth, "/user", null, Collections.<Header>emptyList(), HttpVerb.HEAD);
+ String uri = GithubUrlUtil.getApiUrl(auth.getHost()) + "/user";
+ method = doREST(auth, uri, null, Collections.<Header>emptyList(), HttpVerb.HEAD);
checkStatusCode(method);
diff --git a/plugins/github/src/org/jetbrains/plugins/github/api/GithubErrorMessageRaw.java b/plugins/github/src/org/jetbrains/plugins/github/api/GithubErrorMessageRaw.java
index 35b39c3f914e..1471a5a8d37f 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/api/GithubErrorMessageRaw.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/api/GithubErrorMessageRaw.java
@@ -17,15 +17,36 @@ package org.jetbrains.plugins.github.api;
import org.jetbrains.annotations.Nullable;
+import java.util.List;
+
/**
* @author Aleksey Pivovarov
*/
@SuppressWarnings("UnusedDeclaration")
class GithubErrorMessageRaw {
- @Nullable private String message;
+ @Nullable public String message;
+ @Nullable public List<Error> errors;
+
+ private static class Error {
+ @Nullable public String resource;
+ @Nullable public String field;
+ @Nullable public String code;
+ @Nullable public String message;
+ }
@Nullable
public String getMessage() {
- return message;
+ if (errors == null) {
+ return message;
+ }
+ else {
+ StringBuilder s = new StringBuilder(message);
+ for (Error e : errors) {
+ s.append("<br/>").append("[").append(e.resource).append(";").append(e.field).append("]").append(e.code).append(": ")
+ .append(e.message);
+ }
+ return s.toString();
+ }
}
}
+
diff --git a/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java b/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java
index d2d8700c00fd..8cac25696e5f 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepository.java
@@ -37,10 +37,10 @@ public class GithubRepository extends BaseRepositoryImpl {
private static final Logger LOG = GithubUtil.LOG;
private Pattern myPattern = Pattern.compile("($^)");
- private String myRepoAuthor = "";
- private String myRepoName = "";
- private String myUser = "";
- private String myToken = "";
+ @NotNull private String myRepoAuthor = "";
+ @NotNull private String myRepoName = "";
+ @NotNull private String myUser = "";
+ @NotNull private String myToken = "";
{
setUrl(GithubApiUtil.DEFAULT_GITHUB_HOST);
@@ -216,32 +216,36 @@ public class GithubRepository extends BaseRepositoryImpl {
return new GithubRepository(this);
}
+ @NotNull
public String getRepoName() {
return myRepoName;
}
- public void setRepoName(String repoName) {
+ public void setRepoName(@NotNull String repoName) {
myRepoName = repoName;
myPattern = Pattern.compile("(" + StringUtil.escapeToRegexp(repoName) + "\\-\\d+):\\s+");
}
+ @NotNull
public String getRepoAuthor() {
- return !StringUtil.isEmpty(myRepoAuthor) ? myRepoAuthor : getUsername();
+ return myRepoAuthor;
}
- public void setRepoAuthor(String repoAuthor) {
+ public void setRepoAuthor(@NotNull String repoAuthor) {
myRepoAuthor = repoAuthor;
}
+ @NotNull
public String getUser() {
return myUser;
}
- public void setUser(String user) {
+ public void setUser(@NotNull String user) {
myUser = user;
}
@Transient
+ @NotNull
public String getToken() {
return myToken;
}
diff --git a/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepositoryEditor.java b/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepositoryEditor.java
index df1fd7f38515..663f6a7758b1 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepositoryEditor.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/tasks/GithubRepositoryEditor.java
@@ -7,6 +7,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.tasks.config.BaseRepositoryEditor;
+import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.components.JBLabel;
import com.intellij.util.Consumer;
import com.intellij.util.ThrowableConvertor;
@@ -51,19 +52,9 @@ public class GithubRepositoryEditor extends BaseRepositoryEditor<GithubRepositor
myRepoAuthor.setText(repository.getRepoAuthor());
myRepoName.setText(repository.getRepoName());
- DocumentListener buttonUpdater = new DocumentListener() {
+ DocumentListener buttonUpdater = new DocumentAdapter() {
@Override
- public void insertUpdate(DocumentEvent e) {
- updateTokenButton();
- }
-
- @Override
- public void removeUpdate(DocumentEvent e) {
- updateTokenButton();
- }
-
- @Override
- public void changedUpdate(DocumentEvent e) {
+ protected void textChanged(DocumentEvent e) {
updateTokenButton();
}
};
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreateGistDialog.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreateGistDialog.java
index 4e9a70a83559..a1efdcff2b2b 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreateGistDialog.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreateGistDialog.java
@@ -69,7 +69,12 @@ public class GithubCreateGistDialog extends DialogWrapper {
@Override
protected String getHelpId() {
- return "create.gist.dialog";
+ return "github.create.gist.dialog";
+ }
+
+ @Override
+ protected String getDimensionServiceKey() {
+ return "Github.CreateGistDialog";
}
@Override
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java
index 32e6184040b5..0c9d6daecd25 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java
@@ -19,6 +19,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.ValidationInfo;
import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.util.Consumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
@@ -26,7 +27,6 @@ import org.jetbrains.plugins.github.GithubSettings;
import javax.swing.*;
import java.util.Collection;
-import java.util.List;
import java.util.regex.Pattern;
/**
@@ -36,9 +36,12 @@ public class GithubCreatePullRequestDialog extends DialogWrapper {
private final GithubCreatePullRequestPanel myGithubCreatePullRequestPanel;
private static final Pattern GITHUB_REPO_PATTERN = Pattern.compile("[a-zA-Z0-9_.-]+:[a-zA-Z0-9_.-]+");
- public GithubCreatePullRequestDialog(@NotNull final Project project, @NotNull List<String> branches, @Nullable String suggestedBranch) {
+ public GithubCreatePullRequestDialog(@NotNull final Project project,
+ @NotNull Collection<String> branches,
+ @Nullable String suggestedBranch,
+ @NotNull Consumer<String> showDiff) {
super(project, true);
- myGithubCreatePullRequestPanel = new GithubCreatePullRequestPanel();
+ myGithubCreatePullRequestPanel = new GithubCreatePullRequestPanel(showDiff);
myGithubCreatePullRequestPanel.setBranches(branches);
@@ -61,9 +64,14 @@ public class GithubCreatePullRequestDialog extends DialogWrapper {
return myGithubCreatePullRequestPanel.getPreferredComponent();
}
- @NotNull
- protected Action[] createActions() {
- return new Action[]{getOKAction(), getCancelAction()};
+ @Override
+ protected String getHelpId() {
+ return "github.create.pull.request.dialog";
+ }
+
+ @Override
+ protected String getDimensionServiceKey() {
+ return "Github.CreatePullRequestDialog";
}
@NotNull
@@ -95,12 +103,13 @@ public class GithubCreatePullRequestDialog extends DialogWrapper {
}
if (!GITHUB_REPO_PATTERN.matcher(getTargetBranch()).matches()) {
- return new ValidationInfo("Branch must be specified like 'username:branch'", myGithubCreatePullRequestPanel.getComboBox());
+ return new ValidationInfo("Branch must be specified like 'username:branch'", myGithubCreatePullRequestPanel.getBranchEditor());
}
return null;
}
+ @TestOnly
public void setRequestTitle(String title) {
myGithubCreatePullRequestPanel.setTitle(title);
}
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestPanel.form b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestPanel.form
index e5dda901b53e..46864f055405 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestPanel.form
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestPanel.form
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.plugins.github.ui.GithubCreatePullRequestPanel">
- <grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="4" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+ <grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="4" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="500" height="400"/>
@@ -34,7 +34,7 @@
</component>
<component id="996e9" class="javax.swing.JTextField" binding="myTitleTextField">
<constraints>
- <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
+ <grid row="1" column="1" row-span="1" col-span="2" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
<preferred-size width="150" height="-1"/>
</grid>
</constraints>
@@ -51,7 +51,7 @@
</component>
<scrollpane id="61e54" class="com.intellij.ui.components.JBScrollPane">
<constraints>
- <grid row="3" column="0" row-span="1" col-span="2" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false">
+ <grid row="3" column="0" row-span="1" col-span="3" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false">
<minimum-size width="150" height="50"/>
</grid>
</constraints>
@@ -64,6 +64,14 @@
</component>
</children>
</scrollpane>
+ <component id="90c93" class="javax.swing.JButton" binding="myShowDiffButton">
+ <constraints>
+ <grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ </constraints>
+ <properties>
+ <text value="Show Diff"/>
+ </properties>
+ </component>
</children>
</grid>
</form>
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestPanel.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestPanel.java
index a178024d1911..e4a4521bb89b 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestPanel.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestPanel.java
@@ -18,10 +18,13 @@ package org.jetbrains.plugins.github.ui;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.SortedComboBoxModel;
+import com.intellij.util.Consumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import java.util.Collection;
import java.util.Comparator;
@@ -34,8 +37,9 @@ public class GithubCreatePullRequestPanel {
private ComboBox myBranchComboBox;
private SortedComboBoxModel<String> myBranchModel;
private JPanel myPanel;
+ private JButton myShowDiffButton;
- public GithubCreatePullRequestPanel() {
+ public GithubCreatePullRequestPanel(@NotNull final Consumer<String> showDiff) {
myDescriptionTextArea.setBorder(BorderFactory.createEtchedBorder());
myBranchModel = new SortedComboBoxModel<String>(new Comparator<String>() {
@Override
@@ -44,6 +48,12 @@ public class GithubCreatePullRequestPanel {
}
});
myBranchComboBox.setModel(myBranchModel);
+ myShowDiffButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ showDiff.consume(getBranch());
+ }
+ });
}
@NotNull
@@ -67,6 +77,9 @@ public class GithubCreatePullRequestPanel {
return;
}
+ if (myBranchModel.indexOf(branch) == -1) {
+ myBranchModel.add(branch);
+ }
myBranchComboBox.setSelectedItem(branch);
}
@@ -84,7 +97,7 @@ public class GithubCreatePullRequestPanel {
return myTitleTextField;
}
- public JComboBox getComboBox() {
+ public JComponent getBranchEditor() {
return myBranchComboBox;
}
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.form b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.form
index eedbe5e17b00..ba0af8547b25 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.form
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.form
@@ -53,15 +53,6 @@
</constraints>
<properties/>
</component>
- <component id="f851a" class="javax.swing.JComboBox" binding="myAuthTypeComboBox">
- <constraints>
- <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="7" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
- </constraints>
- <properties>
- <model/>
- <toolTipText value=""/>
- </properties>
- </component>
<component id="b466f" class="javax.swing.JCheckBox" binding="mySavePasswordCheckBox">
<constraints>
<grid row="1" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false">
@@ -105,6 +96,12 @@
<text value="Login:"/>
</properties>
</component>
+ <component id="548fc" class="com.intellij.openapi.ui.ComboBox" binding="myAuthTypeComboBox">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="7" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ </constraints>
+ <properties/>
+ </component>
</children>
</grid>
</form>
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.java
index ea565e03c5c9..bebf6f76d52b 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubLoginPanel.java
@@ -16,8 +16,11 @@
package org.jetbrains.plugins.github.ui;
import com.intellij.ide.BrowserUtil;
+import com.intellij.openapi.ui.ComboBox;
+import com.intellij.openapi.util.Condition;
import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.HyperlinkAdapter;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
import com.intellij.util.ui.table.ComponentsListFocusTraversalPolicy;
import org.jetbrains.annotations.NotNull;
@@ -46,7 +49,7 @@ public class GithubLoginPanel {
private JPasswordField myPasswordField;
private JTextPane mySignupTextField;
private JCheckBox mySavePasswordCheckBox;
- private JComboBox myAuthTypeComboBox;
+ private ComboBox myAuthTypeComboBox;
private JLabel myPasswordLabel;
private JLabel myLoginLabel;
@@ -87,7 +90,7 @@ public class GithubLoginPanel {
myLoginLabel.setVisible(true);
myLoginTextField.setVisible(true);
}
- if (AUTH_TOKEN.equals(item)) {
+ else if (AUTH_TOKEN.equals(item)) {
myPasswordLabel.setText("Token:");
mySavePasswordCheckBox.setText("Save token");
myLoginLabel.setVisible(false);
@@ -102,8 +105,8 @@ public class GithubLoginPanel {
List<Component> order = new ArrayList<Component>();
order.add(myHostTextField);
- order.add(myLoginTextField);
order.add(myAuthTypeComboBox);
+ order.add(myLoginTextField);
order.add(myPasswordField);
order.add(mySavePasswordCheckBox);
myPane.setFocusTraversalPolicyProvider(true);
@@ -174,7 +177,7 @@ public class GithubLoginPanel {
}
public JComponent getPreferrableFocusComponent() {
- return myLoginTextField;
+ return myLoginTextField.isVisible() ? myLoginTextField : myPasswordField;
}
@NotNull
@@ -196,7 +199,12 @@ public class GithubLoginPanel {
@NotNull
@Override
protected List<Component> getOrderedComponents() {
- return myOrder;
+ return ContainerUtil.filter(myOrder, new Condition<Component>() {
+ @Override
+ public boolean value(Component component) {
+ return component.isVisible() && component.isEnabled();
+ }
+ });
}
}
}
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.form b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.form
index cc283855bc64..c0d2af8512d8 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.form
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.form
@@ -76,14 +76,11 @@
</constraints>
<properties/>
</component>
- <component id="be50e" class="javax.swing.JComboBox" binding="myAuthTypeComboBox">
+ <component id="5a680" class="com.intellij.openapi.ui.ComboBox" binding="myAuthTypeComboBox">
<constraints>
- <grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
+ <grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
- <properties>
- <model/>
- <toolTipText value=""/>
- </properties>
+ <properties/>
</component>
</children>
</grid>
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.java
index 54e1f61b1a14..778079772617 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSettingsPanel.java
@@ -17,9 +17,11 @@ package org.jetbrains.plugins.github.ui;
import com.intellij.ide.BrowserUtil;
import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.HyperlinkAdapter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -56,7 +58,7 @@ public class GithubSettingsPanel {
private JPanel myPane;
private JButton myTestButton;
private JTextField myHostTextField;
- private JComboBox myAuthTypeComboBox;
+ private ComboBox myAuthTypeComboBox;
private JLabel myLoginLabel;
private boolean myCredentialsModified;
@@ -98,46 +100,21 @@ public class GithubSettingsPanel {
}
});
- myPasswordField.getDocument().addDocumentListener(new DocumentListener() {
+ myPasswordField.getDocument().addDocumentListener(new DocumentAdapter() {
@Override
- public void insertUpdate(DocumentEvent e) {
- myCredentialsModified = true;
- }
-
- @Override
- public void removeUpdate(DocumentEvent e) {
- myCredentialsModified = true;
- }
-
- @Override
- public void changedUpdate(DocumentEvent e) {
+ protected void textChanged(DocumentEvent e) {
myCredentialsModified = true;
}
});
- DocumentListener passwordEraser = new DocumentListener() {
+ DocumentListener passwordEraser = new DocumentAdapter() {
@Override
- public void insertUpdate(DocumentEvent e) {
- if (!myCredentialsModified) {
- erasePassword();
- }
- }
-
- @Override
- public void removeUpdate(DocumentEvent e) {
- if (!myCredentialsModified) {
- erasePassword();
- }
- }
-
- @Override
- public void changedUpdate(DocumentEvent e) {
+ protected void textChanged(DocumentEvent e) {
if (!myCredentialsModified) {
erasePassword();
}
}
};
-
myHostTextField.getDocument().addDocumentListener(passwordEraser);
myLoginTextField.getDocument().addDocumentListener(passwordEraser);
@@ -163,7 +140,7 @@ public class GithubSettingsPanel {
myLoginLabel.setVisible(true);
myLoginTextField.setVisible(true);
}
- if (AUTH_TOKEN.equals(item)) {
+ else if (AUTH_TOKEN.equals(item)) {
myLoginLabel.setVisible(false);
myLoginTextField.setVisible(false);
}
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubShareDialog.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubShareDialog.java
index c1b84c5908ef..5c94dc9dcd0d 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubShareDialog.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubShareDialog.java
@@ -32,17 +32,17 @@ public class GithubShareDialog extends DialogWrapper {
updateOkButton();
}
- @NotNull
- protected Action[] createActions() {
- return new Action[] {getOKAction(), getCancelAction(), getHelpAction()};
- }
-
@Override
protected String getHelpId() {
return "github.share";
}
@Override
+ protected String getDimensionServiceKey() {
+ return "Github.ShareDialog";
+ }
+
+ @Override
protected JComponent createCenterPanel() {
return myGithubSharePanel.getPanel();
}
diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSharePanel.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSharePanel.java
index 9324ec0bcf64..647a811320b8 100644
--- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSharePanel.java
+++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubSharePanel.java
@@ -1,8 +1,9 @@
package org.jetbrains.plugins.github.ui;
+import com.intellij.ui.DocumentAdapter;
+
import javax.swing.*;
import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
/**
* @author oleg
@@ -17,19 +18,9 @@ public class GithubSharePanel {
public GithubSharePanel(final GithubShareDialog githubShareDialog) {
myGithubShareDialog = githubShareDialog;
- myRepositoryTextField.getDocument().addDocumentListener(new DocumentListener() {
- @Override
- public void insertUpdate(final DocumentEvent e) {
- myGithubShareDialog.updateOkButton();
- }
-
- @Override
- public void removeUpdate(final DocumentEvent e) {
- myGithubShareDialog.updateOkButton();
- }
-
+ myRepositoryTextField.getDocument().addDocumentListener(new DocumentAdapter() {
@Override
- public void changedUpdate(final DocumentEvent e) {
+ protected void textChanged(DocumentEvent e) {
myGithubShareDialog.updateOkButton();
}
});
diff --git a/plugins/github/test/org/jetbrains/plugins/github/GithubCreateGistTestBase.java b/plugins/github/test/org/jetbrains/plugins/github/GithubCreateGistTestBase.java
index 0450fdc3fb34..b564267f91a8 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/GithubCreateGistTestBase.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/GithubCreateGistTestBase.java
@@ -17,7 +17,6 @@ package org.jetbrains.plugins.github;
import com.intellij.openapi.util.Clock;
import com.intellij.openapi.util.Comparing;
-import com.intellij.util.containers.HashMap;
import com.intellij.util.text.DateFormatUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.github.api.GithubApiUtil;
@@ -27,7 +26,6 @@ import org.jetbrains.plugins.github.test.GithubTest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import static org.jetbrains.plugins.github.api.GithubGist.FileContent;
diff --git a/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTest.java b/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTest.java
index 53843019d3f2..0d24130ea4ac 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTest.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTest.java
@@ -34,6 +34,7 @@ public class GithubCreatePullRequestTest extends GithubCreatePullRequestTestBase
GithubCreatePullRequestAction.createPullRequest(myProject, myProjectRoot);
checkNotification(NotificationType.INFORMATION, "Successfully created pull request", null);
+ initGitChecks();
checkRemoteConfigured();
checkLastCommitPushed();
}
@@ -49,6 +50,7 @@ public class GithubCreatePullRequestTest extends GithubCreatePullRequestTestBase
GithubCreatePullRequestAction.createPullRequest(myProject, myProjectRoot);
checkNotification(NotificationType.INFORMATION, "Successfully created pull request", null);
+ initGitChecks();
checkRemoteConfigured();
checkLastCommitPushed();
}
@@ -64,6 +66,7 @@ public class GithubCreatePullRequestTest extends GithubCreatePullRequestTestBase
GithubCreatePullRequestAction.createPullRequest(myProject, myProjectRoot);
checkNotification(NotificationType.INFORMATION, "Successfully created pull request", null);
+ initGitChecks();
checkRemoteConfigured();
checkLastCommitPushed();
}
diff --git a/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTestBase.java b/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTestBase.java
index 49ac861aa7be..939fd8e49efd 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTestBase.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/GithubCreatePullRequestTestBase.java
@@ -20,12 +20,9 @@ import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.Clock;
import com.intellij.testFramework.VfsTestUtil;
import com.intellij.util.text.DateFormatUtil;
-import git4idea.GitUtil;
import git4idea.actions.GitInit;
import git4idea.commands.Git;
import git4idea.repo.GitRepository;
-import git4idea.repo.GitRepositoryManager;
-import git4idea.test.GitExecutor;
import git4idea.test.TestDialogHandler;
import org.jetbrains.plugins.github.test.GithubTest;
import org.jetbrains.plugins.github.ui.GithubCreatePullRequestDialog;
@@ -40,13 +37,11 @@ import static git4idea.test.GitExecutor.git;
public abstract class GithubCreatePullRequestTestBase extends GithubTest {
protected static final String PROJECT_URL = "https://github.com/ideatest1/PullRequestTest";
protected String BRANCH_NAME;
- protected GitRepositoryManager myGitRepositoryManager;
@Override
public void setUp() throws Exception {
super.setUp();
- myGitRepositoryManager = GitUtil.getRepositoryManager(myProject);
Random rnd = new Random();
long time = Clock.getTime();
BRANCH_NAME = "branch_" + getTestName(false) + "_" + DateFormatUtil.formatDate(time).replace('/', '-') + "_" + rnd.nextLong();
@@ -91,7 +86,6 @@ public abstract class GithubCreatePullRequestTestBase extends GithubTest {
protected void createBranch() {
git("branch " + BRANCH_NAME);
git("checkout " + BRANCH_NAME);
- GitInit.refreshAndConfigureVcsMappings(myProject, myProjectRoot, myProjectRoot.getPath());
}
protected void createChanges() {
@@ -99,20 +93,4 @@ public abstract class GithubCreatePullRequestTestBase extends GithubTest {
git("add file.txt");
git("commit -m changes");
}
-
- protected void checkRemoteConfigured() {
- final GitRepository gitRepository = myGitRepositoryManager.getRepositoryForFile(myProjectRoot);
- assertNotNull(gitRepository);
-
- assertNotNull("GitHub remote is not configured", GithubUtil.findGithubRemoteUrl(gitRepository));
- }
-
- protected void checkLastCommitPushed() {
- final GitRepository gitRepository = myGitRepositoryManager.getRepositoryForFile(myProjectRoot);
- assertNotNull(gitRepository);
-
- String hash = GitExecutor.git(gitRepository, "log -1 --pretty=%h");
- String ans = GitExecutor.git(gitRepository, "branch --contains " + hash + " -a");
- assertTrue(ans.contains("remotes/origin/"));
- }
}
diff --git a/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTest.java b/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTest.java
index 3a5eddab15f4..756fabc6a713 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTest.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTest.java
@@ -3,6 +3,10 @@ package org.jetbrains.plugins.github;
import com.intellij.notification.NotificationType;
import com.intellij.openapi.components.ServiceManager;
import git4idea.commands.Git;
+import org.jetbrains.plugins.github.api.GithubApiUtil;
+import org.jetbrains.plugins.github.api.GithubRepoDetailed;
+
+import java.io.IOException;
import static com.intellij.dvcs.test.Executor.cd;
import static git4idea.test.GitExecutor.git;
@@ -21,6 +25,7 @@ public class GithubShareProjectTest extends GithubShareProjectTestBase {
GithubShareAction.shareProjectOnGithub(myProject, myProjectRoot);
checkNotification(NotificationType.INFORMATION, "Successfully shared project on GitHub", null);
+ initGitChecks();
checkGitExists();
checkGithubExists();
checkRemoteConfigured();
@@ -53,6 +58,7 @@ public class GithubShareProjectTest extends GithubShareProjectTestBase {
GithubShareAction.shareProjectOnGithub(myProject, myProjectRoot);
checkNotification(NotificationType.INFORMATION, "Successfully shared project on GitHub", null);
+ initGitChecks();
checkGitExists();
checkGithubExists();
checkRemoteConfigured();
@@ -71,6 +77,7 @@ public class GithubShareProjectTest extends GithubShareProjectTestBase {
GithubShareAction.shareProjectOnGithub(myProject, myProjectRoot);
checkNotification(NotificationType.INFORMATION, "Successfully shared project on GitHub", null);
+ initGitChecks();
checkGitExists();
checkGithubExists();
checkRemoteConfigured();
@@ -84,9 +91,15 @@ public class GithubShareProjectTest extends GithubShareProjectTestBase {
GithubShareAction.shareProjectOnGithub(myProject, myProjectRoot);
checkNotification(NotificationType.INFORMATION, "Successfully created empty repository on GitHub", null);
+ initGitChecks();
checkGitExists();
checkGithubExists();
checkRemoteConfigured();
}
+ protected void checkGithubExists() throws IOException {
+ GithubAuthData auth = myGitHubSettings.getAuthData();
+ GithubRepoDetailed githubInfo = GithubApiUtil.getDetailedRepoInfo(auth, myLogin1, PROJECT_NAME);
+ assertNotNull("GitHub repository does not exist", githubInfo);
+ }
}
diff --git a/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTestBase.java b/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTestBase.java
index ab969e9154dc..4eee8e1439f4 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTestBase.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/GithubShareProjectTestBase.java
@@ -20,11 +20,8 @@ import com.intellij.openapi.util.Clock;
import com.intellij.util.text.DateFormatUtil;
import git4idea.GitUtil;
import git4idea.repo.GitRepository;
-import git4idea.repo.GitRepositoryManager;
-import git4idea.test.GitExecutor;
import git4idea.test.TestDialogHandler;
import org.jetbrains.plugins.github.api.GithubApiUtil;
-import org.jetbrains.plugins.github.api.GithubRepoDetailed;
import org.jetbrains.plugins.github.test.GithubTest;
import org.jetbrains.plugins.github.ui.GithubShareDialog;
@@ -36,13 +33,11 @@ import java.util.Random;
*/
public abstract class GithubShareProjectTestBase extends GithubTest {
protected String PROJECT_NAME;
- protected GitRepositoryManager myGitRepositoryManager;
@Override
public void setUp() throws Exception {
super.setUp();
- myGitRepositoryManager = GitUtil.getRepositoryManager(myProject);
Random rnd = new Random();
long time = Clock.getTime();
PROJECT_NAME = "new_project_from_" + getTestName(false) + "_" + DateFormatUtil.formatDate(time).replace('/', '-') + "_" + rnd.nextLong();
@@ -86,31 +81,4 @@ public abstract class GithubShareProjectTestBase extends GithubTest {
}
});
}
-
- protected void checkGithubExists() throws IOException {
- GithubAuthData auth = myGitHubSettings.getAuthData();
- GithubRepoDetailed githubInfo = GithubApiUtil.getDetailedRepoInfo(auth, myLogin1, PROJECT_NAME);
- assertNotNull("GitHub repository does not exist", githubInfo);
- }
-
- protected void checkGitExists() {
- final GitRepository gitRepository = myGitRepositoryManager.getRepositoryForFile(myProjectRoot);
- assertNotNull("Git repository does not exist", gitRepository);
- }
-
- protected void checkRemoteConfigured() {
- final GitRepository gitRepository = myGitRepositoryManager.getRepositoryForFile(myProjectRoot);
- assertNotNull(gitRepository);
-
- assertNotNull("GitHub remote is not configured", GithubUtil.findGithubRemoteUrl(gitRepository));
- }
-
- protected void checkLastCommitPushed() {
- final GitRepository gitRepository = myGitRepositoryManager.getRepositoryForFile(myProjectRoot);
- assertNotNull(gitRepository);
-
- String hash = GitExecutor.git(gitRepository, "log -1 --pretty=%h");
- String ans = GitExecutor.git(gitRepository, "branch --contains " + hash + " -a");
- assertTrue(ans.contains("remotes/origin/master"));
- }
}
diff --git a/plugins/github/test/org/jetbrains/plugins/github/test/GithubTest.java b/plugins/github/test/org/jetbrains/plugins/github/test/GithubTest.java
index ee5233c8057e..ab83293ed73b 100644
--- a/plugins/github/test/org/jetbrains/plugins/github/test/GithubTest.java
+++ b/plugins/github/test/org/jetbrains/plugins/github/test/GithubTest.java
@@ -27,12 +27,15 @@ import com.intellij.testFramework.VfsTestUtil;
import com.intellij.testFramework.fixtures.IdeaProjectTestFixture;
import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory;
import git4idea.DialogManager;
+import git4idea.GitUtil;
import git4idea.Notificator;
import git4idea.commands.GitHttpAuthService;
import git4idea.commands.GitHttpAuthenticator;
import git4idea.config.GitConfigUtil;
import git4idea.config.GitVcsSettings;
import git4idea.remote.GitHttpAuthTestService;
+import git4idea.repo.GitRepository;
+import git4idea.repo.GitRepositoryManager;
import git4idea.test.GitExecutor;
import git4idea.test.GitTestUtil;
import git4idea.test.TestDialogManager;
@@ -41,6 +44,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.github.GithubAuthData;
import org.jetbrains.plugins.github.GithubSettings;
+import org.jetbrains.plugins.github.GithubUtil;
import static org.junit.Assume.assumeNotNull;
@@ -63,6 +67,9 @@ public abstract class GithubTest extends UsefulTestCase {
@NotNull protected Project myProject;
@NotNull protected VirtualFile myProjectRoot;
+ @Nullable protected GitRepository myRepository;
+ @NotNull protected GitRepositoryManager myGitRepositoryManager;
+
@NotNull protected GitVcsSettings myGitSettings;
@NotNull protected GithubSettings myGitHubSettings;
@NotNull private GitHttpAuthTestService myHttpAuthService;
@@ -143,6 +150,28 @@ public abstract class GithubTest extends UsefulTestCase {
}
}
+ protected void initGitChecks() {
+ myRepository = myGitRepositoryManager.getRepositoryForFile(myProjectRoot);
+ }
+
+ protected void checkGitExists() {
+ assertNotNull("Git repository does not exist", myRepository);
+ }
+
+ protected void checkRemoteConfigured() {
+ assertNotNull(myRepository);
+
+ assertNotNull("GitHub remote is not configured", GithubUtil.findGithubRemoteUrl(myRepository));
+ }
+
+ protected void checkLastCommitPushed() {
+ assertNotNull(myRepository);
+
+ String hash = GitExecutor.git(myRepository, "log -1 --pretty=%h");
+ String ans = GitExecutor.git(myRepository, "branch --contains " + hash + " -a");
+ assertTrue(ans.contains("remotes/origin"));
+ }
+
@Override
protected void setUp() throws Exception {
final String host = System.getenv("idea.test.github.host");
@@ -178,6 +207,8 @@ public abstract class GithubTest extends UsefulTestCase {
myDialogManager = (TestDialogManager)ServiceManager.getService(DialogManager.class);
myNotificator = (TestNotificator)ServiceManager.getService(myProject, Notificator.class);
myHttpAuthService = (GitHttpAuthTestService)ServiceManager.getService(GitHttpAuthService.class);
+
+ myGitRepositoryManager = GitUtil.getRepositoryManager(myProject);
}
@Override
@@ -190,4 +221,5 @@ public abstract class GithubTest extends UsefulTestCase {
super.tearDown();
}
+
}
diff --git a/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java b/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java
index 5e2d5ead054d..803bdc389454 100644
--- a/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java
+++ b/plugins/google-app-engine/source/com/intellij/appengine/actions/AppEngineUploader.java
@@ -71,6 +71,7 @@ import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.remoteServer.runtime.deployment.DeploymentRuntime;
import com.intellij.remoteServer.runtime.deployment.ServerRuntimeInstance;
+import com.intellij.remoteServer.runtime.log.LoggingHandler;
import com.intellij.util.net.HttpConfigurable;
import com.intellij.util.xml.GenericDomValue;
import org.jetbrains.annotations.NotNull;
@@ -93,9 +94,10 @@ public class AppEngineUploader {
private final String myEmail;
private final String myPassword;
private final ServerRuntimeInstance.DeploymentOperationCallback myCallback;
+ private final LoggingHandler myLoggingHandler;
private AppEngineUploader(Project project, Artifact artifact, AppEngineFacet appEngineFacet, AppEngineSdk sdk, String email,
- String password, ServerRuntimeInstance.DeploymentOperationCallback callback) {
+ String password, ServerRuntimeInstance.DeploymentOperationCallback callback, @Nullable LoggingHandler loggingHandler) {
myProject = project;
myArtifact = artifact;
myAppEngineFacet = appEngineFacet;
@@ -103,13 +105,14 @@ public class AppEngineUploader {
myEmail = email;
myPassword = password;
myCallback = callback;
+ myLoggingHandler = loggingHandler;
}
@Nullable
public static AppEngineUploader createUploader(@NotNull Project project,
@NotNull Artifact artifact,
@Nullable AppEngineServerConfiguration configuration,
- ServerRuntimeInstance.DeploymentOperationCallback callback) {
+ @NotNull ServerRuntimeInstance.DeploymentOperationCallback callback, @Nullable LoggingHandler loggingHandler) {
final String explodedPath = artifact.getOutputPath();
if (explodedPath == null) {
callback.errorOccurred("Output path isn't specified for '" + artifact.getName() + "' artifact");
@@ -170,7 +173,7 @@ public class AppEngineUploader {
password = dialog.getPassword();
}
- return new AppEngineUploader(project, artifact, appEngineFacet, sdk, email, password, callback);
+ return new AppEngineUploader(project, artifact, appEngineFacet, sdk, email, password, callback, loggingHandler);
}
public void startUploading() {
@@ -240,32 +243,40 @@ public class AppEngineUploader {
return;
}
- final Executor executor = DefaultRunExecutor.getRunExecutorInstance();
- final ConsoleView console = TextConsoleBuilderFactory.getInstance().createBuilder(myProject).getConsole();
- final RunnerLayoutUi ui = RunnerLayoutUi.Factory.getInstance(myProject).create("Upload", "Upload Application", "Upload Application", myProject);
- final DefaultActionGroup group = new DefaultActionGroup();
- ui.getOptions().setLeftToolbar(group, ActionPlaces.UNKNOWN);
- ui.addContent(ui.createContent("upload", console.getComponent(), "Upload Application", null, console.getPreferredFocusableComponent()));
-
final ProcessHandler processHandler = new OSProcessHandler(process, commandLine.getCommandLineString());
- processHandler.addProcessListener(new MyProcessListener(processHandler, console));
- console.attachToProcess(processHandler);
- final RunContentDescriptor contentDescriptor = new RunContentDescriptor(console, processHandler, ui.getComponent(), "Upload Application");
- group.add(ActionManager.getInstance().getAction(IdeActions.ACTION_STOP_PROGRAM));
- group.add(new CloseAction(executor, contentDescriptor, myProject));
+ if (myLoggingHandler == null) {
+ final Executor executor = DefaultRunExecutor.getRunExecutorInstance();
+ final ConsoleView console = TextConsoleBuilderFactory.getInstance().createBuilder(myProject).getConsole();
+ final RunnerLayoutUi ui = RunnerLayoutUi.Factory.getInstance(myProject).create("Upload", "Upload Application", "Upload Application", myProject);
+ final DefaultActionGroup group = new DefaultActionGroup();
+ ui.getOptions().setLeftToolbar(group, ActionPlaces.UNKNOWN);
+ ui.addContent(ui.createContent("upload", console.getComponent(), "Upload Application", null, console.getPreferredFocusableComponent()));
+
+ processHandler.addProcessListener(new MyProcessListener(processHandler, console, null));
+ console.attachToProcess(processHandler);
+ final RunContentDescriptor contentDescriptor = new RunContentDescriptor(console, processHandler, ui.getComponent(), "Upload Application");
+ group.add(ActionManager.getInstance().getAction(IdeActions.ACTION_STOP_PROGRAM));
+ group.add(new CloseAction(executor, contentDescriptor, myProject));
- ExecutionManager.getInstance(myProject).getContentManager().showRunContent(executor, contentDescriptor);
+ ExecutionManager.getInstance(myProject).getContentManager().showRunContent(executor, contentDescriptor);
+ }
+ else {
+ processHandler.addProcessListener(new MyProcessListener(processHandler, null, myLoggingHandler));
+ myLoggingHandler.attachToProcess(processHandler);
+ }
processHandler.startNotify();
}
private class MyProcessListener extends ProcessAdapter {
private boolean myPasswordEntered;
private final ProcessHandler myProcessHandler;
- private final ConsoleView myConsole;
+ @Nullable private final ConsoleView myConsole;
+ @Nullable private final LoggingHandler myLoggingHandler;
- public MyProcessListener(ProcessHandler processHandler, ConsoleView console) {
+ public MyProcessListener(ProcessHandler processHandler, @Nullable ConsoleView console, @Nullable LoggingHandler loggingHandler) {
myProcessHandler = processHandler;
myConsole = console;
+ myLoggingHandler = loggingHandler;
}
@Override
@@ -278,16 +289,26 @@ public class AppEngineUploader {
final PrintWriter input = new PrintWriter(processInput);
input.println(myPassword);
input.flush();
- myConsole.print(StringUtil.repeatSymbol('*', myPassword.length()) + "\n", ConsoleViewContentType.USER_INPUT);
+ String message = StringUtil.repeatSymbol('*', myPassword.length()) + "\n";
+ if (myConsole != null) {
+ myConsole.print(message, ConsoleViewContentType.USER_INPUT);
+ }
+ else if (myLoggingHandler != null) {
+ myLoggingHandler.print(message);
+ }
}
}
}
@Override
public void processTerminated(ProcessEvent event) {
- if (event.getExitCode() == 0) {
+ int exitCode = event.getExitCode();
+ if (exitCode == 0) {
myCallback.succeeded(new DeploymentRuntime());
}
+ else {
+ myCallback.errorOccurred("Process terminated with exit code " + exitCode);
+ }
}
}
}
diff --git a/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationAction.java b/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationAction.java
index fe7f71dbb51b..f243a799b9a8 100644
--- a/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationAction.java
+++ b/plugins/google-app-engine/source/com/intellij/appengine/actions/UploadApplicationAction.java
@@ -70,7 +70,7 @@ public class UploadApplicationAction extends AnAction {
public void errorOccurred(@NotNull String errorMessage) {
Messages.showErrorDialog(project, errorMessage, CommonBundle.getErrorTitle());
}
- });
+ }, null);
if (uploader != null) {
uploader.startUploading();
}
diff --git a/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java b/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java
index b69b47a034fe..855ed7a64dfe 100644
--- a/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java
+++ b/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineCloudType.java
@@ -22,7 +22,6 @@ import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.options.UnnamedConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.packaging.artifacts.Artifact;
-import com.intellij.packaging.artifacts.ArtifactPointerManager;
import com.intellij.remoteServer.ServerType;
import com.intellij.remoteServer.configuration.deployment.*;
import com.intellij.remoteServer.runtime.Deployment;
@@ -38,7 +37,6 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
-import java.util.ArrayList;
import java.util.List;
/**
@@ -83,7 +81,7 @@ public class AppEngineCloudType extends ServerType<AppEngineServerConfiguration>
@NotNull
@Override
- public DeploymentConfigurator createDeployer(Project project) {
+ public DeploymentConfigurator createDeploymentConfigurator(Project project) {
return new AppEngineDeploymentConfigurator(project);
}
@@ -134,12 +132,7 @@ public class AppEngineCloudType extends ServerType<AppEngineServerConfiguration>
@Override
public List<DeploymentSource> getAvailableDeploymentSources() {
List<Artifact> artifacts = AppEngineUtil.collectWebArtifacts(myProject, true);
- List<DeploymentSource> sources = new ArrayList<DeploymentSource>();
- ArtifactPointerManager pointerManager = ArtifactPointerManager.getInstance(myProject);
- for (Artifact artifact : artifacts) {
- sources.add(DeploymentSourceUtil.getInstance().createArtifactDeploymentSource(pointerManager.createPointer(artifact)));
- }
- return sources;
+ return DeploymentSourceUtil.getInstance().createArtifactDeploymentSources(myProject, artifacts);
}
@NotNull
@@ -165,10 +158,6 @@ public class AppEngineCloudType extends ServerType<AppEngineServerConfiguration>
public void connect(@NotNull final ConnectionCallback<DummyDeploymentConfiguration> callback) {
callback.connected(new AppEngineRuntimeInstance(myConfiguration));
}
-
- @Override
- public void disconnect() {
- }
}
private static class AppEngineRuntimeInstance extends ServerRuntimeInstance<DummyDeploymentConfiguration> {
@@ -183,7 +172,7 @@ public class AppEngineCloudType extends ServerType<AppEngineServerConfiguration>
Artifact artifact = ((ArtifactDeploymentSource)task.getSource()).getArtifact();
if (artifact == null) return;
- AppEngineUploader uploader = AppEngineUploader.createUploader(task.getProject(), artifact, myConfiguration, callback);
+ AppEngineUploader uploader = AppEngineUploader.createUploader(task.getProject(), artifact, myConfiguration, callback, task.getLoggingHandler());
if (uploader != null) {
uploader.startUploading();
}
@@ -193,5 +182,9 @@ public class AppEngineCloudType extends ServerType<AppEngineServerConfiguration>
public void computeDeployments(@NotNull ComputeDeploymentsCallback deployments) {
deployments.succeeded(ContainerUtil.<Deployment>emptyList());
}
+
+ @Override
+ public void disconnect() {
+ }
}
}
diff --git a/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineServerConfiguration.java b/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineServerConfiguration.java
index 9291f376fc7d..4576fb41bdde 100644
--- a/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineServerConfiguration.java
+++ b/plugins/google-app-engine/source/com/intellij/appengine/cloud/AppEngineServerConfiguration.java
@@ -15,16 +15,13 @@
*/
package com.intellij.appengine.cloud;
-import com.intellij.openapi.components.PersistentStateComponent;
-import com.intellij.remoteServer.configuration.ServerConfiguration;
-import com.intellij.util.xmlb.XmlSerializerUtil;
+import com.intellij.remoteServer.configuration.ServerConfigurationBase;
import com.intellij.util.xmlb.annotations.Attribute;
-import org.jetbrains.annotations.Nullable;
/**
* @author nik
*/
-public class AppEngineServerConfiguration extends ServerConfiguration implements PersistentStateComponent<AppEngineServerConfiguration> {
+public class AppEngineServerConfiguration extends ServerConfigurationBase<AppEngineServerConfiguration> {
private String myEmail;
@Attribute("email")
@@ -35,20 +32,4 @@ public class AppEngineServerConfiguration extends ServerConfiguration implements
public void setEmail(String email) {
myEmail = email;
}
-
- @Nullable
- @Override
- public AppEngineServerConfiguration getState() {
- return this;
- }
-
- @Override
- public void loadState(AppEngineServerConfiguration state) {
- XmlSerializerUtil.copyBean(state, this);
- }
-
- @Override
- public PersistentStateComponent<?> getSerializer() {
- return this;
- }
}
diff --git a/plugins/gradle/gradle.iml b/plugins/gradle/gradle.iml
index b0e85e51a131..510f93a768eb 100644
--- a/plugins/gradle/gradle.iml
+++ b/plugins/gradle/gradle.iml
@@ -25,233 +25,15 @@
<orderEntry type="module-library" exported="">
<library name="Gradle">
<CLASSES>
- <root url="jar://$MODULE_DIR$/lib/gradle-base-services-1.7.jar!/" />
- <root url="jar://$MODULE_DIR$/lib/gradle-core-1.7.jar!/" />
- <root url="jar://$MODULE_DIR$/lib/gradle-messaging-1.7.jar!/" />
- <root url="jar://$MODULE_DIR$/lib/gradle-tooling-api-1.7.jar!/" />
- <root url="jar://$MODULE_DIR$/lib/gradle-wrapper-1.7.jar!/" />
+ <root url="jar://$MODULE_DIR$/lib/gradle-base-services-1.8-20130730220035+0000.jar!/" />
+ <root url="jar://$MODULE_DIR$/lib/gradle-core-1.8-20130730220035+0000.jar!/" />
+ <root url="jar://$MODULE_DIR$/lib/gradle-messaging-1.8-20130730220035+0000.jar!/" />
+ <root url="jar://$MODULE_DIR$/lib/gradle-tooling-api-1.8-20130730220035+0000.jar!/" />
+ <root url="jar://$MODULE_DIR$/lib/gradle-wrapper-1.8-20130730220035+0000.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/buildSrc/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/buildSrc/src/test/resources" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ui/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ui/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ui/src/integTest/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/cli/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/cpp/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/cpp/src/integTest/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ear/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/main/resources" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/idea/IdeaIntegrationTest/canCreateAndDeleteMetaData/api/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/eclipse/EclipseIntegrationTest/canCreateAndDeleteMetaData/api/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/eclipse/EclipseIntegrationTest/canCreateAndDeleteMetaData/api/src/integTest/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/eclipse/EclipseIntegrationTest/canCreateAndDeleteMetaData/webAppJava6/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/eclipse/EclipseIntegrationTest/canCreateAndDeleteMetaData/groovyproject/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ide/src/integTest/resources/org/gradle/plugins/ide/eclipse/EclipseIntegrationTest/canCreateAndDeleteMetaData/webAppWithVars/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ivy/src/main/java/org/gradle/api/publish/ivy/tasks" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ivy/src/main/java/org/gradle/api/publish/ivy/plugins" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/ivy/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core/src/integTest/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core/src/testFixtures/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/ear/earWithWar/war/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/ear/earCustomized/war/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/base/prod/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/base/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/onlyif/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/onlyif/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/apiAndImpl/src/api/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/apiAndImpl/src/impl/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/apiAndImpl/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/quickstart/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/quickstart/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/api/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/shared/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/shared/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/buildSrc/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/buildSrc/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/services/shared/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/services/webservice/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/multiproject/services/webservice/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/testListener/src/test/java/org/gradle" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/customizedLayout/src/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/customizedLayout/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/withIntegrationTests/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/withIntegrationTests/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/java/withIntegrationTests/src/integration-test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/antlr/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/maven/quickstart/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/maven/pomGeneration/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/scala/mixedJavaAndScala/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/scala/mixedJavaAndScala/src/main/scala" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/sonar/quickstart/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/sonar/quickstart/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/multiproject/testproject/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/multiproject/testproject/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/multiproject/testproject/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/multiproject/testproject/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/multiproject/groovycDetector/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/mixedJavaAndGroovy/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/groovy/mixedJavaAndGroovy/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/signing/maven/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/signing/conditional/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/junit/categories/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/jacoco/quickstart/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/jacoco/quickstart/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/jacoco/application/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/groups/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/suitexmlbuilder/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/suitexmlbuilder/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/java-jdk14-passing/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/java-jdk14-passing/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/java-jdk15-passing/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testng/java-jdk15-passing/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testReport/core/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/testing/testReport/util/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/ant/useExternalAntTaskWithConfig/src" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/java/sourceSets/src/intTest/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/api/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/api/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/shared/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/shared/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/services/personService/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/java/services/personService/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/webDist/date/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/webDist/hello/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/javaWithCustomConf/api/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/userguide/multiproject/dependencies/javaWithCustomConf/shared/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/ivypublish/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/ivypublish/subproject/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/idea/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/model/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/eclipse/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/runBuild/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/customModel/plugin/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/toolingApi/customModel/tooling/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/application/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/codeQuality/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/sonarRunner/quickstart/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/sonarRunner/quickstart/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/maven-publish/quickstart/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/maven-publish/javaProject/subproject/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/buildDashboard/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/webApplication/customised/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/webApplication/customised/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/webApplication/quickstart/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/docs/src/samples/clientModuleDependencies/shared/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/osgi/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/osgi/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/antlr/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/jetty/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/maven/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/maven/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/scala/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/scala/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/scala/src/integTest/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/scala/src/integTest/resources/org/gradle/scala/compile/jdk6/ZincScalaCompilerJdk6IntegrationTest/compilesJavaCodeIncrementally/src/main/scala" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/scala/src/integTest/resources/org/gradle/scala/compile/IncrementalScalaCompileIntegrationTest/recompilesSourceWhenPropertiesChange/src/main/scala" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/nested/nested2/nestedProject/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/nested/nested2/nestedProject/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/skippedProject/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/skippedProject/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/customizedProject/src" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/customizedProject/test" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/javaProjectWithJacoco/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/sonar/runner/SonarRunnerSmokeIntegrationTest/shared/javaProjectWithJacoco/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/nested/nested2/nestedProject/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/nested/nested2/nestedProject/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/skippedProject/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/skippedProject/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/customizedProject/src" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/customizedProject/test" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/javaProjectWithJacoco/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/sonar/src/integTest/resources/org/gradle/api/plugins/sonar/SonarSmokeIntegrationTest/shared/javaProjectWithJacoco/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/jacoco/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/native/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesDependentClasses/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesDependentClasses" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesSourceWhenPropertiesChange/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesDependentClassesAcrossProjectBoundaries/app/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesDependentClassesAcrossProjectBoundaries/lib/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/java/compile/IncrementalJavaCompileIntegrationTest/recompilesDependentClassesAcrossProjectBoundaries" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/groovy/compile/GroovyCompilerIntegrationSpec/canUseThirdPartyAstTransform/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/groovy/compile/GroovyCompilerIntegrationSpec/canUseAstTransformThatReferencesGroovyTestCase/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/groovy/compile/ApiGroovyCompilerIntegrationSpec/canJointCompileWithJavaCompilerExecutable/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/groovy/compile/BasicGroovyCompilerIntegrationSpec/compileBadJavaCode/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/groovy/compile/IncrementalGroovyCompileIntegrationTest/recompilesSourceWhenPropertiesChange/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/compile/daemon/ParallelCompilerDaemonIntegrationTest/shared" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/javadoc/JavadocIntegrationTest/handlesTagsAndTaglets/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/javadoc/JavadocIntegrationTest/handlesTagsAndTaglets/src/taglet/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/javadoc/JavadocIntegrationTest/canCombineLocalOptionWithOtherOptions/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/javadoc/JavadocIntegrationTest/canCombineLocalOptionWithOtherOptions/src/taglet/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources/org/gradle/testing/junit/JUnitIntegrationTest/junit3Tests/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/integTest/resources" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/plugins/src/testFixtures/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/publish/src/main/groovy/org/gradle/api/publish/plugins" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/publish/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/wrapper/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/wrapper/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/announce/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/launcher/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/launcher/src/integTest/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/open-api/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/open-api/src/integTest/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core-impl/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/core-impl/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/messaging/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/messaging/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/reporting/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/ExecIntegrationTest/shared/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/ProjectLayoutIntegrationTest/canUseANonStandardBuildDir/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/ProjectLayoutIntegrationTest/canUseANonStandardBuildDir/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/IncrementalTestIntegrationTest/shared/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/IncrementalTestIntegrationTest/doesNotRunStaleTests/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/IncrementalTestIntegrationTest/executesTestsWhenSourceChanges/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/IncrementalTestIntegrationTest/executesTestsWhenSourceChanges" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/integ-test/src/integTest/resources/org/gradle/integtests/IncrementalTestIntegrationTest/executesTestsWhenTestFrameworkChanges/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/javascript/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/testjar/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/testjar/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/multiModule/webinar-api/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/multiModule/webinar-impl/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/multiModule/webinar-impl/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/singleModule/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/singleModule/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/enforcerplugin/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/flatmultimodule/webinar-api/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/flatmultimodule/webinar-impl/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-setup/src/integTest/resources/org/gradle/buildsetup/plugins/MavenConversionIntegrationTest/flatmultimodule/webinar-impl/src/test/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/diagnostics/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/diagnostics/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/diagnostics/src/integTest/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/performance/src/configPlugin" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/performance/src/testFixtures/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/tooling-api/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/tooling-api/src/integTest/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/code-quality/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/language-jvm/src/main/groovy/org/gradle/language/jvm/tasks" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/language-jvm/src/main/groovy/org/gradle/language/jvm/plugins" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/language-jvm/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/base-services/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/base-services/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/language-base/src/main/groovy/org/gradle/language/base/plugins" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/language-base/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-comparison/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-comparison/src/integTest/resources/org/gradle/api/plugins/buildcomparison/gradle/BuildComparisonIntegrationSpec/compareArchives/source/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/build-comparison/src/integTest/resources/org/gradle/api/plugins/buildcomparison/gradle/BuildComparisonIntegrationSpec/compareArchives/target/src/main/java" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/internal-testing/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/base-services-groovy/src/main/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/base-services-groovy/src/test/groovy" />
- <root url="jar://$MODULE_DIR$/lib/gradle-1.7-src.zip!/gradle-1.7/subprojects/internal-integ-testing/src/main/groovy" />
+ <root url="jar://$MODULE_DIR$/lib/gradle-1.8-20130730220035+0000-src.zip!/" />
</SOURCES>
</library>
</orderEntry>
diff --git a/plugins/gradle/lib/gradle-1.7-src.zip b/plugins/gradle/lib/gradle-1.7-src.zip
deleted file mode 100644
index d35500bc95a1..000000000000
--- a/plugins/gradle/lib/gradle-1.7-src.zip
+++ /dev/null
Binary files differ
diff --git a/plugins/gradle/lib/gradle-1.8-20130730220035+0000-src.zip b/plugins/gradle/lib/gradle-1.8-20130730220035+0000-src.zip
new file mode 100644
index 000000000000..52be3d139426
--- /dev/null
+++ b/plugins/gradle/lib/gradle-1.8-20130730220035+0000-src.zip
Binary files differ
diff --git a/plugins/gradle/lib/gradle-base-services-1.7.jar b/plugins/gradle/lib/gradle-base-services-1.8-20130730220035+0000.jar
index 2593b2bf4ef7..3eb0bb7e1cfd 100644
--- a/plugins/gradle/lib/gradle-base-services-1.7.jar
+++ b/plugins/gradle/lib/gradle-base-services-1.8-20130730220035+0000.jar
Binary files differ
diff --git a/plugins/gradle/lib/gradle-core-1.7.jar b/plugins/gradle/lib/gradle-core-1.8-20130730220035+0000.jar
index e9b7019743c9..a184975e0055 100644
--- a/plugins/gradle/lib/gradle-core-1.7.jar
+++ b/plugins/gradle/lib/gradle-core-1.8-20130730220035+0000.jar
Binary files differ
diff --git a/plugins/gradle/lib/gradle-messaging-1.7.jar b/plugins/gradle/lib/gradle-messaging-1.8-20130730220035+0000.jar
index 4cbb72cd29f1..f76ab9ec59f0 100644
--- a/plugins/gradle/lib/gradle-messaging-1.7.jar
+++ b/plugins/gradle/lib/gradle-messaging-1.8-20130730220035+0000.jar
Binary files differ
diff --git a/plugins/gradle/lib/gradle-tooling-api-1.7.jar b/plugins/gradle/lib/gradle-tooling-api-1.8-20130730220035+0000.jar
index 0695d3434175..48e428c34b87 100644
--- a/plugins/gradle/lib/gradle-tooling-api-1.7.jar
+++ b/plugins/gradle/lib/gradle-tooling-api-1.8-20130730220035+0000.jar
Binary files differ
diff --git a/plugins/gradle/lib/gradle-wrapper-1.7.jar b/plugins/gradle/lib/gradle-wrapper-1.7.jar
deleted file mode 100644
index cda194d2af6d..000000000000
--- a/plugins/gradle/lib/gradle-wrapper-1.7.jar
+++ /dev/null
Binary files differ
diff --git a/plugins/gradle/lib/gradle-wrapper-1.8-20130730220035+0000.jar b/plugins/gradle/lib/gradle-wrapper-1.8-20130730220035+0000.jar
new file mode 100644
index 000000000000..17d29fc5b1fb
--- /dev/null
+++ b/plugins/gradle/lib/gradle-wrapper-1.8-20130730220035+0000.jar
Binary files differ
diff --git a/plugins/gradle/resources/i18n/GradleBundle.properties b/plugins/gradle/resources/i18n/GradleBundle.properties
index 7a46d916619c..8252d8be0262 100644
--- a/plugins/gradle/resources/i18n/GradleBundle.properties
+++ b/plugins/gradle/resources/i18n/GradleBundle.properties
@@ -14,4 +14,4 @@ gradle.home.setting.type.explicit.incorrect=Gradle location is incorrect.\nLocat
gradle.toolwindow.text.no.linked.project=\nThere is no linked Gradle project\nYou can {@action Gradle.LinkToProject} one.
gradle.action.open.script.text=Open linked Gradle project
-gradle.action.open.script.description=Allows to open project file of the linked Gradle project at the editor
+gradle.action.open.script.description=Allows to open project file of the linked Gradle project at the editor \ No newline at end of file
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleManager.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleManager.java
index e0a1304e2f26..732e7025418e 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleManager.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleManager.java
@@ -58,12 +58,12 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.gradle.config.GradleSettingsListenerAdapter;
import org.jetbrains.plugins.gradle.remote.GradleJavaHelper;
-import org.jetbrains.plugins.gradle.service.task.GradleTaskManager;
import org.jetbrains.plugins.gradle.service.GradleInstallationManager;
import org.jetbrains.plugins.gradle.service.project.GradleAutoImportAware;
import org.jetbrains.plugins.gradle.service.project.GradleProjectResolver;
import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverExtension;
import org.jetbrains.plugins.gradle.service.settings.GradleConfigurable;
+import org.jetbrains.plugins.gradle.service.task.GradleTaskManager;
import org.jetbrains.plugins.gradle.settings.*;
import org.jetbrains.plugins.gradle.util.GradleBundle;
import org.jetbrains.plugins.gradle.util.GradleConstants;
@@ -73,6 +73,7 @@ import javax.swing.*;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
+import java.net.URL;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -173,7 +174,7 @@ implements ExternalSystemConfigurableAware, ExternalSystemUiAware, ExternalSyste
settings.getGradleVmOptions());
for (GradleProjectResolverExtension extension : RESOLVER_EXTENSIONS.getValue()) {
- result.addResolverExtensionClass(extension.getClass().getName());
+ result.addResolverExtensionClass(ClassHolder.from(extension.getClass()));
}
String javaHome = myJavaHelper.getJdkHome(pair.first);
if (!StringUtil.isEmpty(javaHome)) {
@@ -186,7 +187,7 @@ implements ExternalSystemConfigurableAware, ExternalSystemUiAware, ExternalSyste
}
@Override
- public void enhanceParameters(@NotNull SimpleJavaParameters parameters) throws ExecutionException {
+ public void enhanceRemoteProcessing(@NotNull SimpleJavaParameters parameters) throws ExecutionException {
PathsList classPath = parameters.getClassPath();
// Gradle i18n bundle.
@@ -225,10 +226,14 @@ implements ExternalSystemConfigurableAware, ExternalSystemUiAware, ExternalSyste
}
for (GradleProjectResolverExtension extension : RESOLVER_EXTENSIONS.getValue()) {
- extension.enhanceParameters(parameters);
+ extension.enhanceRemoteProcessing(parameters);
}
}
+ @Override
+ public void enhanceLocalProcessing(@NotNull List<URL> urls) {
+ }
+
@NotNull
@Override
public Class<? extends ExternalSystemProjectResolver<GradleExecutionSettings>> getProjectResolverClass() {
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java
index 19e0fcc25b89..caf662d722bc 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java
@@ -74,10 +74,10 @@ public class GradleExecutionHelper {
}
@SuppressWarnings("IOResourceOpenedButNotSafelyClosed")
- private static void prepare(@NotNull LongRunningOperation operation,
- @NotNull final ExternalSystemTaskId id,
- @Nullable GradleExecutionSettings settings,
- @NotNull final ExternalSystemTaskNotificationListener listener)
+ public static void prepare(@NotNull LongRunningOperation operation,
+ @NotNull final ExternalSystemTaskId id,
+ @Nullable GradleExecutionSettings settings,
+ @NotNull final ExternalSystemTaskNotificationListener listener)
{
if (settings == null) {
return;
@@ -108,6 +108,9 @@ public class GradleExecutionHelper {
try {
return f.fun(connection);
}
+ catch (ExternalSystemException e) {
+ throw e;
+ }
catch (Throwable e) {
throw new ExternalSystemException(e);
}
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java
index 79010b8797ba..8dde4a838c78 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java
@@ -29,15 +29,13 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.gradle.remote.impl.GradleLibraryNamesMixer;
+import org.jetbrains.plugins.gradle.settings.ClassHolder;
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings;
import org.jetbrains.plugins.gradle.util.GradleConstants;
import org.jetbrains.plugins.gradle.util.GradleUtil;
import java.io.File;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
/**
* @author Denis Zhdanov
@@ -51,8 +49,9 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
private final GradleLibraryNamesMixer myLibraryNamesMixer = new GradleLibraryNamesMixer();
- @Nullable private Pair<List<String>, List<GradleProjectResolverExtension>> myCachedExtensions;
-
+ @Nullable
+ private Pair<List<ClassHolder<? extends GradleProjectResolverExtension>>, List<GradleProjectResolverExtension>> myCachedExtensions;
+
@Nullable
@Override
public DataNode<ProjectData> resolveProjectInfo(@NotNull final ExternalSystemTaskId id,
@@ -63,19 +62,23 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
throws ExternalSystemException, IllegalArgumentException, IllegalStateException
{
if (settings != null) {
- List<String> extensionClassNames = settings.getResolverExtensions();
- if (myCachedExtensions == null || !myCachedExtensions.first.equals(extensionClassNames)) {
- List<String> classNames = ContainerUtilRt.newArrayList(extensionClassNames);
+ List<ClassHolder<? extends GradleProjectResolverExtension>> extensionClasses = settings.getResolverExtensions();
+ if (myCachedExtensions == null || !myCachedExtensions.first.equals(extensionClasses)) {
List<GradleProjectResolverExtension> extensions = ContainerUtilRt.newArrayList();
- for (String className : classNames) {
+ for (ClassHolder<? extends GradleProjectResolverExtension> holder : extensionClasses) {
try {
- extensions.add((GradleProjectResolverExtension)Class.forName(className).newInstance());
+ final GradleProjectResolverExtension extension = holder.getTargetClass().newInstance();
+ extensions.add(extension);
}
- catch (Exception e) {
- throw new IllegalArgumentException(String.format("Can't instantiate project resolve extension for class '%s'", className), e);
+ catch (Throwable e) {
+ throw new IllegalArgumentException(
+ String.format("Can't instantiate project resolve extension for class '%s'", holder.getTargetClassName()),
+ e
+ );
}
}
- myCachedExtensions = Pair.create(classNames, extensions);
+ List<ClassHolder<? extends GradleProjectResolverExtension>> key = ContainerUtilRt.newArrayList(extensionClasses);
+ myCachedExtensions = Pair.create(key, extensions);
}
for (GradleProjectResolverExtension extension : myCachedExtensions.second) {
DataNode<ProjectData> result = extension.resolveProjectInfo(id, projectPath, downloadLibraries, settings, listener);
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java
index df3b0fb17d2f..ff99e9c65ef1 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java
@@ -30,7 +30,7 @@ import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings;
*
* @author Denis Zhdanov
* @since 4/17/13 11:24 AM
- * @see GradleManager#enhanceParameters(SimpleJavaParameters) sample enhanceParameters() implementation
+ * @see GradleManager#enhanceRemoteProcessing(SimpleJavaParameters) sample enhanceParameters() implementation
*/
public interface GradleProjectResolverExtension extends ParametersEnhancer, ExternalSystemProjectResolver<GradleExecutionSettings> {
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleProjectImportBuilder.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleProjectImportBuilder.java
index e4a6ff411198..cfb51f93c4ec 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleProjectImportBuilder.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleProjectImportBuilder.java
@@ -21,7 +21,6 @@ import com.intellij.openapi.externalSystem.model.DataNode;
import com.intellij.openapi.externalSystem.model.project.ProjectData;
import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataManager;
import com.intellij.openapi.externalSystem.service.project.wizard.AbstractExternalProjectImportBuilder;
-import com.intellij.openapi.externalSystem.settings.ExternalSystemSettingsManager;
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.*;
@@ -46,8 +45,8 @@ import java.util.List;
*/
public class GradleProjectImportBuilder extends AbstractExternalProjectImportBuilder<ImportFromGradleControl> {
- public GradleProjectImportBuilder(@NotNull ExternalSystemSettingsManager settingsManager, @NotNull ProjectDataManager dataManager) {
- super(settingsManager, dataManager, new ImportFromGradleControl(), GradleConstants.SYSTEM_ID);
+ public GradleProjectImportBuilder(@NotNull ProjectDataManager dataManager) {
+ super(dataManager, new ImportFromGradleControl(), GradleConstants.SYSTEM_ID);
}
@NotNull
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/GradleProjectSettingsControl.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/GradleProjectSettingsControl.java
index 7bf0b99a0905..a710fc8f027a 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/GradleProjectSettingsControl.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/GradleProjectSettingsControl.java
@@ -24,6 +24,7 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.ui.TextComponentAccessor;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
+import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.components.JBLabel;
import com.intellij.ui.components.JBRadioButton;
@@ -171,7 +172,7 @@ public class GradleProjectSettingsControl extends AbstractExternalProjectSetting
@Override
@Nullable
protected String applyExtraSettings(@NotNull GradleProjectSettings settings) {
- String gradleHomePath = myGradleHomePathField.getText();
+ String gradleHomePath = FileUtil.toCanonicalPath(myGradleHomePathField.getText());
if (myGradleHomeModifiedByUser) {
if (StringUtil.isEmpty(gradleHomePath)) {
settings.setGradleHome(null);
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/ClassHolder.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/ClassHolder.java
new file mode 100644
index 000000000000..97c30bc3b3ac
--- /dev/null
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/ClassHolder.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2000-2013 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 org.jetbrains.plugins.gradle.settings;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.io.Serializable;
+
+/**
+ * Holds information about target class.
+ *
+ * @author Denis Zhdanov
+ * @since 8/15/13 2:52 PM
+ */
+public class ClassHolder<T> implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @NotNull private final String myClassName;
+
+ @Nullable private transient Class<T> myTargetClass;
+
+ /**
+ * @param targetClass class to use
+ */
+ @SuppressWarnings("NullableProblems")
+ public ClassHolder(@NotNull Class<T> targetClass) {
+ myTargetClass = targetClass;
+ myClassName = myTargetClass.getName();
+ }
+
+ @NotNull
+ public static <T> ClassHolder<T> from(@NotNull Class<T> clazz) {
+ return new ClassHolder<T>(clazz);
+ }
+
+ @SuppressWarnings("unchecked")
+ @NotNull
+ public Class<T> getTargetClass() throws ClassNotFoundException {
+ if (myTargetClass == null) {
+ // We're not afraid of race condition here as the class will be loaded by the same class loader.
+ myTargetClass = (Class<T>)Class.forName(myClassName);
+ }
+ return myTargetClass;
+ }
+
+ @NotNull
+ public String getTargetClassName() {
+ return myClassName;
+ }
+
+ @Override
+ public int hashCode() {
+ return myClassName.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ ClassHolder holder = (ClassHolder)o;
+
+ if (!myClassName.equals(holder.myClassName)) return false;
+ if (myTargetClass != null ? !myTargetClass.equals(holder.myTargetClass) : holder.myTargetClass != null) return false;
+
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return myClassName;
+ }
+}
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleExecutionSettings.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleExecutionSettings.java
index e95285f5d6ce..71f334db5c70 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleExecutionSettings.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleExecutionSettings.java
@@ -21,6 +21,7 @@ import com.intellij.openapi.util.SystemInfo;
import com.intellij.util.containers.ContainerUtilRt;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverExtension;
import java.util.List;
@@ -34,7 +35,7 @@ public class GradleExecutionSettings extends ExternalSystemExecutionSettings {
private static final long serialVersionUID = 1L;
- @NotNull private final List<String> myResolverExtensions = ContainerUtilRt.newArrayList();
+ @NotNull private final List<ClassHolder<? extends GradleProjectResolverExtension>> myResolverExtensions = ContainerUtilRt.newArrayList();
@Nullable private final String myGradleHome;
@Nullable private final String myServiceDirectory;
@@ -83,12 +84,12 @@ public class GradleExecutionSettings extends ExternalSystemExecutionSettings {
}
@NotNull
- public List<String> getResolverExtensions() {
+ public List<ClassHolder<? extends GradleProjectResolverExtension>> getResolverExtensions() {
return myResolverExtensions;
}
- public void addResolverExtensionClass(@NotNull String className) {
- myResolverExtensions.add(className);
+ public void addResolverExtensionClass(@NotNull ClassHolder<? extends GradleProjectResolverExtension> holder) {
+ myResolverExtensions.add(holder);
}
/**
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleLocalSettings.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleLocalSettings.java
index 3da23b6c2c46..c5e1025099a2 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleLocalSettings.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleLocalSettings.java
@@ -1,6 +1,7 @@
package org.jetbrains.plugins.gradle.settings;
import com.intellij.openapi.components.*;
+import com.intellij.openapi.externalSystem.service.project.PlatformFacade;
import com.intellij.openapi.externalSystem.settings.AbstractExternalSystemLocalSettings;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
@@ -16,8 +17,8 @@ public class GradleLocalSettings extends AbstractExternalSystemLocalSettings
implements PersistentStateComponent<AbstractExternalSystemLocalSettings.State>
{
- public GradleLocalSettings(@NotNull Project project) {
- super(GradleConstants.SYSTEM_ID, project);
+ public GradleLocalSettings(@NotNull Project project, @NotNull PlatformFacade facade) {
+ super(GradleConstants.SYSTEM_ID, project, facade);
}
@NotNull
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/util/GradleUtil.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/util/GradleUtil.java
index 703c2db430e2..63cd133690e6 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/util/GradleUtil.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/util/GradleUtil.java
@@ -12,6 +12,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.ContainerUtilRt;
import com.intellij.util.containers.Stack;
import org.gradle.tooling.model.GradleProject;
+import org.gradle.tooling.model.GradleScript;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -171,6 +172,27 @@ public class GradleUtil {
*/
@NotNull
public static String getConfigPath(@NotNull GradleProject subProject, @NotNull String rootProjectPath) {
+ try {
+ GradleScript script = subProject.getBuildScript();
+ if (script != null) {
+ File file = script.getSourceFile();
+ if (file != null) {
+ if (file.isFile()) {
+ // The file points to 'build.gradle' at the moment but we keep it's parent dir path instead.
+ file = file.getParentFile();
+ }
+ return ExternalSystemApiUtil.toCanonicalPath(file.getCanonicalPath());
+ }
+ }
+ }
+ catch (Exception e) {
+ // As said by gradle team: 'One thing I'm interested in is whether you have any thoughts about how the tooling API should
+ // deal with missing details from the model - for example, when asking for details about the build scripts when using
+ // a version of Gradle that does not supply that information. Currently, you'll get a `UnsupportedOperationException`
+ // when you call the `getBuildScript()` method'.
+ //
+ // So, just ignore it and assume that the user didn't define any custom build file name.
+ }
File rootProjectParent = new File(rootProjectPath).getParentFile();
StringBuilder buffer = new StringBuilder(FileUtil.toCanonicalPath(rootProjectParent.getAbsolutePath()));
Stack<String> stack = ContainerUtilRt.newStack();
diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml
index bbf316d743df..44e1faf56d4a 100644
--- a/plugins/groovy/src/META-INF/plugin.xml
+++ b/plugins/groovy/src/META-INF/plugin.xml
@@ -198,9 +198,7 @@
<testGenerator language="Groovy" implementationClass="org.jetbrains.plugins.groovy.testIntegration.GroovyTestGenerator"/>
<constructorBodyGenerator language="Groovy"
implementationClass="org.jetbrains.plugins.groovy.annotator.intentions.dynamic.GrConstructorBodyGenerator"/>
- <!-- In Android Studio, we don't want editor notifications to setup Groovy Path when *.gradle files are opened. This is a temporary
- hack to remove this until we figure out how to disable it just for gradle scripts.
- <editorNotificationProvider implementation="org.jetbrains.plugins.groovy.annotator.ConfigureGroovyLibraryNotificationProvider"/> -->
+ <editorNotificationProvider implementation="org.jetbrains.plugins.groovy.annotator.ConfigureGroovyLibraryNotificationProvider"/>
<refactoring.introduceParameterMethodUsagesProcessor
implementation="org.jetbrains.plugins.groovy.refactoring.introduce.parameter.java2groovy.GroovyIntroduceParameterMethodUsagesProcessor"/>
<refactoring.changeSignatureUsageProcessor
diff --git a/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/GroovyLanguageInjectionSupport.java b/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/GroovyLanguageInjectionSupport.java
index 564677a2936f..bd0122fbf2e6 100644
--- a/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/GroovyLanguageInjectionSupport.java
+++ b/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/GroovyLanguageInjectionSupport.java
@@ -81,29 +81,29 @@ public class GroovyLanguageInjectionSupport extends AbstractLanguageInjectionSup
if (!isStringLiteral(psiElement)) return false;
- return doInject(language.getID(), psiElement);
+ return doInject(language.getID(), psiElement, psiElement);
}
- private static boolean doInject(String languageId, PsiElement host) {
- final PsiElement target = getTopLevelInjectionTarget(host);
+ private static boolean doInject(String languageId, PsiElement psiElement, PsiLanguageInjectionHost host) {
+ final PsiElement target = getTopLevelInjectionTarget(psiElement);
final PsiElement parent = target.getParent();
- final Project project = host.getProject();
+ final Project project = psiElement.getProject();
if (parent instanceof GrReturnStatement) {
final GrControlFlowOwner owner = ControlFlowUtils.findControlFlowOwner(parent);
if (owner instanceof GrOpenBlock && owner.getParent() instanceof GrMethod) {
- return JavaLanguageInjectionSupport.doInjectInJavaMethod(project, (PsiMethod)owner.getParent(), -1, languageId);
+ return JavaLanguageInjectionSupport.doInjectInJavaMethod(project, (PsiMethod)owner.getParent(), -1, host, languageId);
}
}
else if (parent instanceof GrMethod) {
- return JavaLanguageInjectionSupport.doInjectInJavaMethod(project, (GrMethod)parent, -1, languageId);
+ return JavaLanguageInjectionSupport.doInjectInJavaMethod(project, (GrMethod)parent, -1, host, languageId);
}
else if (parent instanceof GrAnnotationNameValuePair) {
final PsiReference ref = parent.getReference();
if (ref != null) {
final PsiElement resolved = ref.resolve();
if (resolved instanceof PsiMethod) {
- return JavaLanguageInjectionSupport.doInjectInJavaMethod(project, (PsiMethod)resolved, -1, languageId);
+ return JavaLanguageInjectionSupport.doInjectInJavaMethod(project, (PsiMethod)resolved, -1, host, languageId);
}
}
}
@@ -112,7 +112,7 @@ public class GroovyLanguageInjectionSupport extends AbstractLanguageInjectionSup
if (method != null) {
final int index = findParameterIndex(target, ((GrMethodCall)parent.getParent()));
if (index >= 0) {
- return JavaLanguageInjectionSupport.doInjectInJavaMethod(project, method, index, languageId);
+ return JavaLanguageInjectionSupport.doInjectInJavaMethod(project, method, index, host, languageId);
}
}
}
@@ -121,16 +121,16 @@ public class GroovyLanguageInjectionSupport extends AbstractLanguageInjectionSup
if (expr instanceof GrReferenceExpression) {
final PsiElement element = ((GrReferenceExpression)expr).resolve();
if (element != null) {
- return doInject(languageId, element);
+ return doInject(languageId, element, host);
}
}
}
else {
if (parent instanceof PsiVariable) {
- if (JavaLanguageInjectionSupport.doAddLanguageAnnotation(project, (PsiModifierListOwner)parent, languageId)) return true;
+ if (JavaLanguageInjectionSupport.doAddLanguageAnnotation(project, (PsiModifierListOwner)parent, host, languageId)) return true;
}
else if (target instanceof PsiVariable && !(target instanceof LightElement)) {
- if (JavaLanguageInjectionSupport.doAddLanguageAnnotation(project, (PsiModifierListOwner)target, languageId)) return true;
+ if (JavaLanguageInjectionSupport.doAddLanguageAnnotation(project, (PsiModifierListOwner)target, host, languageId)) return true;
}
}
return false;
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyMembersWithDocSelectioner.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyMembersWithDocSelectioner.java
index 2baace771327..5c64f7cab902 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyMembersWithDocSelectioner.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyMembersWithDocSelectioner.java
@@ -15,7 +15,6 @@
*/
package org.jetbrains.plugins.groovy.editor.selection;
-import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandler;
import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandlerBase;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.TextRange;
@@ -30,7 +29,7 @@ import java.util.List;
/**
* @author Max Medvedev
*/
-public class GroovyMembersWithDocSelectioner implements ExtendWordSelectionHandler {
+public class GroovyMembersWithDocSelectioner extends ExtendWordSelectionHandlerBase {
@Override
public boolean canSelect(PsiElement e) {
return e instanceof GrDocComment || e instanceof GrDocCommentOwner;
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyStatementSelectioner.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyStatementSelectioner.java
index 8f0bab0a4842..12df73c2d5d3 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyStatementSelectioner.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyStatementSelectioner.java
@@ -15,7 +15,6 @@
*/
package org.jetbrains.plugins.groovy.editor.selection;
-import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandler;
import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandlerBase;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.TextRange;
@@ -32,7 +31,7 @@ import java.util.List;
/**
* @author Max Medvedev
*/
-public class GroovyStatementSelectioner implements ExtendWordSelectionHandler {
+public class GroovyStatementSelectioner extends ExtendWordSelectionHandlerBase {
@Override
public boolean canSelect(PsiElement e) {
return e instanceof GrExpression && PsiUtil.isExpressionStatement(e) ||
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyWordSelectionHandler.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyWordSelectionHandler.java
index e19137ef12ea..5f5f683169d4 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyWordSelectionHandler.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/editor/selection/GroovyWordSelectionHandler.java
@@ -15,7 +15,6 @@
*/
package org.jetbrains.plugins.groovy.editor.selection;
-import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandler;
import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandlerBase;
import com.intellij.codeInsight.editorActions.SelectWordUtil;
import com.intellij.openapi.diagnostic.Logger;
@@ -43,7 +42,7 @@ import java.util.List;
/**
* @author Max Medvedev
*/
-public class GroovyWordSelectionHandler implements ExtendWordSelectionHandler {
+public class GroovyWordSelectionHandler extends ExtendWordSelectionHandlerBase {
private static final Logger LOG = Logger.getInstance(GroovyWordSelectionHandler.class);
@Override
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java
index 44bcabc93784..16b6d0f0014a 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java
@@ -537,7 +537,7 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
final PsiClass scriptClass = getScriptClass();
if (scriptClass != null) {
final PsiElement originalElement = scriptClass.getOriginalElement();
- if (originalElement != scriptClass) {
+ if (originalElement != scriptClass && originalElement != null) {
return originalElement.getContainingFile();
}
}
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcFramework.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcFramework.java
index b9ac58a3a577..75686574f06a 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcFramework.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcFramework.java
@@ -324,7 +324,7 @@ public abstract class MvcFramework {
protected static void ensureRunConfigurationExists(Module module, ConfigurationType configurationType, String name) {
final RunManagerEx runManager = RunManagerEx.getInstanceEx(module.getProject());
- for (final RunConfiguration runConfiguration : runManager.getConfigurations(configurationType)) {
+ for (final RunConfiguration runConfiguration : runManager.getConfigurationsList(configurationType)) {
if (runConfiguration instanceof MvcRunConfiguration && ((MvcRunConfiguration)runConfiguration).getModule() == module) {
return;
}
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.java
index 1f2b126995b7..6de8565a31b2 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunConfigurationEditor.java
@@ -21,8 +21,8 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.ui.PanelWithAnchor;
import com.intellij.ui.DocumentAdapter;
+import com.intellij.ui.PanelWithAnchor;
import com.intellij.ui.RawCommandLineEditor;
import com.intellij.ui.components.JBLabel;
import org.jetbrains.annotations.NotNull;
@@ -155,7 +155,4 @@ public class MvcRunConfigurationEditor<T extends MvcRunConfiguration> extends Se
return myMainPanel;
}
-
- protected void disposeEditor() {
- }
}
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java
index 82f760b242db..251e7c1c8f4f 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyRunConfigurationEditor.java
@@ -138,9 +138,6 @@ public class GroovyRunConfigurationEditor extends SettingsEditor<GroovyScriptRun
return myMainPanel;
}
- public void disposeEditor() {
- }
-
@Override
public JComponent getAnchor() {
return anchor;
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java
index 8b0fb9e286a4..b635d1f09572 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java
@@ -35,6 +35,8 @@ import org.jetbrains.plugins.groovy.extensions.GroovyScriptTypeDetector;
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass;
+import java.util.List;
+
/**
* @author ilyas
*/
@@ -86,7 +88,7 @@ public class GroovyScriptRunConfigurationProducer extends RuntimeConfigurationPr
@Override
protected RunnerAndConfigurationSettings findExistingByElement(Location location,
- @NotNull RunnerAndConfigurationSettings[] existingConfigurations,
+ @NotNull List<RunnerAndConfigurationSettings> existingConfigurations,
ConfigurationContext context) {
for (RunnerAndConfigurationSettings existingConfiguration : existingConfigurations) {
final RunConfiguration configuration = existingConfiguration.getConfiguration();
diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/formatter/EnterActionTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/formatter/EnterActionTest.groovy
index 205feed0f3a0..5c81db4fd902 100644
--- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/formatter/EnterActionTest.groovy
+++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/formatter/EnterActionTest.groovy
@@ -366,5 +366,15 @@ class A extends spock.lang.Specification {
}
''')
}
+
+ void testCommentAtFileEnd() {
+ doTest('''\
+print 2
+/*<caret>''', '''\
+print 2
+/*
+<caret>
+ */''')
+ }
}
diff --git a/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java b/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java
index 03bc8450a764..3dad8e9d8302 100644
--- a/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java
+++ b/plugins/junit/src/com/intellij/execution/junit/AddToTestsPatternAction.java
@@ -97,7 +97,8 @@ public class AddToTestsPatternAction extends AnAction {
}
private static List<JUnitConfiguration> collectPatternConfigurations(Set<PsiMember> foundClasses, Project project) {
- final RunConfiguration[] configurations = RunManager.getInstance(project).getConfigurations(JUnitConfigurationType.getInstance());
+ final List<RunConfiguration> configurations = RunManager.getInstance(project).getConfigurationsList(
+ JUnitConfigurationType.getInstance());
final List<JUnitConfiguration> foundConfigurations = new ArrayList<JUnitConfiguration>();
for (RunConfiguration configuration : configurations) {
final JUnitConfiguration.Data data = ((JUnitConfiguration)configuration).getPersistentData();
diff --git a/plugins/junit/src/com/intellij/execution/junit/TestObject.java b/plugins/junit/src/com/intellij/execution/junit/TestObject.java
index cdd5ad02b84f..1020065d44fc 100644
--- a/plugins/junit/src/com/intellij/execution/junit/TestObject.java
+++ b/plugins/junit/src/com/intellij/execution/junit/TestObject.java
@@ -295,6 +295,7 @@ public abstract class TestObject implements JavaCommandLine {
}
}
};
+ Disposer.register(consoleView, packetsReceiver);
final DeferredActionsQueue queue = new DeferredActionsQueueImpl();
handler.getOut().setPacketDispatcher(packetsReceiver, queue);
diff --git a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java
index 4be99aea9a8d..d564b54a6f2f 100644
--- a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java
+++ b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java
@@ -31,14 +31,13 @@ import com.intellij.execution.ui.ClassBrowser;
import com.intellij.execution.ui.CommonJavaParametersPanel;
import com.intellij.execution.ui.ConfigurationModuleSelector;
import com.intellij.icons.AllIcons;
-import com.intellij.openapi.fileTypes.PlainTextLanguage;
-import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.ide.util.ClassFilter;
import com.intellij.ide.util.PackageChooserDialog;
import com.intellij.openapi.fileChooser.FileChooser;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.fileChooser.FileChooserFactory;
+import com.intellij.openapi.fileTypes.PlainTextLanguage;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.project.Project;
@@ -47,10 +46,7 @@ import com.intellij.openapi.ui.ex.MessagesEx;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
-import com.intellij.ui.EditorTextField;
-import com.intellij.ui.EditorTextFieldWithBrowseButton;
-import com.intellij.ui.InsertPathAction;
-import com.intellij.ui.PanelWithAnchor;
+import com.intellij.ui.*;
import com.intellij.ui.components.JBLabel;
import com.intellij.util.IconUtil;
import com.intellij.util.TextFieldCompletionProvider;
@@ -577,9 +573,6 @@ public class JUnitConfigurable extends SettingsEditor<JUnitConfiguration> implem
return myWholePanel;
}
- public void disposeEditor() {
- }
-
private void applyHelpersTo(final JUnitConfiguration currentState) {
myCommonJavaParameters.applyTo(currentState);
getModuleSelector().applyTo(currentState);
diff --git a/plugins/junit/src/com/intellij/execution/junit2/ui/TestsPacketsReceiver.java b/plugins/junit/src/com/intellij/execution/junit2/ui/TestsPacketsReceiver.java
index b6c1257a4b6c..90aa44287e96 100644
--- a/plugins/junit/src/com/intellij/execution/junit2/ui/TestsPacketsReceiver.java
+++ b/plugins/junit/src/com/intellij/execution/junit2/ui/TestsPacketsReceiver.java
@@ -83,7 +83,6 @@ public class TestsPacketsReceiver implements OutputPacketProcessor, Disposable {
myUnboundOutput = unboundOutput;
myObjectRegistry = new InputObjectRegistry();
myConsoleProperties = (JUnitConsoleProperties)consoleView.getProperties();
- Disposer.register(consoleView, this);
}
@Override
diff --git a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenConstants.java b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenConstants.java
index 4c8c8546654d..dea93b30002e 100644
--- a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenConstants.java
+++ b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenConstants.java
@@ -50,6 +50,6 @@ public class MavenConstants {
"post-integration-test",
"verify", "install", "site", "deploy");
public static final List<String> BASIC_PHASES =
- Arrays.asList("clean", "validate", "compile", "test", "package", "install", "deploy", "site");
+ Arrays.asList("clean", "validate", "compile", "test", "package", "verify", "install", "deploy", "site");
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/DependencyId.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/DependencyId.java
deleted file mode 100644
index f71270cd542b..000000000000
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/DependencyId.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.jetbrains.idea.maven.dom;
-
-import com.intellij.openapi.util.text.StringUtil;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import org.jetbrains.idea.maven.dom.model.MavenDomDependency;
-
-/**
-* @author Sergey Evdokimov
-*/
-public class DependencyId {
- private final String groupId;
- private final String artifactId;
- private final String type;
- private final String classifier;
-
- public DependencyId(@NotNull String groupId, @NotNull String artifactId, @Nullable String type, @Nullable String classifier) {
- this.groupId = groupId;
- this.artifactId = artifactId;
- this.type = StringUtil.isEmpty(type) ? "jar" : type;
- this.classifier = classifier;
- }
-
- @Nullable
- public static DependencyId create(@NotNull MavenDomDependency dep) {
- String groupId = dep.getGroupId().getStringValue();
- if (StringUtil.isEmpty(groupId)) return null;
-
- String artifactId = dep.getArtifactId().getStringValue();
- if (StringUtil.isEmpty(artifactId)) return null;
-
- //noinspection ConstantConditions
- return new DependencyId(groupId, artifactId, dep.getType().getStringValue(), dep.getClassifier().getStringValue());
- }
-
- public boolean isValid() {
- return StringUtil.isNotEmpty(groupId) && StringUtil.isNotEmpty(artifactId);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof DependencyId)) return false;
-
- DependencyId id = (DependencyId)o;
-
- if (artifactId != null ? !artifactId.equals(id.artifactId) : id.artifactId != null) return false;
- if (classifier != null ? !classifier.equals(id.classifier) : id.classifier != null) return false;
- if (groupId != null ? !groupId.equals(id.groupId) : id.groupId != null) return false;
- if (!type.equals(id.type)) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = groupId != null ? groupId.hashCode() : 0;
- result = 31 * result + (artifactId != null ? artifactId.hashCode() : 0);
- result = 31 * result + type.hashCode();
- result = 31 * result + (classifier != null ? classifier.hashCode() : 0);
- return result;
- }
-}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenConfigurationProducer.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenConfigurationProducer.java
index 96ee06d6aa66..0bf342fcdcfa 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenConfigurationProducer.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenConfigurationProducer.java
@@ -29,7 +29,6 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.idea.maven.project.MavenGeneralSettings;
import org.jetbrains.idea.maven.project.MavenProjectsManager;
import java.util.Collection;
@@ -58,7 +57,7 @@ public class MavenConfigurationProducer extends RuntimeConfigurationProducer {
@Override
protected RunnerAndConfigurationSettings findExistingByElement(Location location,
- @NotNull RunnerAndConfigurationSettings[] existingConfigurations,
+ @NotNull List<RunnerAndConfigurationSettings> existingConfigurations,
ConfigurationContext context) {
final MavenRunnerParameters runnerParameters = createBuildParameters(location);
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenExternalParameters.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenExternalParameters.java
index 5873bccf6f74..ad92707e8f01 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenExternalParameters.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenExternalParameters.java
@@ -144,6 +144,9 @@ public class MavenExternalParameters {
params.getClassPath().add(path);
}
+ params.setEnv(Collections.unmodifiableMap(runnerSettings.getEnvironmentProperties()));
+ params.setPassParentEnvs(runnerSettings.isPassParentEnv());
+
params.setMainClass(MAVEN_LAUNCHER_CLASS);
EncodingManager encodingManager = project == null
? EncodingProjectManager.getInstance()
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunner.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunner.java
index c92a70804daf..2982ceb4433d 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunner.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunner.java
@@ -19,7 +19,6 @@ import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.components.*;
-import com.intellij.openapi.components.StoragePathMacros;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.progress.ProcessCanceledException;
@@ -57,6 +56,7 @@ public class MavenRunner implements PersistentStateComponent<MavenRunnerSettings
return mySettings;
}
+ @NotNull
public MavenRunnerSettings getState() {
return mySettings;
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerPanel.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerPanel.java
index 5043a8e58dcb..61a45a4e88b1 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerPanel.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerPanel.java
@@ -17,6 +17,7 @@
package org.jetbrains.idea.maven.execution;
+import com.intellij.execution.configuration.EnvironmentVariablesComponent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
@@ -41,6 +42,7 @@ public class MavenRunnerPanel {
private JCheckBox myRunInBackgroundCheckbox;
private RawCommandLineEditor myVMParametersEditor;
+ private EnvironmentVariablesComponent myEnvVariablesComponent;
private JComboBox myJdkCombo;
private final DefaultComboBoxModel myJdkComboModel = new DefaultComboBoxModel();
private JCheckBox mySkipTestsCheckBox;
@@ -104,6 +106,16 @@ public class MavenRunnerPanel {
c.insets.left = 0;
c.fill = GridBagConstraints.HORIZONTAL;
+ myEnvVariablesComponent = new EnvironmentVariablesComponent();
+ myEnvVariablesComponent.setPassParentEnvs(true);
+ myEnvVariablesComponent.setLabelLocation(BorderLayout.WEST);
+ c.gridx = 0;
+ c.gridy++;
+ c.weightx = 1;
+ c.gridwidth = 2;
+ panel.add(myEnvVariablesComponent, c);
+ c.gridwidth = 1;
+
JPanel propertiesPanel = new JPanel(new BorderLayout());
propertiesPanel.setBorder(IdeBorderFactory.createTitledBorder("Properties", false));
@@ -154,6 +166,9 @@ public class MavenRunnerPanel {
ComboBoxUtil.select(myJdkComboModel, data.getJreName());
myPropertiesPanel.setDataFromMap(data.getMavenProperties());
+
+ myEnvVariablesComponent.setEnvs(data.getEnvironmentProperties());
+ myEnvVariablesComponent.setPassParentEnvs(data.isPassParentEnv());
}
private Map<String, String> collectJdkNamesAndDescriptions() {
@@ -189,6 +204,9 @@ public class MavenRunnerPanel {
data.setJreName(ComboBoxUtil.getSelectedString(myJdkComboModel));
data.setMavenProperties(myPropertiesPanel.getDataAsMap());
+
+ data.setEnvironmentProperties(myEnvVariablesComponent.getEnvs());
+ data.setPassParentEnv(myEnvVariablesComponent.isPassParentEnvs());
}
public Project getProject() {
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerParametersPanel.form b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerParametersPanel.form
index 1b420f364eb9..158a35192d31 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerParametersPanel.form
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerParametersPanel.form
@@ -66,6 +66,7 @@
</constraints>
<properties>
<text value="Resolve &amp;Workspace artifacts"/>
+ <toolTipText value="In case of multi-project workspace, dependencies will be looked for in the workspace first, and only after that in local repository."/>
</properties>
</component>
<grid id="41a03" layout-manager="BorderLayout" hgap="0" vgap="0">
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerSettings.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerSettings.java
index 8d0bae550c5f..e8a7a923c47e 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerSettings.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerSettings.java
@@ -19,6 +19,7 @@
package org.jetbrains.idea.maven.execution;
import com.intellij.util.containers.ContainerUtil;
+import com.intellij.util.containers.HashMap;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -39,6 +40,9 @@ public class MavenRunnerSettings implements Cloneable {
private boolean skipTests = false;
private Map<String, String> mavenProperties = new LinkedHashMap<String, String>();
+ private Map<String, String> environmentProperties = new HashMap<String, String>();
+ private boolean passParentEnv = true;
+
private List<Listener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList();
public boolean isRunMavenInBackground() {
@@ -89,6 +93,26 @@ public class MavenRunnerSettings implements Cloneable {
this.mavenProperties = mavenProperties;
}
+ @NotNull
+ public Map<String, String> getEnvironmentProperties() {
+ return environmentProperties;
+ }
+
+ public void setEnvironmentProperties(@NotNull Map<String, String> envs) {
+ if (envs == environmentProperties) return;
+
+ environmentProperties.clear();
+ environmentProperties.putAll(envs);
+ }
+
+ public boolean isPassParentEnv() {
+ return passParentEnv;
+ }
+
+ public void setPassParentEnv(boolean passParentEnv) {
+ this.passParentEnv = passParentEnv;
+ }
+
public void addListener(Listener l) {
myListeners.add(l);
}
@@ -118,6 +142,8 @@ public class MavenRunnerSettings implements Cloneable {
if (!jreName.equals(that.jreName)) return false;
if (mavenProperties != null ? !mavenProperties.equals(that.mavenProperties) : that.mavenProperties != null) return false;
if (!vmOptions.equals(that.vmOptions)) return false;
+ if (!environmentProperties.equals(that.environmentProperties)) return false;
+ if (passParentEnv != that.passParentEnv) return false;
return true;
}
@@ -128,6 +154,7 @@ public class MavenRunnerSettings implements Cloneable {
result = 31 * result + jreName.hashCode();
result = 31 * result + vmOptions.hashCode();
result = 31 * result + (skipTests ? 1 : 0);
+ result = 31 * result + environmentProperties.hashCode();
result = 31 * result + (mavenProperties != null ? mavenProperties.hashCode() : 0);
return result;
}
@@ -138,6 +165,7 @@ public class MavenRunnerSettings implements Cloneable {
final MavenRunnerSettings clone = (MavenRunnerSettings)super.clone();
clone.mavenProperties = cloneMap(mavenProperties);
clone.myListeners = ContainerUtil.createLockFreeCopyOnWriteList();
+ clone.environmentProperties = new HashMap<String, String>(environmentProperties);
return clone;
}
catch (CloneNotSupportedException e) {
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerSettingsEditor.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerSettingsEditor.java
index 87d9dea8c1d0..b31928c813d7 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerSettingsEditor.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunnerSettingsEditor.java
@@ -75,9 +75,4 @@ public class MavenRunnerSettingsEditor extends SettingsEditor<MavenRunConfigurat
myUseProjectSettings = pair.second;
return pair.first;
}
-
- @Override
- protected void disposeEditor() {
-
- }
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.java
index 003ef09ce0fe..79b83a60483e 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.java
@@ -335,11 +335,20 @@ public class MavenProjectImporter {
}
private static String formatModules(final Collection<Module> modules) {
- return StringUtil.join(modules, new Function<Module, String>() {
- public String fun(final Module m) {
- return "'" + m.getName() + "'";
- }
- }, "\n");
+ StringBuilder res = new StringBuilder();
+
+ int i = 0;
+ for (Module module : modules) {
+ res.append('\'').append(module.getName()).append("'\n");
+
+ if (++i > 20) break;
+ }
+
+ if (i > 20) {
+ res.append("\n ... and other ").append(modules.size() - 20).append(" modules");
+ }
+
+ return res.toString();
}
private static void doRefreshFiles(Set<File> files) {
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/MavenProjectsNavigator.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/MavenProjectsNavigator.java
index 8506387d0c9c..03135609730f 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/MavenProjectsNavigator.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/MavenProjectsNavigator.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2013 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.
@@ -67,9 +67,9 @@ public class MavenProjectsNavigator extends MavenSimpleProjectComponent implemen
private MavenProjectsNavigatorState myState = new MavenProjectsNavigatorState();
- private final MavenProjectsManager myProjectsManager;
- private final MavenTasksManager myTasksManager;
- private final MavenShortcutsManager myShortcutsManager;
+ private MavenProjectsManager myProjectsManager;
+ private MavenTasksManager myTasksManager;
+ private MavenShortcutsManager myShortcutsManager;
private SimpleTree myTree;
private MavenProjectsStructure myStructure;
@@ -189,6 +189,8 @@ public class MavenProjectsNavigator extends MavenSimpleProjectComponent implemen
@Override
public void disposeComponent() {
+ myToolWindow = null;
+ myProjectsManager = null;
}
private void listenForProjectsChanges() {
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenModelPropertiesPatcher.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenModelPropertiesPatcher.java
index c16b84fba0b0..71243eb945ad 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenModelPropertiesPatcher.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenModelPropertiesPatcher.java
@@ -1,70 +1,61 @@
package org.jetbrains.idea.maven.plugins.api;
-import com.intellij.openapi.util.Pair;
+import com.intellij.openapi.util.text.StringUtil;
+import org.jdom.Element;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.maven.model.MavenPlugin;
+import org.jetbrains.plugins.groovy.util.ClassInstanceCache;
-import java.util.*;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
/**
* @author Sergey Evdokimov
*/
public class MavenModelPropertiesPatcher {
- private static volatile Map<String, Map<String, String[]>> ourMap;
-
- private static Map<String, Map<String, String[]>> getMap() {
- Map<String, Map<String, String[]>> res = ourMap;
+ /*
+ * Add properties those should be added by plugins.
+ */
+ public static void patch(Properties modelProperties, @Nullable Collection<MavenPlugin> plugins) {
+ if (plugins == null) return;
- if (res == null) {
- res = new HashMap<String, Map<String, String[]>>();
+ Map<String, Map<String, Map<String, List<MavenPluginDescriptor>>>> map = MavenPluginDescriptor.getDescriptorsMap();
- for (MavenPluginDescriptor pluginDescriptor : MavenPluginDescriptor.EP_NAME.getExtensions()) {
- if (pluginDescriptor.properties != null && pluginDescriptor.properties.length > 0) {
- Pair<String, String> pluginId = MavenPluginDescriptor.parsePluginId(pluginDescriptor.mavenId);
+ for (MavenPlugin plugin : plugins) {
+ Map<String, Map<String, List<MavenPluginDescriptor>>> groupMap = map.get(plugin.getArtifactId());
+ if (groupMap != null) {
+ Map<String, List<MavenPluginDescriptor>> goalsMap = groupMap.get(plugin.getGroupId());
- String[] properties = new String[pluginDescriptor.properties.length];
- for (int i = 0; i < pluginDescriptor.properties.length; i++) {
- properties[i] = pluginDescriptor.properties[i].name;
- }
+ patch(modelProperties, goalsMap.get(null), null, plugin.getConfigurationElement(), plugin);
- Map<String, String[]> groupMap = res.get(pluginId.second);// pluginId.second is artifactId
- if (groupMap == null) {
- groupMap = new HashMap<String, String[]>();
- res.put(pluginId.second, groupMap);
+ for (MavenPlugin.Execution execution : plugin.getExecutions()) {
+ for (String goal : execution.getGoals()) {
+ patch(modelProperties, goalsMap.get(goal), goal, execution.getConfigurationElement(), plugin);
}
-
- groupMap.put(pluginId.first, properties); // pluginId.first is groupId
}
}
-
- ourMap = res;
}
-
- return res;
}
- /*
- * Add properties those should be added by plugins.
- */
- public static void patch(Properties modelProperties, @Nullable Collection<MavenPlugin> plugins) {
- if (plugins == null) return;
-
- Map<String, Map<String, String[]>> map = getMap();
+ private static void patch(Properties modelProperties, @Nullable List<MavenPluginDescriptor> descriptors, @Nullable String goal, Element cfgElement, MavenPlugin plugin) {
+ if (descriptors == null) return;
- for (MavenPlugin plugin : plugins) {
- Map<String, String[]> groupMap = map.get(plugin.getArtifactId());
- if (groupMap != null) {
- String[] properties = groupMap.get(plugin.getGroupId());
-
- if (properties != null) {
- for (String property : properties) {
- if (!modelProperties.containsKey(property)) {
- modelProperties.setProperty(property, "");
- }
+ for (MavenPluginDescriptor descriptor : descriptors) {
+ if (descriptor.properties != null) {
+ for (MavenPluginDescriptor.ModelProperty property : descriptor.properties) {
+ if (StringUtil.isNotEmpty(property.name)) {
+ modelProperties.setProperty(property.name, "");
}
}
}
+
+ if (descriptor.propertyGenerator != null) {
+ MavenPropertiesGenerator generator = ClassInstanceCache.getInstance(descriptor.propertyGenerator, descriptor.getLoaderForClass());
+ generator.generate(modelProperties, goal, plugin, cfgElement);
+ }
}
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPluginDescriptor.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPluginDescriptor.java
index c0663282a6d3..56bc0fdf0c33 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPluginDescriptor.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPluginDescriptor.java
@@ -18,11 +18,17 @@ package org.jetbrains.idea.maven.plugins.api;
import com.intellij.openapi.extensions.AbstractExtensionPointBean;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.util.Pair;
+import com.intellij.util.SmartList;
import com.intellij.util.xml.Required;
import com.intellij.util.xmlb.annotations.AbstractCollection;
import com.intellij.util.xmlb.annotations.Attribute;
import com.intellij.util.xmlb.annotations.Property;
import com.intellij.util.xmlb.annotations.Tag;
+import org.jetbrains.idea.maven.utils.MavenUtil;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* @author Sergey Evdokimov
@@ -31,6 +37,12 @@ public class MavenPluginDescriptor extends AbstractExtensionPointBean {
public static final ExtensionPointName<MavenPluginDescriptor> EP_NAME = new ExtensionPointName<MavenPluginDescriptor>("org.jetbrains.idea.maven.pluginDescriptor");
+ // Map artifactId -> groupId -> goal -> List<MavenPluginDescriptor>
+ public static volatile Map<String, Map<String, Map<String, List<MavenPluginDescriptor>>>> ourDescriptorsMap;
+
+ @Attribute("goal")
+ public String goal;
+
@Attribute("mavenId")
@Required
public String mavenId;
@@ -43,6 +55,9 @@ public class MavenPluginDescriptor extends AbstractExtensionPointBean {
@AbstractCollection(surroundWithTag = false)
public ModelProperty[] properties;
+ @Attribute("propertyGenerator")
+ public String propertyGenerator;
+
@Tag("property")
public static class ModelProperty {
@Attribute("name")
@@ -57,9 +72,6 @@ public class MavenPluginDescriptor extends AbstractExtensionPointBean {
@Required
public String name;
- @Attribute("goal")
- public String goal;
-
/**
* Class name of reference provider. The reference provider must implement MavenParamReferenceProvider or PsiReferenceProvider.
*/
@@ -106,4 +118,30 @@ public class MavenPluginDescriptor extends AbstractExtensionPointBean {
return new Pair<String, String>(mavenId.substring(0, idx), mavenId.substring(idx + 1));
}
+ public static Map<String, Map<String, Map<String, List<MavenPluginDescriptor>>>> getDescriptorsMap() {
+ Map<String, Map<String, Map<String, List<MavenPluginDescriptor>>>> res = ourDescriptorsMap;
+ if (res == null) {
+ res = new HashMap<String, Map<String, Map<String, List<MavenPluginDescriptor>>>>();
+
+ for (MavenPluginDescriptor pluginDescriptor : MavenPluginDescriptor.EP_NAME.getExtensions()) {
+ Pair<String, String> pluginId = parsePluginId(pluginDescriptor.mavenId);
+
+ Map<String, Map<String, List<MavenPluginDescriptor>>> groupMap = MavenUtil.getOrCreate(res, pluginId.second);// pluginId.second is artifactId
+
+ Map<String, List<MavenPluginDescriptor>> goalsMap = MavenUtil.getOrCreate(groupMap, pluginId.first);// pluginId.first is groupId
+
+ List<MavenPluginDescriptor> descriptorList = goalsMap.get(pluginDescriptor.goal);
+ if (descriptorList == null) {
+ descriptorList = new SmartList<MavenPluginDescriptor>();
+ goalsMap.put(pluginDescriptor.goal, descriptorList);
+ }
+
+ descriptorList.add(pluginDescriptor);
+ }
+
+ ourDescriptorsMap = res;
+ }
+
+ return res;
+ }
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPluginParamInfo.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPluginParamInfo.java
index a987c944d8b4..ba5a944b360c 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPluginParamInfo.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPluginParamInfo.java
@@ -17,6 +17,7 @@ import com.intellij.util.xml.DomManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.maven.dom.model.*;
+import org.jetbrains.idea.maven.utils.MavenUtil;
import java.util.*;
@@ -49,18 +50,21 @@ public class MavenPluginParamInfo {
Map pluginsMap = res;
for (int i = paramPath.length - 1; i >= 0; i--) {
- pluginsMap = getOrCreate(pluginsMap, paramPath[i]);
+ pluginsMap = MavenUtil.getOrCreate(pluginsMap, paramPath[i]);
}
ParamInfo paramInfo = new ParamInfo(pluginDescriptor.getPluginDescriptor().getPluginClassLoader(), param);
- Map<String, ParamInfo> goalsMap = getOrCreate(pluginsMap, pluginId);
+ Map<String, ParamInfo> goalsMap = MavenUtil.getOrCreate(pluginsMap, pluginId);
- ParamInfo oldValue = goalsMap.put(param.goal, paramInfo);
+ String goal = pluginDescriptor.goal;
+ assert goal == null || !goal.isEmpty();
+
+ ParamInfo oldValue = goalsMap.put(goal, paramInfo);
if (oldValue != null) {
LOG.error("Duplicated maven plugin parameter descriptor: "
+ pluginId.first + ':' + pluginId.second + " -> "
- + (param.goal != null ? "[" + param.goal + ']' : "") + param.name);
+ + (goal != null ? "[" + goal + ']' : "") + param.name);
}
}
}
@@ -71,17 +75,6 @@ public class MavenPluginParamInfo {
return res;
}
- @NotNull
- private static <K, V extends Map> V getOrCreate(Map map, K key) {
- Map res = (Map)map.get(key);
- if (res == null) {
- res = new HashMap();
- map.put(key, res);
- }
-
- return (V)res;
- }
-
public static boolean isSimpleText(@NotNull XmlText paramValue) {
PsiElement prevSibling = paramValue.getPrevSibling();
if (!(prevSibling instanceof LeafPsiElement) || ((LeafPsiElement)prevSibling).getElementType() != XmlTokenType.XML_TAG_END) {
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPropertiesGenerator.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPropertiesGenerator.java
new file mode 100644
index 000000000000..46b149a9d882
--- /dev/null
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/api/MavenPropertiesGenerator.java
@@ -0,0 +1,20 @@
+package org.jetbrains.idea.maven.plugins.api;
+
+import org.jdom.Element;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.idea.maven.model.MavenPlugin;
+
+import java.util.Properties;
+
+/**
+ * @author Sergey Evdokimov
+ */
+public abstract class MavenPropertiesGenerator {
+
+ public abstract void generate(@NotNull Properties modelProperties,
+ @Nullable String goal,
+ @NotNull MavenPlugin plugin,
+ @Nullable Element cfgElement);
+
+}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/buildHelper/MavenBuildHelperPropertyGenerator.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/buildHelper/MavenBuildHelperPropertyGenerator.java
new file mode 100644
index 000000000000..50f13d0d9951
--- /dev/null
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/plugins/buildHelper/MavenBuildHelperPropertyGenerator.java
@@ -0,0 +1,34 @@
+package org.jetbrains.idea.maven.plugins.buildHelper;
+
+import org.jdom.Element;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.idea.maven.model.MavenPlugin;
+import org.jetbrains.idea.maven.plugins.api.MavenPropertiesGenerator;
+
+import java.util.List;
+import java.util.Properties;
+
+/**
+ * @author Sergey Evdokimov
+ */
+public class MavenBuildHelperPropertyGenerator extends MavenPropertiesGenerator {
+ @Override
+ public void generate(@NotNull Properties modelProperties,
+ @Nullable String goal,
+ @NotNull MavenPlugin plugin,
+ @Nullable Element cfgElement) {
+ if (cfgElement == null) return;
+
+ Element portNames = cfgElement.getChild("portNames");
+ if (portNames == null) return;
+
+ List<Element> portName = portNames.getChildren("portName");
+ for (Element element : portName) {
+ String propertyName = element.getTextTrim();
+ if (!propertyName.isEmpty()) {
+ modelProperties.setProperty(propertyName, "");
+ }
+ }
+ }
+}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenConsoleImpl.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenConsoleImpl.java
index 09c9c6c339c2..23ddb241eea5 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenConsoleImpl.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenConsoleImpl.java
@@ -39,7 +39,6 @@ import org.jetbrains.idea.maven.execution.MavenRunnerParameters;
import org.jetbrains.idea.maven.execution.MavenRunnerSettings;
import org.jetbrains.idea.maven.utils.MavenUtil;
-import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
public class MavenConsoleImpl extends MavenConsole {
@@ -79,10 +78,7 @@ public class MavenConsoleImpl extends MavenConsole {
public static TextConsoleBuilder createConsoleBuilder(final Project project) {
TextConsoleBuilder builder = TextConsoleBuilderFactory.getInstance().createBuilder(project);
- final List<Filter> filters = ExceptionFilters.getFilters(GlobalSearchScope.allScope(project));
- for (Filter filter : filters) {
- builder.addFilter(filter);
- }
+ builder.filters(ExceptionFilters.getFilters(GlobalSearchScope.allScope(project)));
builder.addFilter(new RegexpFilter(project, CONSOLE_FILTER_REGEXP) {
@Nullable
@Override
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java
index 5346407aa42b..5564984a835d 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java
@@ -35,8 +35,8 @@ import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.util.Alarm;
-import com.intellij.util.Consumer;
import com.intellij.util.EventDispatcher;
+import com.intellij.util.NullableConsumer;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
import com.intellij.util.ui.update.Update;
@@ -735,7 +735,7 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent
});
}
- public void evaluateEffectivePom(@NotNull final MavenProject mavenProject, @NotNull final Consumer<String> consumer) {
+ public void evaluateEffectivePom(@NotNull final MavenProject mavenProject, @NotNull final NullableConsumer<String> consumer) {
runWhenFullyOpen(new Runnable() {
@Override
public void run() {
@@ -757,9 +757,14 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent
new MavenProjectsTree.EmbedderTask() {
@Override
public void run(MavenEmbedderWrapper embedder) throws MavenProcessCanceledException {
- String res =
- embedder.evaluateEffectivePom(mavenProject.getFile(), mavenProject.getActivatedProfilesIds());
- consumer.consume(res);
+ try {
+ String res =
+ embedder.evaluateEffectivePom(mavenProject.getFile(), mavenProject.getActivatedProfilesIds());
+ consumer.consume(res);
+ }
+ catch (UnsupportedOperationException e) {
+ consumer.consume(null); // null means UnsupportedOperationException
+ }
}
});
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenShowEffectivePom.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenShowEffectivePom.java
index 1c1a39ceca80..55e9f52fe551 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenShowEffectivePom.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/MavenShowEffectivePom.java
@@ -13,7 +13,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
-import com.intellij.util.Consumer;
+import com.intellij.util.NullableConsumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.maven.project.MavenProject;
@@ -51,13 +51,13 @@ public class MavenShowEffectivePom extends AnAction implements DumbAware {
}).notify(project);
}
- public static void actionPerformed(@NotNull final Project project, @NotNull VirtualFile file) {
+ public static void actionPerformed(@NotNull final Project project, @NotNull final VirtualFile file) {
final MavenProjectsManager manager = MavenProjectsManager.getInstance(project);
final MavenProject mavenProject = manager.findProject(file);
assert mavenProject != null;
- manager.evaluateEffectivePom(mavenProject, new Consumer<String>() {
+ manager.evaluateEffectivePom(mavenProject, new NullableConsumer<String>() {
@Override
public void consume(final String s) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@@ -65,6 +65,11 @@ public class MavenShowEffectivePom extends AnAction implements DumbAware {
public void run() {
if (project.isDisposed()) return;
+ if (s == null) { // null means UnsupportedOperationException
+ showUnsupportedNotification(project, file);
+ return;
+ }
+
String fileName = mavenProject.getMavenId().getArtifactId() + "-effective-pom.xml";
PsiFile file = PsiFileFactory.getInstance(project).createFileFromText(fileName, XMLLanguage.INSTANCE, s);
try {
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java
index ad2270960dbf..1aa0de6dea83 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java
@@ -906,4 +906,16 @@ public class MavenUtil {
return ModuleRootManager.getInstance(module).getSdk();
}
+
+ @NotNull
+ public static <K, V extends Map> V getOrCreate(Map map, K key) {
+ Map res = (Map)map.get(key);
+ if (res == null) {
+ res = new HashMap();
+ map.put(key, res);
+ }
+
+ return (V)res;
+ }
+
}
diff --git a/plugins/maven/src/main/resources/META-INF/plugin.xml b/plugins/maven/src/main/resources/META-INF/plugin.xml
index 07fb2430e032..a5aab8ba1737 100644
--- a/plugins/maven/src/main/resources/META-INF/plugin.xml
+++ b/plugins/maven/src/main/resources/META-INF/plugin.xml
@@ -245,6 +245,9 @@
<property name="timestamp"/>
</pluginDescriptor>
+ <pluginDescriptor mavenId="org.codehaus.mojo:build-helper-maven-plugin" goal="reserve-network-port"
+ propertyGenerator="org.jetbrains.idea.maven.plugins.buildHelper.MavenBuildHelperPropertyGenerator"/>
+
<pluginDescriptor mavenId="org.codehaus.mojo:sql-maven-plugin">
<param name="sqlCommand" language="SQL"/>
</pluginDescriptor>
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/plugins/MavenBuildHelperPluginTest.groovy b/plugins/maven/src/test/java/org/jetbrains/idea/maven/plugins/MavenBuildHelperPluginTest.groovy
new file mode 100644
index 000000000000..400c259f9c8e
--- /dev/null
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/plugins/MavenBuildHelperPluginTest.groovy
@@ -0,0 +1,102 @@
+package org.jetbrains.idea.maven.plugins
+
+import org.jetbrains.idea.maven.dom.MavenDomTestCase
+
+/**
+ * @author Sergey Evdokimov
+ */
+class MavenBuildHelperPluginTest extends MavenDomTestCase {
+
+ public void testCompletion() {
+ importProject("""
+<groupId>test</groupId>
+<artifactId>project</artifactId>
+<version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>yyy</id>
+ <goals>
+ <goal>reserve-network-port</goal>
+ </goals>
+ <configuration>
+ <portNames>
+ <portName>someNewProperty1</portName>
+ <portName>someNewProperty2</portName>
+ </portNames>
+ </configuration>
+ </execution>
+ <execution>
+ <id>xxx</id>
+ <goals>
+ <goal>foo</goal>
+ </goals>
+ <configuration>
+ <portNames>
+ <portName>someNewProperty3</portName>
+ </portNames>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <properties>
+ <aaa>\${someNew}</aaa>
+ </properties>
+""")
+
+ createProjectPom("""
+<groupId>test</groupId>
+<artifactId>project</artifactId>
+<version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>yyy</id>
+ <goals>
+ <goal>reserve-network-port</goal>
+ </goals>
+ <configuration>
+ <portNames>
+ <portName>someNewProperty1</portName>
+ <portName>someNewProperty2</portName>
+ </portNames>
+ </configuration>
+ </execution>
+ <execution>
+ <id>xxx</id>
+ <goals>
+ <goal>foo</goal>
+ </goals>
+ <configuration>
+ <portNames>
+ <portName>someNewProperty3</portName>
+ </portNames>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <properties>
+ <aaa>\${someNew<caret>}</aaa>
+ </properties>
+""")
+
+ assertCompletionVariants(myProjectPom, "someNewProperty1", "someNewProperty2")
+ }
+
+}
diff --git a/plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java b/plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java
index 501c2dfa68d9..192f455ba615 100644
--- a/plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java
+++ b/plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java
@@ -73,16 +73,6 @@ public class DuplicatePropertyInspection extends GlobalSimpleInspectionTool {
checkFile(file, manager, (GlobalInspectionContextImpl)globalContext, globalContext.getRefManager(), problemDescriptionsProcessor);
}
- //public HTMLComposerImpl getComposer() {
- // return new DescriptorComposer(this) {
- // protected void composeDescription(final CommonProblemDescriptor description, int i, StringBuffer buf, final RefEntity refElement) {
- // @NonNls String descriptionTemplate = description.getDescriptionTemplate();
- // descriptionTemplate = descriptionTemplate.replaceAll("#end", " ");
- // buf.append(descriptionTemplate);
- // }
- // };
- //}
-
@SuppressWarnings({"HardCodedStringLiteral"})
private static void surroundWithHref(StringBuffer anchor, PsiElement element, final boolean isValue) {
if (element != null) {
@@ -143,7 +133,11 @@ public class DuplicatePropertyInspection extends GlobalSimpleInspectionTool {
}
}
- private void checkFile(final PsiFile file, final InspectionManager manager, GlobalInspectionContextImpl context, final RefManager refManager, final ProblemDescriptionsProcessor processor) {
+ private void checkFile(final PsiFile file,
+ final InspectionManager manager,
+ GlobalInspectionContextImpl context,
+ final RefManager refManager,
+ final ProblemDescriptionsProcessor processor) {
if (!(file instanceof PropertiesFile)) return;
if (!context.isToCheckFile(file, this)) return;
final PsiSearchHelper searchHelper = PsiSearchHelper.SERVICE.getInstance(file.getProject());
diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java
index 9549ce5b506f..8c881ce8eef4 100644
--- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java
+++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2013 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.
@@ -17,6 +17,7 @@
package org.jetbrains.idea.svn;
+import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.*;
@@ -360,6 +361,12 @@ public class SvnConfiguration implements PersistentStateComponent<Element> {
if (myAuthManager == null) {
// reloaded when configuration directory changes
myAuthManager = new SvnAuthenticationManager(svnVcs.getProject(), new File(getConfigurationDirectory()));
+ Disposer.register(svnVcs.getProject(), new Disposable() {
+ @Override
+ public void dispose() {
+ myAuthManager = null;
+ }
+ });
getInteractiveManager(svnVcs);
// to init
myAuthManager.setAuthenticationProvider(new SvnAuthenticationProvider(svnVcs, myInteractiveProvider, RUNTIME_AUTH_CACHE));
diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java b/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java
index ab1ab1dd2630..c2908296f37c 100644
--- a/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java
+++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/config/BaseRepositoryEditor.java
@@ -25,6 +25,7 @@ import com.intellij.tasks.TaskManager;
import com.intellij.tasks.TaskRepository;
import com.intellij.tasks.impl.BaseRepository;
import com.intellij.ui.DocumentAdapter;
+import com.intellij.ui.EditorTextField;
import com.intellij.ui.PanelWithAnchor;
import com.intellij.ui.components.JBCheckBox;
import com.intellij.ui.components.JBLabel;
@@ -211,6 +212,10 @@ public class BaseRepositoryEditor<T extends BaseRepository> extends TaskReposito
});
}
+ protected void installListener(EditorTextField editor) {
+ installListener(editor.getDocument());
+ }
+
protected void doApply() {
if (!myApplying) {
try {
diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/SwitchTaskCombo.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/SwitchTaskCombo.java
index 5a323982fa8a..989a5e607ac0 100644
--- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/SwitchTaskCombo.java
+++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/SwitchTaskCombo.java
@@ -112,7 +112,6 @@ public class SwitchTaskCombo extends ComboBoxAction implements DumbAware {
private static String getText(LocalTask activeTask) {
String text = activeTask.getPresentableName();
- return StringUtil.first(text, 80, true);
+ return StringUtil.first(text, 50, true);
}
-
}
diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java
index d0149d4d89af..8c4785ef41e6 100644
--- a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java
+++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java
@@ -775,6 +775,12 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
// OK
}
catch (Exception e) {
+ String reason = "";
+ // Fix to IDEA-111810
+ if (e.getClass() == Exception.class) {
+ // probably contains some message meaningful to end-user
+ reason = e.getMessage();
+ }
//noinspection InstanceofCatchParameter
if (e instanceof SocketTimeoutException) {
LOG.warn("Socket timeout from " + repository);
@@ -784,17 +790,21 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
}
myBadRepositories.add(repository);
if (forceRequest) {
- notifyAboutConnectionFailure(repository);
+ notifyAboutConnectionFailure(repository, reason);
}
}
}
return issues;
}
- private void notifyAboutConnectionFailure(final TaskRepository repository) {
+ private void notifyAboutConnectionFailure(final TaskRepository repository, String details) {
Notifications.Bus.register(TASKS_NOTIFICATION_GROUP, NotificationDisplayType.BALLOON);
+ String content = "<p><a href=\"\">Configure server...</a></p>";
+ if (!StringUtil.isEmpty(details)) {
+ content = "<p>" + details + "</p>" + content;
+ }
Notifications.Bus.notify(new Notification(TASKS_NOTIFICATION_GROUP, "Cannot connect to " + repository.getUrl(),
- "<p><a href=\"\">Configure server...</a></p>", NotificationType.WARNING,
+ content, NotificationType.WARNING,
new NotificationListener() {
public void hyperlinkUpdate(@NotNull Notification notification,
@NotNull HyperlinkEvent event) {
diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraRepositoryEditor.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraRepositoryEditor.java
index 7ad7faf5fefa..02bb8a1570fe 100644
--- a/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraRepositoryEditor.java
+++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraRepositoryEditor.java
@@ -15,15 +15,11 @@
*/
package com.intellij.tasks.jira;
-import com.intellij.openapi.editor.Document;
import com.intellij.openapi.project.Project;
-import com.intellij.psi.PsiDocumentManager;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiFileFactory;
import com.intellij.tasks.config.BaseRepositoryEditor;
-import com.intellij.tasks.jira.jql.JqlFileType;
import com.intellij.tasks.jira.jql.JqlLanguage;
import com.intellij.ui.EditorTextField;
+import com.intellij.ui.LanguageTextField;
import com.intellij.ui.components.JBLabel;
import com.intellij.util.Consumer;
import com.intellij.util.ui.FormBuilder;
@@ -51,12 +47,9 @@ public class JiraRepositoryEditor extends BaseRepositoryEditor<JiraRepository> {
@Nullable
@Override
protected JComponent createCustomPanel() {
+ mySearchQueryField = new LanguageTextField(JqlLanguage.INSTANCE, myProject, myRepository.getSearchQuery());
+ installListener(mySearchQueryField);
mySearchLabel = new JBLabel("Search:", SwingConstants.RIGHT);
- PsiFileFactory fileFactory = PsiFileFactory.getInstance(myProject);
- PsiFile psiFile = fileFactory.createFileFromText("query.jql", JqlLanguage.INSTANCE, myRepository.getSearchQuery());
- Document document = PsiDocumentManager.getInstance(myProject).getDocument(psiFile);
- mySearchQueryField = new EditorTextField(document, myProject, JqlFileType.INSTANCE);
- installListener(document);
return FormBuilder.createFormBuilder().addLabeledComponent(mySearchLabel, mySearchQueryField).getPanel();
}
diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/TrelloRepository.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/TrelloRepository.java
index 05f75ffbe8d3..0430dea41320 100644
--- a/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/TrelloRepository.java
+++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/TrelloRepository.java
@@ -33,16 +33,12 @@ import com.intellij.tasks.trello.model.TrelloUser;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.xmlb.annotations.Tag;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.httpclient.NameValuePair;
+import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.util.EncodingUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.io.IOException;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Set;
@@ -158,7 +154,7 @@ public final class TrelloRepository extends BaseRepositoryImpl {
@Override
protected void configureHttpMethod(HttpMethod method) {
if (StringUtil.isEmpty(myPassword)) {
- throw new IllegalStateException("Authorization token not set");
+ return;
}
String params = EncodingUtil.formUrlEncode(new NameValuePair[]{
new NameValuePair("token", myPassword),
@@ -192,28 +188,28 @@ public final class TrelloRepository extends BaseRepositoryImpl {
}
}
- @Nullable
- private TrelloBoard fetchBoardById(String id) {
- String url = "/boards/" + id;
+ @NotNull
+ public TrelloBoard fetchBoardById(@NotNull String id) throws Exception {
+ String url = TrelloUtil.TRELLO_API_BASE_URL + "/boards/" + id;
try {
return makeRequestAndDeserializeJsonResponse(url, TrelloBoard.class);
}
catch (Exception e) {
- LOG.warn("Error while fetching initial board info with id = " + id, e);
+ LOG.warn("Error while fetching initial board info", e);
+ throw e;
}
- return null;
}
- @Nullable
- private TrelloList fetchListById(String id) {
- String url = "/lists/" + id;
+ @NotNull
+ public TrelloList fetchListById(@NotNull String id) throws Exception {
+ String url = TrelloUtil.TRELLO_API_BASE_URL + "/lists/" + id;
try {
return makeRequestAndDeserializeJsonResponse(url, TrelloList.class);
}
catch (Exception e) {
- LOG.warn("Error while fetching initial list info with id = " + id, e);
+ LOG.warn("Error while fetching initial list info" + id, e);
+ throw e;
}
- return null;
}
@NotNull
@@ -264,10 +260,10 @@ public final class TrelloRepository extends BaseRepositoryImpl {
LOG.debug("Total " + filtered.size() + " cards after filtering");
if (!fromList) {
// fix for IDEA-111470 and IDEA-111475
- // Select IDs of visible cards, e.d. cards that either archived explicitly or belong to archived list
+ // Select IDs of visible cards, e.d. cards that either archived explicitly, belong to archived list or closed board.
// This information can't be extracted from single card description, because its 'closed' field
// reflects only the card state and doesn't show state of parental list and board.
- // According to Trello REST API "filter=visible" parameter may be used only when fetching cards for
+ // NOTE: According to Trello REST API "filter=visible" parameter may be used only when fetching cards for
// particular board or user.
String visibleCardsUrl = baseUrl + "?filter=visible&fields=none";
List<TrelloCard> visibleCards = makeRequestAndDeserializeJsonResponse(visibleCardsUrl, TrelloUtil.LIST_OF_CARDS_TYPE);
@@ -288,10 +284,14 @@ public final class TrelloRepository extends BaseRepositoryImpl {
/**
* Make GET request to specified URL and return HTTP entity of result as Reader object
*/
- private String makeRequest(String url) throws IOException {
- HttpClient client = getHttpClient();
+ private String makeRequest(String url) throws Exception {
HttpMethod method = new GetMethod(url);
configureHttpMethod(method);
+ return executeMethod(method);
+ }
+
+ private String executeMethod(HttpMethod method) throws Exception {
+ HttpClient client = getHttpClient();
String entityContent;
try {
client.executeMethod(method);
@@ -303,12 +303,19 @@ public final class TrelloRepository extends BaseRepositoryImpl {
method.releaseConnection();
}
LOG.debug(entityContent);
+ if (method.getStatusCode() != HttpStatus.SC_OK) {
+ Header header = method.getResponseHeader("Content-Type");
+ if (header != null && header.getValue().startsWith("text/plain")) {
+ throw new Exception("Request failed. Reason: " + StringUtil.capitalize(entityContent));
+ }
+ throw new Exception("Request failed with HTTP error: " + method.getStatusText());
+ }
//return new InputStreamReader(method.getResponseBodyAsStream(), "utf-8");
return entityContent;
}
@NotNull
- private <T> T makeRequestAndDeserializeJsonResponse(String url, Type type) throws IOException {
+ private <T> T makeRequestAndDeserializeJsonResponse(String url, Type type) throws Exception {
String entityStream = makeRequest(url);
// javac 1.6.0_23 bug workaround
// TrelloRepository.java:286: type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds T,java.lang.Object
@@ -317,7 +324,7 @@ public final class TrelloRepository extends BaseRepositoryImpl {
}
@NotNull
- private <T> T makeRequestAndDeserializeJsonResponse(String url, Class<T> cls) throws IOException {
+ private <T> T makeRequestAndDeserializeJsonResponse(String url, Class<T> cls) throws Exception {
String entityStream = makeRequest(url);
return TrelloUtil.GSON.fromJson(entityStream, cls);
}
@@ -337,18 +344,12 @@ public final class TrelloRepository extends BaseRepositoryImpl {
@Nullable
@Override
public CancellableConnection createCancellableConnection() {
- // try to fetch user info to check connection availability
- GetMethod method = new GetMethod(TrelloUtil.TRELLO_API_BASE_URL + "/members/me");
+ GetMethod method = new GetMethod(TrelloUtil.TRELLO_API_BASE_URL + "/members/me/cards?limit=1");
configureHttpMethod(method);
return new HttpTestConnection<GetMethod>(method) {
@Override
protected void doTest(GetMethod method) throws Exception {
- int statusCode = getHttpClient().executeMethod(method);
- if (statusCode == HttpStatus.SC_UNAUTHORIZED) {
- throw new Exception("Invalid token value");
- } else if (statusCode != HttpStatus.SC_OK) {
- throw new Exception("Error while connecting to server: " + HttpStatus.getStatusText(statusCode));
- }
+ executeMethod(method);
}
};
}
diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/TrelloRepositoryEditor.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/TrelloRepositoryEditor.java
index cd8d86d960e3..9389e8f44523 100644
--- a/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/TrelloRepositoryEditor.java
+++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/TrelloRepositoryEditor.java
@@ -16,13 +16,14 @@
package com.intellij.tasks.trello;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.tasks.config.BaseRepositoryEditor;
import com.intellij.tasks.trello.model.TrelloBoard;
import com.intellij.tasks.trello.model.TrelloList;
-import com.intellij.tasks.trello.model.TrelloModel;
import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.ui.components.JBLabel;
@@ -44,29 +45,19 @@ public class TrelloRepositoryEditor extends BaseRepositoryEditor<TrelloRepositor
private static final Logger LOG = Logger.getInstance("#com.intellij.tasks.trello.TrelloRepositoryEditor");
private static final TrelloBoard UNSPECIFIED_BOARD = new TrelloBoard() {
+ @NotNull
@Override
public String getName() {
return "-- from all boards --";
}
-
- @NotNull
- @Override
- public String getId() {
- return "";
- }
};
private final static TrelloList UNSPECIFIED_LIST = new TrelloList() {
+ @NotNull
@Override
public String getName() {
return "-- from all lists --";
}
-
- @NotNull
- @Override
- public String getId() {
- return "";
- }
};
private ComboBox myBoardComboBox;
@@ -89,23 +80,17 @@ public class TrelloRepositoryEditor extends BaseRepositoryEditor<TrelloRepositor
@Override
protected void textChanged(DocumentEvent e) {
String password = String.valueOf(myPasswordText.getPassword());
- if (password.isEmpty() && password.equals(myRepository.getPassword())) {
+ if (password.equals(myRepository.getPassword())) {
return;
}
myRepository.setPassword(password);
- new BoardsDownloader() {
+ new BoardsDownloader(UNSPECIFIED_BOARD) {
@Override
- protected List<TrelloBoard> doInBackground() throws Exception {
+ protected List<TrelloBoard> download() throws Exception {
myRepository.setCurrentUser(myRepository.fetchUserByToken());
- return super.doInBackground();
+ return super.download();
}
-
- @Override
- protected void done() {
- super.done();
- myBoardComboBox.setSelectedItem(UNSPECIFIED_BOARD);
- }
- }.execute();
+ }.runOnPooledThread();
doApply();
}
});
@@ -119,13 +104,7 @@ public class TrelloRepositoryEditor extends BaseRepositoryEditor<TrelloRepositor
}
if (board != UNSPECIFIED_BOARD) {
myRepository.setCurrentBoard(board);
- new ListsDownloader() {
- @Override
- protected void done() {
- super.done();
- myListComboBox.setSelectedItem(UNSPECIFIED_LIST);
- }
- }.execute();
+ new ListsDownloader(UNSPECIFIED_LIST).runOnPooledThread();
}
else {
myRepository.setCurrentBoard(null);
@@ -136,8 +115,8 @@ public class TrelloRepositoryEditor extends BaseRepositoryEditor<TrelloRepositor
doApply();
}
});
- myBoardComboBox.setRenderer(new TrelloModelRenderer("Set token first"));
- myListComboBox.setRenderer(new TrelloModelRenderer("Select board first"));
+ myBoardComboBox.setRenderer(new TrelloBoardRenderer("Set token first"));
+ myListComboBox.setRenderer(new TrelloListRenderer("Select board first"));
myListComboBox.addItemListener(new ItemListener() {
@Override
@@ -151,26 +130,44 @@ public class TrelloRepositoryEditor extends BaseRepositoryEditor<TrelloRepositor
}
});
+ // Initial setup:
if (myRepository.getCurrentUser() != null) {
- new BoardsDownloader() {
+ new BoardsDownloader(myRepository.getCurrentBoard()) {
@Override
- protected void done() {
- // save already selected board, because ItemListener will reset it
- TrelloBoard selectedBoard = myRepository.getCurrentBoard();
- super.done();
- myBoardComboBox.setSelectedItem(selectedBoard != null ? selectedBoard : UNSPECIFIED_BOARD);
+ protected List<TrelloBoard> download() throws Exception {
+ List<TrelloBoard> boards = super.download();
+ if (myBoard == null) {
+ return boards;
+ }
+ int i = boards.indexOf(myBoard);
+ // update information about selected board
+ // if it's open and thus downloaded with other boards of user, take info from there,
+ // otherwise issue a separate request
+ myBoard = i >= 0 ? boards.get(i) : myRepository.fetchBoardById(myBoard.getId());
+ myRepository.setCurrentBoard(myBoard);
+ return boards;
}
- }.execute();
+ }.runOnPooledThread();
}
+
if (myRepository.getCurrentBoard() != null) {
- new ListsDownloader() {
+ new ListsDownloader(myRepository.getCurrentList()) {
@Override
- protected void done() {
- TrelloList selectedList = myRepository.getCurrentList();
- super.done();
- myListComboBox.setSelectedItem(selectedList != null ? selectedList : UNSPECIFIED_LIST);
+ protected List<TrelloList> download() throws Exception {
+ List<TrelloList> lists = super.download();
+ if (myList == null) {
+ return lists;
+ }
+ int i = lists.indexOf(myList);
+ myList = i >= 0 ? lists.get(i) : myRepository.fetchListById(myList.getId());
+ TrelloBoard currentBoard = myRepository.getCurrentBoard();
+ if (currentBoard != null && !myList.getIdBoard().equals(currentBoard.getId())) {
+ myList.setMoved(true);
+ }
+ myRepository.setCurrentList(myList);
+ return lists;
}
- }.execute();
+ }.runOnPooledThread();
}
}
@@ -190,16 +187,6 @@ public class TrelloRepositoryEditor extends BaseRepositoryEditor<TrelloRepositor
.getPanel();
}
- private void fillBoardsComboBox(List<TrelloBoard> boards) {
- myBoardComboBox.setModel(new DefaultComboBoxModel(boards.toArray()));
- myBoardComboBox.insertItemAt(UNSPECIFIED_BOARD, 0);
- }
-
- private void fillListsComboBox(List<TrelloList> lists) {
- myListComboBox.setModel(new DefaultComboBoxModel(lists.toArray()));
- myListComboBox.insertItemAt(UNSPECIFIED_LIST, 0);
- }
-
@Override
public void setAnchor(@Nullable JComponent anchor) {
super.setAnchor(anchor);
@@ -207,53 +194,151 @@ public class TrelloRepositoryEditor extends BaseRepositoryEditor<TrelloRepositor
myBoardLabel.setAnchor(anchor);
}
- private class BoardsDownloader extends SwingWorker<List<TrelloBoard>, Void> {
- @Override
- protected List<TrelloBoard> doInBackground() throws Exception {
- return myRepository.fetchUserBoards();
+
+ private abstract class Downloader<T> implements Runnable {
+
+ private final ModalityState myModalityState = ModalityState.current();
+
+ protected abstract T download() throws Exception;
+
+ protected void updateUI(T result) {
+ // empty
+ }
+
+ protected void handleException(Exception e) {
+ // empty
}
@Override
- protected void done() {
+ public void run() {
try {
- fillBoardsComboBox(get());
+ final T result;
+ synchronized (myRepository) {
+ result = download();
+ }
+ ApplicationManager.getApplication().invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ updateUI(result);
+ }
+ }, myModalityState);
}
- catch (Exception e) {
- LOG.warn("Error while fetching boards", e);
- myBoardComboBox.removeAllItems();
- myListComboBox.removeAllItems();
+ catch (final Exception e) {
+ LOG.warn(e);
+ ApplicationManager.getApplication().invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ handleException(e);
+ }
+ }, myModalityState);
}
}
+
+ public void runOnPooledThread() {
+ ApplicationManager.getApplication().executeOnPooledThread(this);
+ }
}
- private class ListsDownloader extends SwingWorker<List<TrelloList>, Void> {
+ private class BoardsDownloader extends Downloader<List<TrelloBoard>> {
+ protected TrelloBoard myBoard;
+
+ private BoardsDownloader(TrelloBoard selectedBoard) {
+ myBoard = selectedBoard;
+ }
+
+ @Override
+ protected List<TrelloBoard> download() throws Exception {
+ return myRepository.fetchUserBoards();
+ }
+
+ @Override
+ protected void updateUI(List<TrelloBoard> boards) {
+ myBoardComboBox.setModel(new DefaultComboBoxModel(boards.toArray()));
+ myBoardComboBox.insertItemAt(UNSPECIFIED_BOARD, 0);
+ // explicitly add missing closed board
+ if (!(myBoard == null || myBoard == UNSPECIFIED_BOARD) && !boards.contains(myBoard)) {
+ myBoardComboBox.addItem(myBoard);
+ }
+ myBoardComboBox.setSelectedItem(myBoard == null ? UNSPECIFIED_BOARD : myBoard);
+ }
+
+ @Override
+ protected void handleException(Exception e) {
+ myBoardComboBox.removeAllItems();
+ myListComboBox.removeAllItems();
+ }
+ }
+
+ private class ListsDownloader extends Downloader<List<TrelloList>> {
+ protected TrelloList myList;
+
+ private ListsDownloader(TrelloList selectedList) {
+ this.myList = selectedList;
+ }
+
@Override
- protected List<TrelloList> doInBackground() throws Exception {
+ protected List<TrelloList> download() throws Exception {
return myRepository.fetchBoardLists();
}
@Override
- protected void done() {
- try {
- fillListsComboBox(get());
+ protected void updateUI(List<TrelloList> lists) {
+ myListComboBox.setModel(new DefaultComboBoxModel(lists.toArray()));
+ myListComboBox.insertItemAt(UNSPECIFIED_LIST, 0);
+ // explicitly add moved or archived list to combobox: see IDEA-111819 for details
+ if (!(myList == null || myList == UNSPECIFIED_LIST) && !lists.contains(myList)) {
+ myListComboBox.addItem(myList);
}
- catch (Exception e) {
- LOG.warn("Error while fetching lists", e);
- myListComboBox.removeAllItems();
+ myListComboBox.setSelectedItem(myList == null ? UNSPECIFIED_LIST : myList);
+ }
+
+ @Override
+ protected void handleException(Exception e) {
+ myListComboBox.removeAllItems();
+ }
+ }
+
+ private static class TrelloBoardRenderer extends ListCellRendererWrapper<TrelloBoard> {
+ private String myNullDescription;
+
+ private TrelloBoardRenderer(String nullDescription) {
+ this.myNullDescription = nullDescription;
+ }
+
+ @Override
+ public void customize(JList list, TrelloBoard board, int index, boolean selected, boolean hasFocus) {
+ if (board == null) {
+ setText(myNullDescription);
+ return;
}
+ setText(board.isClosed() ? board.getName() + " (closed)" : board.getName());
}
}
- private static class TrelloModelRenderer extends ListCellRendererWrapper<TrelloModel> {
- private String initialMessage;
+ private static class TrelloListRenderer extends ListCellRendererWrapper<TrelloList> {
+ private String myNullDescription;
- private TrelloModelRenderer(String nullDescription) {
- this.initialMessage = nullDescription;
+ private TrelloListRenderer(String nullDescription) {
+ this.myNullDescription = nullDescription;
}
@Override
- public void customize(JList list, TrelloModel value, int index, boolean selected, boolean hasFocus) {
- setText(value == null ? initialMessage : value.getName());
+ public void customize(JList list, TrelloList trelloList, int index, boolean selected, boolean hasFocus) {
+ if (trelloList == null) {
+ setText(myNullDescription);
+ return;
+ }
+ String text = trelloList.getName();
+ if (trelloList.isClosed() && trelloList.isMoved()) {
+ text += " (archived,moved)";
+ }
+ else if (trelloList.isMoved()) {
+ text += " (moved)";
+ }
+ else if (trelloList.isClosed()) {
+ text += " (archived)";
+ }
+ setText(text);
}
}
}
diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloBoard.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloBoard.java
index d5f984d87286..332929dd582b 100644
--- a/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloBoard.java
+++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloBoard.java
@@ -42,7 +42,7 @@ public class TrelloBoard extends TrelloModel {
@Override
public String toString() {
- return String.format("TrelloBoard(id='%s', name='%s')", getId(), name);
+ return String.format("TrelloBoard(id='%s', name='%s')", getId(), getName());
}
public boolean isClosed() {
@@ -66,7 +66,7 @@ public class TrelloBoard extends TrelloModel {
}
@Override
- public void setName(String name) {
+ public void setName(@NotNull String name) {
this.name = name;
}
diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloList.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloList.java
index 99840c3c56f6..4df2a65d5270 100644
--- a/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloList.java
+++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloList.java
@@ -29,6 +29,13 @@ public class TrelloList extends TrelloModel {
private String idBoard;
private String name;
private double pos;
+ /**
+ * This field is not part of REST responses. It will be set explicitly to show in UI, that
+ * selected list doesn't belong to specified board anymore.
+ *
+ * @see com.intellij.tasks.trello.TrelloRepositoryEditor
+ */
+ private boolean moved;
/**
* Serialization constructor
@@ -39,7 +46,7 @@ public class TrelloList extends TrelloModel {
@Override
public String toString() {
- return String.format("TrelloList(id='%s' name='%s')", getId(), name);
+ return String.format("TrelloList(id='%s' name='%s')", getId(), getName());
}
public boolean isClosed() {
@@ -59,11 +66,19 @@ public class TrelloList extends TrelloModel {
}
@Override
- public void setName(String name) {
+ public void setName(@NotNull String name) {
this.name = name;
}
public double getPos() {
return pos;
}
+
+ public boolean isMoved() {
+ return moved;
+ }
+
+ public void setMoved(boolean moved) {
+ this.moved = moved;
+ }
}
diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloModel.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloModel.java
index 3dd0687a0a21..20f28b600314 100644
--- a/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloModel.java
+++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/trello/model/TrelloModel.java
@@ -23,9 +23,17 @@ import org.jetbrains.annotations.NotNull;
* @author Mikhail Golubev
*/
public abstract class TrelloModel {
- private String id;
+ public static final String ILLEGAL_ID = "ILLEGAL_ID";
+ private String id = ILLEGAL_ID;
+
+ /**
+ * Trello always provides objects IDs as part of its REST responses. But it may still be null
+ * if e.g. object was incorrectly created manually, or it is some kind of stub implementation
+ * as for UNSPECIFIED_BOARD and UNSPECIFIED_LIST in TrelloRepositoryEditor. ILLEGAL_ID
+ * value serves as fallback in such cases.
+ */
@Attribute("id")
@NotNull
public String getId() {
@@ -59,11 +67,11 @@ public abstract class TrelloModel {
if (obj == this) return true;
if (!(obj instanceof TrelloModel)) return false;
TrelloModel model = (TrelloModel) obj;
- return id != null && id.equals(model.id);
+ return !id.equals(ILLEGAL_ID) && id.equals(model.id);
}
@Override
public final int hashCode() {
- return id != null ? id.hashCode() : 0;
+ return id.hashCode();
}
}
diff --git a/plugins/terminal/lib/jediterm-pty-0.08.jar b/plugins/terminal/lib/jediterm-pty-0.08.jar
index ac2ead227485..5fe6a5fd700b 100644
--- a/plugins/terminal/lib/jediterm-pty-0.08.jar
+++ b/plugins/terminal/lib/jediterm-pty-0.08.jar
Binary files differ
diff --git a/plugins/terminal/lib/jediterm.in b/plugins/terminal/lib/jediterm.in
new file mode 100644
index 000000000000..9a256a968583
--- /dev/null
+++ b/plugins/terminal/lib/jediterm.in
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# When bash is invoked as an interactive login shell, or as a non-interac-
+# tive shell with the --login option, it first reads and executes commands
+# from the file /etc/profile, if that file exists. After reading that
+# file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in
+# that order, and reads and executes commands from the first one that
+# exists and is readable.
+
+if [ -f /etc/profile ];
+then
+ source /etc/profile
+fi
+
+if [ -f ~/.bash_profile ];
+then
+ source ~/.bash_profile
+else
+ if [ -f ~/.bash_login ]
+ then
+ source ~/.bash_login
+ else
+ if [ -f ~/.profile ]
+ then
+ source ~/.profile
+ fi
+ fi
+fi
+
+function generate_command_executed_sequence() {
+ printf '\e\7'
+}
+
+export -f generate_command_executed_sequence
+
+
+#generate escape sequence after command is executed to notify jediterm emulator
+trap "generate_command_executed_sequence" DEBUG
diff --git a/plugins/terminal/lib/macosx/x86_64/libpty.dylib b/plugins/terminal/lib/macosx/x86_64/libpty.dylib
new file mode 100755
index 000000000000..7755a8142d6e
--- /dev/null
+++ b/plugins/terminal/lib/macosx/x86_64/libpty.dylib
Binary files differ
diff --git a/plugins/terminal/lib/pty4j-0.2.jar b/plugins/terminal/lib/pty4j-0.2.jar
deleted file mode 100644
index 44b238387d60..000000000000
--- a/plugins/terminal/lib/pty4j-0.2.jar
+++ /dev/null
Binary files differ
diff --git a/plugins/terminal/lib/pty4j-0.3.jar b/plugins/terminal/lib/pty4j-0.3.jar
new file mode 100644
index 000000000000..38b047086c37
--- /dev/null
+++ b/plugins/terminal/lib/pty4j-0.3.jar
Binary files differ
diff --git a/plugins/terminal/lib/win/x86/libwinpty.dll b/plugins/terminal/lib/win/x86/libwinpty.dll
new file mode 100644
index 000000000000..2b581b260d2f
--- /dev/null
+++ b/plugins/terminal/lib/win/x86/libwinpty.dll
Binary files differ
diff --git a/plugins/terminal/lib/win/x86/winpty-agent.exe b/plugins/terminal/lib/win/x86/winpty-agent.exe
new file mode 100644
index 000000000000..87431b52c287
--- /dev/null
+++ b/plugins/terminal/lib/win/x86/winpty-agent.exe
Binary files differ
diff --git a/plugins/terminal/lib/win/x86_64/libwinpty.dll b/plugins/terminal/lib/win/x86_64/libwinpty.dll
new file mode 100644
index 000000000000..dea8dcf55232
--- /dev/null
+++ b/plugins/terminal/lib/win/x86_64/libwinpty.dll
Binary files differ
diff --git a/plugins/terminal/lib/win/x86_64/winpty-agent.exe b/plugins/terminal/lib/win/x86_64/winpty-agent.exe
new file mode 100644
index 000000000000..9083e0365584
--- /dev/null
+++ b/plugins/terminal/lib/win/x86_64/winpty-agent.exe
Binary files differ
diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalStarter.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalStarter.java
new file mode 100644
index 000000000000..f94459e7661a
--- /dev/null
+++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalStarter.java
@@ -0,0 +1,47 @@
+package org.jetbrains.plugins.terminal;
+
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.vfs.LocalFileSystem;
+import com.jediterm.terminal.*;
+import com.jediterm.terminal.emulator.JediEmulator;
+
+import javax.swing.*;
+
+/**
+ * @author traff
+ */
+public class JBTerminalStarter extends TerminalStarter {
+ public JBTerminalStarter(Terminal terminal, TtyConnector ttyConnector) {
+ super(terminal, ttyConnector);
+ }
+
+ @Override
+ protected JediEmulator createEmulator(TtyChannel channel, TerminalOutputStream stream, Terminal terminal) {
+ return new JediEmulator(channel, stream, terminal) {
+ @Override
+ protected void unsupported(char... sequenceChars) {
+ if (sequenceChars[0] == 7) { //ESC BEL
+ handleCommandExecutedSequence();
+ }
+ else {
+ super.unsupported();
+ }
+ }
+ };
+ }
+
+ private static void handleCommandExecutedSequence() {
+ //we need to refresh local file system after a command has been executed in the terminal
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ ApplicationManager.getApplication().runWriteAction(new Runnable() {
+ @Override
+ public void run() {
+ LocalFileSystem.getInstance().refresh(false);
+ }
+ });
+ }
+ });
+ }
+}
diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalWidget.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalWidget.java
index 79c46c5d1f90..1701a18926a7 100644
--- a/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalWidget.java
+++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalWidget.java
@@ -8,7 +8,10 @@ import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.ui.components.JBScrollBar;
import com.intellij.util.containers.HashMap;
+import com.jediterm.terminal.TerminalStarter;
+import com.jediterm.terminal.TtyConnector;
import com.jediterm.terminal.display.BackBuffer;
+import com.jediterm.terminal.display.JediTerminal;
import com.jediterm.terminal.display.StyleState;
import com.jediterm.terminal.ui.JediTermWidget;
import com.jediterm.terminal.ui.SystemSettingsProvider;
@@ -34,6 +37,11 @@ public class JBTerminalWidget extends JediTermWidget {
return new JBTerminalPanel(settingsProvider, backBuffer, styleState, getColorScheme());
}
+ @Override
+ protected TerminalStarter createTerminalStarter(JediTerminal terminal, TtyConnector connector) {
+ return new JBTerminalStarter(terminal, connector);
+ }
+
public EditorColorsScheme getColorScheme() {
return createBoundColorSchemeDelegate(null);
}
diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java
index 8d49b030a0eb..bd540bfaf387 100644
--- a/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java
+++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java
@@ -5,17 +5,25 @@ import com.intellij.execution.process.*;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.roots.ModuleRootManager;
+import com.intellij.openapi.roots.ProjectRootManager;
+import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.Consumer;
import com.intellij.util.containers.HashMap;
import com.jediterm.pty.PtyProcessTtyConnector;
import com.jediterm.terminal.TtyConnector;
import com.pty4j.PtyProcess;
+import com.pty4j.util.PtyUtil;
+import com.pty4j.windows.WinPty;
import org.jetbrains.annotations.Nullable;
+import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
+import java.security.CodeSource;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
@@ -28,10 +36,34 @@ public class LocalTerminalDirectRunner extends AbstractTerminalRunner<PtyProcess
private final Charset myDefaultCharset;
private final String[] myCommand;
- public LocalTerminalDirectRunner(Project project, String[] command) {
+ public LocalTerminalDirectRunner(Project project) {
super(project);
myDefaultCharset = Charset.forName("UTF-8");
- myCommand = command;
+
+ if (SystemInfo.isUnix) {
+ File rcFile = findRCFile();
+
+ if (rcFile != null) {
+ myCommand = new String[]{"/bin/bash", "--rcfile", rcFile.getAbsolutePath(), "-i"};
+ }
+ else {
+ myCommand = new String[]{"/bin/bash", "--login"};
+ }
+ }
+ else {
+ myCommand = new String[]{"cmd.exe"};
+ }
+ }
+
+ private static File findRCFile() {
+ String folder = PtyUtil.getJarFolder();
+ if (folder != null) {
+ File rcFile = new File(folder, "jediterm.in");
+ if (rcFile.exists()) {
+ return rcFile;
+ }
+ }
+ return null;
}
@Override
@@ -39,13 +71,20 @@ public class LocalTerminalDirectRunner extends AbstractTerminalRunner<PtyProcess
Map<String, String> envs = new HashMap<String, String>(System.getenv());
envs.put("TERM", "xterm");
try {
- return PtyProcess.exec(myCommand, envs, null);
+ return PtyProcess.exec(myCommand, envs, currentProjectFolder());
}
catch (IOException e) {
throw new ExecutionException(e);
}
}
+ private String currentProjectFolder() {
+ for (VirtualFile vf : ProjectRootManager.getInstance(myProject).getContentRoots()) {
+ return vf.getCanonicalPath();
+ }
+ return null;
+ }
+
@Override
protected ProcessHandler createProcessHandler(final PtyProcess process) {
return new PtyProcessHandler(process);
diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/OpenLocalTerminalAction.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/OpenLocalTerminalAction.java
index 8738eb06a99f..203de242cb6e 100644
--- a/plugins/terminal/src/org/jetbrains/plugins/terminal/OpenLocalTerminalAction.java
+++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/OpenLocalTerminalAction.java
@@ -50,12 +50,14 @@ public class OpenLocalTerminalAction extends AnAction implements DumbAware {
@Nullable
public static LocalTerminalDirectRunner createTerminalRunner(Project project) {
+ String[] terminalCommand;
if (SystemInfo.isWindows) {
- return null;
+ terminalCommand = new String[]{"cmd.exe"};
+ }
+ else {
+ terminalCommand = new String[]{"/bin/bash", "--login"};
}
- //String[] terminalCommand = SystemInfo.isMac ? new String[]{"/bin/bash", "--login"} : new String[]{"/bin/bash"};
- String[] terminalCommand = new String[]{"/bin/bash", "--login"};
- return new LocalTerminalDirectRunner(project, terminalCommand);
+ return new LocalTerminalDirectRunner(project);
}
}
diff --git a/plugins/terminal/terminal.iml b/plugins/terminal/terminal.iml
index a334163c613a..86f90598c51f 100644
--- a/plugins/terminal/terminal.iml
+++ b/plugins/terminal/terminal.iml
@@ -22,7 +22,7 @@
<orderEntry type="module-library">
<library name="pty4j">
<CLASSES>
- <root url="jar://$MODULE_DIR$/lib/pty4j-0.2.jar!/" />
+ <root url="jar://$MODULE_DIR$/lib/pty4j-0.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.java
index 6c21e171acba..524d31169df4 100644
--- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.java
+++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.java
@@ -505,10 +505,6 @@ public class TestNGConfigurationEditor extends SettingsEditor<TestNGConfiguratio
}).disableUpDownActions().createPanel(), BorderLayout.CENTER);
}
- @Override
- protected void disposeEditor() {
- }
-
public void onTypeChanged(TestType type) {
//LOGGER.info("onTypeChanged with " + type);
if (type != TestType.PACKAGE && type != TestType.SUITE) {
diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java
index 79875c2145b3..2baeab69c1b0 100644
--- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java
+++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java
@@ -32,6 +32,8 @@ import com.intellij.psi.PsiElement;
import com.theoryinpractice.testng.model.TestData;
import org.jetbrains.annotations.NotNull;
+import java.util.List;
+
public abstract class TestNGConfigurationProducer extends JavaRuntimeConfigurationProducerBase implements Cloneable {
public TestNGConfigurationProducer() {
@@ -40,7 +42,7 @@ public abstract class TestNGConfigurationProducer extends JavaRuntimeConfigurati
@Override
protected RunnerAndConfigurationSettings findExistingByElement(Location location,
- @NotNull RunnerAndConfigurationSettings[] existingConfigurations,
+ @NotNull List<RunnerAndConfigurationSettings> existingConfigurations,
ConfigurationContext context) {
final TestNGConfiguration testNGConfiguration =
(TestNGConfiguration)context.getOriginalConfiguration(TestNGConfigurationType.getInstance());
diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java
index 4a8ebbbe8877..086615719d52 100644
--- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java
+++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java
@@ -40,6 +40,7 @@ import com.theoryinpractice.testng.util.TestNGUtil;
import org.jetbrains.annotations.NotNull;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Set;
public class TestNGPatternConfigurationProducer extends TestNGConfigurationProducer{
@@ -135,7 +136,7 @@ public class TestNGPatternConfigurationProducer extends TestNGConfigurationProdu
@Override
protected RunnerAndConfigurationSettings findExistingByElement(@NotNull Location location,
- @NotNull RunnerAndConfigurationSettings[] existingConfigurations,
+ @NotNull List<RunnerAndConfigurationSettings> existingConfigurations,
ConfigurationContext context) {
final LinkedHashSet<String> classes = new LinkedHashSet<String>();
collectPatternElements(context, classes);
diff --git a/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindow.java b/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindow.java
index 89019e0de2b5..a2a62f7e2d9a 100644
--- a/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindow.java
+++ b/plugins/ui-designer-core/src/com/intellij/designer/LightToolWindow.java
@@ -20,6 +20,7 @@ import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.impl.ActionManagerImpl;
import com.intellij.openapi.actionSystem.impl.MenuItemPresentationFactory;
+import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.ThreeComponentsSplitter;
import com.intellij.openapi.util.SystemInfo;
@@ -479,7 +480,7 @@ public class LightToolWindow extends JPanel {
myAction = action;
Presentation presentation = action.getTemplatePresentation();
- InplaceButton button = new InplaceButton(AnAction.createTooltipText(presentation.getText(), action), EmptyIcon.ICON_16, this) {
+ InplaceButton button = new InplaceButton(KeymapUtil.createTooltipText(presentation.getText(), action), EmptyIcon.ICON_16, this) {
@Override
public boolean isActive() {
return LightToolWindow.this.isActive();
diff --git a/plugins/ui-designer-core/src/com/intellij/designer/componentTree/ComponentTree.java b/plugins/ui-designer-core/src/com/intellij/designer/componentTree/ComponentTree.java
index 79f935c5181d..f7735c52eb0e 100644
--- a/plugins/ui-designer-core/src/com/intellij/designer/componentTree/ComponentTree.java
+++ b/plugins/ui-designer-core/src/com/intellij/designer/componentTree/ComponentTree.java
@@ -17,7 +17,6 @@ package com.intellij.designer.componentTree;
import com.intellij.codeHighlighting.HighlightDisplayLevel;
import com.intellij.codeInsight.daemon.impl.SeverityRegistrar;
-import com.intellij.codeInsight.daemon.impl.SeverityUtil;
import com.intellij.designer.actions.DesignerActionPanel;
import com.intellij.designer.actions.StartInplaceEditing;
import com.intellij.designer.designSurface.DesignerEditorPanel;
@@ -159,7 +158,7 @@ public final class ComponentTree extends Tree implements DataProvider {
@Nullable
private static HighlightDisplayLevel getHighlightDisplayLevel(Project project, RadComponent component) {
HighlightDisplayLevel displayLevel = null;
- SeverityRegistrar severityRegistrar = SeverityUtil.getSeverityRegistrar(project);
+ SeverityRegistrar severityRegistrar = SeverityRegistrar.getSeverityRegistrar(project);
for (ErrorInfo errorInfo : RadComponent.getError(component)) {
if (displayLevel == null || severityRegistrar.compare(errorInfo.getLevel().getSeverity(), displayLevel.getSeverity()) > 0) {
displayLevel = errorInfo.getLevel();
@@ -174,7 +173,7 @@ public final class ComponentTree extends Tree implements DataProvider {
if (level != null) {
TextAttributesKey attributesKey =
- SeverityUtil.getSeverityRegistrar(myDesigner.getProject()).getHighlightInfoTypeBySeverity(level.getSeverity()).getAttributesKey();
+ SeverityRegistrar.getSeverityRegistrar(myDesigner.getProject()).getHighlightInfoTypeBySeverity(level.getSeverity()).getAttributesKey();
final TextAttributes textAttributes = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(attributesKey);
wrapper = new AttributeWrapper() {
diff --git a/plugins/ui-designer-core/src/com/intellij/designer/componentTree/TreeEditableArea.java b/plugins/ui-designer-core/src/com/intellij/designer/componentTree/TreeEditableArea.java
index 31357b05430f..bce7b2f01c0a 100644
--- a/plugins/ui-designer-core/src/com/intellij/designer/componentTree/TreeEditableArea.java
+++ b/plugins/ui-designer-core/src/com/intellij/designer/componentTree/TreeEditableArea.java
@@ -31,6 +31,7 @@ import javax.swing.*;
import javax.swing.event.EventListenerList;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.util.ArrayList;
@@ -274,7 +275,8 @@ public final class TreeEditableArea implements EditableArea, FeedbackTreeLayer,
private TreePath getPath(RadComponent component) {
// TODO: I don't know better way gets tree path for element
- return new TreePath(myTreeBuilder.getNodeForElement(component).getPath());
+ DefaultMutableTreeNode node = myTreeBuilder.getNodeForElement(component);
+ return node == null ? null : new TreePath(node.getPath());
}
@Override
diff --git a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/tools/CreationTool.java b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/tools/CreationTool.java
index 5f301ac7a15e..83ed5047b023 100644
--- a/plugins/ui-designer-core/src/com/intellij/designer/designSurface/tools/CreationTool.java
+++ b/plugins/ui-designer-core/src/com/intellij/designer/designSurface/tools/CreationTool.java
@@ -16,10 +16,8 @@
package com.intellij.designer.designSurface.tools;
import com.intellij.designer.designSurface.OperationContext;
-import com.intellij.designer.model.RadComponent;
import java.util.Collections;
-import java.util.List;
/**
* @author Alexander Lobas
@@ -51,11 +49,6 @@ public class CreationTool extends AbstractCreationTool {
@Override
protected void updateTarget() {
- if (myTargetOperation != null && myContext != null) {
- List<RadComponent> components = myContext.getComponents();
- if (components != null && !components.isEmpty()) {
- myTargetOperation.setComponent(components.get(0));
- }
- }
+ myTargetOperation.setComponent(myContext.getComponents().get(0));
}
} \ No newline at end of file
diff --git a/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/RadPropertyTable.java b/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/RadPropertyTable.java
index f9975f929662..0fe7d64f0411 100644
--- a/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/RadPropertyTable.java
+++ b/plugins/ui-designer-core/src/com/intellij/designer/propertyTable/RadPropertyTable.java
@@ -15,7 +15,7 @@
*/
package com.intellij.designer.propertyTable;
-import com.intellij.codeInsight.daemon.impl.SeverityUtil;
+import com.intellij.codeInsight.daemon.impl.SeverityRegistrar;
import com.intellij.designer.DesignerBundle;
import com.intellij.designer.designSurface.ComponentSelectionListener;
import com.intellij.designer.designSurface.DesignerEditorPanel;
@@ -104,7 +104,7 @@ public class RadPropertyTable extends PropertyTable implements DataProvider, Com
@NotNull
protected TextAttributesKey getErrorAttributes(@NotNull HighlightSeverity severity) {
- return SeverityUtil.getSeverityRegistrar(myProject).getHighlightInfoTypeBySeverity(severity).getAttributesKey();
+ return SeverityRegistrar.getSeverityRegistrar(myProject).getHighlightInfoTypeBySeverity(severity).getAttributesKey();
}
//////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/ErrorAnalyzer.java b/plugins/ui-designer/src/com/intellij/uiDesigner/ErrorAnalyzer.java
index c6c96814723d..8d38863b939f 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/ErrorAnalyzer.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/ErrorAnalyzer.java
@@ -16,7 +16,7 @@
package com.intellij.uiDesigner;
import com.intellij.codeHighlighting.HighlightDisplayLevel;
-import com.intellij.codeInsight.daemon.impl.SeverityUtil;
+import com.intellij.codeInsight.daemon.impl.SeverityRegistrar;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.module.Module;
@@ -392,7 +392,7 @@ public final class ErrorAnalyzer {
public static HighlightDisplayLevel getHighlightDisplayLevel(final Project project, @NotNull final RadComponent component) {
HighlightDisplayLevel displayLevel = null;
for(ErrorInfo errInfo: getAllErrorsForComponent(component)) {
- if (displayLevel == null || SeverityUtil.getSeverityRegistrar(project).compare(errInfo.getHighlightDisplayLevel().getSeverity(), displayLevel.getSeverity()) > 0) {
+ if (displayLevel == null || SeverityRegistrar.getSeverityRegistrar(project).compare(errInfo.getHighlightDisplayLevel().getSeverity(), displayLevel.getSeverity()) > 0) {
displayLevel = errInfo.getHighlightDisplayLevel();
}
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/ComponentTree.java b/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/ComponentTree.java
index 0889ca174181..a2f50bb6b13c 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/ComponentTree.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/ComponentTree.java
@@ -16,7 +16,7 @@
package com.intellij.uiDesigner.componentTree;
import com.intellij.codeHighlighting.HighlightDisplayLevel;
-import com.intellij.codeInsight.daemon.impl.SeverityUtil;
+import com.intellij.codeInsight.daemon.impl.SeverityRegistrar;
import com.intellij.icons.AllIcons;
import com.intellij.ide.DeleteProvider;
import com.intellij.ide.highlighter.JavaHighlightingColors;
@@ -328,7 +328,7 @@ public final class ComponentTree extends Tree implements DataProvider {
SimpleTextAttributes result = highlightMap.get(attrs);
if (result == null) {
- final TextAttributesKey attrKey = SeverityUtil.getSeverityRegistrar(myProject).getHighlightInfoTypeBySeverity(level.getSeverity()).getAttributesKey();
+ final TextAttributesKey attrKey = SeverityRegistrar.getSeverityRegistrar(myProject).getHighlightInfoTypeBySeverity(level.getSeverity()).getAttributesKey();
TextAttributes textAttrs = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(attrKey);
textAttrs = TextAttributes.merge(attrs.toTextAttributes(), textAttrs);
result = SimpleTextAttributes.fromTextAttributes(textAttrs);
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/button.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/button.png
index 7e94090bae18..211c90e79138 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/button.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/button.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/button@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/button@2x.png
new file mode 100644
index 000000000000..ae8638c781bc
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/button@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/buttonGroup.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/buttonGroup.png
index fc1026c61f3e..3128143897d7 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/buttonGroup.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/buttonGroup.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/buttonGroup@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/buttonGroup@2x.png
new file mode 100644
index 000000000000..dcc9f3ade53e
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/buttonGroup@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/checkBox.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/checkBox.png
index 917a11d6ca92..85448c02b6dd 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/checkBox.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/checkBox.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/checkBox@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/checkBox@2x.png
new file mode 100644
index 000000000000..8eb071aeb545
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/checkBox@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/chooseLocale.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/chooseLocale.png
index 4ec56035f298..3835c686ce27 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/chooseLocale.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/chooseLocale.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/chooseLocale@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/chooseLocale@2x.png
new file mode 100644
index 000000000000..2580a4cbc337
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/chooseLocale@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode.png
index 6b4f883215cf..409bde26096e 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode@2x.png
new file mode 100644
index 000000000000..87d59bfd9f86
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode@2x_dark.png
new file mode 100644
index 000000000000..a303c01a3af4
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode_dark.png
new file mode 100644
index 000000000000..76db8ca3fa18
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/collapseNode_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/comboBox.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/comboBox.png
index 9d68cb3e08a4..14ff0f6b2d83 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/comboBox.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/comboBox.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/comboBox@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/comboBox@2x.png
new file mode 100644
index 000000000000..aa99643c7e28
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/comboBox@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/dataBindingWizard.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/dataBindingWizard.png
index d59fa997d617..6260b778177d 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/dataBindingWizard.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/dataBindingWizard.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/dataBindingWizard@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/dataBindingWizard@2x.png
new file mode 100644
index 000000000000..a424469e9716
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/dataBindingWizard@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell.png
index fd867049dcd6..3886a96f71c1 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell@2x.png
new file mode 100644
index 000000000000..ae4a4864b101
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell@2x_dark.png
new file mode 100644
index 000000000000..369b51d32850
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell_dark.png
new file mode 100644
index 000000000000..d6ba0552ce90
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/deleteCell_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag.png
index 89ba13f8294d..855b281bc066 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag@2x.png
new file mode 100644
index 000000000000..081d4c244686
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag@2x_dark.png
new file mode 100644
index 000000000000..164f94ebf4d0
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag_dark.png
new file mode 100644
index 000000000000..41e558235e48
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/drag_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/editorPane.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/editorPane.png
index b4b93e2c5331..858939f1aafe 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/editorPane.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/editorPane.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/editorPane@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/editorPane@2x.png
new file mode 100644
index 000000000000..94fab4a84300
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/editorPane@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode.png
index 7987865fcedc..f5841b8c0120 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode@2x.png
new file mode 100644
index 000000000000..c8fd9d05dade
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode@2x_dark.png
new file mode 100644
index 000000000000..2f6f09d464df
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode_dark.png
new file mode 100644
index 000000000000..0ee3911d6cd6
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/expandNode_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/formattedTextField.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/formattedTextField.png
index 7e4f36aa3d3d..2812d788246d 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/formattedTextField.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/formattedTextField.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/formattedTextField@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/formattedTextField@2x.png
new file mode 100644
index 000000000000..f770e176b9b2
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/formattedTextField@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer.png
index 9d1918ae481f..efe7705a4ff7 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer@2x.png
new file mode 100644
index 000000000000..73437f7f3ebf
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer@2x_dark.png
new file mode 100644
index 000000000000..27cab04c7473
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer_dark.png
new file mode 100644
index 000000000000..8113c52f15b2
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/hspacer_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft.png
index b2ef505d7407..6486608f153a 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft@2x.png
new file mode 100644
index 000000000000..ce6be755cd86
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft@2x_dark.png
new file mode 100644
index 000000000000..19ba81766669
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft_dark.png
new file mode 100644
index 000000000000..6f75a83756e5
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnLeft_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight.png
index c53241fb8614..368ab216a03f 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight@2x.png
new file mode 100644
index 000000000000..f603f4c7a150
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight@2x_dark.png
new file mode 100644
index 000000000000..8bf6bc561c79
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight_dark.png
new file mode 100644
index 000000000000..8945c5ae5304
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertColumnRight_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove.png
index 5540a2812367..a4f4f361cbe8 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove@2x.png
new file mode 100644
index 000000000000..6e47c352a9df
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove@2x_dark.png
new file mode 100644
index 000000000000..3b238aa3d334
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove_dark.png
new file mode 100644
index 000000000000..3e96d0a08335
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowAbove_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow.png
index 19b9cee788f6..060343026236 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow@2x.png
new file mode 100644
index 000000000000..722d8b6ad617
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow@2x_dark.png
new file mode 100644
index 000000000000..b79842689e7a
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow_dark.png
new file mode 100644
index 000000000000..46f64972d770
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/insertRowBelow_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression.png
index e9deac3fe29c..fdeee2402126 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression@2x.png
new file mode 100644
index 000000000000..dcaec401b0b7
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression@2x_dark.png
new file mode 100644
index 000000000000..308b3ae439de
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression_dark.png
new file mode 100644
index 000000000000..0578e41a793a
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/inspectionSuppression_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label.png
index 45bbab0830af..1dd5ff6b023e 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label@2x.png
new file mode 100644
index 000000000000..4550b5398ea7
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label@2x_dark.png
new file mode 100644
index 000000000000..3fdd054b42c3
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label_dark.png
new file mode 100644
index 000000000000..507e3fc7fc6c
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/label_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/list.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/list.png
index 91d79de1edd5..fb56fd9e479d 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/list.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/list.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/list@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/list@2x.png
new file mode 100644
index 000000000000..6dbf1d8b49ec
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/list@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener.png
index 4aed6ddaa523..2bae257605d3 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener@2x.png
new file mode 100644
index 000000000000..390ff4478b6f
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener@2x_dark.png
new file mode 100644
index 000000000000..04e5e573f514
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener_dark.png
new file mode 100644
index 000000000000..ebe58c12aea9
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/listener_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel.png
index 671e08fcfafa..a1a76588e4c4 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel@2x.png
new file mode 100644
index 000000000000..794583e830bb
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel@2x_dark.png
new file mode 100644
index 000000000000..c956cc5d33b1
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel_dark.png
new file mode 100644
index 000000000000..4a018896a1f5
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/panel_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/passwordField.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/passwordField.png
index 54c31be8c002..924dc8f0ed74 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/passwordField.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/passwordField.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/passwordField@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/passwordField@2x.png
new file mode 100644
index 000000000000..68a6fd49e330
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/passwordField@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar.png
index aa7c52214d3b..10325651a247 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar@2x.png
new file mode 100644
index 000000000000..3e3b04ce7d59
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar@2x_dark.png
new file mode 100644
index 000000000000..bcf5c4053aba
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar_dark.png
new file mode 100644
index 000000000000..7cbf601218f9
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/progressbar_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/radioButton.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/radioButton.png
index 710f4e10a3d6..b765b5427d5e 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/radioButton.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/radioButton.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/radioButton@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/radioButton@2x.png
new file mode 100644
index 000000000000..8a5fb46136f6
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/radioButton@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollPane.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollPane.png
index cf82df16adf7..98c1e167138e 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollPane.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollPane.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollPane@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollPane@2x.png
new file mode 100644
index 000000000000..a0424f27bf3c
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollPane@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollbar.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollbar.png
index 61f9d838d26d..712eb58a6621 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollbar.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollbar.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollbar@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollbar@2x.png
new file mode 100644
index 000000000000..6b9178f691a9
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/scrollbar@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator.png
index 7a7a57ff0ac1..6e31b3bc6070 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator@2x.png
new file mode 100644
index 000000000000..4e13c000bb93
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator@2x_dark.png
new file mode 100644
index 000000000000..ad38d12563cf
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator_dark.png
new file mode 100644
index 000000000000..c1287b7d468d
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/separator_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider.png
index 6f09484fc2ab..5254f7048d89 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider@2x.png
new file mode 100644
index 000000000000..aaf449f565a5
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider@2x_dark.png
new file mode 100644
index 000000000000..f03503fc5276
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider_dark.png
new file mode 100644
index 000000000000..c4678119162e
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/slider_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/spinner.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/spinner.png
index 453e59c12079..8aedf7d0ba2a 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/spinner.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/spinner.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/spinner@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/spinner@2x.png
new file mode 100644
index 000000000000..5174b3ab4583
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/spinner@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn.png
index 99dee675c5d1..f8923017a8c4 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn@2x.png
new file mode 100644
index 000000000000..34ac420413a6
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn@2x_dark.png
new file mode 100644
index 000000000000..e02b0ebfd63c
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn_dark.png
new file mode 100644
index 000000000000..40b1ec4c6340
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitColumn_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitPane.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitPane.png
index b8aa9e7759f7..b6c8bed77f81 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitPane.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitPane.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitPane@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitPane@2x.png
new file mode 100644
index 000000000000..3517fa928132
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitPane@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow.png
index 066335b1c110..fd8152ffab37 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow@2x.png
new file mode 100644
index 000000000000..9274f731aa7e
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow@2x_dark.png
new file mode 100644
index 000000000000..ac45196ea706
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow_dark.png
new file mode 100644
index 000000000000..6f562e2fa529
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/splitRow_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tabbedPane.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tabbedPane.png
index d5d250f22fc0..0f4f3783efb0 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tabbedPane.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tabbedPane.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tabbedPane@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tabbedPane@2x.png
new file mode 100644
index 000000000000..1dba51672d17
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tabbedPane@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/table.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/table.png
index 08c0ef2d7e66..8100081b405d 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/table.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/table.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/table@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/table@2x.png
new file mode 100644
index 000000000000..c6a2bfdcbfc9
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/table@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textArea.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textArea.png
index ee324ef13cd9..b1150e295de9 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textArea.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textArea.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textArea@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textArea@2x.png
new file mode 100644
index 000000000000..4953ee2e0212
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textArea@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField.png
index e4a35a86c2a7..8e0f3d67fad2 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField@2x.png
new file mode 100644
index 000000000000..d4d370d9c042
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField@2x_dark.png
new file mode 100644
index 000000000000..50c73d1d7564
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField_dark.png
new file mode 100644
index 000000000000..17b3b305f3cf
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textField_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textPane.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textPane.png
index 66cd2ea20528..2f9e9bf5367e 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textPane.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textPane.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textPane@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textPane@2x.png
new file mode 100644
index 000000000000..415db0dc203c
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/textPane@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner.png
index f20a7f19617f..2913c640bc34 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner@2x.png
new file mode 100644
index 000000000000..57692fbfb367
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner@2x_dark.png
new file mode 100644
index 000000000000..9114e9efc85b
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner_dark.png
new file mode 100644
index 000000000000..07cf1e179829
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolWindowUIDesigner_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbar.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbar.png
index 8281450f68e4..93be76122c35 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbar.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbar.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbar@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbar@2x.png
new file mode 100644
index 000000000000..3bc3a9f345e7
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbar@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator.png
index 16b34281e728..237dcaeb52c4 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator@2x.png
new file mode 100644
index 000000000000..f054d26a68aa
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator@2x_dark.png
new file mode 100644
index 000000000000..61a39baedeec
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator_dark.png
new file mode 100644
index 000000000000..65d760aad60f
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/toolbarSeparator_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree.png
index 4d3813bad039..e1b5bcece78b 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree@2x.png
new file mode 100644
index 000000000000..4a26f7af9adc
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree@2x_dark.png
new file mode 100644
index 000000000000..8c3ad52d1cb5
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree_dark.png
new file mode 100644
index 000000000000..90a124110da9
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/tree_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown-small.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown-small.png
index 8948a92fd765..000da55025d1 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown-small.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown-small.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown-small@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown-small@2x.png
new file mode 100644
index 000000000000..65d884da1049
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown-small@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown.png
index 81fe79306e3c..000da55025d1 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown@2x.png
new file mode 100644
index 000000000000..65d884da1049
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/unknown@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer.png
index ea3e315d9120..63e24d643977 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer.png
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer@2x.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer@2x.png
new file mode 100644
index 000000000000..fe7e2143700f
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer@2x.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer@2x_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer@2x_dark.png
new file mode 100644
index 000000000000..c434cde71e87
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer@2x_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer_dark.png b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer_dark.png
new file mode 100644
index 000000000000..6d5407f84949
--- /dev/null
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/icons/vspacer_dark.png
Binary files differ
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/PropertyInspectorTable.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/PropertyInspectorTable.java
index 22d95ba4d781..a711578b3f28 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/PropertyInspectorTable.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/PropertyInspectorTable.java
@@ -15,7 +15,7 @@
*/
package com.intellij.uiDesigner.propertyInspector;
-import com.intellij.codeInsight.daemon.impl.SeverityUtil;
+import com.intellij.codeInsight.daemon.impl.SeverityRegistrar;
import com.intellij.icons.AllIcons;
import com.intellij.ide.ui.LafManager;
import com.intellij.ide.ui.LafManagerListener;
@@ -1131,7 +1131,7 @@ public final class PropertyInspectorTable extends Table implements DataProvider{
Map<HighlightSeverity, SimpleTextAttributes> cache = modified ? myModifiedHighlightAttributes : myHighlightAttributes;
result = cache.get(severity);
if (result == null) {
- final TextAttributesKey attrKey = SeverityUtil.getSeverityRegistrar(myProject).getHighlightInfoTypeBySeverity(severity).getAttributesKey();
+ final TextAttributesKey attrKey = SeverityRegistrar.getSeverityRegistrar(myProject).getHighlightInfoTypeBySeverity(severity).getAttributesKey();
TextAttributes textAttrs = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(attrKey);
if (modified) {
textAttrs = textAttrs.clone();
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadContainer.java b/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadContainer.java
index 663dfc3a724b..78e386ce49b1 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadContainer.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadContainer.java
@@ -680,7 +680,7 @@ public class RadContainer extends RadComponent implements IContainer {
public RadAbstractGridLayoutManager getGridLayoutManager() {
if (!(myLayoutManager instanceof RadAbstractGridLayoutManager)) {
- throw new RuntimeException("Not a grid container");
+ throw new RuntimeException("Not a grid container: " + myLayoutManager);
}
return (RadAbstractGridLayoutManager)myLayoutManager;
}
diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/snapShooter/CreateSnapShotAction.java b/plugins/ui-designer/src/com/intellij/uiDesigner/snapShooter/CreateSnapShotAction.java
index aec774c713fc..e498ca80211f 100644
--- a/plugins/ui-designer/src/com/intellij/uiDesigner/snapShooter/CreateSnapShotAction.java
+++ b/plugins/ui-designer/src/com/intellij/uiDesigner/snapShooter/CreateSnapShotAction.java
@@ -115,7 +115,7 @@ public class CreateSnapShotAction extends AnAction {
boolean connected = false;
ApplicationConfigurationType cfgType = ApplicationConfigurationType.getInstance();
- RunnerAndConfigurationSettings[] racsi = RunManager.getInstance(project).getConfigurationSettings(cfgType);
+ List<RunnerAndConfigurationSettings> racsi = RunManager.getInstance(project).getConfigurationSettingsList(cfgType);
for(RunnerAndConfigurationSettings config: racsi) {
if (config.getConfiguration() instanceof ApplicationConfiguration) {
diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/XPathStringLiteralSelectioner.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/XPathStringLiteralSelectioner.java
index bb7218660f9e..a90237b5784c 100644
--- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/XPathStringLiteralSelectioner.java
+++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/XPathStringLiteralSelectioner.java
@@ -15,7 +15,7 @@
*/
package org.intellij.lang.xpath;
-import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandler;
+import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandlerBase;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.TextRange;
@@ -30,7 +30,7 @@ import java.util.List;
* Date: 08.10.2009
* Time: 21:06:04
*/
-public class XPathStringLiteralSelectioner implements ExtendWordSelectionHandler {
+public class XPathStringLiteralSelectioner extends ExtendWordSelectionHandlerBase {
public boolean canSelect(PsiElement e) {
ASTNode astNode = e.getNode();
return astNode != null &&
diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/quickfix/DownloadManager.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/quickfix/DownloadManager.java
index 10211674885b..fd064347c71f 100644
--- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/quickfix/DownloadManager.java
+++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/quickfix/DownloadManager.java
@@ -18,6 +18,8 @@ package org.intellij.lang.xpath.xslt.quickfix;
import com.intellij.javaee.ExternalResourceManager;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.PathManager;
+import com.intellij.openapi.application.Result;
+import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
@@ -26,7 +28,6 @@ import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
-import com.intellij.ui.GuiUtils;
import com.intellij.util.net.HttpConfigurable;
import com.intellij.util.net.NetUtils;
@@ -35,130 +36,149 @@ import java.lang.reflect.InvocationTargetException;
import java.net.URLConnection;
import java.util.Set;
-@SuppressWarnings({ "StringEquality" })
+@SuppressWarnings({"StringEquality"})
public abstract class DownloadManager {
- private static final ExternalResourceManager resourceManager = ExternalResourceManager.getInstance();
+ private static final ExternalResourceManager resourceManager = ExternalResourceManager.getInstance();
- private final Project myProject;
- private final ProgressIndicator myProgress;
- private final String myResourcePath;
+ private final Project myProject;
+ private final ProgressIndicator myProgress;
+ private final String myResourcePath;
- public DownloadManager(Project project, ProgressIndicator progress) {
- myProject = project;
- myProgress = progress;
+ public DownloadManager(Project project, ProgressIndicator progress) {
+ myProject = project;
+ myProgress = progress;
- myResourcePath = PathManager.getSystemPath() + File.separatorChar + "extResources";
- final File dir = new File(myResourcePath);
- dir.mkdirs();
- }
+ myResourcePath = PathManager.getSystemPath() + File.separatorChar + "extResources";
+ final File dir = new File(myResourcePath);
+ dir.mkdirs();
+ }
- public void fetch(String location) throws DownloadException {
- if (resourceManager.getResourceLocation(location) == location) {
- myProgress.setText("Downloading " + location);
- downloadAndRegister(location);
- }
+ public void fetch(String location) throws DownloadException {
+ if (resourceManager.getResourceLocation(location) == location) {
+ myProgress.setText("Downloading " + location);
+ downloadAndRegister(location);
}
+ }
- private void downloadAndRegister(final String location) throws DownloadException {
- final ExternalResourceManager resourceManager = ExternalResourceManager.getInstance();
-
- File file = null;
- try {
- final URLConnection urlConnection = HttpConfigurable.getInstance().openConnection(location);
- urlConnection.connect();
- final InputStream in = urlConnection.getInputStream();
+ private void downloadAndRegister(final String location) throws DownloadException {
+ final ExternalResourceManager resourceManager = ExternalResourceManager.getInstance();
- final OutputStream out;
- try {
- final int total = urlConnection.getContentLength();
+ File file = null;
+ try {
+ final URLConnection urlConnection = HttpConfigurable.getInstance().openConnection(location);
+ urlConnection.connect();
+ final InputStream in = urlConnection.getInputStream();
- final String name = Integer.toHexString(System.identityHashCode(this)) + "_" + Integer.toHexString(location.hashCode()) + "_" + location.substring(location.lastIndexOf('/') + 1);
- file = new File(myResourcePath, name.lastIndexOf('.') == -1 ? name + ".xml" : name);
- out = new FileOutputStream(file);
+ final OutputStream out;
+ try {
+ final int total = urlConnection.getContentLength();
- try {
- NetUtils.copyStreamContent(myProgress, in, out, total);
- }
- finally {
- out.close();
- }
- }
- finally {
- in.close();
- }
+ final String name = Integer.toHexString(System.identityHashCode(this)) +
+ "_" +
+ Integer.toHexString(location.hashCode()) +
+ "_" +
+ location.substring(location.lastIndexOf('/') + 1);
+ file = new File(myResourcePath, name.lastIndexOf('.') == -1 ? name + ".xml" : name);
+ out = new FileOutputStream(file);
- try {
- final File _file = file;
-
- //noinspection unchecked
- final Set<String>[] resourceDependencies = new Set[1];
- Runnable runnable = new Runnable() {
- public void run() {
- Runnable runnable = new Runnable() {
+ try {
+ NetUtils.copyStreamContent(myProgress, in, out, total);
+ }
+ finally {
+ out.close();
+ }
+ }
+ finally {
+ in.close();
+ }
+
+ try {
+ final File _file = file;
+
+ //noinspection unchecked
+ final Set<String>[] resourceDependencies = new Set[1];
+ new WriteAction() {
+ @Override
+ protected void run(Result result) throws Throwable {
+ final VirtualFile vf = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(_file);
+ if (vf != null) {
+ final PsiFile psiFile = PsiManager.getInstance(myProject).findFile(vf);
+ if (psiFile != null && isAccepted(psiFile)) {
+ resourceDependencies[0] = getResourceDependencies(psiFile);
+ resourceManager.addResource(location, _file.getAbsolutePath());
+ }
+ else {
+ ApplicationManager.getApplication().invokeLater(
+ new Runnable() {
+ @Override
public void run() {
- final VirtualFile vf = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(_file);
- if (vf != null) {
- final PsiFile psiFile = PsiManager.getInstance(myProject).findFile(vf);
- if (psiFile != null && isAccepted(psiFile)) {
- resourceDependencies[0] = getResourceDependencies(psiFile);
- resourceManager.addResource(location, _file.getAbsolutePath());
- }
- else {
- Messages.showErrorDialog(myProject, "Not a valid file: " + vf.getPresentableUrl(), "Download Problem");
- }
- }
+ Messages.showErrorDialog(myProject, "Not a valid file: " + vf.getPresentableUrl(), "Download Problem");
}
- };
- ApplicationManager.getApplication().runWriteAction(runnable);
- }
- };
- GuiUtils.invokeAndWait(runnable);
-
- if (resourceDependencies[0] != null) {
- for (String s : resourceDependencies[0]) {
- myProgress.checkCanceled();
- myProgress.setFraction(0);
- fetch(s);
- }
+ }, myProject.getDisposed());
}
- } catch (InterruptedException e) {
- // OK
- } catch (InvocationTargetException e) {
- final Throwable targetException = e.getTargetException();
- if (targetException instanceof RuntimeException) {
- throw (RuntimeException)targetException;
- } else if (targetException instanceof IOException) {
- throw (IOException)targetException;
- } else if (targetException instanceof InterruptedException) {
- // OK
- } else {
- Logger.getInstance(getClass().getName()).error(e);
- }
- }
- } catch (IOException e) {
- throw new DownloadException(location, e);
- } finally {
- if (file != null && resourceManager.getResourceLocation(location) == location) {
- // something went wrong. get rid of the file
- file.delete();
}
+ }
+ }.execute();
+
+ if (resourceDependencies[0] != null) {
+ for (String s : resourceDependencies[0]) {
+ myProgress.checkCanceled();
+ myProgress.setFraction(0);
+ fetch(s);
+ }
+ }
+ }
+ catch (Error err) {
+ Throwable e = err.getCause();
+ if (e instanceof InterruptedException) {
+ // OK
+ }
+ else if (e instanceof InvocationTargetException) {
+ final Throwable targetException = ((InvocationTargetException)e).getTargetException();
+ if (targetException instanceof RuntimeException) {
+ throw (RuntimeException)targetException;
+ }
+ else if (targetException instanceof IOException) {
+ throw (IOException)targetException;
+ }
+ else if (targetException instanceof InterruptedException) {
+ // OK
+ }
+ else {
+ Logger.getInstance(getClass().getName()).error(e);
+ }
}
+ else {
+ throw err;
+ }
+ }
+ }
+ catch (IOException e) {
+ throw new DownloadException(location, e);
}
+ finally {
+ if (file != null && resourceManager.getResourceLocation(location) == location) {
+ // something went wrong. get rid of the file
+ file.delete();
+ }
+ }
+ }
- protected abstract boolean isAccepted(PsiFile psiFile);
- protected abstract Set<String> getResourceDependencies(PsiFile psiFile);
+ protected abstract boolean isAccepted(PsiFile psiFile);
- public static class DownloadException extends IOException {
- private final String myLocation;
+ protected abstract Set<String> getResourceDependencies(PsiFile psiFile);
- public DownloadException(String location, IOException cause) {
- super();
- myLocation = location;
- initCause(cause);
- }
+ public static class DownloadException extends IOException {
+ private final String myLocation;
- public String getLocation() {
- return myLocation;
- }
+ public DownloadException(String location, IOException cause) {
+ super();
+ myLocation = location;
+ initCause(cause);
+ }
+
+ public String getLocation() {
+ return myLocation;
}
+ }
} \ No newline at end of file
diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltConfigurationProducer.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltConfigurationProducer.java
index ea392f083101..5d45ea057471 100644
--- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltConfigurationProducer.java
+++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltConfigurationProducer.java
@@ -34,6 +34,7 @@ import org.intellij.lang.xpath.xslt.XsltSupport;
import org.jetbrains.annotations.NotNull;
import java.io.File;
+import java.util.List;
public class XsltConfigurationProducer extends RuntimeConfigurationProducer{
private XmlFile myFile;
@@ -68,7 +69,7 @@ public class XsltConfigurationProducer extends RuntimeConfigurationProducer{
@Override
protected RunnerAndConfigurationSettings findExistingByElement(Location location,
- @NotNull RunnerAndConfigurationSettings[] existingConfigurations,
+ @NotNull List<RunnerAndConfigurationSettings> existingConfigurations,
ConfigurationContext context) {
final XmlFile file = PsiTreeUtil.getParentOfType(location.getPsiElement(), XmlFile.class, false);
if (file != null && file.isPhysical() && XsltSupport.isXsltFile(file)) {