1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-01 13:25:45 +02:00

Discovered path container wizard page now properly displays per file scanner info.

Fixed couple of NPEs.
This commit is contained in:
Vladimir Hirsl 2005-06-08 17:55:02 +00:00
parent 8c3f6a184a
commit 04cd3adec5
9 changed files with 341 additions and 224 deletions

View file

@ -707,8 +707,13 @@ public class PerFileSICollector implements IScannerInfoCollector2, IScannerInfoC
* @return * @return
*/ */
private CCommandDSC getCommand(IPath path) { private CCommandDSC getCommand(IPath path) {
IFile file = project.getWorkspace().getRoot().getFile(path); try {
return getCommand(file); IFile file = project.getWorkspace().getRoot().getFile(path);
return getCommand(file);
}
catch (Exception e) {
return null;
}
} }
private CCommandDSC getCommand(IFile file) { private CCommandDSC getCommand(IFile file) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

View file

@ -427,8 +427,9 @@
point="org.eclipse.cdt.ui.PathContainerPage"> point="org.eclipse.cdt.ui.PathContainerPage">
<PathContainerPage <PathContainerPage
class="org.eclipse.cdt.make.ui.dialogs.DiscoveredPathContainerPage" class="org.eclipse.cdt.make.ui.dialogs.DiscoveredPathContainerPage"
name="%DiscoveredScannerInfoContainer.name" icon="icons/obj16/lib_obj.gif"
id="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/> id="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"
name="%DiscoveredScannerInfoContainer.name"/>
</extension> </extension>
<extension <extension
point="org.eclipse.core.runtime.preferences"> point="org.eclipse.core.runtime.preferences">

View file

@ -26,8 +26,12 @@ public class DiscoveredElement {
public static final int CONTAINER = 1; public static final int CONTAINER = 1;
public static final int INCLUDE_PATH = 2; public static final int INCLUDE_PATH = 2;
public static final int SYMBOL_DEFINITION = 3; public static final int SYMBOL_DEFINITION = 3;
public static final int PATHS_GROUP = 4; public static final int INCLUDE_FILE = 4;
public static final int SYMBOLS_GROUP = 5; public static final int MACROS_FILE = 5;
public static final int PATHS_GROUP = 10;
public static final int SYMBOLS_GROUP = 11;
public static final int INCLUDE_FILE_GROUP = 12;
public static final int MACROS_FILE_GROUP = 13;
private IProject fProject; private IProject fProject;
private String fEntry; private String fEntry;
@ -53,71 +57,58 @@ public class DiscoveredElement {
boolean removed, boolean removed,
boolean system) { boolean system) {
DiscoveredElement rv = null; DiscoveredElement rv = null;
int parentKind = 0;
switch (kind) { switch (kind) {
case CONTAINER: { case CONTAINER: {
rv = new DiscoveredElement(project, entry, kind, removed, system); rv = new DiscoveredElement(project, entry, kind, removed, system);
DiscoveredElement group = new DiscoveredElement(project, null, PATHS_GROUP, false, false); DiscoveredElement group = new DiscoveredElement(project, null, PATHS_GROUP, false, false);
rv.fChildren.add(group); rv.fChildren.add(group);
group.fParent = rv; group.setParent(rv);
group = new DiscoveredElement(project, null, SYMBOLS_GROUP, false, false); group = new DiscoveredElement(project, null, SYMBOLS_GROUP, false, false);
rv.fChildren.add(group); rv.fChildren.add(group);
group.fParent = rv; group.setParent(rv);
group = new DiscoveredElement(project, null, INCLUDE_FILE_GROUP, false, false);
rv.fChildren.add(group);
group.setParent(rv);
group = new DiscoveredElement(project, null, MACROS_FILE_GROUP, false, false);
rv.fChildren.add(group);
group.setParent(rv);
} }
break; return rv;
case INCLUDE_PATH: { case INCLUDE_PATH:
if (parent != null) { parentKind = PATHS_GROUP;
DiscoveredElement group = null; break;
if (parent.getEntryKind() == PATHS_GROUP) { case SYMBOL_DEFINITION:
parent = parent.getParent(); parentKind = SYMBOLS_GROUP;
group = parent; break;
} case INCLUDE_FILE:
else if (parent.getEntryKind() == CONTAINER) { parentKind = INCLUDE_FILE_GROUP;
for (Iterator i = parent.fChildren.iterator(); i.hasNext(); ) { break;
DiscoveredElement child = (DiscoveredElement) i.next(); case MACROS_FILE:
if (child.getEntryKind() == PATHS_GROUP) { parentKind = MACROS_FILE_GROUP;
group = child; break;
break; }
} if (parentKind != 0) {
if (parent != null) {
DiscoveredElement group = null;
if (parent.getEntryKind() == parentKind) {
group = parent;
}
else if (parent.getEntryKind() == CONTAINER) {
for (Iterator i = parent.fChildren.iterator(); i.hasNext(); ) {
DiscoveredElement child = (DiscoveredElement) i.next();
if (child.getEntryKind() == parentKind) {
group = child;
break;
} }
if (group == null) {
return null;
}
}
if (parent.getEntryKind() == CONTAINER) {
rv = new DiscoveredElement(project, entry, kind, removed, system);
group.fChildren.add(rv);
rv.setParent(group);
} }
} }
} if (group != null) {
break; rv = new DiscoveredElement(project, entry, kind, removed, system);
case SYMBOL_DEFINITION: { group.fChildren.add(rv);
if (parent != null) { rv.setParent(group);
DiscoveredElement group = null;
if (parent.getEntryKind() == SYMBOLS_GROUP) {
parent = parent.getParent();
group = parent;
}
else if (parent.getEntryKind() == CONTAINER) {
for (Iterator i = parent.fChildren.iterator(); i.hasNext(); ) {
DiscoveredElement child = (DiscoveredElement) i.next();
if (child.getEntryKind() == SYMBOLS_GROUP) {
group = child;
break;
}
}
if (group == null) {
return null;
}
}
if (parent.getEntryKind() == CONTAINER) {
rv = new DiscoveredElement(project, entry, kind, removed, system);
group.fChildren.add(rv);
rv.setParent(group);
}
} }
} }
break;
} }
return rv; return rv;
} }
@ -184,6 +175,8 @@ public class DiscoveredElement {
switch(fEntryKind) { switch(fEntryKind) {
case INCLUDE_PATH: case INCLUDE_PATH:
case SYMBOL_DEFINITION: case SYMBOL_DEFINITION:
case INCLUDE_FILE:
case MACROS_FILE:
return new Object[0]; return new Object[0];
} }
return fChildren.toArray(); return fChildren.toArray();
@ -193,6 +186,8 @@ public class DiscoveredElement {
switch(fEntryKind) { switch(fEntryKind) {
case INCLUDE_PATH: case INCLUDE_PATH:
case SYMBOL_DEFINITION: case SYMBOL_DEFINITION:
case INCLUDE_FILE:
case MACROS_FILE:
return false; return false;
} }
return (fChildren.size() > 0); return (fChildren.size() > 0);

View file

@ -35,17 +35,24 @@ public class DiscoveredElementLabelProvider extends LabelProvider implements ICo
private final Color inDirect = new Color(Display.getDefault(), new RGB(170, 170, 170)); private final Color inDirect = new Color(Display.getDefault(), new RGB(170, 170, 170));
private ImageDescriptor fIncludeIcon, fMacroIcon, fContainerImage; private ImageDescriptor fIncludeIcon, fMacroIcon, fContainerImage;
private ImageDescriptor fRemovedIncludeIcon, fRemovedMacroIcon; private ImageDescriptor fIncludeGroupIcon, fMacroGroupIcon;
private ImageDescriptor fIncludeAndMacrosFileIcon;
private ImageDescriptor fIncludeAndMacrosFileGroupIcon;
private ImageDescriptorRegistry fRegistry; private ImageDescriptorRegistry fRegistry;
private final String DISABLED_LABEL = MakeUIPlugin. private final String DISABLED_LABEL = MakeUIPlugin.
getResourceString("ManageScannerConfigDialogCommon.discoveredGroup.annotation.disabled");//$NON-NLS-1$ getResourceString("ManageScannerConfigDialogCommon.discoveredGroup.annotation.disabled");//$NON-NLS-1$
public DiscoveredElementLabelProvider() { public DiscoveredElementLabelProvider() {
fRegistry = CUIPlugin.getImageDescriptorRegistry(); fRegistry = CUIPlugin.getImageDescriptorRegistry();
fIncludeIcon = CPluginImages.DESC_OBJS_INCLUDES_FOLDER;
fMacroIcon = CPluginImages.DESC_OBJS_MACRO;
fContainerImage = CPluginImages.DESC_OBJS_LIBRARY; fContainerImage = CPluginImages.DESC_OBJS_LIBRARY;
fIncludeGroupIcon = CPluginImages.DESC_OBJS_INCLUDES_CONTAINER;
fMacroGroupIcon = CPluginImages.DESC_OBJS_MACRO;
fIncludeAndMacrosFileGroupIcon = CPluginImages.DESC_OBJS_INCLUDE;
fIncludeIcon = CPluginImages.DESC_OBJS_INCLUDES_FOLDER;
// fQuoteIncludeIcon = CPluginImages.DESC_OBJS_QUOTE_INCLUDES_FOLDER;
fIncludeAndMacrosFileIcon = CPluginImages.DESC_OBJS_TUNIT_HEADER;
fMacroIcon = fMacroGroupIcon;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -69,7 +76,7 @@ public class DiscoveredElementLabelProvider extends LabelProvider implements ICo
Image image = null; Image image = null;
switch (elem.getEntryKind()) { switch (elem.getEntryKind()) {
case DiscoveredElement.PATHS_GROUP: case DiscoveredElement.PATHS_GROUP:
image = CPluginImages.get(CPluginImages.IMG_OBJS_INCLUDES_CONTAINER); image = fRegistry.get(fIncludeGroupIcon);
break; break;
case DiscoveredElement.CONTAINER: case DiscoveredElement.CONTAINER:
image = fRegistry.get(fContainerImage); image = fRegistry.get(fContainerImage);
@ -80,7 +87,15 @@ public class DiscoveredElementLabelProvider extends LabelProvider implements ICo
case DiscoveredElement.SYMBOLS_GROUP: case DiscoveredElement.SYMBOLS_GROUP:
case DiscoveredElement.SYMBOL_DEFINITION: case DiscoveredElement.SYMBOL_DEFINITION:
image = fRegistry.get(fMacroIcon); image = fRegistry.get(fMacroIcon);
break;
case DiscoveredElement.INCLUDE_FILE:
case DiscoveredElement.MACROS_FILE:
image = fRegistry.get(fIncludeAndMacrosFileIcon);
break; break;
case DiscoveredElement.INCLUDE_FILE_GROUP:
case DiscoveredElement.MACROS_FILE_GROUP:
image = fRegistry.get(fIncludeAndMacrosFileGroupIcon);
break;
} }
if (image != null && elem.isRemoved()) { if (image != null && elem.isRemoved()) {
image = new DiscoveredElementImageDescriptor(image, true).createImage(); image = new DiscoveredElementImageDescriptor(image, true).createImage();
@ -99,9 +114,15 @@ public class DiscoveredElementLabelProvider extends LabelProvider implements ICo
return CPathEntryMessages.getString("CPElementLabelProvider.Includes"); //$NON-NLS-1$ return CPathEntryMessages.getString("CPElementLabelProvider.Includes"); //$NON-NLS-1$
case DiscoveredElement.SYMBOLS_GROUP: case DiscoveredElement.SYMBOLS_GROUP:
return CPathEntryMessages.getString("CPElementLabelProvider.PreprocessorSymbols"); //$NON-NLS-1$ return CPathEntryMessages.getString("CPElementLabelProvider.PreprocessorSymbols"); //$NON-NLS-1$
case DiscoveredElement.INCLUDE_FILE_GROUP:
return CPathEntryMessages.getString("CPElementLabelProvider.IncludeFiles"); //$NON-NLS-1$
case DiscoveredElement.MACROS_FILE_GROUP:
return CPathEntryMessages.getString("CPElementLabelProvider.MacrosFiles"); //$NON-NLS-1$
case DiscoveredElement.CONTAINER: case DiscoveredElement.CONTAINER:
case DiscoveredElement.INCLUDE_PATH: case DiscoveredElement.INCLUDE_PATH:
case DiscoveredElement.SYMBOL_DEFINITION: case DiscoveredElement.SYMBOL_DEFINITION:
case DiscoveredElement.INCLUDE_FILE:
case DiscoveredElement.MACROS_FILE:
return elem.getEntry() + (elem.isRemoved() ? addAnnotation(DISABLED_LABEL) : ""); //$NON-NLS-1$ return elem.getEntry() + (elem.isRemoved() ? addAnnotation(DISABLED_LABEL) : ""); //$NON-NLS-1$
} }
} }
@ -125,6 +146,8 @@ public class DiscoveredElementLabelProvider extends LabelProvider implements ICo
switch (elem.getEntryKind()) { switch (elem.getEntryKind()) {
case DiscoveredElement.INCLUDE_PATH: case DiscoveredElement.INCLUDE_PATH:
case DiscoveredElement.SYMBOL_DEFINITION: case DiscoveredElement.SYMBOL_DEFINITION:
case DiscoveredElement.INCLUDE_FILE:
case DiscoveredElement.MACROS_FILE:
if (elem.isRemoved()) { if (elem.isRemoved()) {
return inDirect; return inDirect;
} }

View file

@ -22,7 +22,9 @@ public class DiscoveredElementSorter extends ViewerSorter {
private static final int CONTAINER = 0; private static final int CONTAINER = 0;
private static final int PATHS_GROUP = 1; private static final int PATHS_GROUP = 1;
private static final int SYMBOLS_GROUP = 2; private static final int SYMBOLS_GROUP = 2;
private static final int OTHER = 5; private static final int INCLUDE_FILE_GROUP = 3;
private static final int MACROS_FILE_GROUP = 4;
private static final int OTHER = 10;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.jface.viewers.ViewerSorter#category(java.lang.Object) * @see org.eclipse.jface.viewers.ViewerSorter#category(java.lang.Object)
@ -37,6 +39,10 @@ public class DiscoveredElementSorter extends ViewerSorter {
return PATHS_GROUP; return PATHS_GROUP;
case DiscoveredElement.SYMBOLS_GROUP: case DiscoveredElement.SYMBOLS_GROUP:
return SYMBOLS_GROUP; return SYMBOLS_GROUP;
case DiscoveredElement.INCLUDE_FILE_GROUP:
return INCLUDE_FILE_GROUP;
case DiscoveredElement.MACROS_FILE_GROUP:
return MACROS_FILE_GROUP;
} }
} }
return OTHER; return OTHER;
@ -50,6 +56,8 @@ public class DiscoveredElementSorter extends ViewerSorter {
switch (firstElem.getEntryKind()) { switch (firstElem.getEntryKind()) {
case DiscoveredElement.INCLUDE_PATH: case DiscoveredElement.INCLUDE_PATH:
case DiscoveredElement.SYMBOL_DEFINITION: case DiscoveredElement.SYMBOL_DEFINITION:
case DiscoveredElement.INCLUDE_FILE:
case DiscoveredElement.MACROS_FILE:
return; return;
} }
} }

View file

@ -15,6 +15,7 @@ import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.CoreModel;
@ -33,6 +34,7 @@ import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector; import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector;
import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollectorCleaner; import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollectorCleaner;
import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo; import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo;
import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IPerFileDiscoveredPathInfo;
import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IPerProjectDiscoveredPathInfo; import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IPerProjectDiscoveredPathInfo;
import org.eclipse.cdt.make.internal.core.scannerconfig.DiscoveredPathContainer; import org.eclipse.cdt.make.internal.core.scannerconfig.DiscoveredPathContainer;
import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerConfigUtil; import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerConfigUtil;
@ -46,6 +48,7 @@ import org.eclipse.cdt.make.internal.ui.scannerconfig.DiscoveredElementSorter;
import org.eclipse.cdt.ui.wizards.IPathEntryContainerPage; import org.eclipse.cdt.ui.wizards.IPathEntryContainerPage;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.action.Action; import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuListener;
@ -107,7 +110,10 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
private IContainerEntry fPathEntry; private IContainerEntry fPathEntry;
private TreeListDialogField fDiscoveredContainerList; private TreeListDialogField fDiscoveredContainerList;
private IDiscoveredPathInfo info = null;
private boolean dirty; private boolean dirty;
private List deletedEntries;
private CopyTextAction copyTextAction; private CopyTextAction copyTextAction;
private HandlerSubmission submission; private HandlerSubmission submission;
@ -136,6 +142,7 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
fDiscoveredContainerList.setTreeExpansionLevel(2); fDiscoveredContainerList.setTreeExpansionLevel(2);
fDiscoveredContainerList.setViewerSorter(new DiscoveredElementSorter()); fDiscoveredContainerList.setViewerSorter(new DiscoveredElementSorter());
dirty = false; dirty = false;
deletedEntries = new ArrayList();
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -151,6 +158,11 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
*/ */
public void initialize(ICProject project, IPathEntry[] currentEntries) { public void initialize(ICProject project, IPathEntry[] currentEntries) {
fCProject = project; fCProject = project;
try {
info = MakeCorePlugin.getDefault().getDiscoveryManager().getDiscoveredInfo(fCProject.getProject());
} catch (CoreException e) {
setErrorMessage("Error initializing Discovered paths container");
}
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -160,61 +172,88 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
if (!dirty) { if (!dirty) {
return true; return true;
} }
try { // first process deletes
IDiscoveredPathInfo info = MakeCorePlugin.getDefault(). if (deletedEntries.size() > 0) {
getDiscoveryManager().getDiscoveredInfo(fCProject.getProject()); IProject project = fCProject.getProject();
if (info instanceof IPerProjectDiscoveredPathInfo) { SCProfileInstance profileInstance = ScannerConfigProfileManager.getInstance().
IPerProjectDiscoveredPathInfo projetcPathInfo = (IPerProjectDiscoveredPathInfo) info; getSCProfileInstance(project, ScannerConfigProfileManager.NULL_PROFILE_ID); // use selected profile for the project
IScannerInfoCollector collector = profileInstance.getScannerInfoCollector();
if (collector instanceof IScannerInfoCollectorCleaner) {
IScannerInfoCollectorCleaner collectorUtil = (IScannerInfoCollectorCleaner) collector;
boolean exitLoop = false;
for (Iterator i = deletedEntries.iterator(); i.hasNext() && !exitLoop; ) {
DiscoveredElement elem = (DiscoveredElement) i.next();
switch (elem.getEntryKind()) {
case DiscoveredElement.CONTAINER:
collectorUtil.deleteAll(project);
exitLoop = true;
break;
case DiscoveredElement.PATHS_GROUP:
collectorUtil.deleteAllPaths(project);
break;
case DiscoveredElement.SYMBOLS_GROUP:
collectorUtil.deleteAllSymbols(project);
break;
case DiscoveredElement.INCLUDE_PATH:
collectorUtil.deletePath(project, elem.getEntry());
break;
case DiscoveredElement.SYMBOL_DEFINITION:
collectorUtil.deleteSymbol(project, elem.getEntry());
break;
}
}
}
}
if (info instanceof IPerProjectDiscoveredPathInfo) {
IPerProjectDiscoveredPathInfo projectPathInfo = (IPerProjectDiscoveredPathInfo) info;
LinkedHashMap includes = new LinkedHashMap();
LinkedHashMap symbols = new LinkedHashMap();
LinkedHashMap includes = new LinkedHashMap(); DiscoveredElement container = (DiscoveredElement) fDiscoveredContainerList.getElement(0);
LinkedHashMap symbols = new LinkedHashMap(); if (container != null && container.getEntryKind() == DiscoveredElement.CONTAINER) {
Object[] cChildren = container.getChildren();
DiscoveredElement container = (DiscoveredElement) fDiscoveredContainerList.getElement(0); if (cChildren != null) {
if (container != null && container.getEntryKind() == DiscoveredElement.CONTAINER) { for (int i = 0; i < cChildren.length; ++i) {
Object[] cChildren = container.getChildren(); DiscoveredElement group = (DiscoveredElement) cChildren[i];
if (cChildren != null) { switch (group.getEntryKind()) {
for (int i = 0; i < cChildren.length; ++i) { case DiscoveredElement.PATHS_GROUP: {
DiscoveredElement group = (DiscoveredElement) cChildren[i]; // get the include paths
switch (group.getEntryKind()) { Object[] gChildren = group.getChildren();
case DiscoveredElement.PATHS_GROUP: { if (gChildren != null) {
// get the include paths for (int j = 0; j < gChildren.length; ++j) {
Object[] gChildren = group.getChildren(); DiscoveredElement include = (DiscoveredElement) gChildren[j];
if (gChildren != null) { includes.put(include.getEntry(), Boolean.valueOf(include.isRemoved()));
for (int j = 0; j < gChildren.length; ++j) { }
DiscoveredElement include = (DiscoveredElement) gChildren[j]; }
includes.put(include.getEntry(), Boolean.valueOf(include.isRemoved())); }
} break;
} case DiscoveredElement.SYMBOLS_GROUP: {
} // get the symbol definitions
break; Object[] gChildren = group.getChildren();
case DiscoveredElement.SYMBOLS_GROUP: { if (gChildren != null) {
// get the symbol definitions for (int j = 0; j < gChildren.length; ++j) {
Object[] gChildren = group.getChildren(); DiscoveredElement symbol = (DiscoveredElement) gChildren[j];
if (gChildren != null) { ScannerConfigUtil.scAddSymbolString2SymbolEntryMap(symbols, symbol.getEntry(), !symbol.isRemoved());
for (int j = 0; j < gChildren.length; ++j) { }
DiscoveredElement symbol = (DiscoveredElement) gChildren[j]; }
ScannerConfigUtil.scAddSymbolString2SymbolEntryMap(symbols, symbol.getEntry(), !symbol.isRemoved()); }
} break;
} }
} }
break; }
}
}
}
}
projetcPathInfo.setIncludeMap(includes);
projetcPathInfo.setSymbolMap(symbols);
}
try {
// update scanner configuration
List resourceDelta = new ArrayList(1);
resourceDelta.add(fCProject.getProject());
MakeCorePlugin.getDefault().getDiscoveryManager().updateDiscoveredInfo(info, resourceDelta);
return true;
} catch (CoreException e) {
MakeCorePlugin.log(e);
} }
projectPathInfo.setIncludeMap(includes);
projectPathInfo.setSymbolMap(symbols);
}
try {
// update scanner configuration
List resourceDelta = new ArrayList(1);
resourceDelta.add(fCProject.getProject());
MakeCorePlugin.getDefault().getDiscoveryManager().updateDiscoveredInfo(info, resourceDelta);
return true;
} catch (CoreException e) { } catch (CoreException e) {
MakeCorePlugin.log(e); MakeCorePlugin.log(e);
} }
@ -251,51 +290,79 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
* @return * @return
*/ */
private DiscoveredElement populateDiscoveredElements(IContainerEntry pathEntry) { private DiscoveredElement populateDiscoveredElements(IContainerEntry pathEntry) {
IDiscoveredPathInfo info;
DiscoveredElement container = null; DiscoveredElement container = null;
try { try {
container = DiscoveredElement.createNew(null, fCProject.getProject(), null, container = DiscoveredElement.createNew(null, fCProject.getProject(), null,
DiscoveredElement.CONTAINER, false, false); DiscoveredElement.CONTAINER, false, false);
info = MakeCorePlugin.getDefault(). IPathEntryContainer peContainer = CoreModel.getPathEntryContainer(pathEntry.getPath(), fCProject);
getDiscoveryManager().getDiscoveredInfo(fCProject.getProject()); if (peContainer != null) {
try { container.setEntry(peContainer.getDescription());
IPathEntryContainer peContainer = CoreModel.getPathEntryContainer(pathEntry.getPath(), fCProject);
if (peContainer != null) {
container.setEntry(peContainer.getDescription());
}
if (info instanceof IPerProjectDiscoveredPathInfo) {
IPerProjectDiscoveredPathInfo projetcPathInfo = (IPerProjectDiscoveredPathInfo) info;
// get include paths
LinkedHashMap paths = projetcPathInfo.getIncludeMap();
for (Iterator i = paths.keySet().iterator(); i.hasNext(); ) {
String include = (String) i.next();
Boolean removed = (Boolean) paths.get(include);
removed = (removed == null) ? Boolean.FALSE : removed;
DiscoveredElement.createNew(container, fCProject.getProject(), include,
DiscoveredElement.INCLUDE_PATH, removed.booleanValue(), false);
}
// get defined symbols
LinkedHashMap symbols = projetcPathInfo.getSymbolMap();
for (Iterator i = symbols.keySet().iterator(); i.hasNext(); ) {
String symbol = (String) i.next();
SymbolEntry se = (SymbolEntry) symbols.get(symbol);
for (Iterator j = se.getActiveRaw().iterator(); j.hasNext();) {
String value = (String) j.next();
DiscoveredElement.createNew(container, fCProject.getProject(), value,
DiscoveredElement.SYMBOL_DEFINITION, false, false);
}
for (Iterator j = se.getRemovedRaw().iterator(); j.hasNext();) {
String value = (String) j.next();
DiscoveredElement.createNew(container, fCProject.getProject(), value,
DiscoveredElement.SYMBOL_DEFINITION, true, false);
}
}
}
} catch (CModelException e) {
MakeUIPlugin.log(e.getStatus());
} }
} catch (CoreException e) { if (info != null) {
MakeUIPlugin.log(e); if (info instanceof IPerProjectDiscoveredPathInfo) {
IPerProjectDiscoveredPathInfo projectPathInfo = (IPerProjectDiscoveredPathInfo) info;
// get include paths
LinkedHashMap paths = projectPathInfo.getIncludeMap();
for (Iterator i = paths.keySet().iterator(); i.hasNext(); ) {
String include = (String) i.next();
Boolean removed = (Boolean) paths.get(include);
removed = (removed == null) ? Boolean.FALSE : removed;
DiscoveredElement.createNew(container, fCProject.getProject(), include,
DiscoveredElement.INCLUDE_PATH, removed.booleanValue(), false);
}
// get defined symbols
LinkedHashMap symbols = projectPathInfo.getSymbolMap();
for (Iterator i = symbols.keySet().iterator(); i.hasNext(); ) {
String symbol = (String) i.next();
SymbolEntry se = (SymbolEntry) symbols.get(symbol);
for (Iterator j = se.getActiveRaw().iterator(); j.hasNext();) {
String value = (String) j.next();
DiscoveredElement.createNew(container, fCProject.getProject(), value,
DiscoveredElement.SYMBOL_DEFINITION, false, false);
}
for (Iterator j = se.getRemovedRaw().iterator(); j.hasNext();) {
String value = (String) j.next();
DiscoveredElement.createNew(container, fCProject.getProject(), value,
DiscoveredElement.SYMBOL_DEFINITION, true, false);
}
}
}
else if (info instanceof IPerFileDiscoveredPathInfo) {
IPerFileDiscoveredPathInfo filePathInfo = (IPerFileDiscoveredPathInfo) info;
// get include paths
IPath[] includes = filePathInfo.getIncludePaths();
for (int i = 0; i < includes.length; i++) {
String include = includes[i].toPortableString();
DiscoveredElement.createNew(container, fCProject.getProject(), include,
DiscoveredElement.INCLUDE_PATH, false, false);
}
// get defined symbols
Map symbols = filePathInfo.getSymbols();
for (Iterator iter = symbols.keySet().iterator(); iter.hasNext();) {
String key = (String) iter.next();
String value = (String) symbols.get(key);
String symbol = (value != null && value.length() > 0) ? key + "=" + value : key; //$NON-NLS-1$
DiscoveredElement.createNew(container, fCProject.getProject(), symbol,
DiscoveredElement.SYMBOL_DEFINITION, false, false);
}
// get include files
IPath[] includeFiles = filePathInfo.getIncludeFiles(fCProject.getPath());
for (int i = 0; i < includeFiles.length; i++) {
String includeFile = includeFiles[i].toPortableString();
DiscoveredElement.createNew(container, fCProject.getProject(), includeFile,
DiscoveredElement.INCLUDE_FILE, false, false);
}
// get macros files
IPath[] macrosFiles = filePathInfo.getMacroFiles(fCProject.getPath());
for (int i = 0; i < macrosFiles.length; i++) {
String macrosFile = macrosFiles[i].toPortableString();
DiscoveredElement.createNew(container, fCProject.getProject(), macrosFile,
DiscoveredElement.MACROS_FILE, false, false);
}
}
}
} catch (CModelException e) {
MakeUIPlugin.log(e.getStatus());
} }
return container; return container;
} }
@ -320,6 +387,8 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
switch (elem.getEntryKind()) { switch (elem.getEntryKind()) {
case DiscoveredElement.PATHS_GROUP: case DiscoveredElement.PATHS_GROUP:
case DiscoveredElement.SYMBOLS_GROUP: case DiscoveredElement.SYMBOLS_GROUP:
case DiscoveredElement.INCLUDE_FILE_GROUP:
case DiscoveredElement.MACROS_FILE_GROUP:
return elem.getChildren().length != 0; return elem.getChildren().length != 0;
} }
} }
@ -567,72 +636,72 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
private boolean deleteEntry() { private boolean deleteEntry() {
boolean rc = false; boolean rc = false;
IProject project = fCProject.getProject(); List newSelection = new ArrayList();
SCProfileInstance profileInstance = ScannerConfigProfileManager.getInstance(). List selElements = fDiscoveredContainerList.getSelectedElements();
getSCProfileInstance(project, ScannerConfigProfileManager.NULL_PROFILE_ID); // use selected profile for the project boolean skipIncludes = false, skipSymbols = false;
IScannerInfoCollector collector = profileInstance.getScannerInfoCollector(); for (int i = 0; i < selElements.size(); ++i) {
if (collector instanceof IScannerInfoCollectorCleaner) { DiscoveredElement elem = (DiscoveredElement) selElements.get(i);
IScannerInfoCollectorCleaner collectorUtil = (IScannerInfoCollectorCleaner) collector; if (elem.getEntryKind() == DiscoveredElement.CONTAINER) {
List newSelection = new ArrayList(); deletedEntries.add(elem);
List selElements = fDiscoveredContainerList.getSelectedElements();
for (int i = 0; i < selElements.size(); ++i) { Object[] children = elem.getChildren();
DiscoveredElement elem = (DiscoveredElement) selElements.get(i); for (int j = 0; j < children.length; j++) {
if (elem.getEntryKind() == DiscoveredElement.CONTAINER) { if (children[j] instanceof DiscoveredElement) {
collectorUtil.deleteAll(project); DiscoveredElement child = (DiscoveredElement) children[j];
Object[] children = elem.getChildren(); child.delete();
for (int j = 0; j < children.length; j++) {
if (children[j] instanceof DiscoveredElement) {
DiscoveredElement child = (DiscoveredElement) children[j];
child.delete();
}
} }
newSelection.add(elem);
rc = true;
break;
} }
else { newSelection.add(elem);
DiscoveredElement parent = elem.getParent(); rc = true;
if (parent != null) { break;
Object[] children = parent.getChildren(); }
if (elem.delete()) { DiscoveredElement parent = elem.getParent();
switch (elem.getEntryKind()) { if (parent != null) {
case DiscoveredElement.PATHS_GROUP: Object[] children = parent.getChildren();
collectorUtil.deleteAllPaths(project); if (elem.delete()) {
break; switch (elem.getEntryKind()) {
case DiscoveredElement.SYMBOLS_GROUP: case DiscoveredElement.PATHS_GROUP:
collectorUtil.deleteAllSymbols(project); deletedEntries.add(elem);
break; skipIncludes = true;
case DiscoveredElement.INCLUDE_PATH: break;
collectorUtil.deletePath(project, elem.getEntry()); case DiscoveredElement.SYMBOLS_GROUP:
break; deletedEntries.add(elem);
case DiscoveredElement.SYMBOL_DEFINITION: skipSymbols = true;
collectorUtil.deleteSymbol(project, elem.getEntry()); break;
break; case DiscoveredElement.INCLUDE_PATH:
} if (!skipIncludes) {
rc = true; deletedEntries.add(elem);
// set new selection }
for (int j = 0; j < children.length; ++j) { break;
DiscoveredElement child = (DiscoveredElement) children[j]; case DiscoveredElement.SYMBOL_DEFINITION:
if (elem.equals(child)) { if (!skipSymbols) {
newSelection.clear(); deletedEntries.add(elem);
if (j + 1 < children.length) { }
newSelection.add(children[j + 1]); break;
} }
else if (j - 1 >= 0) {
newSelection.add(children[j - 1]); rc = true;
} // set new selection
else { for (int j = 0; j < children.length; ++j) {
newSelection.add(parent); DiscoveredElement child = (DiscoveredElement) children[j];
} if (elem.equals(child)) {
break; newSelection.clear();
} if (j + 1 < children.length) {
} newSelection.add(children[j + 1]);
} }
} else if (j - 1 >= 0) {
} newSelection.add(children[j - 1]);
} }
fDiscoveredContainerList.postSetSelection(new StructuredSelection(newSelection)); else {
newSelection.add(parent);
}
break;
}
}
}
}
} }
fDiscoveredContainerList.postSetSelection(new StructuredSelection(newSelection));
return rc; return rc;
} }
@ -654,6 +723,9 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
* @return * @return
*/ */
private boolean canMoveUpDown(List selElements, int direction) { private boolean canMoveUpDown(List selElements, int direction) {
if (info instanceof IPerFileDiscoveredPathInfo) {
return false;
}
if (selElements.size() == 0) { if (selElements.size() == 0) {
return false; return false;
} }
@ -686,6 +758,9 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
* @return * @return
*/ */
private boolean canRemoveRestore(List selElements) { private boolean canRemoveRestore(List selElements) {
if (info instanceof IPerFileDiscoveredPathInfo) {
return false;
}
if (selElements.size() == 0) { if (selElements.size() == 0) {
return false; return false;
} }
@ -706,6 +781,13 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
* @return * @return
*/ */
private boolean canDelete(List selElements) { private boolean canDelete(List selElements) {
if (info instanceof IPerFileDiscoveredPathInfo) {
if (selElements.size() > 0 &&
((DiscoveredElement) selElements.get(0)).getEntryKind() == DiscoveredElement.CONTAINER) {
return true;
}
return false;
}
if (selElements.size() == 0) { if (selElements.size() == 0) {
return false; return false;
} }
@ -719,7 +801,6 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
*/ */
public class CopyTextAction extends Action { public class CopyTextAction extends Action {
static final String ACTION_ID = "org.eclipse.ui.edit.copy"; //$NON-NLS-1$ static final String ACTION_ID = "org.eclipse.ui.edit.copy"; //$NON-NLS-1$
private Shell shell;
private Clipboard clipboard; private Clipboard clipboard;
private String discoveredEntry = null; private String discoveredEntry = null;
@ -729,7 +810,6 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
setToolTipText(MakeUIPlugin.getResourceString("CopyDiscoveredPathAction.tooltip")); //$NON-NLS-1$ setToolTipText(MakeUIPlugin.getResourceString("CopyDiscoveredPathAction.tooltip")); //$NON-NLS-1$
setActionDefinitionId(ACTION_ID); setActionDefinitionId(ACTION_ID);
clipboard = new Clipboard(shell.getDisplay()); clipboard = new Clipboard(shell.getDisplay());
this.shell = shell;
} }
/** /**

View file

@ -1,3 +1,8 @@
2005-06-08 Vladimir Hirsl
Fix for NPE in CPElement.java
* src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPElement.java
2005-06-07 Alain Magloire 2005-06-07 Alain Magloire
Patch form Chris Recoskie to provide an ID to the wizard. Patch form Chris Recoskie to provide an ID to the wizard.
* src/org/eclipse/cdt/ui/wizards/NewCProjectWizardPage.java * src/org/eclipse/cdt/ui/wizards/NewCProjectWizardPage.java

View file

@ -764,7 +764,7 @@ public class CPElement {
res = root.findMember(path); res = root.findMember(path);
break; break;
} }
CPElement elem = new CPElement(element.getCProject(), curr.getEntryKind(), path, res); CPElement elem = new CPElement((element == null) ? null : element.getCProject(), curr.getEntryKind(), path, res);
elem.setAttribute(SOURCEATTACHMENT, sourceAttachment); elem.setAttribute(SOURCEATTACHMENT, sourceAttachment);
elem.setAttribute(EXCLUSION, exclusion); elem.setAttribute(EXCLUSION, exclusion);
elem.setAttribute(INCLUDE, include); elem.setAttribute(INCLUDE, include);