From 2d7e27301cc89fe30abc392598a96fac2e8d299a Mon Sep 17 00:00:00 2001 From: Thomas Wolf Date: Thu, 15 Aug 2019 14:25:42 +0200 Subject: Don't decorate ResourceMappings mapping only unshared resources If a ResourceMapping has no shared resources, its state will be untracked, which would make EGit show the "?" overlay. Bug: 550082 Change-Id: I2bf6c1b7261907d8d49188317fc4a7768bc0f046 Signed-off-by: Thomas Wolf --- .../decorators/DecoratableResourceGroup.java | 42 ++++++++++++++++++++++ .../decorators/DecoratableResourceMapping.java | 8 +++-- .../internal/decorators/DecoratableWorkingSet.java | 8 +++-- .../decorators/GitLightweightDecorator.java | 6 +++- 4 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceGroup.java (limited to 'org.eclipse.egit.ui') diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceGroup.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceGroup.java new file mode 100644 index 0000000000..353231190b --- /dev/null +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceGroup.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (C) 2019, Thomas Wolf + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.egit.ui.internal.decorators; + +import org.eclipse.core.resources.mapping.ResourceMapping; + +/** + * Abstract base class for decoratable {@link ResourceMapping}s. + */ +public abstract class DecoratableResourceGroup extends DecoratableResource { + + /** Set to {@code true} if there is at least one shared resource. */ + protected boolean someShared = false; + + /** + * Creates a new {@link DecoratableResourceGroup}. + * + * @param mapping + * to decorate + */ + protected DecoratableResourceGroup(ResourceMapping mapping) { + super(null); // No resource + } + + /** + * Tells whether the ResourceMapping contains shared resources at all. + * + * @return whether the resource mapping contains any shared resources + */ + public boolean hasSharedResources() { + return someShared; + } + +} diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceMapping.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceMapping.java index 4415537be7..70282f320d 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceMapping.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceMapping.java @@ -26,7 +26,7 @@ import org.eclipse.jgit.lib.Repository; /** * Represents a decoratable resource mapping (i.e. a group of resources). */ -public class DecoratableResourceMapping extends DecoratableResource { +public class DecoratableResourceMapping extends DecoratableResourceGroup { private static final String MULTIPLE = "*"; //$NON-NLS-1$ @@ -45,7 +45,7 @@ public class DecoratableResourceMapping extends DecoratableResource { */ public DecoratableResourceMapping(ResourceMapping mapping) throws IOException { - super(null); // no resource ... + super(mapping); Set repositories = new HashSet<>(); Set stagingStates = new HashSet<>(); @@ -108,6 +108,10 @@ public class DecoratableResourceMapping extends DecoratableResource { setStagingState(StagingState.MODIFIED); } + if (repositories.isEmpty()) { + return; + } + someShared = true; decorateRepositoryInformation(this, repositories); } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableWorkingSet.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableWorkingSet.java index 111a5244da..7d2ab09cb2 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableWorkingSet.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableWorkingSet.java @@ -31,7 +31,7 @@ import org.eclipse.ui.IWorkingSet; /** * Represents a decoratable resource mapping (i.e. a group of resources). */ -public class DecoratableWorkingSet extends DecoratableResource { +public class DecoratableWorkingSet extends DecoratableResourceGroup { /** * Denotes the type of decoratable resource, used by the decoration helper. @@ -50,7 +50,7 @@ public class DecoratableWorkingSet extends DecoratableResource { * @throws IOException */ public DecoratableWorkingSet(ResourceMapping mapping) throws IOException { - super(null); // no resource ... + super(mapping); this.mapping = mapping; IProject[] projects = mapping.getProjects(); @@ -97,6 +97,10 @@ public class DecoratableWorkingSet extends DecoratableResource { repositories.add(repository); } + if (repositories.isEmpty()) { + return; + } + someShared = true; DecoratableResourceMapping.decorateRepositoryInformation(this, repositories); } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitLightweightDecorator.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitLightweightDecorator.java index 9cf415bf48..16d315e62b 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitLightweightDecorator.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/GitLightweightDecorator.java @@ -252,7 +252,7 @@ public class GitLightweightDecorator extends GitDecorator boolean isWorkingSet = mapping.getModelObject() instanceof IWorkingSet; - IDecoratableResource decoRes; + DecoratableResourceGroup decoRes; try { if (isWorkingSet) { decoRes = new DecoratableWorkingSet(mapping); @@ -264,6 +264,10 @@ public class GitLightweightDecorator extends GitDecorator NLS.bind(UIText.Decorator_exceptionMessage, element), e)); } + if (!decoRes.hasSharedResources()) { + return; + } + /* * don't render question marks on working sets. !isTracked() can have two reasons: * 1) nothing is tracked. -- cgit v1.2.3