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:
parent
7c40c75c30
commit
c237f549b9
2 changed files with 67 additions and 22 deletions
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue