From 1e4c0d3fab2d5bfaa10bc28d348541f0cf1cbe3c Mon Sep 17 00:00:00 2001 From: Irina Chernushina Date: Fri, 19 Sep 2008 15:58:30 +0400 Subject: [PATCH] VCS: checked component getters or project disposed checks for IDEADEV-28950 (NPE: ComponentManagerImpl.getComponentFromContainer) IDEADEV-29290 (AE: ComponentManagerImpl.getComponent) IDEADEV-29369 (NPE: ComponentManagerImpl.getComponentFromContainer) IDEADEV-29374 (AE: ComponentManagerImpl.getComponent) --- .../src/org/jetbrains/idea/svn/SvnAuthenticationManager.java | 2 +- .../src/org/jetbrains/idea/svn/SvnConfiguration.java | 2 +- .../src/org/jetbrains/idea/svn/SvnFileUrlMappingImpl.java | 2 +- .../src/org/jetbrains/idea/svn/actions/CleanupWorker.java | 6 ++++++ .../jetbrains/idea/svn/checkin/SvnCheckinEnvironment.java | 2 +- .../src/org/jetbrains/idea/svn/dialogs/SvnFormatWorker.java | 12 ++++++++---- .../src/org/jetbrains/idea/svn/integrate/Merger.java | 2 +- .../src/org/jetbrains/idea/svn/integrate/ResolveWorker.java | 3 ++- .../idea/svn/integrate/SvnIntegrateChangesTask.java | 1 + .../idea/svn/update/AbstractUpdateIntegrateCrawler.java | 2 +- .../jetbrains/idea/svn/update/SvnIntegrateEnvironment.java | 8 ++++---- .../org/jetbrains/idea/svn/update/SvnUpdateEnvironment.java | 4 ++-- 12 files changed, 29 insertions(+), 17 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationManager.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationManager.java index d9e20920d6..50abd8eae1 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationManager.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationManager.java @@ -125,7 +125,7 @@ public class SvnAuthenticationManager extends DefaultSVNAuthenticationManager { Map properties = getHostProperties(host); String proxyHost = (String) properties.get("http-proxy-host"); if ((proxyHost == null) || "".equals(proxyHost.trim())) { - if (SvnConfiguration.getInstanceSafe(myProject).isIsUseDefaultProxy()) { + if (SvnConfiguration.getInstanceChecked(myProject).isIsUseDefaultProxy()) { // ! use common proxy if it is set final String ideaWideProxyHost = System.getProperty("http.proxyHost"); String ideaWideProxyPort = System.getProperty("http.proxyPort"); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java index 1b2cec0ce0..450a15c987 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java @@ -95,7 +95,7 @@ public class SvnConfiguration implements ProjectComponent, JDOMExternalizable { return project.getComponent(SvnConfiguration.class); } - public static SvnConfiguration getInstanceSafe(final Project project) { + public static SvnConfiguration getInstanceChecked(final Project project) { return ApplicationManager.getApplication().runReadAction(new Computable() { public SvnConfiguration compute() { if (project.isDisposed()) throw new ProcessCanceledException(); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileUrlMappingImpl.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileUrlMappingImpl.java index 3345391c5b..e1bc25f269 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileUrlMappingImpl.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnFileUrlMappingImpl.java @@ -244,7 +244,7 @@ class SvnFileUrlMappingImpl implements SvnFileUrlMappingRefresher.RefreshableSvn public void doRefresh() { //LOG.info("do refresh: " + new Time(System.currentTimeMillis())); // will call convertsRoots - ProjectLevelVcsManager.getInstance(myProject).getRootsUnderVcs(myVcs); + ProjectLevelVcsManager.getInstanceChecked(myProject).getRootsUnderVcs(myVcs); } /** diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/actions/CleanupWorker.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/actions/CleanupWorker.java index e84f27be17..b314fa61ec 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/actions/CleanupWorker.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/actions/CleanupWorker.java @@ -64,11 +64,17 @@ public class CleanupWorker { @Override public void onSuccess() { + if (myProject.isDisposed()) { + return; + } final VcsDirtyScopeManager manager = VcsDirtyScopeManager.getInstance(myProject); ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { + if (myProject.isDisposed()) { + return; + } for (final VirtualFile root : myRoots) { root.refresh(false, true); } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/checkin/SvnCheckinEnvironment.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/checkin/SvnCheckinEnvironment.java index 6d7ae9c997..50c903b905 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/checkin/SvnCheckinEnvironment.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/checkin/SvnCheckinEnvironment.java @@ -164,7 +164,7 @@ public class SvnCheckinEnvironment implements CheckinEnvironment { return; } File[] pathsToCommit = (File[])committables.toArray(new File[committables.size()]); - boolean keepLocks = SvnConfiguration.getInstance(mySvnVcs.getProject()).isKeepLocks(); + boolean keepLocks = SvnConfiguration.getInstanceChecked(mySvnVcs.getProject()).isKeepLocks(); SVNCommitPacket[] commitPackets = null; SVNCommitInfo[] results; try { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SvnFormatWorker.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SvnFormatWorker.java index 1cdea931b4..5451fef89f 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SvnFormatWorker.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SvnFormatWorker.java @@ -30,6 +30,7 @@ public class SvnFormatWorker extends Task.Backgroundable { private final WorkingCopyFormat myNewFormat; private final List myWcInfos; private List myBeforeChangeLists; + private final SvnVcs myVcs; public SvnFormatWorker(final Project project, final WorkingCopyFormat newFormat, final List wcInfos) { super(project, SvnBundle.message("action.change.wcopy.format.task.title"), false, DEAF); @@ -37,6 +38,7 @@ public class SvnFormatWorker extends Task.Backgroundable { myNewFormat = newFormat; myExceptions = new ArrayList(); myWcInfos = wcInfos; + myVcs = SvnVcs.getInstance(myProject); } public SvnFormatWorker(final Project project, final WorkingCopyFormat newFormat, final WCInfo wcInfo) { @@ -78,6 +80,9 @@ public class SvnFormatWorker extends Task.Backgroundable { @Override public void onSuccess() { + if (myProject.isDisposed()) { + return; + } // to map to native if (WorkingCopyFormat.ONE_DOT_FIVE.equals(myNewFormat)) { SvnVcs.getInstance(myProject).processChangeLists(myBeforeChangeLists); @@ -95,13 +100,12 @@ public class SvnFormatWorker extends Task.Backgroundable { } public void run(@NotNull final ProgressIndicator indicator) { - ProjectLevelVcsManager.getInstance(myProject).startBackgroundVcsOperation(); + ProjectLevelVcsManager.getInstanceChecked(myProject).startBackgroundVcsOperation(); indicator.setIndeterminate(true); if (WorkingCopyFormat.ONE_DOT_FIVE.equals(myNewFormat)) { - myBeforeChangeLists = ChangeListManager.getInstance(myProject).getChangeLists(); + myBeforeChangeLists = ChangeListManager.getInstanceChecked(myProject).getChangeLists(); } - final SvnVcs vcs = SvnVcs.getInstance(myProject); - final SVNWCClient wcClient = vcs.createWCClient(); + final SVNWCClient wcClient = myVcs.createWCClient(); try { for (WCInfo wcInfo : myWcInfos) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/Merger.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/Merger.java index 59460605b0..59a2b76484 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/Merger.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/Merger.java @@ -39,7 +39,7 @@ public class Merger { public Merger(final SvnVcs vcs, final List changeLists, final File target, final UpdateEventHandler handler, final SVNURL currentBranchUrl, final Consumer> afterProcessing) { myAfterProcessing = afterProcessing; - mySvnConfig = SvnConfiguration.getInstance(vcs.getProject()); + mySvnConfig = SvnConfiguration.getInstanceChecked(vcs.getProject()); myCurrentBranchUrl = currentBranchUrl; myDiffClient = vcs.createDiffClient(); myChangeLists = changeLists; diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/ResolveWorker.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/ResolveWorker.java index 44b641ac4a..20bca38a8b 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/ResolveWorker.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/ResolveWorker.java @@ -58,9 +58,10 @@ public class ResolveWorker { } } - return (! myConflictedVirtualFiles.isEmpty()) && (! SvnConfiguration.getInstance(myProject).MERGE_DRY_RUN); + return (! myConflictedVirtualFiles.isEmpty()) && (! SvnConfiguration.getInstanceChecked(myProject).MERGE_DRY_RUN); } + // on EDT, dispose checked public void execute(final UpdatedFiles updatedFiles) { if (myConflictedVirtualFiles.isEmpty()) { return; diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/SvnIntegrateChangesTask.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/SvnIntegrateChangesTask.java index 5e360daaa5..420b46d515 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/SvnIntegrateChangesTask.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/SvnIntegrateChangesTask.java @@ -131,6 +131,7 @@ public class SvnIntegrateChangesTask extends Task.Backgroundable { ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { try { + if (myProject.isDisposed()) return; afterExecution(); } finally { BlockReloadingUtil.unblock(); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/update/AbstractUpdateIntegrateCrawler.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/update/AbstractUpdateIntegrateCrawler.java index 810f0fd818..0528d360d6 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/update/AbstractUpdateIntegrateCrawler.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/update/AbstractUpdateIntegrateCrawler.java @@ -71,7 +71,7 @@ public abstract class AbstractUpdateIntegrateCrawler implements SvnWCRootCrawler catch (SVNException e) { myExceptions.add(new VcsException(e)); } - if (!SvnConfiguration.getInstance(myVcs.getProject()).UPDATE_RUN_STATUS) { + if (!SvnConfiguration.getInstanceChecked(myVcs.getProject()).UPDATE_RUN_STATUS) { return result; } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/update/SvnIntegrateEnvironment.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/update/SvnIntegrateEnvironment.java index 531291924c..6d677f4ea7 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/update/SvnIntegrateEnvironment.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/update/SvnIntegrateEnvironment.java @@ -67,7 +67,7 @@ public class SvnIntegrateEnvironment extends AbstractSvnUpdateIntegrateEnvironme @Override protected boolean isDryRun() { - return SvnConfiguration.getInstance(myVcs.getProject()).MERGE_DRY_RUN; + return SvnConfiguration.getInstanceChecked(myVcs.getProject()).MERGE_DRY_RUN; } private class IntegrateCrawler extends AbstractUpdateIntegrateCrawler { @@ -84,7 +84,7 @@ public class SvnIntegrateEnvironment extends AbstractSvnUpdateIntegrateEnvironme } protected void showProgressMessage(final ProgressIndicator progress, final File root) { - if (SvnConfiguration.getInstance(myVcs.getProject()).MERGE_DRY_RUN) { + if (SvnConfiguration.getInstanceChecked(myVcs.getProject()).MERGE_DRY_RUN) { progress.setText(SvnBundle.message("progress.text.merging.dry.run.changes", root.getAbsolutePath())); } else { @@ -96,7 +96,7 @@ public class SvnIntegrateEnvironment extends AbstractSvnUpdateIntegrateEnvironme final File root, final SVNUpdateClient client) throws SVNException { - final SvnConfiguration svnConfig = SvnConfiguration.getInstance(myVcs.getProject()); + final SvnConfiguration svnConfig = SvnConfiguration.getInstanceChecked(myVcs.getProject()); MergeRootInfo info = svnConfig.getMergeRootInfo(root, myVcs); if (info.getUrlString1().equals(info.getUrlString2()) && @@ -110,7 +110,7 @@ public class SvnIntegrateEnvironment extends AbstractSvnUpdateIntegrateEnvironme info.getUrl2(), info.getRevision2(), root, svnConfig.UPDATE_DEPTH, svnConfig.MERGE_DIFF_USE_ANCESTRY, false, svnConfig.MERGE_DRY_RUN, false); - SvnConfiguration.getInstance(myVcs.getProject()).LAST_MERGED_REVISION = getLastMergedRevision(info.getRevision2(), info.getUrl2()); + svnConfig.LAST_MERGED_REVISION = getLastMergedRevision(info.getRevision2(), info.getUrl2()); return info.getResultRevision(); } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/update/SvnUpdateEnvironment.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/update/SvnUpdateEnvironment.java index 73baea2318..b8ea58d345 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/update/SvnUpdateEnvironment.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/update/SvnUpdateEnvironment.java @@ -80,7 +80,7 @@ public class SvnUpdateEnvironment extends AbstractSvnUpdateIntegrateEnvironment SVNException { final long rev; - final SvnConfiguration configuration = SvnConfiguration.getInstance(myVcs.getProject()); + final SvnConfiguration configuration = SvnConfiguration.getInstanceChecked(myVcs.getProject()); final UpdateRootInfo rootInfo = configuration.getUpdateRootInfo(root, myVcs); final SVNUpdateClient updateClient = myVcs.createUpdateClient(); @@ -131,7 +131,7 @@ public class SvnUpdateEnvironment extends AbstractSvnUpdateIntegrateEnvironment } public boolean validateOptions(final Collection roots) { - final SvnConfiguration configuration = SvnConfiguration.getInstance(myVcs.getProject()); + final SvnConfiguration configuration = SvnConfiguration.getInstanceChecked(myVcs.getProject()); final Map map = configuration.getUpdateInfosMap(); try { -- 2.11.4.GIT