From 73e121ce346672a6133c9bd2f624a7172373e2aa Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Thu, 21 Oct 2010 18:06:18 +0400 Subject: [PATCH 01/20] jdk->sdk rename refactoring --- .../compiler/ant/BuildPropertiesImpl.java | 2 +- .../execution/util/JreVersionDetector.java | 2 +- .../com/intellij/ide/impl/NewProjectUtil.java | 2 +- .../newProjectWizard/AddModuleWizard.java | 2 +- .../util/projectWizard/JdkChooserPanel.java | 4 +- .../ProjectJdkForModuleStep.java | 2 +- .../configuration/ProjectJdkConfigurable.java | 8 ++-- .../UIRootConfigurationAccessor.java | 2 +- .../projectRoot/JdkListConfigurable.java | 2 +- .../ProjectOpenProcessorBase.java | 2 +- .../analysis/IncreaseLanguageLevelFix.java | 2 +- .../ex/GlobalJavaInspectionContextImpl.java | 4 +- .../com/intellij/roots/InheritedJdkTest.java | 6 +-- .../com/intellij/roots/RootsChangedTest.java | 4 +- .../ide/util/projectWizard/WizardContext.java | 2 +- .../openapi/roots/ModuleRootModel.java | 4 +- .../openapi/roots/ProjectRootManager.java | 8 ++-- .../util/OrderEntryCellAppearanceUtils.java | 4 +- .../openapi/projectRoots/ex/PathUtilEx.java | 2 +- .../impl/SdkConfigurationUtil.java | 6 +-- .../impl/InheritedJdkOrderEntryImpl.java | 2 +- .../roots/impl/ProjectRootManagerImpl.java | 48 +++++++++---------- .../roots/impl/RootConfigurationAccessor.java | 4 +- .../projectRoot/ProjectSdksModel.java | 2 +- .../lang/ant/config/execution/PathUtilEx.java | 2 +- .../ant/config/impl/AntConfigurationImpl.java | 2 +- .../intellij/lang/ant/dom/AntDomProject.java | 2 +- .../lang/ant/psi/impl/AntFileImpl.java | 4 +- .../intellij/execution/junit/TestObject.java | 2 +- .../configuration/TestNGRunnableState.java | 2 +- .../xpath/xslt/run/XsltRunConfiguration.java | 2 +- 31 files changed, 71 insertions(+), 71 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/ant/BuildPropertiesImpl.java b/java/compiler/impl/src/com/intellij/compiler/ant/BuildPropertiesImpl.java index 80dae42cb5e6..c7e1a8d20a50 100644 --- a/java/compiler/impl/src/com/intellij/compiler/ant/BuildPropertiesImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/ant/BuildPropertiesImpl.java @@ -180,7 +180,7 @@ public class BuildPropertiesImpl extends BuildProperties { } } - final Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectJdk(); + final Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectSdk(); add(new Property(PROPERTY_PROJECT_JDK_HOME, projectJdk != null ? propertyRef(getJdkHomeProperty(projectJdk.getName())) : ""), 1); add(new Property(PROPERTY_PROJECT_JDK_BIN, projectJdk != null ? propertyRef(getJdkBinProperty(projectJdk.getName())) : "")); add(new Property(PROPERTY_PROJECT_JDK_CLASSPATH, projectJdk != null ? getJdkPathId(projectJdk.getName()) : "")); diff --git a/java/execution/impl/src/com/intellij/execution/util/JreVersionDetector.java b/java/execution/impl/src/com/intellij/execution/util/JreVersionDetector.java index 102cb438a332..feaa6a69c22c 100644 --- a/java/execution/impl/src/com/intellij/execution/util/JreVersionDetector.java +++ b/java/execution/impl/src/com/intellij/execution/util/JreVersionDetector.java @@ -49,7 +49,7 @@ public class JreVersionDetector { return isJre50(jdk); } - final Sdk projectJdk = ProjectRootManager.getInstance(configuration.getProject()).getProjectJdk(); + final Sdk projectJdk = ProjectRootManager.getInstance(configuration.getProject()).getProjectSdk(); return isJre50(projectJdk); } } diff --git a/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java b/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java index 3a55f74021bd..1288d2af9c68 100644 --- a/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java +++ b/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java @@ -177,7 +177,7 @@ public class NewProjectUtil { if (versionString == null) return; ProjectRootManagerEx rootManager = ProjectRootManagerEx.getInstanceEx(project); - rootManager.setProjectJdk(jdk); + rootManager.setProjectSdk(jdk); LanguageLevel level = LanguageLevelUtil.getDefaultLanguageLevel(versionString); LanguageLevelProjectExtension ext = LanguageLevelProjectExtension.getInstance(project); if (level.compareTo(ext.getLanguageLevel()) < 0) { diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddModuleWizard.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddModuleWizard.java index e0be57f7cafa..de335bac90a7 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddModuleWizard.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddModuleWizard.java @@ -301,7 +301,7 @@ public class AddModuleWizard extends AbstractWizard { return context.getProjectJdk(); } final Project project = context.getProject() == null ? ProjectManager.getInstance().getDefaultProject() : context.getProject(); - final Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectJdk(); + final Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectSdk(); if (projectJdk != null) { return projectJdk; } diff --git a/java/idea-ui/src/com/intellij/ide/util/projectWizard/JdkChooserPanel.java b/java/idea-ui/src/com/intellij/ide/util/projectWizard/JdkChooserPanel.java index 3fd85200e823..adcef1334736 100644 --- a/java/idea-ui/src/com/intellij/ide/util/projectWizard/JdkChooserPanel.java +++ b/java/idea-ui/src/com/intellij/ide/util/projectWizard/JdkChooserPanel.java @@ -223,14 +223,14 @@ public class JdkChooserPanel extends JPanel { } public static Sdk chooseAndSetJDK(final Project project) { - final Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectJdk(); + final Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectSdk(); final Sdk jdk = showDialog(project, ProjectBundle.message("module.libraries.target.jdk.select.title"), WindowManagerEx.getInstanceEx().getFrame(project), projectJdk); if (jdk == null) { return null; } ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { - ProjectRootManager.getInstance(project).setProjectJdk(jdk); + ProjectRootManager.getInstance(project).setProjectSdk(jdk); } }); return jdk; diff --git a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkForModuleStep.java b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkForModuleStep.java index 4681a04b372f..0b562dff41a0 100644 --- a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkForModuleStep.java +++ b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkForModuleStep.java @@ -149,7 +149,7 @@ public class ProjectJdkForModuleStep extends ModuleWizardStep { @Nullable private static Sdk getDefaultJdk() { Project defaultProject = ProjectManagerEx.getInstanceEx().getDefaultProject(); - return ProjectRootManagerEx.getInstanceEx(defaultProject).getProjectJdk(); + return ProjectRootManagerEx.getInstanceEx(defaultProject).getProjectSdk(); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdkConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdkConfigurable.java index 5567ef30be8d..f03f13b0b953 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdkConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdkConfigurable.java @@ -86,7 +86,7 @@ public class ProjectJdkConfigurable implements UnnamedConfigurable { myFreeze = true; final Sdk projectJdk = myJdksModel.getProjectSdk(); myCbProjectJdk.reloadModel(new JdkComboBox.NoneJdkComboBoxItem(), myProject); - final String sdkName = projectJdk == null ? ProjectRootManager.getInstance(myProject).getProjectJdkName() : projectJdk.getName(); + final String sdkName = projectJdk == null ? ProjectRootManager.getInstance(myProject).getProjectSdkName() : projectJdk.getName(); if (sdkName != null) { final Sdk jdk = myJdksModel.findSdk(sdkName); if (jdk != null) { @@ -135,18 +135,18 @@ public class ProjectJdkConfigurable implements UnnamedConfigurable { } public boolean isModified() { - final Sdk projectJdk = ProjectRootManager.getInstance(myProject).getProjectJdk(); + final Sdk projectJdk = ProjectRootManager.getInstance(myProject).getProjectSdk(); return !Comparing.equal(projectJdk, getSelectedProjectJdk()); } public void apply() throws ConfigurationException { - ProjectRootManager.getInstance(myProject).setProjectJdk(getSelectedProjectJdk()); + ProjectRootManager.getInstance(myProject).setProjectSdk(getSelectedProjectJdk()); } public void reset() { reloadModel(); - final String sdkName = ProjectRootManager.getInstance(myProject).getProjectJdkName(); + final String sdkName = ProjectRootManager.getInstance(myProject).getProjectSdkName(); if (sdkName != null) { final Sdk jdk = myJdksModel.findSdk(sdkName); if (jdk != null) { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/UIRootConfigurationAccessor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/UIRootConfigurationAccessor.java index 54ea7528ab27..859119b9cf22 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/UIRootConfigurationAccessor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/UIRootConfigurationAccessor.java @@ -72,7 +72,7 @@ public class UIRootConfigurationAccessor extends RootConfigurationAccessor { @Nullable public String getProjectSdkName(final Project project) { - final String projectJdkName = ProjectRootManager.getInstance(project).getProjectJdkName(); + final String projectJdkName = ProjectRootManager.getInstance(project).getProjectSdkName(); final Sdk projectJdk = getProjectSdk(project); if (projectJdk != null) { return projectJdk.getName(); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkListConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkListConfigurable.java index 86b664d45b3d..ab2fc0aaca2d 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkListConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkListConfigurable.java @@ -168,7 +168,7 @@ public class JdkListConfigurable extends BaseStructureConfigurable { } if (myJdksTreeModel.isModified() || modifiedJdks) myJdksTreeModel.apply(this); - myJdksTreeModel.setProjectSdk(ProjectRootManager.getInstance(myProject).getProjectJdk()); + myJdksTreeModel.setProjectSdk(ProjectRootManager.getInstance(myProject).getProjectSdk()); } public boolean isModified() { diff --git a/java/idea-ui/src/com/intellij/projectImport/ProjectOpenProcessorBase.java b/java/idea-ui/src/com/intellij/projectImport/ProjectOpenProcessorBase.java index 0959dab65992..78dcfe8985fa 100644 --- a/java/idea-ui/src/com/intellij/projectImport/ProjectOpenProcessorBase.java +++ b/java/idea-ui/src/com/intellij/projectImport/ProjectOpenProcessorBase.java @@ -124,7 +124,7 @@ public abstract class ProjectOpenProcessorBase extends ProjectOpenProcessor { wizardContext.setProjectFileDirectory(virtualFile.getParent().getPath()); Project defaultProject = ProjectManager.getInstance().getDefaultProject(); - Sdk jdk = ProjectRootManager.getInstance(defaultProject).getProjectJdk(); + Sdk jdk = ProjectRootManager.getInstance(defaultProject).getProjectSdk(); if (jdk == null) { jdk = ProjectJdkTable.getInstance().findMostRecentSdkOfType(JavaSdk.getInstance()); } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/IncreaseLanguageLevelFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/IncreaseLanguageLevelFix.java index 66553f60c997..9cf11d9e68c3 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/IncreaseLanguageLevelFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/IncreaseLanguageLevelFix.java @@ -110,7 +110,7 @@ public class IncreaseLanguageLevelFix implements IntentionAction { @Nullable private static Sdk getRelevantJdk(final Project project, @Nullable Module module) { - Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectJdk(); + Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectSdk(); Sdk moduleJdk = module == null ? null : ModuleRootManager.getInstance(module).getSdk(); return moduleJdk == null ? projectJdk : moduleJdk; } diff --git a/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java b/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java index d48f6da93786..c739d62cbf07 100644 --- a/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java @@ -120,7 +120,7 @@ public class GlobalJavaInspectionContextImpl extends GlobalJavaInspectionContext if (isBadSdk(project, modules)) { System.err.println(InspectionsBundle.message("inspection.no.jdk.error.message")); System.err.println( - InspectionsBundle.message("offline.inspections.jdk.not.found", ProjectRootManager.getInstance(project).getProjectJdkName())); + InspectionsBundle.message("offline.inspections.jdk.not.found", ProjectRootManager.getInstance(project).getProjectSdkName())); return false; } for (Module module : modules) { @@ -152,7 +152,7 @@ public class GlobalJavaInspectionContextImpl extends GlobalJavaInspectionContext private static boolean isBadSdk(final Project project, final Module[] modules) { boolean anyModuleAcceptsSdk = false; boolean anyModuleUsesProjectSdk = false; - Sdk projectSdk = ProjectRootManager.getInstance(project).getProjectJdk(); + Sdk projectSdk = ProjectRootManager.getInstance(project).getProjectSdk(); for (Module module : modules) { if (ModuleRootManager.getInstance(module).isSdkInherited()) { anyModuleUsesProjectSdk = true; diff --git a/java/java-tests/testSrc/com/intellij/roots/InheritedJdkTest.java b/java/java-tests/testSrc/com/intellij/roots/InheritedJdkTest.java index 9f5b1ec53efc..06b4794a65ac 100644 --- a/java/java-tests/testSrc/com/intellij/roots/InheritedJdkTest.java +++ b/java/java-tests/testSrc/com/intellij/roots/InheritedJdkTest.java @@ -34,7 +34,7 @@ public class InheritedJdkTest extends ModuleTestCase { @Override public void run() { final ProjectRootManagerEx rootManagerEx = ProjectRootManagerEx.getInstanceEx(myProject); - rootManagerEx.setProjectJdkName(jdk.getName()); + rootManagerEx.setProjectSdkName(jdk.getName()); final ModifiableRootModel rootModel = rootManager.getModifiableModel(); rootModel.inheritSdk(); rootModel.commit(); @@ -102,7 +102,7 @@ public class InheritedJdkTest extends ModuleTestCase { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - projectRootManager.setProjectJdk(mockJdk); + projectRootManager.setProjectSdk(mockJdk); } }); @@ -112,7 +112,7 @@ public class InheritedJdkTest extends ModuleTestCase { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - projectRootManager.setProjectJdkName("jdk1"); + projectRootManager.setProjectSdkName("jdk1"); } }); diff --git a/java/java-tests/testSrc/com/intellij/roots/RootsChangedTest.java b/java/java-tests/testSrc/com/intellij/roots/RootsChangedTest.java index 2fe2009ee2f8..51b728df3e6c 100644 --- a/java/java-tests/testSrc/com/intellij/roots/RootsChangedTest.java +++ b/java/java-tests/testSrc/com/intellij/roots/RootsChangedTest.java @@ -99,7 +99,7 @@ public class RootsChangedTest extends ModuleTestCase { ProjectJdkTable.getInstance().addJdk(jdk); assertEventsCount(0); - ProjectRootManager.getInstance(myProject).setProjectJdk(jdkBBB); + ProjectRootManager.getInstance(myProject).setProjectSdk(jdkBBB); assertEventsCount(0); final ModifiableRootModel rootModelA = ModuleRootManager.getInstance(moduleA).getModifiableModel(); @@ -109,7 +109,7 @@ public class RootsChangedTest extends ModuleTestCase { ProjectRootManager.getInstance(myProject).multiCommit(new ModifiableRootModel[]{rootModelA, rootModelB}); assertEventsCount(1); - ProjectRootManager.getInstance(myProject).setProjectJdk(jdk); + ProjectRootManager.getInstance(myProject).setProjectSdk(jdk); assertEventsCount(1); final SdkModificator sdkModificator = jdk.getSdkModificator(); diff --git a/platform/lang-api/src/com/intellij/ide/util/projectWizard/WizardContext.java b/platform/lang-api/src/com/intellij/ide/util/projectWizard/WizardContext.java index 84061770853a..e5daad1340c0 100644 --- a/platform/lang-api/src/com/intellij/ide/util/projectWizard/WizardContext.java +++ b/platform/lang-api/src/com/intellij/ide/util/projectWizard/WizardContext.java @@ -56,7 +56,7 @@ public class WizardContext { public WizardContext(Project project) { myProject = project; if (myProject != null){ - myProjectJdk = ProjectRootManager.getInstance(myProject).getProjectJdk(); + myProjectJdk = ProjectRootManager.getInstance(myProject).getProjectSdk(); } } diff --git a/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootModel.java b/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootModel.java index 956330b4a056..ba8b609dacad 100644 --- a/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootModel.java +++ b/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootModel.java @@ -65,8 +65,8 @@ public interface ModuleRootModel { * Returns true if JDK for this module is inherited from a project. * * @return true if the JDK is inherited, false otherwise - * @see ProjectRootManager#getProjectJdk() - * @see ProjectRootManager#setProjectJdk(com.intellij.openapi.projectRoots.Sdk) + * @see ProjectRootManager#getProjectSdk() + * @see ProjectRootManager#setProjectSdk(com.intellij.openapi.projectRoots.Sdk) */ boolean isSdkInherited(); diff --git a/platform/lang-api/src/com/intellij/openapi/roots/ProjectRootManager.java b/platform/lang-api/src/com/intellij/openapi/roots/ProjectRootManager.java index 61349d15b38f..4021f63a481b 100644 --- a/platform/lang-api/src/com/intellij/openapi/roots/ProjectRootManager.java +++ b/platform/lang-api/src/com/intellij/openapi/roots/ProjectRootManager.java @@ -124,28 +124,28 @@ public abstract class ProjectRootManager implements ModificationTracker { * to any existing JDK instance. */ @Nullable - public abstract Sdk getProjectJdk(); + public abstract Sdk getProjectSdk(); /** * Returns the name of the JDK selected for the project. * * @return the JDK name. */ - public abstract String getProjectJdkName(); + public abstract String getProjectSdkName(); /** * Sets the JDK to be used for the project. * * @param jdk the JDK instance. */ - public abstract void setProjectJdk(@Nullable Sdk jdk); + public abstract void setProjectSdk(@Nullable Sdk jdk); /** * Sets the name of the JDK to be used for the project. * * @param name the name of the JDK. */ - public abstract void setProjectJdkName(String name); + public abstract void setProjectSdkName(String name); /** * Commits the change to the lists of roots for the specified modules. diff --git a/platform/lang-api/src/com/intellij/openapi/roots/ui/util/OrderEntryCellAppearanceUtils.java b/platform/lang-api/src/com/intellij/openapi/roots/ui/util/OrderEntryCellAppearanceUtils.java index a59c95fe9b36..37d4766a6c2a 100644 --- a/platform/lang-api/src/com/intellij/openapi/roots/ui/util/OrderEntryCellAppearanceUtils.java +++ b/platform/lang-api/src/com/intellij/openapi/roots/ui/util/OrderEntryCellAppearanceUtils.java @@ -177,14 +177,14 @@ public class OrderEntryCellAppearanceUtils { public static CellAppearance forProjectJdk(final Project project) { final ProjectRootManager projectRootManager = ProjectRootManager.getInstance(project); - final Sdk projectJdk = projectRootManager.getProjectJdk(); + final Sdk projectJdk = projectRootManager.getProjectSdk(); final CellAppearance appearance; if (projectJdk != null) { appearance = forJdk(projectJdk, false, false); } else { // probably invalid JDK - final String projectJdkName = projectRootManager.getProjectJdkName(); + final String projectJdkName = projectRootManager.getProjectSdkName(); if (projectJdkName != null) { appearance = SimpleTextCellAppearance.invalid(ProjectBundle.message("jdk.combo.box.invalid.item", projectJdkName), CellAppearanceUtils.INVALID_ICON); diff --git a/platform/lang-impl/src/com/intellij/openapi/projectRoots/ex/PathUtilEx.java b/platform/lang-impl/src/com/intellij/openapi/projectRoots/ex/PathUtilEx.java index 3d6a84fc9589..c883b5ddfd87 100644 --- a/platform/lang-impl/src/com/intellij/openapi/projectRoots/ex/PathUtilEx.java +++ b/platform/lang-impl/src/com/intellij/openapi/projectRoots/ex/PathUtilEx.java @@ -55,7 +55,7 @@ public class PathUtilEx { } public static Sdk chooseJdk(Project project, Collection modules) { - Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectJdk(); + Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectSdk(); if (projectJdk != null) { return projectJdk; } diff --git a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/SdkConfigurationUtil.java b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/SdkConfigurationUtil.java index 3a4b490bc5c4..a775bf1399e2 100644 --- a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/SdkConfigurationUtil.java +++ b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/SdkConfigurationUtil.java @@ -159,7 +159,7 @@ public class SdkConfigurationUtil { public static void setDirectoryProjectSdk(final Project project, final Sdk sdk) { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { - ProjectRootManager.getInstance(project).setProjectJdk(sdk); + ProjectRootManager.getInstance(project).setProjectSdk(sdk); final Module[] modules = ModuleManager.getInstance(project).getModules(); if (modules.length > 0) { final ModifiableRootModel model = ModuleRootManager.getInstance(modules[0]).getModifiableModel(); @@ -171,7 +171,7 @@ public class SdkConfigurationUtil { } public static void configureDirectoryProjectSdk(final Project project, final SdkType... sdkTypes) { - Sdk existingSdk = ProjectRootManager.getInstance(project).getProjectJdk(); + Sdk existingSdk = ProjectRootManager.getInstance(project).getProjectSdk(); if (existingSdk != null && ArrayUtil.contains(existingSdk.getSdkType(), sdkTypes)) { return; } @@ -185,7 +185,7 @@ public class SdkConfigurationUtil { @Nullable public static Sdk findOrCreateSdk(final SdkType... sdkTypes) { final Project defaultProject = ProjectManager.getInstance().getDefaultProject(); - final Sdk sdk = ProjectRootManager.getInstance(defaultProject).getProjectJdk(); + final Sdk sdk = ProjectRootManager.getInstance(defaultProject).getProjectSdk(); if (sdk != null) { for (SdkType type : sdkTypes) { if (sdk.getSdkType() == type) { diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/InheritedJdkOrderEntryImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/InheritedJdkOrderEntryImpl.java index be03ff5ca38b..05f8becf83ca 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/InheritedJdkOrderEntryImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/InheritedJdkOrderEntryImpl.java @@ -89,7 +89,7 @@ public class InheritedJdkOrderEntryImpl extends LibraryOrderEntryBaseImpl implem } protected RootProvider getRootProvider() { - final Sdk projectJdk = myProjectRootManagerImpl.getProjectJdk(); + final Sdk projectJdk = myProjectRootManagerImpl.getProjectSdk(); return projectJdk == null ? null : projectJdk.getRootProvider(); } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerImpl.java index 091e451f5dd1..67425f598591 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerImpl.java @@ -82,8 +82,8 @@ public class ProjectRootManagerImpl extends ProjectRootManagerEx implements Proj private AppListener myApplicationListener; - private String myProjectJdkName; - private String myProjectJdkType; + private String myProjectSdkName; + private String myProjectSdkType; private final List myRootsChangeUpdaters = new ArrayList(); private final List myRefreshCacheUpdaters = new ArrayList(); @@ -327,28 +327,28 @@ public class ProjectRootManagerImpl extends ProjectRootManagerEx implements Proj return VfsUtil.toVirtualFileArray(result); } - public Sdk getProjectJdk() { - if (myProjectJdkName != null) { - return ProjectJdkTable.getInstance().findJdk(myProjectJdkName, myProjectJdkType); + public Sdk getProjectSdk() { + if (myProjectSdkName != null) { + return ProjectJdkTable.getInstance().findJdk(myProjectSdkName, myProjectSdkType); } else { return null; } } - public String getProjectJdkName() { - return myProjectJdkName; + public String getProjectSdkName() { + return myProjectSdkName; } - public void setProjectJdk(Sdk projectJdk) { + public void setProjectSdk(Sdk projectSdk) { ApplicationManager.getApplication().assertWriteAccessAllowed(); - if (projectJdk != null) { - myProjectJdkName = projectJdk.getName(); - myProjectJdkType = projectJdk.getSdkType().getName(); + if (projectSdk != null) { + myProjectSdkName = projectSdk.getName(); + myProjectSdkType = projectSdk.getSdkType().getName(); } else { - myProjectJdkName = null; - myProjectJdkType = null; + myProjectSdkName = null; + myProjectSdkType = null; } mergeRootsChangesDuring(new Runnable() { public void run() { @@ -357,9 +357,9 @@ public class ProjectRootManagerImpl extends ProjectRootManagerEx implements Proj }); } - public void setProjectJdkName(String name) { + public void setProjectSdkName(String name) { ApplicationManager.getApplication().assertWriteAccessAllowed(); - myProjectJdkName = name; + myProjectSdkName = name; mergeRootsChangesDuring(new Runnable() { public void run() { @@ -409,8 +409,8 @@ public class ProjectRootManagerImpl extends ProjectRootManagerEx implements Proj for (ProjectExtension extension : Extensions.getExtensions(ProjectExtension.EP_NAME, myProject)) { extension.readExternal(element); } - myProjectJdkName = element.getAttributeValue(PROJECT_JDK_NAME_ATTR); - myProjectJdkType = element.getAttributeValue(PROJECT_JDK_TYPE_ATTR); + myProjectSdkName = element.getAttributeValue(PROJECT_JDK_NAME_ATTR); + myProjectSdkType = element.getAttributeValue(PROJECT_JDK_TYPE_ATTR); } public void writeExternal(Element element) throws WriteExternalException { @@ -418,11 +418,11 @@ public class ProjectRootManagerImpl extends ProjectRootManagerEx implements Proj for (ProjectExtension extension : Extensions.getExtensions(ProjectExtension.EP_NAME, myProject)) { extension.writeExternal(element); } - if (myProjectJdkName != null) { - element.setAttribute(PROJECT_JDK_NAME_ATTR, myProjectJdkName); + if (myProjectSdkName != null) { + element.setAttribute(PROJECT_JDK_NAME_ATTR, myProjectSdkName); } - if (myProjectJdkType != null) { - element.setAttribute(PROJECT_JDK_TYPE_ATTR, myProjectJdkType); + if (myProjectSdkType != null) { + element.setAttribute(PROJECT_JDK_TYPE_ATTR, myProjectSdkType); } } @@ -946,11 +946,11 @@ public class ProjectRootManagerImpl extends ProjectRootManagerEx implements Proj myDispatcher.getMulticaster().jdkNameChanged(jdk, previousName); } }); - String currentName = getProjectJdkName(); + String currentName = getProjectSdkName(); if (previousName != null && previousName.equals(currentName)) { // if already had jdk name and that name was the name of the jdk just changed - myProjectJdkName = jdk.getName(); - myProjectJdkType = jdk.getSdkType().getName(); + myProjectSdkName = jdk.getName(); + myProjectSdkType = jdk.getSdkType().getName(); } } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/RootConfigurationAccessor.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/RootConfigurationAccessor.java index ab33bd5434a8..3800dc91a028 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/RootConfigurationAccessor.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/RootConfigurationAccessor.java @@ -42,11 +42,11 @@ public class RootConfigurationAccessor { } public Sdk getProjectSdk(Project project) { - return ProjectRootManager.getInstance(project).getProjectJdk(); + return ProjectRootManager.getInstance(project).getProjectSdk(); } @Nullable public String getProjectSdkName(final Project project) { - return ProjectRootManager.getInstance(project).getProjectJdkName(); + return ProjectRootManager.getInstance(project).getProjectSdkName(); } } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java index 4171a12890e4..d128170b3db3 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java @@ -91,7 +91,7 @@ public class ProjectSdksModel implements SdkModel { //can't be } } - myProjectSdk = findSdk(ProjectRootManager.getInstance(project).getProjectJdkName()); + myProjectSdk = findSdk(ProjectRootManager.getInstance(project).getProjectSdkName()); myModified = false; myInitialized = true; } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/execution/PathUtilEx.java b/plugins/ant/src/com/intellij/lang/ant/config/execution/PathUtilEx.java index 163d9bd59488..6b901a54371b 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/execution/PathUtilEx.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/execution/PathUtilEx.java @@ -75,7 +75,7 @@ public class PathUtilEx { } public static Sdk chooseJdk(Project project, Collection modules) { - Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectJdk(); + Sdk projectJdk = ProjectRootManager.getInstance(project).getProjectSdk(); if (projectJdk != null) { return projectJdk; } 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 40be821385cf..789e548f7743 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 @@ -94,7 +94,7 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis public String get(final AbstractPropertyContainer container) { if (!container.hasProperty(this)) return null; AntConfiguration antConfiguration = AntConfigurationImpl.INSTANCE.get(container); - return ProjectRootManager.getInstance(antConfiguration.getProject()).getProjectJdkName(); + return ProjectRootManager.getInstance(antConfiguration.getProject()).getProjectSdkName(); } public String copy(final String jdkName) { diff --git a/plugins/ant/src/com/intellij/lang/ant/dom/AntDomProject.java b/plugins/ant/src/com/intellij/lang/ant/dom/AntDomProject.java index e2cf4a1f6e3f..0939e404de2f 100644 --- a/plugins/ant/src/com/intellij/lang/ant/dom/AntDomProject.java +++ b/plugins/ant/src/com/intellij/lang/ant/dom/AntDomProject.java @@ -168,7 +168,7 @@ public abstract class AntDomProject extends AntDomNamedElement implements Proper return ProjectJdkTable.getInstance().findJdk(jdkName); } } - return ProjectRootManager.getInstance(tag.getProject()).getProjectJdk(); + return ProjectRootManager.getInstance(tag.getProject()).getProjectSdk(); } @NotNull diff --git a/plugins/ant/src/com/intellij/lang/ant/psi/impl/AntFileImpl.java b/plugins/ant/src/com/intellij/lang/ant/psi/impl/AntFileImpl.java index f0d1f9e7df88..c0ccc59e54b0 100644 --- a/plugins/ant/src/com/intellij/lang/ant/psi/impl/AntFileImpl.java +++ b/plugins/ant/src/com/intellij/lang/ant/psi/impl/AntFileImpl.java @@ -346,7 +346,7 @@ public class AntFileImpl extends LightPsiFileBase implements AntFile { public Sdk getTargetJdk() { final AntBuildFileImpl buildFile = (AntBuildFileImpl)getSourceElement().getCopyableUserData(AntBuildFile.ANT_BUILD_FILE_KEY); if (buildFile == null) { - return ProjectRootManager.getInstance(getProject()).getProjectJdk(); + return ProjectRootManager.getInstance(getProject()).getProjectSdk(); } String jdkName = AntBuildFileImpl.CUSTOM_JDK_NAME.get(buildFile.getAllOptions()); @@ -356,7 +356,7 @@ public class AntFileImpl extends LightPsiFileBase implements AntFile { if (jdkName != null && jdkName.length() > 0) { return ProjectJdkTable.getInstance().findJdk(jdkName); } - return ProjectRootManager.getInstance(getProject()).getProjectJdk(); + return ProjectRootManager.getInstance(getProject()).getProjectSdk(); } @Nullable diff --git a/plugins/junit/src/com/intellij/execution/junit/TestObject.java b/plugins/junit/src/com/intellij/execution/junit/TestObject.java index 870794475474..6b0782e07539 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestObject.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestObject.java @@ -199,7 +199,7 @@ public abstract class TestObject implements JavaCommandLine { if (myJavaParameters.getJdk() == null){ myJavaParameters.setJdk(module != null ? ModuleRootManager.getInstance(module).getSdk() - : ProjectRootManager.getInstance(myProject).getProjectJdk()); + : ProjectRootManager.getInstance(myProject).getProjectSdk()); } myJavaParameters.getClassPath().add(JavaSdkUtil.getIdeaRtJarPath()); diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java index 999752289ea8..270004471a0d 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java @@ -237,7 +237,7 @@ public class TestNGRunnableState extends JavaCommandLineState { .getPath());//todo !do not hard code lib name! // Configure rest of jars JavaParametersUtil.configureConfiguration(javaParameters, config); - Sdk jdk = module == null ? ProjectRootManager.getInstance(project).getProjectJdk() : ModuleRootManager.getInstance(module).getSdk(); + Sdk jdk = module == null ? ProjectRootManager.getInstance(project).getProjectSdk() : ModuleRootManager.getInstance(module).getSdk(); javaParameters.setJdk(jdk); final Object[] patchers = Extensions.getExtensions(ExtensionPoints.JUNIT_PATCHER); for (Object patcher : patchers) { diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfiguration.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfiguration.java index cf418924b5cd..528be4a3c2c9 100644 --- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfiguration.java +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfiguration.java @@ -470,7 +470,7 @@ public final class XsltRunConfiguration extends RunConfigurationBase implements jdk = ModuleRootManager.getInstance(module).getSdk(); } if (jdk == null) { - jdk = ProjectRootManager.getInstance(getProject()).getProjectJdk(); + jdk = ProjectRootManager.getInstance(getProject()).getProjectSdk(); } return jdk; } From 6e5c926a7c289116d39fed6bad0e28be74a1dd0d Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 21 Oct 2010 18:21:55 +0400 Subject: [PATCH 02/20] Git executable: fixed getGitExecutable() (according to ConfigurableModifiedTest) --- .../git4idea/src/git4idea/config/GitVcsApplicationSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/git4idea/src/git4idea/config/GitVcsApplicationSettings.java b/plugins/git4idea/src/git4idea/config/GitVcsApplicationSettings.java index 964589350565..38af49516670 100644 --- a/plugins/git4idea/src/git4idea/config/GitVcsApplicationSettings.java +++ b/plugins/git4idea/src/git4idea/config/GitVcsApplicationSettings.java @@ -103,7 +103,7 @@ public class GitVcsApplicationSettings implements PersistentStateComponent Date: Thu, 21 Oct 2010 13:07:29 +0400 Subject: [PATCH 03/20] tip for search in settings (IDEA-60097) --- resources-en/src/tips/SearchInSettings.html | 13 +++++++++++++ resources-en/src/tips/images/search_settings.png | Bin 0 -> 7038 bytes resources-en/src/tips/tips.xml | 1 + 3 files changed, 14 insertions(+) create mode 100644 resources-en/src/tips/SearchInSettings.html create mode 100644 resources-en/src/tips/images/search_settings.png diff --git a/resources-en/src/tips/SearchInSettings.html b/resources-en/src/tips/SearchInSettings.html new file mode 100644 index 000000000000..2858bdfdc42e --- /dev/null +++ b/resources-en/src/tips/SearchInSettings.html @@ -0,0 +1,13 @@ + + + + + + +
You can quickly find a setting you need in the Settings dialog, without browsing through the numerous options. +Just type some characters that to your opinion exist in the option description, and the list of settings will reduce to the +matching ones. Select the desired entry, and see the setting that contains the entered characters highlighted: +

+
+ + diff --git a/resources-en/src/tips/images/search_settings.png b/resources-en/src/tips/images/search_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..a689f1452052f6a950e1af5e4db43bc3040d326f GIT binary patch literal 7038 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 I_bBdv01x?qC;$Ke literal 0 HcmV?d00001 diff --git a/resources-en/src/tips/tips.xml b/resources-en/src/tips/tips.xml index f4463faadd44..6d3a222eba79 100644 --- a/resources-en/src/tips/tips.xml +++ b/resources-en/src/tips/tips.xml @@ -84,6 +84,7 @@ + From 868f64f185abafd65cdc6161112195c8b3eb3009 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 21 Oct 2010 13:19:13 +0400 Subject: [PATCH 04/20] move to correct place, sorry --- .../src/tips/SearchInSettings.html | 2 +- .../src/tips/images/search_settings.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename {resources-en => platform/platform-resources-en}/src/tips/SearchInSettings.html (84%) rename {resources-en => platform/platform-resources-en}/src/tips/images/search_settings.png (100%) diff --git a/resources-en/src/tips/SearchInSettings.html b/platform/platform-resources-en/src/tips/SearchInSettings.html similarity index 84% rename from resources-en/src/tips/SearchInSettings.html rename to platform/platform-resources-en/src/tips/SearchInSettings.html index 2858bdfdc42e..b9a158bd277a 100644 --- a/resources-en/src/tips/SearchInSettings.html +++ b/platform/platform-resources-en/src/tips/SearchInSettings.html @@ -5,7 +5,7 @@ You can quickly find a setting you need in the Settings dialog, without browsing through the numerous options. Just type some characters that to your opinion exist in the option description, and the list of settings will reduce to the matching ones. Select the desired entry, and see the setting that contains the entered characters highlighted: -

+

diff --git a/resources-en/src/tips/images/search_settings.png b/platform/platform-resources-en/src/tips/images/search_settings.png similarity index 100% rename from resources-en/src/tips/images/search_settings.png rename to platform/platform-resources-en/src/tips/images/search_settings.png From cd47af72e36682160729fd021e0d1d31f96af24c Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 21 Oct 2010 13:20:05 +0400 Subject: [PATCH 05/20] tip image updated (IDEA-59588) --- .../src/tips/images/issueNavigation1.png | Bin 13025 -> 24459 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/platform/platform-resources-en/src/tips/images/issueNavigation1.png b/platform/platform-resources-en/src/tips/images/issueNavigation1.png index 9c53dccfc9819d1aae7b1ebe5fa0c44c42c0ec9f..605d9acad17a556d56bc2db9286bd654b72359d5 100644 GIT binary patch literal 24459 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 From 944119af01616b7377613fac55eb51399da1b7e8 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 21 Oct 2010 13:30:42 +0400 Subject: [PATCH 06/20] use GeneralCommandLine for running external editor of images (IDEA-19808) --- images/src/META-INF/ImagesPlugin.xml | 2 +- .../images/actions/EditExternallyAction.java | 124 ++++++++++++++++++ .../images/actions/EditExternalyAction.java | 123 ----------------- 3 files changed, 125 insertions(+), 124 deletions(-) create mode 100644 images/src/org/intellij/images/actions/EditExternallyAction.java delete mode 100644 images/src/org/intellij/images/actions/EditExternalyAction.java diff --git a/images/src/META-INF/ImagesPlugin.xml b/images/src/META-INF/ImagesPlugin.xml index 8ff4e61b7bea..989297b32af5 100644 --- a/images/src/META-INF/ImagesPlugin.xml +++ b/images/src/META-INF/ImagesPlugin.xml @@ -27,7 +27,7 @@ - diff --git a/images/src/org/intellij/images/actions/EditExternallyAction.java b/images/src/org/intellij/images/actions/EditExternallyAction.java new file mode 100644 index 000000000000..795cd0ba873e --- /dev/null +++ b/images/src/org/intellij/images/actions/EditExternallyAction.java @@ -0,0 +1,124 @@ +/* + * Copyright 2000-2009 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.intellij.images.actions; + +import com.intellij.execution.ExecutionException; +import com.intellij.execution.configurations.GeneralCommandLine; +import com.intellij.openapi.actionSystem.ActionPlaces; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.util.SystemInfo; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.EnvironmentUtil; +import org.intellij.images.ImagesBundle; +import org.intellij.images.fileTypes.ImageFileTypeManager; +import org.intellij.images.options.Options; +import org.intellij.images.options.OptionsManager; +import org.intellij.images.options.impl.OptionsConfigurabe; + +import java.io.File; +import java.util.Map; +import java.util.Set; + +/** + * Open image file externally. + * + * @author Alexey Efimov + */ +public final class EditExternallyAction extends AnAction { + public void actionPerformed(AnActionEvent e) { + Project project = e.getData(PlatformDataKeys.PROJECT); + VirtualFile[] files = e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY); + Options options = OptionsManager.getInstance().getOptions(); + String executablePath = options.getExternalEditorOptions().getExecutablePath(); + if (StringUtil.isEmpty(executablePath)) { + Messages.showErrorDialog(project, + ImagesBundle.message("error.empty.external.editor.path"), + ImagesBundle.message("error.title.empty.external.editor.path")); + OptionsConfigurabe.show(project); + } + else { + if (files != null) { + Map env = EnvironmentUtil.getEnviromentProperties(); + Set varNames = env.keySet(); + for (String varName : varNames) { + if (SystemInfo.isWindows) { + executablePath = StringUtil.replace(executablePath, "%" + varName + "%", env.get(varName), true); + } + else { + executablePath = StringUtil.replace(executablePath, "${" + varName + "}", env.get(varName), false); + } + } + executablePath = FileUtil.toSystemDependentName(executablePath); + File executable = new File(executablePath); + GeneralCommandLine commandLine = new GeneralCommandLine(); + commandLine.setExePath(executable.exists() ? executable.getAbsolutePath() : executablePath); + ImageFileTypeManager typeManager = ImageFileTypeManager.getInstance(); + for (VirtualFile file : files) { + if (file.isInLocalFileSystem() && typeManager.isImage(file)) { + commandLine.addParameter(VfsUtil.virtualToIoFile(file).getAbsolutePath()); + } + } + commandLine.setWorkingDirectory(new File(executablePath).getParentFile()); + + try { + commandLine.createProcess(); + } + catch (ExecutionException ex) { + Messages.showErrorDialog(project, + ex.getLocalizedMessage(), + ImagesBundle.message("error.title.launching.external.editor")); + OptionsConfigurabe.show(project); + } + } + } + } + + public void update(AnActionEvent e) { + super.update(e); + + VirtualFile[] files = e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY); + final boolean isEnabled = isImages(files); + if (e.getPlace().equals(ActionPlaces.PROJECT_VIEW_POPUP)) { + e.getPresentation().setVisible(isEnabled); + } + else { + e.getPresentation().setEnabled(isEnabled); + } + } + + private static boolean isImages(VirtualFile[] files) { + boolean isImagesFound = false; + if (files != null) { + ImageFileTypeManager typeManager = ImageFileTypeManager.getInstance(); + for (VirtualFile file : files) { + boolean isImage = typeManager.isImage(file); + isImagesFound |= isImage; + if (!file.isInLocalFileSystem() || !isImage) { + return false; + } + } + } + return isImagesFound; + } +} diff --git a/images/src/org/intellij/images/actions/EditExternalyAction.java b/images/src/org/intellij/images/actions/EditExternalyAction.java deleted file mode 100644 index 3399c400a95d..000000000000 --- a/images/src/org/intellij/images/actions/EditExternalyAction.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2000-2009 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** $Id$ */ - -package org.intellij.images.actions; - -import com.intellij.openapi.actionSystem.ActionPlaces; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.SystemInfo; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.VfsUtil; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.EnvironmentUtil; -import org.intellij.images.ImagesBundle; -import org.intellij.images.fileTypes.ImageFileTypeManager; -import org.intellij.images.options.Options; -import org.intellij.images.options.OptionsManager; -import org.intellij.images.options.impl.OptionsConfigurabe; - -import java.io.File; -import java.io.IOException; -import java.util.Map; -import java.util.Set; - -/** - * Open image file externaly. - * - * @author Alexey Efimov - */ -public final class EditExternalyAction extends AnAction { - public void actionPerformed(AnActionEvent e) { - Project project = e.getData(PlatformDataKeys.PROJECT); - VirtualFile[] files = e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY); - Options options = OptionsManager.getInstance().getOptions(); - String executablePath = options.getExternalEditorOptions().getExecutablePath(); - if (StringUtil.isEmpty(executablePath)) { - Messages.showErrorDialog(project, - ImagesBundle.message("error.empty.external.editor.path"), - ImagesBundle.message("error.title.empty.external.editor.path")); - OptionsConfigurabe.show(project); - } else { - if (files != null) { - Map env = EnvironmentUtil.getEnviromentProperties(); - Set varNames = env.keySet(); - for (String varName : varNames) { - if (SystemInfo.isWindows) { - executablePath = StringUtil.replace(executablePath, "%" + varName + "%", env.get(varName), true); - } else { - executablePath = StringUtil.replace(executablePath, "${" + varName + "}", env.get(varName), false); - } - } - executablePath = FileUtil.toSystemDependentName(executablePath); - File executable = new File(executablePath); - StringBuffer commandLine = new StringBuffer(executable.exists() ? executable.getAbsolutePath() : executablePath); - ImageFileTypeManager typeManager = ImageFileTypeManager.getInstance(); - for (VirtualFile file : files) { - if (file.isInLocalFileSystem() && typeManager.isImage(file)) { - commandLine.append(" \""); - commandLine.append(VfsUtil.virtualToIoFile(file).getAbsolutePath()); - commandLine.append('\"'); - } - } - - try { - File executableFile = new File(executablePath); - Runtime.getRuntime().exec(commandLine.toString(), null, executableFile.getParentFile()); - } catch (IOException ex) { - Messages.showErrorDialog(project, - ex.getLocalizedMessage(), - ImagesBundle.message("error.title.launching.external.editor")); - OptionsConfigurabe.show(project); - } - } - } - } - - public void update(AnActionEvent e) { - super.update(e); - - VirtualFile[] files = e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY); - final boolean isEnabled = isImages(files); - if (e.getPlace().equals(ActionPlaces.PROJECT_VIEW_POPUP)) { - e.getPresentation().setVisible(isEnabled); - } - else { - e.getPresentation().setEnabled(isEnabled); - } - } - - private static boolean isImages(VirtualFile[] files) { - boolean isImagesFound = false; - if (files != null) { - ImageFileTypeManager typeManager = ImageFileTypeManager.getInstance(); - for (VirtualFile file : files) { - boolean isImage = typeManager.isImage(file); - isImagesFound |= isImage; - if (!file.isInLocalFileSystem() || !isImage) { - return false; - } - } - } - return isImagesFound; - } -} From c4946f1d1cc9ff3c05774293285cd04b91d8a175 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 21 Oct 2010 13:34:21 +0400 Subject: [PATCH 07/20] delete obsolete isDummy parameter --- .../openapi/project/impl/ProjectManagerImpl.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java index 5eb0d324fac8..7c0201e3a10c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java @@ -214,7 +214,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt try { ProjectImpl project = - createAndInitProject(projectName, filePath, false, isDummy, ApplicationManager.getApplication().isUnitTestMode(), + createAndInitProject(projectName, filePath, false, ApplicationManager.getApplication().isUnitTestMode(), useDefaultProjectSettings ? getDefaultProject() : null); if (LOG_PROJECT_LEAKAGE_IN_TESTS) { myProjects.put(project, null); @@ -244,11 +244,8 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt return message; } - private ProjectImpl createAndInitProject(String projectName, String filePath, boolean isDefault, boolean isDummy, boolean isOptimiseTestLoadSpeed, + private ProjectImpl createAndInitProject(String projectName, String filePath, boolean isDefault, boolean isOptimiseTestLoadSpeed, @Nullable Project template) throws IOException { - if (isDummy) { - throw new UnsupportedOperationException("Dummy project is deprecated and shall not be used anymore."); - } final ProjectImpl project = isDefault ? new DefaultProject(this, filePath, isOptimiseTestLoadSpeed, projectName) : new ProjectImpl(this, filePath, isOptimiseTestLoadSpeed, projectName); @@ -299,7 +296,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt filePath = canonicalize(filePath); ProjectImpl project = null; try { - project = createAndInitProject(null, filePath, false, false, false, null); + project = createAndInitProject(null, filePath, false, false, null); } catch (ProcessCanceledException e) { if (project != null) { @@ -332,7 +329,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt public synchronized Project getDefaultProject() { if (myDefaultProject == null) { try { - myDefaultProject = createAndInitProject(null, null, true, false, ApplicationManager.getApplication().isUnitTestMode(), null); + myDefaultProject = createAndInitProject(null, null, true, ApplicationManager.getApplication().isUnitTestMode(), null); myDefaultProjectRootElement = null; } catch (IOException e) { From 2d382834d2802f7fcce645826c6e51515e3eccf7 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 21 Oct 2010 13:45:14 +0400 Subject: [PATCH 08/20] use remembered value of "open in new window" also when opening a new project; rename option (IDEA-58404) --- .../com/intellij/ide/impl/NewProjectUtil.java | 12 ++++++---- .../intellij/ide/GeneralSettingsPanel.form | 2 +- .../com/intellij/ide/impl/ProjectUtil.java | 23 +++++++++++-------- .../PlatformProjectOpenProcessor.java | 17 +------------- 4 files changed, 23 insertions(+), 31 deletions(-) diff --git a/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java b/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java index 1288d2af9c68..d6fc7c720a39 100644 --- a/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java +++ b/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java @@ -19,6 +19,7 @@ */ package com.intellij.ide.impl; +import com.intellij.ide.GeneralSettings; import com.intellij.ide.IdeBundle; import com.intellij.ide.util.newProjectWizard.AddModuleWizard; import com.intellij.ide.util.projectWizard.ProjectBuilder; @@ -188,13 +189,16 @@ public class NewProjectUtil { public static void closePreviousProject(final Project projectToClose) { Project[] openProjects = ProjectManager.getInstance().getOpenProjects(); if (openProjects.length > 0) { - int exitCode = Messages.showDialog(IdeBundle.message("prompt.open.project.in.new.frame"), IdeBundle.message("title.new.project"), - new String[]{IdeBundle.message("button.newframe"), IdeBundle.message("button.existingframe")}, 1, 0, - Messages.getQuestionIcon()); + final GeneralSettings settings = GeneralSettings.getInstance(); + int exitCode = settings.getConfirmOpenNewProject(); + if (exitCode < 0) { + exitCode = Messages.showDialog(IdeBundle.message("prompt.open.project.in.new.frame"), IdeBundle.message("title.new.project"), + new String[]{IdeBundle.message("button.newframe"), IdeBundle.message("button.existingframe")}, 1, 0, + Messages.getQuestionIcon(), new ProjectNewWindowDoNotAskOption()); + } if (exitCode == 1) { // "No" option ProjectUtil.closeProject(projectToClose != null ? projectToClose : openProjects[openProjects.length - 1]); } } } - } diff --git a/platform/platform-impl/src/com/intellij/ide/GeneralSettingsPanel.form b/platform/platform-impl/src/com/intellij/ide/GeneralSettingsPanel.form index 0b847b8ab594..85e7ae2e640b 100644 --- a/platform/platform-impl/src/com/intellij/ide/GeneralSettingsPanel.form +++ b/platform/platform-impl/src/com/intellij/ide/GeneralSettingsPanel.form @@ -51,7 +51,7 @@ - + diff --git a/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java b/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java index 5171776260ef..7862a170ffa7 100644 --- a/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java +++ b/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java @@ -150,16 +150,7 @@ public class ProjectUtil { } if (!forceOpenInNewFrame && openProjects.length > 0) { - final GeneralSettings settings = GeneralSettings.getInstance(); - int exitCode; - if (settings.getConfirmOpenNewProject() < 0) { - exitCode = Messages.showDialog(IdeBundle.message("prompt.open.project.in.new.frame"), IdeBundle.message("title.open.project"), - new String[]{IdeBundle.message("button.newframe"), IdeBundle.message("button.existingframe"), - CommonBundle.getCancelButtonText()}, 1, 0, Messages.getQuestionIcon(), - new ProjectNewWindowDoNotAskOption()); - } else { - exitCode = settings.getConfirmOpenNewProject(); - } + int exitCode = confirmOpenNewProject(); if (exitCode == 1) { // "No" option if (!closeProject(projectToClose != null ? projectToClose : openProjects[openProjects.length - 1])) return null; } @@ -190,6 +181,18 @@ public class ProjectUtil { return project; } + public static int confirmOpenNewProject() { + final GeneralSettings settings = GeneralSettings.getInstance(); + if (settings.getConfirmOpenNewProject() < 0) { + return Messages.showDialog(IdeBundle.message("prompt.open.project.in.new.frame"), IdeBundle.message("title.open.project"), + new String[]{IdeBundle.message("button.newframe"), IdeBundle.message("button.existingframe"), + CommonBundle.getCancelButtonText()}, 1, 0, Messages.getQuestionIcon(), + new ProjectNewWindowDoNotAskOption()); + } else { + return settings.getConfirmOpenNewProject(); + } + } + private static boolean isSameProject(String path, Project p) { final IProjectStore projectStore = ((ProjectEx)p).getStateStore(); diff --git a/platform/platform-impl/src/com/intellij/platform/PlatformProjectOpenProcessor.java b/platform/platform-impl/src/com/intellij/platform/PlatformProjectOpenProcessor.java index 83e9f56b4285..7c2ef3ce2d20 100644 --- a/platform/platform-impl/src/com/intellij/platform/PlatformProjectOpenProcessor.java +++ b/platform/platform-impl/src/com/intellij/platform/PlatformProjectOpenProcessor.java @@ -15,10 +15,6 @@ */ package com.intellij.platform; -import com.intellij.CommonBundle; -import com.intellij.ide.GeneralSettings; -import com.intellij.ide.IdeBundle; -import com.intellij.ide.impl.ProjectNewWindowDoNotAskOption; import com.intellij.ide.impl.ProjectUtil; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.Extensions; @@ -29,7 +25,6 @@ import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.project.ex.ProjectManagerEx; import com.intellij.openapi.project.impl.ProjectManagerImpl; import com.intellij.openapi.startup.StartupManager; -import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Ref; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindowManager; @@ -78,17 +73,7 @@ public class PlatformProjectOpenProcessor extends ProjectOpenProcessor { Project[] openProjects = ProjectManager.getInstance().getOpenProjects(); if (!forceOpenInNewFrame && openProjects.length > 0) { - final GeneralSettings settings = GeneralSettings.getInstance(); - int exitCode; - if (settings.getConfirmOpenNewProject() < 0) { - exitCode = Messages.showDialog(IdeBundle.message("prompt.open.project.in.new.frame"), IdeBundle.message("title.open.project"), - new String[]{IdeBundle.message("button.newframe"), IdeBundle.message("button.existingframe"), - CommonBundle.getCancelButtonText()}, 1, 0, Messages.getQuestionIcon(), - new ProjectNewWindowDoNotAskOption()); - } - else { - exitCode = settings.getConfirmOpenNewProject(); - } + int exitCode = ProjectUtil.confirmOpenNewProject(); if (exitCode == 1) { // "No" option if (!ProjectUtil.closeProject(projectToClose != null ? projectToClose : openProjects[openProjects.length - 1])) return null; } From ad44963e8076d19757d651fcef27ebb0d560a002 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 21 Oct 2010 14:08:19 +0400 Subject: [PATCH 09/20] include .png icons in IDEA CE tar.gz distribution (IDEA-53387) --- build/images/idea_CE128.png | Bin 0 -> 16074 bytes build/images/idea_CE16.png | Bin 0 -> 855 bytes build/images/idea_CE32.png | Bin 0 -> 2323 bytes build/images/idea_CE48.png | Bin 0 -> 3924 bytes build/scripts/dist.gant | 1 + 5 files changed, 1 insertion(+) create mode 100644 build/images/idea_CE128.png create mode 100644 build/images/idea_CE16.png create mode 100644 build/images/idea_CE32.png create mode 100644 build/images/idea_CE48.png diff --git a/build/images/idea_CE128.png b/build/images/idea_CE128.png new file mode 100644 index 0000000000000000000000000000000000000000..5b04015a55888c13d890d4c53cb91d4021d11011 GIT binary patch literal 16074 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 QBLDyZ07*qoM6N<$f@@<*F8}}l literal 0 HcmV?d00001 diff --git a/build/images/idea_CE16.png b/build/images/idea_CE16.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e931fc86c927679af772ca9d6c88018b5e7b37 GIT binary patch literal 855 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 i(U(HF@jd@rfB^u%Z8`a_*@_qd0000 Date: Thu, 21 Oct 2010 18:28:11 +0400 Subject: [PATCH 10/20] major release date in AppInfo --- .../application/ex/ApplicationInfoEx.java | 3 ++ .../application/impl/ApplicationInfoImpl.java | 44 ++++++++++++------- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationInfoEx.java b/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationInfoEx.java index 46f9046ef782..dd0138cbd068 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationInfoEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationInfoEx.java @@ -27,6 +27,7 @@ package com.intellij.openapi.application.ex; import com.intellij.openapi.application.ApplicationInfo; import java.awt.*; +import java.util.Calendar; import java.util.List; public abstract class ApplicationInfoEx extends ApplicationInfo { @@ -35,6 +36,8 @@ public abstract class ApplicationInfoEx extends ApplicationInfo { return (ApplicationInfoEx) getInstance(); } + public abstract Calendar getMajorReleaseBuildDate(); + public abstract String getLogoUrl(); public abstract Color getLogoTextColor(); diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java index 019003a1259d..bc33d0767684 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java @@ -51,6 +51,7 @@ public class ApplicationInfoImpl extends ApplicationInfoEx implements JDOMExtern @NonNls private String myOpaqueIconUrl = "/icon.png"; @NonNls private String myToolWindowIconUrl = "/general/toolWindowProject.png"; private Calendar myBuildDate = null; + private Calendar myMajorReleaseBuildDate = null; private String myPackageCode = null; private boolean myShowLicensee = true; private String myWelcomeScreenCaptionUrl; @@ -81,6 +82,7 @@ public class ApplicationInfoImpl extends ApplicationInfoEx implements JDOMExtern @NonNls private static final String ELEMENT_BUILD = "build"; @NonNls private static final String ATTRIBUTE_NUMBER = "number"; @NonNls private static final String ATTRIBUTE_DATE = "date"; + @NonNls private static final String ATTRIBUTE_MAJOR_RELEASE_DATE = "majorReleaseDate"; @NonNls private static final String ELEMENT_LOGO = "logo"; @NonNls private static final String ATTRIBUTE_URL = "url"; @NonNls private static final String ATTRIBUTE_TEXTCOLOR = "textcolor"; @@ -128,6 +130,10 @@ public class ApplicationInfoImpl extends ApplicationInfoEx implements JDOMExtern return myBuildDate; } + public Calendar getMajorReleaseBuildDate() { + return myMajorReleaseBuildDate != null ? myMajorReleaseBuildDate : myBuildDate; + } + @Override public BuildNumber getBuild() { return BuildNumber.fromString(myBuildNumber); @@ -314,21 +320,11 @@ public class ApplicationInfoImpl extends ApplicationInfoEx implements JDOMExtern myBuildDate = new GregorianCalendar(); } else { - int year = 0; - int month = 0; - int day = 0; - try { - year = Integer.parseInt(dateString.substring(0, 4)); - month = Integer.parseInt(dateString.substring(4, 6)); - day = Integer.parseInt(dateString.substring(6, 8)); - } - catch (Exception ex) { - //ignore - } - if (month > 0) { - month--; - } - myBuildDate = new GregorianCalendar(year, month, day); + myBuildDate = parseDate(dateString); + } + String majorReleaseDateString = buildElement.getAttributeValue(ATTRIBUTE_MAJOR_RELEASE_DATE); + if (majorReleaseDateString != null) { + myMajorReleaseBuildDate = parseDate(majorReleaseDateString); } } @@ -446,6 +442,24 @@ public class ApplicationInfoImpl extends ApplicationInfoEx implements JDOMExtern } } + private static GregorianCalendar parseDate(String dateString) { + int year = 0; + int month = 0; + int day = 0; + try { + year = Integer.parseInt(dateString.substring(0, 4)); + month = Integer.parseInt(dateString.substring(4, 6)); + day = Integer.parseInt(dateString.substring(6, 8)); + } + catch (Exception ex) { + //ignore + } + if (month > 0) { + month--; + } + return new GregorianCalendar(year, month, day); + } + public List getPluginChooserPages() { return myPluginChooserPages; } From 0b26d50083da47dd646d62440555324f9ca41f16 Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Thu, 21 Oct 2010 18:31:15 +0400 Subject: [PATCH 11/20] Fix: IDEA-49788 (Grails: Run Grails Target dialog: there is no completion for a script from user home) --- xml/impl/src/com/intellij/xml/actions/XmlSplitTagAction.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xml/impl/src/com/intellij/xml/actions/XmlSplitTagAction.java b/xml/impl/src/com/intellij/xml/actions/XmlSplitTagAction.java index dd6df1d7ae6f..2daf4c2d01f2 100644 --- a/xml/impl/src/com/intellij/xml/actions/XmlSplitTagAction.java +++ b/xml/impl/src/com/intellij/xml/actions/XmlSplitTagAction.java @@ -140,13 +140,13 @@ public class XmlSplitTagAction implements IntentionAction { final String name = xmlTag.getName(); sb.append("<").append(name); if (attrs.length() > 0) { - sb.append(' ').append(attrs.toString()); + sb.append(' ').append(attrs); } sb.append('>'); sb.append(first); sb.append("<").append(name); if (attrsWoId.length() > 0) { - sb.append(' ').append(attrsWoId.toString()); + sb.append(' ').append(attrsWoId); } sb.append('>'); sb.append(second).append(""); From 54dfd905a87a49161187582446c5409ea8551f58 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 21 Oct 2010 18:58:19 +0400 Subject: [PATCH 12/20] fix NPE --- .../platform-api/src/com/intellij/ui/treeStructure/Tree.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java b/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java index 4a6b17238756..4cf4e129f6ab 100644 --- a/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java +++ b/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java @@ -175,8 +175,8 @@ public class Tree extends JTree implements ComponentWithEmptyText, ComponentWith TreePath[] paths = getSelectionModel().getSelectionPaths(); if (paths != null) { for (TreePath each : paths) { - Rectangle selection = getPathBounds(each); - if (g.getClipBounds().intersects(selection) || g.getClipBounds().contains(selection)) { + final Rectangle selection = getPathBounds(each); + if (selection != null && (g.getClipBounds().intersects(selection) || g.getClipBounds().contains(selection))) { if (myBusy) { Rectangle busyIconBounds = myBusyIcon.getBounds(); if (selection.contains(busyIconBounds) || selection.intersects(busyIconBounds)) { From 87766a2dc1db0748e723e668b1b1f5881c596355 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 21 Oct 2010 19:08:42 +0400 Subject: [PATCH 13/20] providing better error descriptions (IDEA-60110) --- .../intellij/lang/ant/dom/CustomAntElementsRegistry.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/ant/src/com/intellij/lang/ant/dom/CustomAntElementsRegistry.java b/plugins/ant/src/com/intellij/lang/ant/dom/CustomAntElementsRegistry.java index 8bf4aa8f39b4..71194132edf6 100644 --- a/plugins/ant/src/com/intellij/lang/ant/dom/CustomAntElementsRegistry.java +++ b/plugins/ant/src/com/intellij/lang/ant/dom/CustomAntElementsRegistry.java @@ -283,21 +283,21 @@ public class CustomAntElementsRegistry { clazz = loader.loadClass(classname); } catch (ClassNotFoundException e) { - error = e.getMessage(); + error = "Class not found " + e.getMessage(); if (error == null) { error = ""; } clazz = null; } catch (NoClassDefFoundError e) { - error = e.getMessage(); + error = "Class definition not found " + e.getMessage(); if (error == null) { error = ""; } clazz = null; } catch (UnsupportedClassVersionError e) { - error = e.getMessage(); + error = "Unsupported class version " + e.getMessage(); if (error == null) { error = ""; } @@ -309,7 +309,7 @@ public class CustomAntElementsRegistry { private void addCustomDefinition(@NotNull AntDomNamedElement declaringTag, String customTagName, String nsUri, Class clazz, String error) { final XmlName xmlName = new XmlName(customTagName, nsUri == null? "" : nsUri); if (error != null) { - myErrors.put(xmlName, customTagName); + myErrors.put(xmlName, error); } myCustomElements.put(xmlName, clazz); myDeclarations.put(xmlName, declaringTag); From a083c6fc4c794f40198e2064741c1cbb918256eb Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Thu, 21 Oct 2010 19:31:59 +0400 Subject: [PATCH 14/20] IDEA-60172 Ctrl + Y doesn't delete the line --- .../com/intellij/openapi/editor/actions/DeleteLineAction.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/DeleteLineAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/DeleteLineAction.java index 185198aa17ee..9c3b94b20c0b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/DeleteLineAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/DeleteLineAction.java @@ -45,8 +45,8 @@ public class DeleteLineAction extends TextComponentEditorAction { int selectionEnd = selectionModel.getSelectionEnd(); selectionModel.removeSelection(); int lineStartOffset = document.getLineStartOffset(document.getLineNumber(selectionStart)); - int lineEndOffset = document.getLineEndOffset(document.getLineNumber(selectionEnd)); - document.deleteString(lineStartOffset, lineEndOffset); + int nextLineStartOffset = Math.min(document.getTextLength(), document.getLineStartOffset(document.getLineNumber(selectionEnd) + 1)); + document.deleteString(lineStartOffset, nextLineStartOffset); return; } deleteLineAtCaret(editor); From c4dd9429501ca7282e530400358de41ef258f3b8 Mon Sep 17 00:00:00 2001 From: "peter.gromov" Date: Thu, 21 Oct 2010 17:21:48 +0400 Subject: [PATCH 15/20] more idiomatic autopopup check --- .../completion/ComboEditorCompletionContributor.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/ComboEditorCompletionContributor.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/ComboEditorCompletionContributor.java index fdbc741cf588..de826e017f2e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/ComboEditorCompletionContributor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/ComboEditorCompletionContributor.java @@ -31,8 +31,7 @@ public class ComboEditorCompletionContributor extends CompletionContributor{ @Override public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) { - final CompletionProcess process = CompletionService.getCompletionService().getCurrentCompletion(); - if (process != null && process.isAutopopupCompletion()) { + if (parameters.getInvocationCount() == 0) { return; } From a3a06b1bce5efc21fdcbb4413cf0d79f3e67403c Mon Sep 17 00:00:00 2001 From: "peter.gromov" Date: Thu, 21 Oct 2010 18:32:37 +0400 Subject: [PATCH 16/20] more stable lookup position --- .../completion/CodeCompletionHandlerBase.java | 1 - .../com/intellij/codeInsight/lookup/impl/LookupImpl.java | 9 ++------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java index 109433c646cd..f1a607a6f829 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -199,7 +199,6 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler { LookupImpl lookup = (LookupImpl)LookupManager.getInstance(editor.getProject()).createLookup(editor, LookupElement.EMPTY_ARRAY, "", LookupArranger.DEFAULT); if (editor.isOneLineMode()) { - lookup.setForceShowAsPopup(true); lookup.setCancelOnClickOutside(true); lookup.setCancelOnOtherWindowOpen(true); lookup.setResizable(false); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java index 520d65ad1511..76e808e900ab 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java @@ -550,13 +550,6 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { return myLookupStartMarker.getStartOffset(); } - @Override - protected void beforeShow() { - if (isRealPopup()) { - getComponent().setBorder(null); - } - } - public void performGuardedChange(Runnable change) { assert !myChangeGuard; myChangeGuard = true; @@ -648,6 +641,8 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { if (ApplicationManager.getApplication().isUnitTestMode()) return; + getComponent().setBorder(null); + Point p = calculatePosition(); HintManagerImpl hintManager = HintManagerImpl.getInstanceImpl(); hintManager.showEditorHint(this, myEditor, p, HintManagerImpl.HIDE_BY_ESCAPE | HintManagerImpl.UPDATE_BY_SCROLLING, 0, false); From 90b6ca94e201cc8cb105539716652a1ff1996411 Mon Sep 17 00:00:00 2001 From: "peter.gromov" Date: Thu, 21 Oct 2010 18:53:51 +0400 Subject: [PATCH 17/20] some cases where lookup was not under the prefix fixed --- .../codeInsight/lookup/impl/BackspaceHandler.java | 13 +++---------- .../codeInsight/lookup/impl/TypedHandler.java | 2 +- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/BackspaceHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/BackspaceHandler.java index dd23bb802af0..836cbdba1b6c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/BackspaceHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/BackspaceHandler.java @@ -38,15 +38,6 @@ public class BackspaceHandler extends EditorActionHandler { return; } - boolean toRestart = false; - final String prefix = lookup.getAdditionalPrefix(); - if (prefix.length() > 0) { - lookup.setAdditionalPrefix(prefix.substring(0, prefix.length() - 1)); - } - else { - toRestart = lookup.getLookupStart() < editor.getCaretModel().getOffset(); - } - lookup.performGuardedChange(new Runnable() { @Override public void run() { @@ -54,11 +45,13 @@ public class BackspaceHandler extends EditorActionHandler { } }); + final String prefix = lookup.getAdditionalPrefix(); if (prefix.length() > 0) { + lookup.setAdditionalPrefix(prefix.substring(0, prefix.length() - 1)); return; } - if (toRestart) { + if (lookup.getLookupStart() < editor.getCaretModel().getOffset()) { final CompletionProcess process = CompletionService.getCompletionService().getCurrentCompletion(); if (process instanceof CompletionProgressIndicator) { ((CompletionProgressIndicator)process).restartCompletion(); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java index e9c8e99a69e4..eff071ab3b50 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java @@ -58,7 +58,6 @@ public class TypedHandler implements TypedActionHandler { } }); if (result == CharFilter.Result.ADD_TO_PREFIX) { - lookup.setAdditionalPrefix(lookup.getAdditionalPrefix() + charTyped); Document document = editor.getDocument(); long modificationStamp = document.getModificationStamp(); @@ -67,6 +66,7 @@ public class TypedHandler implements TypedActionHandler { EditorModificationUtil.typeInStringAtCaretHonorBlockSelection(editor, String.valueOf(charTyped), true); } }); + lookup.setAdditionalPrefix(lookup.getAdditionalPrefix() + charTyped); AutoHardWrapHandler.getInstance().wrapLineIfNecessary(editor, dataContext, modificationStamp); From 348a1be0f52b0deea69e937c676477e0c18435f2 Mon Sep 17 00:00:00 2001 From: "peter.gromov" Date: Thu, 21 Oct 2010 19:21:44 +0400 Subject: [PATCH 18/20] lookup should listen for editor/document events even before it's shown --- .../codeInsight/lookup/impl/LookupImpl.java | 79 +++++++++---------- 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java index 76e808e900ab..cfec8f4dd080 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java @@ -83,10 +83,6 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { private final LookupCellRenderer myCellRenderer; private Boolean myPositionedAbove = null; - private CaretListener myEditorCaretListener; - private SelectionListener myEditorSelectionListener; - private EditorMouseListener myEditorMouseListener; - private final ArrayList myListeners = new ArrayList(); private boolean myShown = false; @@ -141,6 +137,8 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { updateListHeight(model); setArranger(arranger); + + addListeners(); } public void setArranger(LookupArranger arranger) { @@ -571,6 +569,18 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { LOG.assertTrue(!myShown); myShown = true; + if (ApplicationManager.getApplication().isUnitTestMode()) return; + + getComponent().setBorder(null); + + Point p = calculatePosition(); + HintManagerImpl hintManager = HintManagerImpl.getInstanceImpl(); + hintManager.showEditorHint(this, myEditor, p, HintManagerImpl.HIDE_BY_ESCAPE | HintManagerImpl.UPDATE_BY_SCROLLING, 0, false); + + myShownStamp = System.currentTimeMillis(); + } + + private void addListeners() { myEditor.getDocument().addDocumentListener(new DocumentAdapter() { public void documentChanged(DocumentEvent e) { if (!myChangeGuard) { @@ -579,29 +589,41 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { } }, this); - myEditorCaretListener = new CaretListener() { + final CaretListener caretListener = new CaretListener() { public void caretPositionChanged(CaretEvent e){ - caretOrSelectionChanged(); + if (!myChangeGuard) { + hide(); + } } }; - myEditorSelectionListener = new SelectionListener() { + final SelectionListener selectionListener = new SelectionListener() { public void selectionChanged(final SelectionEvent e) { - caretOrSelectionChanged(); + if (!myChangeGuard) { + hide(); + } } }; - myEditor.getCaretModel().addCaretListener(myEditorCaretListener); - myEditor.getSelectionModel().addSelectionListener(myEditorSelectionListener); - - myEditorMouseListener = new EditorMouseAdapter() { + final EditorMouseListener mouseListener = new EditorMouseAdapter() { public void mouseClicked(EditorMouseEvent e){ e.consume(); hide(); } }; - myEditor.addEditorMouseListener(myEditorMouseListener); + + myEditor.getCaretModel().addCaretListener(caretListener); + myEditor.getSelectionModel().addSelectionListener(selectionListener); + myEditor.addEditorMouseListener(mouseListener); + Disposer.register(this, new Disposable() { + @Override + public void dispose() { + myEditor.getCaretModel().removeCaretListener(caretListener); + myEditor.getSelectionModel().removeSelectionListener(selectionListener); + myEditor.removeEditorMouseListener(mouseListener); + } + }); myList.addListSelectionListener(new ListSelectionListener() { - private LookupElement oldItem = null; + private LookupElement oldItem = null; public void valueChanged(ListSelectionEvent e){ LookupElement item = getCurrentItem(); @@ -621,7 +643,7 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { final int i = myList.locationToIndex(point); if (i >= 0) { final LookupElement selected = (LookupElement)myList.getModel().getElementAt(i); - if (selected != null && + if (selected != null && e.getClickCount() == 1 && point.x >= myList.getCellBounds(i, i).width - PopupIcons.EMPTY_ICON.getIconWidth() && ShowLookupActionsHandler.showItemActions(LookupImpl.this, selected)) { @@ -638,22 +660,6 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { } } }); - - if (ApplicationManager.getApplication().isUnitTestMode()) return; - - getComponent().setBorder(null); - - Point p = calculatePosition(); - HintManagerImpl hintManager = HintManagerImpl.getInstanceImpl(); - hintManager.showEditorHint(this, myEditor, p, HintManagerImpl.HIDE_BY_ESCAPE | HintManagerImpl.UPDATE_BY_SCROLLING, 0, false); - - myShownStamp = System.currentTimeMillis(); - } - - private void caretOrSelectionChanged() { - if (!myChangeGuard) { - hide(); - } } private int calcLookupStart() { @@ -922,16 +928,7 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable { assert !myDisposed; Disposer.dispose(myProcessIcon); - if (myEditorCaretListener != null) { - myEditor.getCaretModel().removeCaretListener(myEditorCaretListener); - myEditor.getSelectionModel().removeSelectionListener(myEditorSelectionListener); - myEditorCaretListener = null; - myEditorSelectionListener = null; - } - if (myEditorMouseListener != null) { - myEditor.removeEditorMouseListener(myEditorMouseListener); - myEditorMouseListener = null; - } + myDisposed = true; } From aa1c3a522c7fa7aef34215d29475eb6bf0dee489 Mon Sep 17 00:00:00 2001 From: "peter.gromov" Date: Thu, 21 Oct 2010 19:41:56 +0400 Subject: [PATCH 19/20] don't close lookup on typing during in-place rename --- .../codeInsight/template/impl/TemplateState.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java index e79090729741..298b8601441d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java @@ -125,7 +125,17 @@ public class TemplateState implements Disposable { public void beforeCommandFinished(CommandEvent event) { if (started) { - afterChangedUpdate(); + Runnable runnable = new Runnable() { + public void run() { + afterChangedUpdate(); + } + }; + final LookupImpl lookup = (LookupImpl)LookupManager.getActiveLookup(myEditor); + if (lookup != null) { + lookup.performGuardedChange(runnable); + } else { + runnable.run(); + } } } }; From 9096eb8d2d89fadeff20f433373d7a29f6253d3c Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 21 Oct 2010 19:40:41 +0400 Subject: [PATCH 20/20] fix KeymapTest --- platform/platform-resources/src/idea/Keymap_Netbeans.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/platform/platform-resources/src/idea/Keymap_Netbeans.xml b/platform/platform-resources/src/idea/Keymap_Netbeans.xml index 89b6cf4258de..4b643cda07ab 100644 --- a/platform/platform-resources/src/idea/Keymap_Netbeans.xml +++ b/platform/platform-resources/src/idea/Keymap_Netbeans.xml @@ -334,9 +334,6 @@ - - -