diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index 3eeda1b29e9..7a9dce4c6ce 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,13 @@ +2004-04-23 Alain Magloire + + Tentative fix for PR 59098. + * model/org/eclipse/cdt/internal/core/model/CContainerInfo.java + * model/org/eclipse/cdt/internal/core/model/CElement.java + * model/org/eclipse/cdt/internal/core/model/CModelManager.java + * model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java + * model/org/eclipse/cdt/internal/core/model/IncludeReference.java + + 2004-04-23 Alain Magloire Moving the work from Sam Robb part of PR 52864, this diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java index 5c5d32ed976..490cc7e84ec 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java @@ -12,9 +12,12 @@ package org.eclipse.cdt.internal.core.model; import java.util.ArrayList; +import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.model.ISourceRoot; import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFile; import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; @@ -42,8 +45,19 @@ public class CContainerInfo extends OpenableInfo { return nonCResources; ArrayList notChildren = new ArrayList(); - ICElement parent = getElement(); - ICProject cproject = parent.getCProject(); + ICElement celement = getElement(); + ICProject cproject = celement.getCProject(); + // move back to the sourceroot. + while (! (celement instanceof ISourceRoot) && celement != null) { + celement = celement.getParent(); + } + ISourceRoot root = null; + if (celement instanceof ISourceRoot) { + root = (ISourceRoot)celement; + } else { + return new Object[0]; // should not be. assert + } + try { IResource[] resources = null; if (res instanceof IContainer) { @@ -55,34 +69,31 @@ public class CContainerInfo extends OpenableInfo { if (resources != null) { ICElement[] children = getChildren(); for (int i = 0; i < resources.length; i++) { - boolean found = false; - // Check if the folder is not itself a sourceEntry. - if (resources[i].getType() == IResource.FOLDER) { - IPath fullPath = resources[i].getFullPath(); - for (int k = 0; k < entries.length; k++) { - IPathEntry entry = entries[k]; - if (entry.getEntryKind() == IPathEntry.CDT_SOURCE) { - IPath sourcePath = entry.getPath(); - if (fullPath.equals(sourcePath)) { - found = true; - break; + IResource member = resources[i]; + switch(member.getType()) { + case IResource.FOLDER: { + // Check if the folder is not itself a sourceEntry. + IPath resourcePath = member.getFullPath(); + if (cproject.isOnSourceRoot(member) || isSourceEntry(resourcePath, entries)) { + continue; + } + break; + } + case IResource.FILE: { + String filename = member.getName(); + if (CoreModel.isValidTranslationUnitName(filename) && root.isOnSourceEntry(member)) { + continue; + } else { + if (root.isOnSourceEntry(member)) { + if (CModelManager.getDefault().createBinaryFile((IFile)member) != null) { + continue; + } } } + break; } } - // Check the children for a match - if (!found) { - for (int j = 0; j < children.length; j++) { - IResource r = children[j].getResource(); - if (r != null && r.equals(resources[i])){ - found = true; - break; - } - } - } - if (!found) { - notChildren.add(resources[i]); - } + notChildren.add(member); } } } catch (CoreException e) { @@ -101,4 +112,17 @@ public class CContainerInfo extends OpenableInfo { public void setNonCResources(Object[] resources) { nonCResources = resources; } + + private static boolean isSourceEntry(IPath resourcePath, IPathEntry[] entries) { + for (int k = 0; k < entries.length; k++) { + IPathEntry entry = entries[k]; + if (entry.getEntryKind() == IPathEntry.CDT_SOURCE) { + IPath sourcePath = entry.getPath(); + if (resourcePath.equals(sourcePath)) { + return true; + } + } + } + return false; + } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CElement.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CElement.java index a7b72994ab2..35ed80075d9 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CElement.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CElement.java @@ -4,7 +4,6 @@ package org.eclipse.cdt.internal.core.model; * All Rights Reserved. */ -import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElementVisitor; @@ -82,7 +81,8 @@ public abstract class CElement extends PlatformObject implements ICElement { try { return getElementInfo() != null; } catch (CModelException e) { - CCorePlugin.log(e); + // Do not log it, it will fil the .log alarming the user. + //CCorePlugin.log(e); return false; } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java index 661e3d596ed..37610db4da3 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java @@ -372,18 +372,32 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe if (path == null || cproject == null) { return null; } - File file = path.toFile(); - if (file == null || !file.isFile()) { - return null; - } - try { - IIncludeReference[] includeReferences = cproject.getIncludeReferences(); - for (int i = 0; i < includeReferences.length; i++) { - if (includeReferences[i].isOnIncludeEntry(path)) { - return new ExternalTranslationUnit(includeReferences[i], path); - } + if (path.isAbsolute()) { + File file = path.toFile(); + if (file == null || !file.isFile()) { + return null; } - } catch (CModelException e) { + try { + IIncludeReference[] includeReferences = cproject.getIncludeReferences(); + for (int i = 0; i < includeReferences.length; i++) { + if (includeReferences[i].isOnIncludeEntry(path)) { + return new ExternalTranslationUnit(includeReferences[i], path); + } + } + } catch (CModelException e) { + } + } else { + try { + IIncludeReference[] includeReferences = cproject.getIncludeReferences(); + for (int i = 0; i < includeReferences.length; i++) { + IPath includePath = includeReferences[i].getPath().append(path); + File file = path.toFile(); + if (file != null && file.isFile()) { + return new ExternalTranslationUnit(includeReferences[i], path); + } + } + } catch (CModelException e) { + } } return null; } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProjectInfo.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProjectInfo.java index e56bfc0a119..0044529a725 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProjectInfo.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProjectInfo.java @@ -8,16 +8,22 @@ package org.eclipse.cdt.internal.core.model; import java.util.ArrayList; import org.eclipse.cdt.core.model.CModelException; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.CoreModelUtil; import org.eclipse.cdt.core.model.IArchiveContainer; import org.eclipse.cdt.core.model.IBinaryContainer; -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.ILibraryReference; import org.eclipse.cdt.core.model.IOutputEntry; +import org.eclipse.cdt.core.model.IPathEntry; +import org.eclipse.cdt.core.model.ISourceEntry; import org.eclipse.cdt.core.model.ISourceRoot; import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; /** * Info for ICProject. @@ -65,15 +71,25 @@ class CProjectInfo extends OpenableInfo { // determine if src == project ISourceRoot root = null; - ICElement[] elements = getChildren(); - for (int i = 0; i < elements.length; i++) { - if (elements[i] instanceof ISourceRoot) { - ISourceRoot source = (ISourceRoot)elements[i]; - if (getElement().getPath().equals(source.getPath())) { - root = source; - break; + boolean srcIsProject = false; + IPathEntry[] entries = null; + ICProject cproject = getElement().getCProject(); + IPath projectPath = cproject.getProject().getFullPath(); + char[][] exclusionPatterns = null; + try { + entries = cproject.getResolvedPathEntries(); + for (int i = 0; i < entries.length; i++) { + if (entries[i].getEntryKind() == IPathEntry.CDT_SOURCE) { + ISourceEntry entry = (ISourceEntry)entries[i]; + if (projectPath.equals(entry.getPath())) { + srcIsProject = true; + exclusionPatterns = entry.fullExclusionPatternChars(); + break; + } } } + } catch (CModelException e) { + // ignore } ArrayList notChildren = new ArrayList(); @@ -85,24 +101,31 @@ class CProjectInfo extends OpenableInfo { } if (resources != null) { - ICElement[] children; - if (root == null) { - children = getChildren(); - } else { - children = root.getChildren(); - } for (int i = 0; i < resources.length; i++) { - boolean found = false; - for (int j = 0; j < children.length; j++) { - IResource r = children[j].getResource(); - if (r != null && r.equals(resources[i])){ - found = true; + IResource member = resources[i]; + switch(member.getType()) { + case IResource.FILE: { + String filename = member.getName(); + if (srcIsProject) { + if (CoreModel.isValidTranslationUnitName(filename) + && !CoreModelUtil.isExcluded(member, exclusionPatterns)) { + continue; + } else if (!CoreModelUtil.isExcluded(member, exclusionPatterns)) { + Object o = CModelManager.getDefault().createBinaryFile((IFile)member); + if (o != null) { + continue; + } + } + } break; } + case IResource.FOLDER: { + if (srcIsProject && !CoreModelUtil.isExcluded(member, exclusionPatterns)) { + continue; + } + } } - if (!found) { - notChildren.add(resources[i]); - } + notChildren.add(member); } } } catch (CoreException e) { diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java index e86737df40a..3760a4d44a7 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java @@ -146,7 +146,10 @@ public class DeltaProcessor { Openable parent = (Openable) child.getParent(); if (parent != null && parent.isOpen()) { CElementInfo info = parent.getElementInfo(); - info.addChild(child); + // Check if the element exits + if (!info.includesChild(child)) { + info.addChild(child); + } } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IncludeReference.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IncludeReference.java index c311f710f0c..409036b781f 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IncludeReference.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IncludeReference.java @@ -44,7 +44,7 @@ public class IncludeReference extends Openable implements IIncludeReference { } public IncludeReference(ICElement celement, IIncludeEntry entry, IPath path) { - super(celement, null, path.toString(), ICElement.C_VCONTAINER); + super(celement, null, path.lastSegment(), ICElement.C_VCONTAINER); fIncludeEntry = entry; fPath = path; } @@ -130,4 +130,10 @@ public class IncludeReference extends Openable implements IIncludeReference { return false; } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.model.ICElement#getPath() + */ + public IPath getPath() { + return fPath; + } } diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index e0e8ec476cb..b3207a75fb1 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,10 @@ +2004-04-23 Alain Magloire + + Tentative fix for PR 59098. + * src/org/eclipse/cdt/internal/ui/cview/CView.java + * src/org/eclipse/cdt/internal/ui/cview/CViewLabelProvider.java + + 2004-04-23 Hoda Amer Fix for bug#Bug 59618 : [Refactoring] Be able to append refactor action group after my own group diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CView.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CView.java index 7f677303e0c..0e4ee354474 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CView.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CView.java @@ -18,7 +18,6 @@ import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IParent; import org.eclipse.cdt.core.model.ISourceReference; import org.eclipse.cdt.core.model.ITranslationUnit; -import org.eclipse.cdt.internal.ui.StandardCElementLabelProvider; import org.eclipse.cdt.internal.ui.drag.DelegatingDragAdapter; import org.eclipse.cdt.internal.ui.drag.FileTransferDragAdapter; import org.eclipse.cdt.internal.ui.drag.LocalSelectionTransferDragAdapter; @@ -28,6 +27,7 @@ import org.eclipse.cdt.internal.ui.preferences.CPluginPreferencePage; import org.eclipse.cdt.internal.ui.util.EditorUtility; import org.eclipse.cdt.internal.ui.util.ProblemTreeViewer; import org.eclipse.cdt.ui.CElementContentProvider; +import org.eclipse.cdt.ui.CElementLabelProvider; import org.eclipse.cdt.ui.CElementSorter; import org.eclipse.cdt.ui.CLocalSelectionTransfer; import org.eclipse.cdt.ui.CUIPlugin; @@ -554,8 +554,8 @@ public class CView extends ViewPart implements ISetSelectionTarget, IPropertyCha return new CViewContentProvider(showCUChildren, true); } - protected StandardCElementLabelProvider createLabelProvider() { - return new StandardCElementLabelProvider(); + protected CElementLabelProvider createLabelProvider() { + return new CViewLabelProvider(); } /* diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CViewLabelProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CViewLabelProvider.java new file mode 100644 index 00000000000..d6b9dca9fb7 --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CViewLabelProvider.java @@ -0,0 +1,50 @@ +/********************************************************************** + * Copyright (c) 2002,2003,2004 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * QNX Software Systems - Initial API and implementation +***********************************************************************/ +package org.eclipse.cdt.internal.ui.cview; + +import org.eclipse.cdt.core.model.IIncludeReference; +import org.eclipse.cdt.internal.ui.IAdornmentProvider; +import org.eclipse.cdt.internal.ui.StandardCElementLabelProvider; + +/* + * CViewLabelProvider + */ +public class CViewLabelProvider extends StandardCElementLabelProvider { + + /** + * + */ + public CViewLabelProvider() { + super(); + } + + /** + * @param flags + * @param adormentProviders + */ + public CViewLabelProvider(int flags, IAdornmentProvider[] adormentProviders) { + super(flags, adormentProviders); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) + */ + public String getText(Object element) { + if (element instanceof IIncludeReference) { + IIncludeReference ref = (IIncludeReference)element; + Object parent = ref.getParent(); + if (!(parent instanceof IIncludeReference)) { + return ref.getPath().toString(); + } + } + return super.getText(element); + } +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPListElement.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPListElement.java index e12663e63df..07ea7860ae3 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPListElement.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPListElement.java @@ -113,7 +113,15 @@ public class CPListElement { } private IPathEntry newPathEntry() { - IPath[] exclusionPattern = (IPath[]) getAttribute(EXCLUSION); + IPath[] exclusionPattern; + //IPath[] exclusionPattern = (IPath[]) getAttribute(EXCLUSION); + Object o = getAttribute(EXCLUSION); + Class clazz = o.getClass(); + if (clazz.isArray()) { + exclusionPattern = (IPath[]) o; + } else { + exclusionPattern = new IPath[0]; + } IPath base = (IPath) getAttribute(BASE); IPath baseRef = (IPath) getAttribute(BASE_REF); switch (fEntryKind) { @@ -255,7 +263,7 @@ public class CPListElement { if (attrib != null) { return attrib.getValue(); } - return null; + return new Path(""); } private void createAttributeElement(String key, Object value) {