1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-19 14:15:50 +02:00

bug 367559: Double source folder in Make Targets View

This commit is contained in:
Andrew Gvozdev 2011-12-26 23:23:22 -05:00
parent 6d05e94448
commit 940b5b7566

View file

@ -22,6 +22,7 @@ import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CCorePreferenceConstants; import org.eclipse.cdt.core.CCorePreferenceConstants;
import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent; import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
import org.eclipse.cdt.core.settings.model.CSourceEntry;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICDescriptionDelta; import org.eclipse.cdt.core.settings.model.ICDescriptionDelta;
import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription;
@ -34,6 +35,7 @@ import org.eclipse.cdt.make.core.IMakeTargetListener;
import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.cdt.make.core.MakeTargetEvent; import org.eclipse.cdt.make.core.MakeTargetEvent;
import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeEvent;
@ -55,7 +57,7 @@ import org.eclipse.swt.widgets.Display;
/** /**
* Content provider for Make Targets view and for Make Targets dialog from * Content provider for Make Targets view and for Make Targets dialog from
* "Make Targets"->"Build..." in project context menu. * "Make Targets"->"Build..." in project context menu.
* *
* @noextend This class is not intended to be subclassed by clients. * @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients. * @noinstantiate This class is not intended to be instantiated by clients.
*/ */
@ -76,7 +78,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
/** /**
* Constructor. * Constructor.
* *
* @param flat - {@code true} for "flat" representation for a table * @param flat - {@code true} for "flat" representation for a table
* or {@code false} to represent as a tree. * or {@code false} to represent as a tree.
*/ */
@ -97,9 +99,9 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
} else if (obj instanceof IContainer) { } else if (obj instanceof IContainer) {
IContainer container = (IContainer)obj; IContainer container = (IContainer)obj;
ArrayList<Object> children = new ArrayList<Object>(); ArrayList<Object> children = new ArrayList<Object>();
boolean isAddingSourceRoots = !bFlatten && (container instanceof IProject) && CCorePlugin.showSourceRootsAtTopOfProject(); boolean isAddingSourceRoots = !bFlatten && (container instanceof IProject) && CCorePlugin.showSourceRootsAtTopOfProject();
// add source roots if necessary // add source roots if necessary
if (isAddingSourceRoots) { if (isAddingSourceRoots) {
IProject project = (IProject) container; IProject project = (IProject) container;
@ -110,7 +112,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
} }
} }
} }
// add regular folders // add regular folders
try { try {
IResource[] resources = container.members(); IResource[] resources = container.members();
@ -124,7 +126,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
} catch (CoreException e) { } catch (CoreException e) {
MakeCorePlugin.log(e); MakeCorePlugin.log(e);
} }
// finally add targets // finally add targets
try { try {
IMakeTarget[] targets = MakeCorePlugin.getDefault().getTargetManager().getTargets(container); IMakeTarget[] targets = MakeCorePlugin.getDefault().getTargetManager().getTargets(container);
@ -133,7 +135,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
MakeCorePlugin.log(e); MakeCorePlugin.log(e);
} }
return children.toArray(); return children.toArray();
} else if (obj instanceof TargetSourceContainer) { } else if (obj instanceof TargetSourceContainer) {
ArrayList<Object> children = new ArrayList<Object>(); ArrayList<Object> children = new ArrayList<Object>();
try { try {
@ -358,6 +360,11 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
public void run() { public void run() {
if (viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed()) if (viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed())
return; return;
if (CCorePlugin.showSourceRootsAtTopOfProject()) {
// that will refresh equal TargetSourceContainer from the tree
viewer.refresh(new TargetSourceContainer(new CSourceEntry((IFolder) resource, null, 0)));
}
viewer.refresh(resource); viewer.refresh(resource);
} }
}); });
@ -377,7 +384,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
* @since 7.1 * @since 7.1
*/ */
public void handleEvent(final CProjectDescriptionEvent event) { public void handleEvent(final CProjectDescriptionEvent event) {
@ -387,19 +394,19 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
ICDescriptionDelta delta = event.getDefaultSettingCfgDelta(); ICDescriptionDelta delta = event.getDefaultSettingCfgDelta();
if (delta==null) if (delta==null)
return; return;
int flags = delta.getChangeFlags(); int flags = delta.getChangeFlags();
if ( ((flags & ICDescriptionDelta.SOURCE_ADDED) != 0) || if ( ((flags & ICDescriptionDelta.SOURCE_ADDED) != 0) ||
((flags & ICDescriptionDelta.SOURCE_REMOVED) != 0) ) { ((flags & ICDescriptionDelta.SOURCE_REMOVED) != 0) ) {
IProject project = null; IProject project = null;
ICSettingObject setting = delta.getOldSetting(); ICSettingObject setting = delta.getOldSetting();
if (setting==null) if (setting==null)
setting = delta.getNewSetting(); setting = delta.getNewSetting();
if (setting instanceof ICConfigurationDescription) if (setting instanceof ICConfigurationDescription)
project = ((ICConfigurationDescription) setting).getProjectDescription().getProject(); project = ((ICConfigurationDescription) setting).getProjectDescription().getProject();
if (project!=null) if (project!=null)
viewer.refresh(project); viewer.refresh(project);
else else
@ -411,7 +418,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
* @since 7.1 * @since 7.1
*/ */
public void preferenceChange(PreferenceChangeEvent event) { public void preferenceChange(PreferenceChangeEvent event) {
@ -437,16 +444,16 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
return srcEntries; return srcEntries;
} }
} }
return new ICSourceEntry[0]; return new ICSourceEntry[0];
} }
/** /**
* Check if the resource is in the list of source entries. * Check if the resource is in the list of source entries.
* @param rc - resource to check. * @param rc - resource to check.
* @return {@code true} if the resource is a source folder, {@code false} otherwise. * @return {@code true} if the resource is a source folder, {@code false} otherwise.
* *
* @since 7.1 * @since 7.1
*/ */
public static boolean isSourceEntry(IResource rc) { public static boolean isSourceEntry(IResource rc) {