mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-29 20:05:35 +02:00
Call Hierarchy: support for initializers of global variables
This commit is contained in:
parent
d104bdce04
commit
72d7147e77
4 changed files with 66 additions and 8 deletions
|
@ -20,12 +20,14 @@ import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
import org.eclipse.jface.text.Region;
|
import org.eclipse.jface.text.Region;
|
||||||
import org.eclipse.swt.widgets.Display;
|
import org.eclipse.swt.widgets.Display;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IEnumerator;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.model.ISourceRange;
|
import org.eclipse.cdt.core.model.ISourceRange;
|
||||||
import org.eclipse.cdt.core.model.ISourceReference;
|
import org.eclipse.cdt.core.model.ISourceReference;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
|
import org.eclipse.cdt.core.model.IVariable;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.corext.util.CModelUtil;
|
import org.eclipse.cdt.internal.corext.util.CModelUtil;
|
||||||
|
@ -76,9 +78,15 @@ public class CHContentProvider extends AsyncTreeContentProvider {
|
||||||
if (node.isRecursive() || node.getRepresentedDeclaration() == null) {
|
if (node.isRecursive() || node.getRepresentedDeclaration() == null) {
|
||||||
return NO_CHILDREN;
|
return NO_CHILDREN;
|
||||||
}
|
}
|
||||||
if (!fComputeReferencedBy && (node.isVariable() || node.isMacro())) {
|
if (fComputeReferencedBy) {
|
||||||
|
if (node.isInitializer()) {
|
||||||
|
return NO_CHILDREN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (node.isVariable() || node.isMacro()) {
|
||||||
return NO_CHILDREN;
|
return NO_CHILDREN;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// allow for async computation
|
// allow for async computation
|
||||||
return null;
|
return null;
|
||||||
|
@ -130,6 +138,9 @@ public class CHContentProvider extends AsyncTreeContentProvider {
|
||||||
private CHNode createRefbyNode(CHNode parent, ICElement element, CIndexReference[] refs) {
|
private CHNode createRefbyNode(CHNode parent, ICElement element, CIndexReference[] refs) {
|
||||||
ITranslationUnit tu= CModelUtil.getTranslationUnit(element);
|
ITranslationUnit tu= CModelUtil.getTranslationUnit(element);
|
||||||
CHNode node= new CHNode(parent, tu, refs[0].getTimestamp(), element);
|
CHNode node= new CHNode(parent, tu, refs[0].getTimestamp(), element);
|
||||||
|
if (element instanceof IVariable || element instanceof IEnumerator) {
|
||||||
|
node.setInitializer(true);
|
||||||
|
}
|
||||||
Arrays.sort(refs, CIndexReference.COMPARE_OFFSET);
|
Arrays.sort(refs, CIndexReference.COMPARE_OFFSET);
|
||||||
for (int i = 0; i < refs.length; i++) {
|
for (int i = 0; i < refs.length; i++) {
|
||||||
CIndexReference reference = refs[i];
|
CIndexReference reference = refs[i];
|
||||||
|
|
|
@ -25,7 +25,9 @@ import org.eclipse.swt.widgets.Display;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.ui.CElementImageDescriptor;
|
import org.eclipse.cdt.ui.CElementImageDescriptor;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
|
||||||
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
|
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
|
||||||
import org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider;
|
import org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider;
|
||||||
import org.eclipse.cdt.internal.ui.viewsupport.ImageImageDescriptor;
|
import org.eclipse.cdt.internal.ui.viewsupport.ImageImageDescriptor;
|
||||||
|
@ -47,9 +49,18 @@ public class CHLabelProvider extends LabelProvider implements IColorProvider {
|
||||||
public Image getImage(Object element) {
|
public Image getImage(Object element) {
|
||||||
if (element instanceof CHNode) {
|
if (element instanceof CHNode) {
|
||||||
CHNode node= (CHNode) element;
|
CHNode node= (CHNode) element;
|
||||||
ICElement decl= node.getOneRepresentedDeclaration();
|
Image image= null;
|
||||||
if (decl != null) {
|
if (node.isInitializer()) {
|
||||||
Image image= fCLabelProvider.getImage(decl);
|
ImageDescriptor desc= CElementImageProvider.getFunctionImageDescriptor();
|
||||||
|
image= CUIPlugin.getImageDescriptorRegistry().get(desc);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ICElement decl= node.getOneRepresentedDeclaration();
|
||||||
|
if (decl != null) {
|
||||||
|
image= fCLabelProvider.getImage(decl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (image != null) {
|
||||||
return decorateImage(image, node);
|
return decorateImage(image, node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,13 +79,35 @@ public class CHLabelProvider extends LabelProvider implements IColorProvider {
|
||||||
fCLabelProvider.setTextFlags(options);
|
fCLabelProvider.setTextFlags(options);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return fCLabelProvider.getText(decl);
|
String label= fCLabelProvider.getText(decl);
|
||||||
|
if (node.isInitializer()) {
|
||||||
|
label= addInitializerDecoration(label);
|
||||||
|
}
|
||||||
|
return label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return super.getText(element);
|
return super.getText(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dispose() {
|
private String addInitializerDecoration(String label) {
|
||||||
|
int i= 0;
|
||||||
|
char[] content= label.toCharArray();
|
||||||
|
for (i = 0; i < content.length; i++) {
|
||||||
|
char c = content[i];
|
||||||
|
if (c == '-' || Character.isWhitespace(c)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
StringBuffer buf= new StringBuffer(label.length() + 10);
|
||||||
|
buf.append("{init "); //$NON-NLS-1$
|
||||||
|
buf.append(content, 0, i);
|
||||||
|
buf.append("}()"); //$NON-NLS-1$
|
||||||
|
buf.append(content, i, content.length-i);
|
||||||
|
|
||||||
|
return buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dispose() {
|
||||||
fCLabelProvider.dispose();
|
fCLabelProvider.dispose();
|
||||||
for (Iterator iter = fCachedImages.values().iterator(); iter.hasNext();) {
|
for (Iterator iter = fCachedImages.values().iterator(); iter.hasNext();) {
|
||||||
Image image = (Image) iter.next();
|
Image image = (Image) iter.next();
|
||||||
|
|
|
@ -36,6 +36,7 @@ public class CHNode implements IAdaptable {
|
||||||
private int fHashCode;
|
private int fHashCode;
|
||||||
private boolean fIsRecursive;
|
private boolean fIsRecursive;
|
||||||
private long fTimestamp;
|
private long fTimestamp;
|
||||||
|
private boolean fIsInitializer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new node for the include browser
|
* Creates a new node for the include browser
|
||||||
|
@ -158,4 +159,12 @@ public class CHNode implements IAdaptable {
|
||||||
public ICElement getOneRepresentedDeclaration() {
|
public ICElement getOneRepresentedDeclaration() {
|
||||||
return getRepresentedDeclaration();
|
return getRepresentedDeclaration();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isInitializer() {
|
||||||
|
return fIsInitializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInitializer(boolean isInitializer) {
|
||||||
|
fIsInitializer = isInitializer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,6 @@ import org.eclipse.cdt.core.dom.ast.c.ICExternalBinding;
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.model.IFunctionDeclaration;
|
|
||||||
import org.eclipse.cdt.core.model.ILanguage;
|
import org.eclipse.cdt.core.model.ILanguage;
|
||||||
import org.eclipse.cdt.core.model.IParent;
|
import org.eclipse.cdt.core.model.IParent;
|
||||||
import org.eclipse.cdt.core.model.ISourceRange;
|
import org.eclipse.cdt.core.model.ISourceRange;
|
||||||
|
@ -303,9 +302,15 @@ public class CIndexQueries {
|
||||||
}
|
}
|
||||||
|
|
||||||
private ICElement findEnclosingFunction(ICElement element, int offset) {
|
private ICElement findEnclosingFunction(ICElement element, int offset) {
|
||||||
if (element == null || (element instanceof IFunctionDeclaration)) {
|
if (element == null || element instanceof org.eclipse.cdt.core.model.IFunctionDeclaration) {
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
if (element instanceof org.eclipse.cdt.core.model.IVariable) {
|
||||||
|
// bug 156844
|
||||||
|
if (!(element instanceof org.eclipse.cdt.core.model.IEnumeration)) {
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
if (element instanceof IParent) {
|
if (element instanceof IParent) {
|
||||||
ICElement[] children= ((IParent) element).getChildren();
|
ICElement[] children= ((IParent) element).getChildren();
|
||||||
|
|
Loading…
Add table
Reference in a new issue