mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 06:32:10 +02:00
Fix for 183941, call hierarchy opened with method declaration.
This commit is contained in:
parent
6c161d4b54
commit
a469ebf89d
10 changed files with 251 additions and 131 deletions
|
@ -53,7 +53,7 @@ public class IndexTypeReference extends TypeReference {
|
|||
long timestamp= tu.getResource() != null ? tu.getResource().getLocalTimeStamp() : 0;
|
||||
IRegion region= new Region(getOffset(), getLength());
|
||||
try {
|
||||
return CElementHandleFactory.create(tu, binding, region, timestamp);
|
||||
return CElementHandleFactory.create(tu, binding, true, region, timestamp);
|
||||
} catch (CoreException exc) {
|
||||
} catch (DOMException exc) {
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ import org.eclipse.jface.text.IRegion;
|
|||
public class CElementHandleFactory {
|
||||
private CElementHandleFactory() {}
|
||||
|
||||
public static ICElementHandle create(ITranslationUnit tu, IBinding binding,
|
||||
public static ICElementHandle create(ITranslationUnit tu, IBinding binding, boolean definition,
|
||||
IRegion region, long timestamp) throws CoreException, DOMException {
|
||||
|
||||
ICElement parentElement= create(tu, binding.getScope());
|
||||
|
@ -54,10 +54,14 @@ public class CElementHandleFactory {
|
|||
|
||||
CElementHandle element= null;
|
||||
if (binding instanceof ICPPMethod) {
|
||||
element= new MethodHandle(parentElement, (ICPPMethod) binding);
|
||||
}
|
||||
element= definition
|
||||
? new MethodHandle(parentElement, (ICPPMethod) binding)
|
||||
: new MethodDeclarationHandle(parentElement, (ICPPMethod) binding);
|
||||
}
|
||||
else if (binding instanceof IFunction) {
|
||||
element= new FunctionHandle(parentElement, (IFunction) binding);
|
||||
element= definition
|
||||
? new FunctionHandle(parentElement, (IFunction) binding)
|
||||
: new FunctionDeclarationHandle(parentElement, (IFunction) binding);
|
||||
}
|
||||
else if (binding instanceof IField) {
|
||||
element= new FieldHandle(parentElement, (IField) binding);
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2007 Wind River Systems, Inc. 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:
|
||||
* Markus Schorn - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.model.ext;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IFunction;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.IFunctionDeclaration;
|
||||
import org.eclipse.cdt.internal.core.model.FunctionDeclaration;
|
||||
|
||||
public class FunctionDeclarationHandle extends CElementHandle implements org.eclipse.cdt.core.model.IFunctionDeclaration {
|
||||
|
||||
private String[] fParameterTypes;
|
||||
private boolean fIsStatic;
|
||||
|
||||
public FunctionDeclarationHandle(ICElement parent, IFunction func) throws DOMException {
|
||||
this(parent, ICElement.C_FUNCTION_DECLARATION, func);
|
||||
}
|
||||
|
||||
protected FunctionDeclarationHandle(ICElement parent, int type, IFunction func) throws DOMException {
|
||||
super(parent, type, func.getName());
|
||||
fParameterTypes= extractParameterTypes(func);
|
||||
try {
|
||||
fIsStatic= func.isStatic();
|
||||
} catch (DOMException e) {
|
||||
CCorePlugin.log(e);
|
||||
fIsStatic= false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof IFunctionDeclaration) {
|
||||
return FunctionDeclaration.equals(this, (IFunctionDeclaration) obj);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getNumberOfParameters() {
|
||||
return fParameterTypes.length;
|
||||
}
|
||||
|
||||
public String[] getParameterTypes() {
|
||||
return fParameterTypes;
|
||||
}
|
||||
|
||||
public String getSignature() throws CModelException {
|
||||
return FunctionDeclaration.getSignature(this);
|
||||
}
|
||||
|
||||
public boolean isStatic() throws CModelException {
|
||||
return fIsStatic;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 2007 Wind River Systems, Inc. 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
|
||||
|
@ -11,50 +11,13 @@
|
|||
|
||||
package org.eclipse.cdt.internal.core.model.ext;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IFunction;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.IFunctionDeclaration;
|
||||
import org.eclipse.cdt.internal.core.model.FunctionDeclaration;
|
||||
|
||||
public class FunctionHandle extends CElementHandle implements org.eclipse.cdt.core.model.IFunction {
|
||||
|
||||
private String[] fParameterTypes;
|
||||
private boolean fIsStatic;
|
||||
public class FunctionHandle extends FunctionDeclarationHandle implements org.eclipse.cdt.core.model.IFunction {
|
||||
|
||||
public FunctionHandle(ICElement parent, IFunction func) throws DOMException {
|
||||
super(parent, ICElement.C_FUNCTION, func.getName());
|
||||
fParameterTypes= extractParameterTypes(func);
|
||||
try {
|
||||
fIsStatic= func.isStatic();
|
||||
} catch (DOMException e) {
|
||||
CCorePlugin.log(e);
|
||||
fIsStatic= false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof IFunctionDeclaration) {
|
||||
return FunctionDeclaration.equals(this, (IFunctionDeclaration) obj);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getNumberOfParameters() {
|
||||
return fParameterTypes.length;
|
||||
}
|
||||
|
||||
public String[] getParameterTypes() {
|
||||
return fParameterTypes;
|
||||
}
|
||||
|
||||
public String getSignature() throws CModelException {
|
||||
return FunctionDeclaration.getSignature(this);
|
||||
}
|
||||
|
||||
public boolean isStatic() throws CModelException {
|
||||
return fIsStatic;
|
||||
super(parent, ICElement.C_FUNCTION, func);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2007 Wind River Systems, Inc. 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:
|
||||
* Markus Schorn - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.model.ext;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.IMethodDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
|
||||
import org.eclipse.cdt.internal.core.model.FunctionDeclaration;
|
||||
import org.eclipse.cdt.internal.core.model.MethodDeclaration;
|
||||
|
||||
public class MethodDeclarationHandle extends CElementHandle implements IMethodDeclaration {
|
||||
private String[] fParameterTypes;
|
||||
private ASTAccessVisibility fVisibility;
|
||||
private boolean fIsStatic;
|
||||
private boolean fIsConstructor;
|
||||
private boolean fIsDestructor;
|
||||
|
||||
public MethodDeclarationHandle(ICElement parent, ICPPMethod method) throws DOMException {
|
||||
this(parent, ICElement.C_METHOD_DECLARATION, method);
|
||||
}
|
||||
|
||||
protected MethodDeclarationHandle(ICElement parent, int type, ICPPMethod method) throws DOMException {
|
||||
super(parent, type, method.getName());
|
||||
fParameterTypes= extractParameterTypes(method);
|
||||
fVisibility= getVisibility(method);
|
||||
try {
|
||||
fIsStatic= method.isStatic();
|
||||
fIsConstructor= method instanceof ICPPConstructor;
|
||||
if (!fIsConstructor)
|
||||
fIsDestructor= method.isDestructor();
|
||||
} catch (DOMException e) {
|
||||
CCorePlugin.log(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof IMethodDeclaration) {
|
||||
return MethodDeclaration.equals(this, (IMethodDeclaration) obj);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getNumberOfParameters() {
|
||||
return fParameterTypes.length;
|
||||
}
|
||||
|
||||
public String[] getParameterTypes() {
|
||||
return fParameterTypes;
|
||||
}
|
||||
|
||||
public String getSignature() throws CModelException {
|
||||
return FunctionDeclaration.getSignature(this);
|
||||
}
|
||||
|
||||
public boolean isStatic() throws CModelException {
|
||||
return fIsStatic;
|
||||
}
|
||||
|
||||
public ASTAccessVisibility getVisibility() throws CModelException {
|
||||
return fVisibility;
|
||||
}
|
||||
|
||||
public boolean isConstructor() throws CModelException {
|
||||
return fIsConstructor;
|
||||
}
|
||||
|
||||
public boolean isDestructor() throws CModelException {
|
||||
return fIsDestructor;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 2007 Wind River Systems, Inc. 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
|
||||
|
@ -11,72 +11,14 @@
|
|||
|
||||
package org.eclipse.cdt.internal.core.model.ext;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.IMethod;
|
||||
import org.eclipse.cdt.core.model.IMethodDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
|
||||
import org.eclipse.cdt.internal.core.model.FunctionDeclaration;
|
||||
import org.eclipse.cdt.internal.core.model.MethodDeclaration;
|
||||
|
||||
public class MethodHandle extends CElementHandle implements IMethod {
|
||||
private String[] fParameterTypes;
|
||||
private ASTAccessVisibility fVisibility;
|
||||
private boolean fIsStatic;
|
||||
private boolean fIsConstructor;
|
||||
private boolean fIsDestructor;
|
||||
public class MethodHandle extends MethodDeclarationHandle implements IMethod {
|
||||
|
||||
public MethodHandle(ICElement parent, ICPPMethod method) throws DOMException {
|
||||
super(parent, ICElement.C_METHOD, method.getName());
|
||||
fParameterTypes= extractParameterTypes(method);
|
||||
fVisibility= getVisibility(method);
|
||||
try {
|
||||
fIsStatic= method.isStatic();
|
||||
fIsConstructor= method instanceof ICPPConstructor;
|
||||
if (!fIsConstructor)
|
||||
fIsDestructor= method.isDestructor();
|
||||
} catch (DOMException e) {
|
||||
CCorePlugin.log(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof IMethodDeclaration) {
|
||||
return MethodDeclaration.equals(this, (IMethodDeclaration) obj);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getNumberOfParameters() {
|
||||
return fParameterTypes.length;
|
||||
}
|
||||
|
||||
public String[] getParameterTypes() {
|
||||
return fParameterTypes;
|
||||
}
|
||||
|
||||
public String getSignature() throws CModelException {
|
||||
return FunctionDeclaration.getSignature(this);
|
||||
}
|
||||
|
||||
public boolean isStatic() throws CModelException {
|
||||
return fIsStatic;
|
||||
}
|
||||
|
||||
public ASTAccessVisibility getVisibility() throws CModelException {
|
||||
return fVisibility;
|
||||
}
|
||||
|
||||
public boolean isConstructor() throws CModelException {
|
||||
return fIsConstructor;
|
||||
}
|
||||
|
||||
public boolean isDestructor() throws CModelException {
|
||||
return fIsDestructor;
|
||||
super(parent, ICElement.C_METHOD, method);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ import org.eclipse.jface.text.ITextSelection;
|
|||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.ui.IEditorInput;
|
||||
import org.eclipse.ui.IWorkbenchPage;
|
||||
import org.eclipse.ui.IWorkbenchSite;
|
||||
import org.eclipse.ui.IWorkbenchWindow;
|
||||
import org.eclipse.ui.texteditor.ITextEditor;
|
||||
|
||||
|
@ -34,31 +33,51 @@ import org.eclipse.cdt.core.dom.ast.IVariable;
|
|||
import org.eclipse.cdt.core.dom.ast.c.ICExternalBinding;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.index.IIndexManager;
|
||||
import org.eclipse.cdt.core.index.IIndexName;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.model.util.CElementBaseLabels;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
||||
import org.eclipse.cdt.internal.core.model.ext.ICElementHandle;
|
||||
import org.eclipse.cdt.internal.corext.util.CModelUtil;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.actions.OpenActionUtil;
|
||||
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
|
||||
import org.eclipse.cdt.internal.ui.util.StatusLineHandler;
|
||||
import org.eclipse.cdt.internal.ui.viewsupport.IndexUI;
|
||||
|
||||
public class CallHierarchyUI {
|
||||
private static final ICElement[] NO_ELEMENTS = {};
|
||||
private static boolean sIsJUnitTest= false;
|
||||
|
||||
public static void setIsJUnitTest(boolean val) {
|
||||
sIsJUnitTest= val;
|
||||
}
|
||||
|
||||
public static CHViewPart open(ICElement input, IWorkbenchWindow window) {
|
||||
public static void open(final IWorkbenchWindow window, final ICElement input) {
|
||||
if (input != null) {
|
||||
return openInViewPart(window, input);
|
||||
final Display display= Display.getCurrent();
|
||||
|
||||
Job job= new Job(CHMessages.CallHierarchyUI_label) {
|
||||
protected IStatus run(IProgressMonitor monitor) {
|
||||
final ICElement[] elems= findDefinitions(input);
|
||||
if (elems != null && elems.length > 0) {
|
||||
display.asyncExec(new Runnable() {
|
||||
public void run() {
|
||||
internalOpen(window, elems);
|
||||
}});
|
||||
}
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
};
|
||||
job.setUser(true);
|
||||
job.schedule();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static CHViewPart openInViewPart(IWorkbenchWindow window, ICElement input) {
|
||||
private static CHViewPart internalOpen(IWorkbenchWindow window, ICElement input) {
|
||||
IWorkbenchPage page= window.getActivePage();
|
||||
try {
|
||||
CHViewPart result= (CHViewPart)page.showView(CUIPlugin.ID_CALL_HIERARCHY);
|
||||
|
@ -70,9 +89,7 @@ public class CallHierarchyUI {
|
|||
return null;
|
||||
}
|
||||
|
||||
private static CHViewPart openInViewPart(IWorkbenchSite site, ICElement[] input) {
|
||||
IWorkbenchWindow window = site.getWorkbenchWindow();
|
||||
StatusLineHandler.clearStatusLine(site);
|
||||
private static CHViewPart internalOpen(IWorkbenchWindow window, ICElement[] input) {
|
||||
ICElement elem = null;
|
||||
switch (input.length) {
|
||||
case 0:
|
||||
|
@ -82,7 +99,7 @@ public class CallHierarchyUI {
|
|||
break;
|
||||
default:
|
||||
if (sIsJUnitTest) {
|
||||
throw new RuntimeException("ambigous input"); //$NON-NLS-1$
|
||||
throw new RuntimeException("ambiguous input"); //$NON-NLS-1$
|
||||
}
|
||||
elem = OpenActionUtil.selectCElement(input, window.getShell(),
|
||||
CHMessages.CallHierarchyUI_label, CHMessages.CallHierarchyUI_selectMessage,
|
||||
|
@ -90,11 +107,8 @@ public class CallHierarchyUI {
|
|||
break;
|
||||
}
|
||||
if (elem != null) {
|
||||
return openInViewPart(window, elem);
|
||||
} else {
|
||||
StatusLineHandler.showStatusLineMessage(site,
|
||||
CHMessages.CallHierarchyUI_openFailureMessage);
|
||||
}
|
||||
return internalOpen(window, elem);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -111,10 +125,10 @@ public class CallHierarchyUI {
|
|||
try {
|
||||
StatusLineHandler.clearStatusLine(editor.getSite());
|
||||
final ICElement[] elems= findDefinitions(project, editorInput, sel);
|
||||
if (elems != null && elems.length > 0) {
|
||||
if (elems.length > 0) {
|
||||
display.asyncExec(new Runnable() {
|
||||
public void run() {
|
||||
openInViewPart(editor.getSite(), elems);
|
||||
internalOpen(editor.getSite().getWorkbenchWindow(), elems);
|
||||
}});
|
||||
} else {
|
||||
StatusLineHandler.showStatusLineMessage(editor.getSite(),
|
||||
|
@ -133,7 +147,8 @@ public class CallHierarchyUI {
|
|||
}
|
||||
}
|
||||
|
||||
private static ICElement[] findDefinitions(ICProject project, IEditorInput editorInput, ITextSelection sel) throws CoreException {
|
||||
private static ICElement[] findDefinitions(ICProject project, IEditorInput editorInput, ITextSelection sel)
|
||||
throws CoreException {
|
||||
try {
|
||||
IIndex index= CCorePlugin.getIndexManager().getIndex(project, IIndexManager.ADD_DEPENDENCIES | IIndexManager.ADD_DEPENDENT);
|
||||
|
||||
|
@ -175,8 +190,50 @@ public class CallHierarchyUI {
|
|||
CUIPlugin.getDefault().log(e);
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
return null;
|
||||
return NO_ELEMENTS;
|
||||
}
|
||||
|
||||
public static ICElement[] findDefinitions(ICElement input) {
|
||||
try {
|
||||
final ITranslationUnit tu= CModelUtil.getTranslationUnit(input);
|
||||
if (tu != null) {
|
||||
final ICProject project= tu.getCProject();
|
||||
final IIndex index= CCorePlugin.getIndexManager().getIndex(project, IIndexManager.ADD_DEPENDENCIES | IIndexManager.ADD_DEPENDENT);
|
||||
|
||||
index.acquireReadLock();
|
||||
try {
|
||||
IBinding binding= IndexUI.elementToBinding(index, input);
|
||||
if (binding != null) {
|
||||
ICElement[] result= IndexUI.findAllDefinitions(index, binding);
|
||||
if (result.length > 0) {
|
||||
return result;
|
||||
}
|
||||
IIndexName name= IndexUI.elementToName(index, input);
|
||||
if (name != null) {
|
||||
ICElementHandle handle= IndexUI.getCElementForName(tu, index, name);
|
||||
return new ICElement[] {handle};
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
if (index != null) {
|
||||
index.releaseReadLock();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (CoreException e) {
|
||||
CUIPlugin.getDefault().log(e);
|
||||
}
|
||||
catch (DOMException e) {
|
||||
CUIPlugin.getDefault().log(e);
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
return new ICElement[] {input};
|
||||
}
|
||||
|
||||
public static boolean isRelevantForCallHierarchy(IBinding binding) {
|
||||
|
|
|
@ -51,7 +51,7 @@ public class OpenCallHierarchyAction extends SelectionDispatchAction {
|
|||
Object selectedObject= selection.getFirstElement();
|
||||
ICElement elem= (ICElement) getAdapter(selectedObject, ICElement.class);
|
||||
if (elem != null) {
|
||||
CallHierarchyUI.open(elem, getSite().getWorkbenchWindow());
|
||||
CallHierarchyUI.open(getSite().getWorkbenchWindow(), elem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ public class OpenElementInCallHierarchyAction implements IWorkbenchWindowActionD
|
|||
MessageDialog.openError(getShell(), title, message);
|
||||
}
|
||||
else {
|
||||
CallHierarchyUI.open(elements[0], fWorkbenchWindow);
|
||||
CallHierarchyUI.open(fWorkbenchWindow, elements[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -158,7 +158,7 @@ public class IndexUI {
|
|||
ArrayList result= new ArrayList();
|
||||
for (int i = 0; i < defs.length; i++) {
|
||||
IIndexName in = defs[i];
|
||||
ICElementHandle definition= getCElementForName(null, index, in);
|
||||
ICElementHandle definition= getCElementForName((ICProject) null, index, in);
|
||||
if (definition != null) {
|
||||
result.add(definition);
|
||||
}
|
||||
|
@ -183,7 +183,7 @@ public class IndexUI {
|
|||
if (converter != null) {
|
||||
region= converter.actualToHistoric(region);
|
||||
}
|
||||
return CElementHandleFactory.create(tu, binding, region, timestamp);
|
||||
return CElementHandleFactory.create(tu, binding, declName.isDefinition(), region, timestamp);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -203,13 +203,18 @@ public class IndexUI {
|
|||
assert !declName.isReference();
|
||||
ITranslationUnit tu= getTranslationUnit(preferProject, declName);
|
||||
if (tu != null) {
|
||||
IRegion region= new Region(declName.getNodeOffset(), declName.getNodeLength());
|
||||
long timestamp= declName.getFile().getTimestamp();
|
||||
return CElementHandleFactory.create(tu, index.findBinding(declName), region, timestamp);
|
||||
return getCElementForName(tu, index, declName);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ICElementHandle getCElementForName(ITranslationUnit tu, IIndex index, IIndexName declName) throws CoreException,
|
||||
DOMException {
|
||||
IRegion region= new Region(declName.getNodeOffset(), declName.getNodeLength());
|
||||
long timestamp= declName.getFile().getTimestamp();
|
||||
return CElementHandleFactory.create(tu, index.findBinding(declName), declName.isDefinition(), region, timestamp);
|
||||
}
|
||||
|
||||
public static ICElementHandle findAnyDeclaration(IIndex index, ICProject preferProject, IBinding binding) throws CoreException, DOMException {
|
||||
if (binding != null) {
|
||||
IIndexName[] names= index.findNames(binding, IIndex.FIND_DECLARATIONS);
|
||||
|
|
Loading…
Add table
Reference in a new issue