diff options
author | Andrey Loskutov | 2016-02-26 09:30:04 +0000 |
---|---|---|
committer | Andrey Loskutov | 2016-02-26 15:06:12 +0000 |
commit | 599f8ad058190b3b976c5ad1b9b9491f5c1a4e1a (patch) | |
tree | 2be67f655159c905fdf7c76b465a39d1343a240d | |
parent | 5dc7ac99cb0b52ad87e2c563f5dfecf9a800e82c (diff) | |
download | egit-599f8ad058190b3b976c5ad1b9b9491f5c1a4e1a.tar.gz egit-599f8ad058190b3b976c5ad1b9b9491f5c1a4e1a.tar.xz egit-599f8ad058190b3b976c5ad1b9b9491f5c1a4e1a.zip |
Check resource.getProject() for null before dereferencing it
Bug: 488538
Change-Id: I886cf1c772aa372fd4bba330541fc8ffb3556198
9 files changed, 35 insertions, 12 deletions
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/DirCacheResourceVariantTreeProvider.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/DirCacheResourceVariantTreeProvider.java index e3d1918b06..03af6327e4 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/DirCacheResourceVariantTreeProvider.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/DirCacheResourceVariantTreeProvider.java @@ -66,7 +66,7 @@ public class DirCacheResourceVariantTreeProvider implements .getResourceHandleForLocation(path); // Resource variants only make sense for IResources. Do not consider // files outside of the workspace or otherwise non accessible. - if (resource == null || resource.getProject() == null + if (resource.getProject() == null || !resource.getProject().isAccessible()) { continue; } diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/GitResourceVariantCache.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/GitResourceVariantCache.java index 523f0d195a..065e098e08 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/GitResourceVariantCache.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/GitResourceVariantCache.java @@ -40,6 +40,9 @@ class GitResourceVariantCache { cache.put(resource, variant); IProject project = resource.getProject(); + if (project == null) { + return; + } roots.add(project); members.put(resource, new LinkedHashSet<IResource>()); diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/TreeWalkResourceVariantTreeProvider.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/TreeWalkResourceVariantTreeProvider.java index cc4b4f9c52..2bc0ea01ad 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/TreeWalkResourceVariantTreeProvider.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/merge/TreeWalkResourceVariantTreeProvider.java @@ -103,7 +103,8 @@ public class TreeWalkResourceVariantTreeProvider implements .getResourceHandleForLocation(path); // Resource variants only make sense for IResources. Do not consider // files outside of the workspace or otherwise non accessible. - if (resource != null && resource.getProject().isAccessible()) { + if (resource.getProject() != null + && resource.getProject().isAccessible()) { if (modeBase != 0) { baseCache.setVariant(resource, TreeParserResourceVariant.create(repository, base)); diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/storage/GitFileHistory.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/storage/GitFileHistory.java index 6f728d1f30..8767fc546d 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/storage/GitFileHistory.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/storage/GitFileHistory.java @@ -15,6 +15,7 @@ import java.io.IOException; import java.util.Collections; import java.util.Map.Entry; +import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; @@ -66,8 +67,10 @@ class GitFileHistory extends FileHistory implements IAdaptable { final RepositoryMapping rm = RepositoryMapping.getMapping(resource); if (rm == null) { + IProject project = resource.getProject(); + String projectName = project != null ? project.getName() : ""; //$NON-NLS-1$ Activator.logError(NLS.bind(CoreText.GitFileHistory_gitNotAttached, - resource.getProject().getName()), null); + projectName), null); db = null; walk = null; } else { @@ -95,9 +98,11 @@ class GitFileHistory extends FileHistory implements IAdaptable { try { final AnyObjectId headId = db.resolve(Constants.HEAD); if (headId == null) { + IProject project = resource.getProject(); + String projectName = project != null? project.getName() : ""; //$NON-NLS-1$ Activator.logError(NLS.bind( CoreText.GitFileHistory_noHeadRevisionAvailable, - resource.getProject().getName()), null); + projectName), null); return NO_REVISIONS; } @@ -119,9 +124,10 @@ class GitFileHistory extends FileHistory implements IAdaptable { walk.markStart(root); } catch (IOException e) { + IProject project = resource.getProject(); + String projectName = project != null? project.getName() : ""; //$NON-NLS-1$ Activator.logError(NLS.bind( - CoreText.GitFileHistory_invalidHeadRevision, resource - .getProject().getName()), e); + CoreText.GitFileHistory_invalidHeadRevision, projectName), e); return NO_REVISIONS; } diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/util/ResourceUtil.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/util/ResourceUtil.java index 4162e9b506..dc17a1d2f4 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/util/ResourceUtil.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/util/ResourceUtil.java @@ -154,7 +154,7 @@ public class ResourceUtil { */ public static boolean isSharedWithGit(@NonNull IResource resource) { IProject project = resource.getProject(); - if (!project.isAccessible()) { + if (project == null || !project.isAccessible()) { return false; } try { diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/AssumeUnchangedOperation.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/AssumeUnchangedOperation.java index 527813d257..f401a2c772 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/AssumeUnchangedOperation.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/AssumeUnchangedOperation.java @@ -120,12 +120,17 @@ public class AssumeUnchangedOperation implements IEGitOperation { private void assumeValid(final IResource resource) throws CoreException { final IProject proj = resource.getProject(); + if (proj == null) { + return; + } final GitProjectData pd = GitProjectData.get(proj); - if (pd == null) + if (pd == null) { return; + } final RepositoryMapping rm = pd.getRepositoryMapping(resource); - if (rm == null) + if (rm == null) { return; + } final Repository db = rm.getRepository(); DirCache cache = caches.get(db); @@ -141,12 +146,14 @@ public class AssumeUnchangedOperation implements IEGitOperation { final String path = rm.getRepoRelativePath(resource); if (resource instanceof IContainer) { - for (final DirCacheEntry ent : cache.getEntriesWithin(path)) + for (final DirCacheEntry ent : cache.getEntriesWithin(path)) { ent.setAssumeValid(assumeUnchanged); + } } else { final DirCacheEntry ent = cache.getEntry(path); - if (ent != null) + if (ent != null) { ent.setAssumeValid(assumeUnchanged); + } } } } diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CreatePatchOperation.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CreatePatchOperation.java index b1cd1f55db..691a99a5b9 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CreatePatchOperation.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CreatePatchOperation.java @@ -181,7 +181,7 @@ public class CreatePatchOperation implements IEGitOperation { // for "workspace patches" add project header each time project changes if (DiffHeaderFormat.WORKSPACE == headerFormat) { IProject p = getProject(ent); - if (!p.equals(project)) { + if (p != null && !p.equals(project)) { project = p; getOutputStream().write( encodeASCII("#P " + project.getName() + "\n")); //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/UntrackOperation.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/UntrackOperation.java index c18024bda7..566e7071eb 100644 --- a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/UntrackOperation.java +++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/UntrackOperation.java @@ -116,6 +116,9 @@ public class UntrackOperation implements IEGitOperation { private void remove(final IResource path) throws CoreException { final IProject proj = path.getProject(); + if (proj == null) { + return; + } final GitProjectData pd = GitProjectData.get(proj); if (pd == null) return; diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingFolderEntry.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingFolderEntry.java index 941d399ed7..1076bef74b 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingFolderEntry.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingFolderEntry.java @@ -16,6 +16,7 @@ import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IPath; import org.eclipse.egit.core.internal.util.ResourceUtil; import org.eclipse.egit.ui.internal.decorators.IProblemDecoratable; +import org.eclipse.jgit.annotations.NonNull; /** * A staged/unstaged folder entry in the tree @@ -84,6 +85,8 @@ public class StagingFolderEntry implements IAdaptable, IProblemDecoratable { /** * @return the absolute path corresponding to the folder entry */ + @SuppressWarnings("null") + @NonNull public IPath getLocation() { return repoLocation.append(repoRelativePath); } |