1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Merge remote-tracking branch 'cdt/master' into sd90

This commit is contained in:
Andrew Gvozdev 2012-01-06 19:01:10 -05:00
commit 06b3b35da1
8 changed files with 178 additions and 70 deletions

View file

@ -46,6 +46,8 @@ import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChang
import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Display;
@ -63,7 +65,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
/** presentation of the content, i.e. for MakeView tree of for BuildTargetDialog table */
protected boolean bFlatten;
protected TreeViewer viewer;
protected StructuredViewer viewer;
/**
* Default constructor.
@ -196,7 +198,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
if (this.viewer == null) {
MakeCorePlugin.getDefault().getTargetManager().addListener(this);
}
this.viewer = (TreeViewer) viewer;
this.viewer = (StructuredViewer) viewer;
IWorkspace oldWorkspace = null;
IWorkspace newWorkspace = null;
if (oldInput instanceof IWorkspace) {
@ -250,11 +252,23 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
if (viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed())
return;
if (viewer.getTree().getItemCount() <= 0) {
int itemCount = 0;
if (viewer instanceof TreeViewer) {
((TreeViewer) viewer).getTree().getItemCount();
} else if (viewer instanceof TableViewer) {
((TableViewer) viewer).getTable().getItemCount();
}
if (itemCount <= 0) {
return;
}
Object firstItem = viewer.getTree().getItem(0).getData();
Object firstItem = null;
if (viewer instanceof TreeViewer) {
firstItem = ((TreeViewer) viewer).getTree().getItem(0).getData();
} else if (viewer instanceof TableViewer) {
firstItem = ((TableViewer) viewer).getTable().getItem(0).getData();
}
IContainer parentContainer = null;
boolean isDrilledDown = !(firstItem instanceof IProject);

View file

@ -544,8 +544,6 @@ WriteOccurrenceAnnotation.label= C/C++ Write Occurrences
DocCommentOwner.name = DocCommentOwner
Doxygen.name = Doxygen
indexedFilesDecorator.label = C/C++ Indexed Files
# Hyperlinking
cEditorHyperlinkTarget= C/C++ Editor
cElementHyperlinkDetector= C/C++ Elements
@ -598,7 +596,12 @@ ShiftRightAction.label= &Shift Right
ShiftLeftAction.label= S&hift Left
# Decorators
excluded-file.name = C/C++ Files Excluded from Build
indexedFilesDecorator.label = C/C++ Indexed Files
indexedFilesDecorator.description = Decorates files indexed by C/C++ Indexer.
excludedFile.name = C/C++ Files Excluded from Build
excludedFile.description = Decorates source files excluded from C/C++ build.
includeFolderDecorator.name = C/C++ Missing Include Folders
includeFolderDecorator.description = Decorates missing include folders with error/warning indicator.
templatesViewName= Templates

View file

@ -4055,6 +4055,7 @@
label="%indexedFilesDecorator.label"
lightweight="true"
state="false">
<description>%indexedFilesDecorator.description</description>
<enablement>
<or>
<objectClass name="org.eclipse.cdt.core.model.ITranslationUnit"/>
@ -4062,6 +4063,34 @@
</or>
</enablement>
</decorator>
<decorator
adaptable="true"
class="org.eclipse.cdt.internal.ui.viewsupport.ExcludedFileDecorator"
id="org.eclipse.cdt.managedbuilder.ui.excludedFile"
label="%excludedFile.name"
lightweight="true"
state="true">
<description>%excludedFile.description</description>
<enablement>
<objectClass name="org.eclipse.core.resources.IFile" />
</enablement>
</decorator>
<decorator
adaptable="true"
class="org.eclipse.cdt.internal.ui.viewsupport.IncludeFolderDecorator"
id="org.eclipse.cdt.managedbuilder.ui.includeFolder"
label="%includeFolderDecorator.name"
lightweight="true"
location="BOTTOM_LEFT"
state="true">
<description>%includeFolderDecorator.description</description>
<enablement>
<or>
<objectClass name="org.eclipse.cdt.internal.ui.cview.IncludeReferenceProxy" />
<objectClass name="org.eclipse.cdt.core.model.IIncludeReference" />
</or>
</enablement>
</decorator>
</extension>
<!-- Hyperlinking support -->
@ -4259,16 +4288,6 @@
</complexArray>
</processType>
</extension>
<extension point="org.eclipse.ui.decorators">
<decorator adaptable="true"
class="org.eclipse.cdt.internal.ui.viewsupport.ExcludedFileDecorator"
id="org.eclipse.cdt.managedbuilder.ui.excludedFile" label="%excluded-file.name"
lightweight="true" state="true">
<enablement>
<objectClass name="org.eclipse.core.resources.IFile" />
</enablement>
</decorator>
</extension>
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider
class="org.eclipse.cdt.core.language.settings.providers.LanguageSettingsGenericProvider"

View file

@ -14,6 +14,7 @@ package org.eclipse.cdt.internal.ui.cview;
import java.util.ArrayList;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
@ -44,7 +45,7 @@ public class CViewContentProvider extends CElementContentProvider {
}
/**
*
*
*/
public CViewContentProvider(TreeViewer viewer, IWorkbenchPartSite site) {
super();
@ -84,7 +85,7 @@ public class CViewContentProvider extends CElementContentProvider {
objs = fManager.getChildren(element);
}
}
if (objs == null) {
objs = super.getChildren(element);
}
@ -125,14 +126,14 @@ public class CViewContentProvider extends CElementContentProvider {
}
return ref.getChildren();
}
private Object[] getProjectChildren(ICProject cproject) throws CModelException {
Object[] extras = null;
IArchiveContainer archive = cproject.getArchiveContainer();
IArchiveContainer archive = cproject.getArchiveContainer();
if (getArchives(archive).length > 0) {
extras = new Object[] {archive};
}
IBinaryContainer bin = cproject.getBinaryContainer();
IBinaryContainer bin = cproject.getBinaryContainer();
if (getExecutables(bin).length > 0) {
Object[] o = new Object[] {bin};
if (extras != null && extras.length > 0) {
@ -151,7 +152,7 @@ public class CViewContentProvider extends CElementContentProvider {
extras = o;
}
}
IncludeRefContainer incRefCont = new IncludeRefContainer(cproject);
Object[] incRefs = incRefCont.getChildren(cproject);
if (incRefs != null && incRefs.length > 0) {
@ -230,17 +231,16 @@ public class CViewContentProvider extends CElementContentProvider {
return (ars != null) && ars.length > 0;
} catch (CModelException e) {
return false;
}
}
} else if (element instanceof IncludeReferenceProxy) {
IIncludeReference ref = ((IncludeReferenceProxy)element).getReference();
IPath location = ref.getPath();
IContainer[] containers = ref.getCModel().getWorkspace().getRoot().findContainersForLocation(location);
for (int i = 0; i < containers.length; ++i) {
if (containers[i].isAccessible()) {
return false;
}
IIncludeReference reference = ((IncludeReferenceProxy)element).getReference();
IContainer container = ResourcesPlugin.getWorkspace().getRoot().getContainerForLocation(reference.getPath());
if (container != null) {
// do not allow to navigate to workspace containers inside "Includes" node
return false;
}
return reference.hasChildren();
}
return super.hasChildren(element);
}
@ -266,5 +266,5 @@ public class CViewContentProvider extends CElementContentProvider {
}
super.inputChanged(viewer, oldInput, newInput);
}
}

View file

@ -21,24 +21,25 @@ import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.graphics.Image;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IIncludeReference;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.ui.CDTSharedImages;
import org.eclipse.cdt.ui.CElementImageDescriptor;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.internal.corext.util.Strings;
import org.eclipse.cdt.internal.ui.newui.LanguageSettingsImages;
import org.eclipse.cdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
/*
* CViewLabelProvider
* CViewLabelProvider
*/
public class CViewLabelProvider extends AppearanceAwareLabelProvider {
public CViewLabelProvider(long textFlags, int imageFlags) {
super(textFlags, imageFlags);
}
@ -92,14 +93,14 @@ public class CViewLabelProvider extends AppearanceAwareLabelProvider {
p = p.removeFirstSegments(parentLocation.segmentCount());
}
return decorateText(p.toString(), element);
}
}
}
return super.getText(element);
}
@Override
public StyledString getStyledText(Object element) {
return Strings.markLTR(new StyledString(getText(element)));
return Strings.markLTR(new StyledString(getText(element)));
}
/* (non-Javadoc)
@ -107,20 +108,28 @@ public class CViewLabelProvider extends AppearanceAwareLabelProvider {
*/
@Override
public Image getImage(Object element) {
String imageKey = null;
if (element instanceof IncludeReferenceProxy) {
IIncludeReference reference = ((IncludeReferenceProxy)element).getReference();
IPath path = reference.getPath();
IContainer container = reference.getCModel().getWorkspace().getRoot().getContainerForLocation(path);
if (container != null && container.isAccessible()) {
ImageDescriptor desc = CDTSharedImages.getImageDescriptor(CDTSharedImages.IMG_OBJS_INCLUDES_FOLDER_WORKSPACE);
desc = new CElementImageDescriptor(desc, 0, CElementImageProvider.SMALL_SIZE);
return CUIPlugin.getImageDescriptorRegistry().get(desc);
IContainer container = ResourcesPlugin.getWorkspace().getRoot().getContainerForLocation(reference.getPath());
if (container != null) {
ICProject cproject = reference.getCProject();
IProject project = (cproject != null) ? cproject.getProject() : null;
boolean isProjectRelative = container.getProject().equals(project);
imageKey = LanguageSettingsImages.getImageKey(ICSettingEntry.INCLUDE_PATH, ICSettingEntry.VALUE_WORKSPACE_PATH, isProjectRelative);
} else {
imageKey = CDTSharedImages.IMG_OBJS_INCLUDES_FOLDER;
}
} else if (element instanceof IIncludeReference) {
ImageDescriptor desc = CElementImageProvider.getImageDescriptor(ICElement.C_CCONTAINER);
imageKey = CDTSharedImages.IMG_OBJS_CFOLDER;
}
if (imageKey != null) {
ImageDescriptor desc = CDTSharedImages.getImageDescriptor(imageKey);
desc = new CElementImageDescriptor(desc, 0, CElementImageProvider.SMALL_SIZE);
return CUIPlugin.getImageDescriptorRegistry().get(desc);
}
return super.getImage(element);
}
}

View file

@ -64,7 +64,7 @@ public class LanguageSettingsImages {
/**
* @return the base key for the image.
*/
private static String getImageKey(int kind, int flag, boolean isProjectRelative) {
public static String getImageKey(int kind, int flag, boolean isProjectRelative) {
String imageKey = null;
boolean isWorkspacePath = (flag & ICSettingEntry.VALUE_WORKSPACE_PATH) != 0;

View file

@ -5,7 +5,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*
* Contributors:
* Institute for Software - initial API and implementation
* Sergey Prigogin (Google)
@ -48,10 +48,6 @@ import org.eclipse.cdt.internal.ui.refactoring.utils.VisibilityEnum;
* @author Mirko Stocker
*/
public class ClassMemberInserter {
private final ICPPASTCompositeTypeSpecifier classNode;
private final VisibilityEnum visibility;
private final List<IASTNode> nodesToAdd;
private final ModificationCollector collector;
public static void createChange(ICPPASTCompositeTypeSpecifier classNode,
VisibilityEnum visibility, IASTNode nodeToAdd, boolean isField,
@ -62,25 +58,12 @@ public class ClassMemberInserter {
public static void createChange(ICPPASTCompositeTypeSpecifier classNode,
VisibilityEnum visibility, List<IASTNode> nodesToAdd, boolean isField,
ModificationCollector collector) {
new ClassMemberInserter(classNode, visibility, nodesToAdd, collector, isField);
}
private ClassMemberInserter(ICPPASTCompositeTypeSpecifier classNode,
VisibilityEnum visibility, List<IASTNode> nodesToAdd, ModificationCollector collector,
boolean isField) {
this.nodesToAdd = new ArrayList<IASTNode>(nodesToAdd);
this.classNode = classNode;
this.visibility = visibility;
this.collector = collector;
createRewrites(isField);
}
private void createRewrites(boolean isField) {
nodesToAdd = new ArrayList<IASTNode>(nodesToAdd);
VisibilityEnum defaultVisibility = classNode.getKey() == IASTCompositeTypeSpecifier.k_struct ?
VisibilityEnum.v_public : VisibilityEnum.v_private;
VisibilityEnum currentVisibility = defaultVisibility;
boolean ascendingVisibilityOrder = isAscendingVisibilityOrder();
boolean ascendingVisibilityOrder = isAscendingVisibilityOrder(classNode);
int lastFunctionIndex = -1;
int lastFieldIndex = -1;
int lastMatchingVisibilityIndex = -1;
@ -134,16 +117,20 @@ public class ClassMemberInserter {
ASTRewrite rewrite = collector.rewriterForTranslationUnit(classNode.getTranslationUnit());
for (IASTNode node : nodesToAdd) {
rewrite.insertBefore(classNode, nextNode, node, createEditDescription());
rewrite.insertBefore(classNode, nextNode, node, createEditDescription(classNode));
}
}
// Not instantiatable. All methods are static.
private ClassMemberInserter() {
}
private TextEditGroup createEditDescription() {
private static TextEditGroup createEditDescription(ICPPASTCompositeTypeSpecifier classNode) {
return new TextEditGroup(NLS.bind(Messages.AddDeclarationNodeToClassChange_AddDeclaration,
classNode.getName()));
}
private boolean isAscendingVisibilityOrder() {
private static boolean isAscendingVisibilityOrder(ICPPASTCompositeTypeSpecifier classNode) {
IPreferencesService preferences = Platform.getPreferencesService();
IASTTranslationUnit ast = classNode.getTranslationUnit();
ITranslationUnit tu = ast.getOriginatingTranslationUnit();

View file

@ -0,0 +1,76 @@
/*******************************************************************************
* Copyright (c) 2010, 2012 Andrew Gvozdev and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Andrew Gvozdev - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui.viewsupport;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.preference.JFacePreferences;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ILightweightLabelDecorator;
import org.eclipse.cdt.core.model.IIncludeReference;
import org.eclipse.cdt.ui.CDTSharedImages;
import org.eclipse.cdt.internal.ui.cview.IncludeReferenceProxy;
/**
* Determines whether an include folder under "Includes" node does exist
* and if not decorates the file's icon with warning overlay and
* renders the label using the qualifier (gray) color.
*/
public class IncludeFolderDecorator implements ILightweightLabelDecorator {
@Override
public void decorate(Object element, IDecoration decoration) {
boolean isAccesible = true;
if (element instanceof IncludeReferenceProxy) {
IIncludeReference reference = ((IncludeReferenceProxy)element).getReference();
IPath path = reference.getPath();
IContainer container = ResourcesPlugin.getWorkspace().getRoot().getContainerForLocation(path);
if (container != null) {
isAccesible = container.isAccessible();
} else {
isAccesible = path.toFile().exists();
}
} else if (element instanceof IIncludeReference) {
IPath path = ((IIncludeReference) element).getPath();
isAccesible = path.toFile().exists();
}
if (!isAccesible) {
decoration.addOverlay(CDTSharedImages.getImageDescriptor(CDTSharedImages.IMG_OVR_WARNING));
// JFacePreferences.QUALIFIER_COLOR colors label in gray
decoration.setForegroundColor(JFaceResources.getColorRegistry().get(JFacePreferences.QUALIFIER_COLOR));
}
}
@Override
public void addListener(ILabelProviderListener listener) {
// We don't track state changes
}
@Override
public void dispose() {
}
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
@Override
public void removeListener(ILabelProviderListener listener) {
// We don't track state changes
}
}