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

2004-08-25 Chris Wiebe

Fix AddInclude action to resolve paths correctly
	* src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java
This commit is contained in:
Chris Wiebe 2004-08-25 19:26:54 +00:00
parent 7c40c75c30
commit c237f549b9
2 changed files with 67 additions and 22 deletions

View file

@ -1,3 +1,8 @@
2004-08-25 Chris Wiebe
Fix AddInclude action to resolve paths correctly
* src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java
2004-08-24 Alain Magloire 2004-08-24 Alain Magloire
Implementation for PR 69118: Folding. Implementation for PR 69118: Folding.

View file

@ -12,10 +12,16 @@
package org.eclipse.cdt.internal.ui.editor; package org.eclipse.cdt.internal.ui.editor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.eclipse.cdt.core.browser.AllTypesCache; import org.eclipse.cdt.core.browser.AllTypesCache;
import org.eclipse.cdt.core.browser.ITypeInfo; import org.eclipse.cdt.core.browser.ITypeInfo;
import org.eclipse.cdt.core.browser.ITypeReference; import org.eclipse.cdt.core.browser.ITypeReference;
import org.eclipse.cdt.core.browser.ITypeSearchScope; import org.eclipse.cdt.core.browser.ITypeSearchScope;
import org.eclipse.cdt.core.browser.PathUtil;
import org.eclipse.cdt.core.browser.QualifiedTypeName; import org.eclipse.cdt.core.browser.QualifiedTypeName;
import org.eclipse.cdt.core.browser.TypeSearchScope; import org.eclipse.cdt.core.browser.TypeSearchScope;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
@ -39,16 +45,10 @@ import org.eclipse.cdt.ui.IRequiredInclude;
import org.eclipse.cdt.ui.browser.typeinfo.TypeInfoLabelProvider; import org.eclipse.cdt.ui.browser.typeinfo.TypeInfoLabelProvider;
import org.eclipse.cdt.ui.text.ICCompletionInvocationContext; import org.eclipse.cdt.ui.text.ICCompletionInvocationContext;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.jface.action.Action; import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.BadLocationException;
@ -56,7 +56,7 @@ import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.window.Window; import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.PlatformUI; import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.eclipse.ui.dialogs.ElementListSelectionDialog;
@ -73,9 +73,16 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate {
class RequiredIncludes implements IRequiredInclude { class RequiredIncludes implements IRequiredInclude {
String name; String name;
boolean isStandard;
RequiredIncludes(String n) { RequiredIncludes(String n) {
name = n; name = n;
isStandard = true;
}
RequiredIncludes(String n, boolean isStandard) {
name = n;
this.isStandard = isStandard;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -89,7 +96,7 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate {
* @see org.eclipse.cdt.ui.IRequiredInclude#isStandard() * @see org.eclipse.cdt.ui.IRequiredInclude#isStandard()
*/ */
public boolean isStandard() { public boolean isStandard() {
return true; return isStandard;
} }
} }
@ -148,10 +155,9 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate {
* @see IAction#actionPerformed * @see IAction#actionPerformed
*/ */
public void run() { public void run() {
extractIncludes(fEditor);
ITranslationUnit tu= getTranslationUnit(); ITranslationUnit tu= getTranslationUnit();
if (tu != null) { if (tu != null) {
extractIncludes(fEditor);
addInclude(tu); addInclude(tu);
} }
fUsings = null; fUsings = null;
@ -265,7 +271,19 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate {
if (!AllTypesCache.isCacheUpToDate(scope)) { if (!AllTypesCache.isCacheUpToDate(scope)) {
AllTypesCache.updateCache(scope, monitor); AllTypesCache.updateCache(scope, monitor);
} }
infos[0] = AllTypesCache.getTypes(scope, new QualifiedTypeName(name), types); ITypeInfo[] results = null;
if (!monitor.isCanceled()) {
results = AllTypesCache.getTypes(scope, new QualifiedTypeName(name), types);
if (!monitor.isCanceled()) {
for (int i = 0; i < results.length; ++i) {
ITypeInfo info = results[i];
AllTypesCache.resolveTypeLocation(info, monitor);
if (monitor.isCanceled())
break;
}
}
}
infos[0] = results;
} }
}; };
try { try {
@ -322,7 +340,7 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate {
private void selectResult(ITypeInfo[] results, String name, Shell shell) { private void selectResult(ITypeInfo[] results, String name, Shell shell) {
int nResults= results.length; int nResults= results.length;
IProject project = getTranslationUnit().getCProject().getProject(); ITranslationUnit unit = getTranslationUnit();
if (nResults == 0) { if (nResults == 0) {
return; // bail out return; // bail out
} }
@ -339,9 +357,9 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate {
// if only one // if only one
if (occurences == 1 || results.length == 1) { if (occurences == 1 || results.length == 1) {
ITypeInfo curr= results[index]; ITypeInfo curr= results[index];
ITypeReference ref = curr.getResolvedReference(); IRequiredInclude include = getRequiredInclude(curr, unit);
if (ref != null) { if (include != null) {
fRequiredIncludes = new IRequiredInclude[]{new RequiredIncludes(ref.getRelativeIncludePath(project).toString())}; fRequiredIncludes = new IRequiredInclude[] { include };
} }
if (curr.hasEnclosedTypes()) { if (curr.hasEnclosedTypes()) {
ITypeInfo[] ns = curr.getEnclosedTypes(); ITypeInfo[] ns = curr.getEnclosedTypes();
@ -362,16 +380,15 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate {
fRequiredIncludes = new IRequiredInclude[selects.length]; fRequiredIncludes = new IRequiredInclude[selects.length];
List usings = new ArrayList(selects.length); List usings = new ArrayList(selects.length);
for (int i = 0; i < fRequiredIncludes.length; i++) { for (int i = 0; i < fRequiredIncludes.length; i++) {
ITypeReference ref = selects[i].getResolvedReference(); IRequiredInclude include = getRequiredInclude(selects[i], unit);
if (ref != null) { if (include != null) {
fRequiredIncludes[i] = new RequiredIncludes(ref.getRelativeIncludePath(project).toString()); fRequiredIncludes[i] = include;
if (selects[i].hasEnclosedTypes()) { if (selects[i].hasEnclosedTypes()) {
ITypeInfo[] ns = results[0].getEnclosedTypes(); ITypeInfo[] ns = results[0].getEnclosedTypes();
for (int j = 0; j < ns.length; j++) { for (int j = 0; j < ns.length; j++) {
usings.add(ns[j].getName()); usings.add(ns[j].getName());
} }
} }
} else { } else {
fRequiredIncludes[i] = new RequiredIncludes(""); //$NON-NLS-1$ fRequiredIncludes[i] = new RequiredIncludes(""); //$NON-NLS-1$
} }
@ -383,7 +400,30 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate {
} }
} }
private void selectResult(IMatch[] results, String name, Shell shell) { private IRequiredInclude getRequiredInclude(ITypeInfo curr, ITranslationUnit tu) {
ITypeReference ref = curr.getResolvedReference();
if (ref != null) {
IPath typeLocation = ref.getLocation();
IProject project = tu.getCProject().getProject();
IPath projectLocation = project.getLocation();
IPath headerLocation = tu.getResource().getLocation();
boolean isSystemIncludePath = false;
IPath includePath = PathUtil.makeRelativePathToProjectIncludes(typeLocation, project);
if (includePath != null && !projectLocation.isPrefixOf(typeLocation)) {
isSystemIncludePath = true;
} else if (projectLocation.isPrefixOf(typeLocation)
&& projectLocation.isPrefixOf(headerLocation)) {
includePath = PathUtil.makeRelativePath(typeLocation, headerLocation);
}
if (includePath == null)
includePath = typeLocation;
return new RequiredIncludes(includePath.toString(), isSystemIncludePath);
}
return null;
}
private void selectResult(IMatch[] results, String name, Shell shell) {
int nResults = results.length; int nResults = results.length;
if (nResults == 0) { if (nResults == 0) {
return; return;