Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Schorn2009-06-22 13:42:00 +0000
committerMarkus Schorn2009-06-22 13:42:00 +0000
commitf36c6d3c70e26b17c814275064aa56167f7e67b1 (patch)
tree38d733cabd90cf2c3213806670f1a6076c4e30ee /core/org.eclipse.cdt.core
parentaaecc0852cdf1bb508cc2a3979f843bb6e9f67c1 (diff)
downloadorg.eclipse.cdt-f36c6d3c70e26b17c814275064aa56167f7e67b1.tar.gz
org.eclipse.cdt-f36c6d3c70e26b17c814275064aa56167f7e67b1.tar.xz
org.eclipse.cdt-f36c6d3c70e26b17c814275064aa56167f7e67b1.zip
Content assist for typedefs using same name as struct, bug 279931.
Diffstat (limited to 'core/org.eclipse.cdt.core')
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTElaboratedTypeSpecifier.java3
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java20
2 files changed, 14 insertions, 9 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTElaboratedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTElaboratedTypeSpecifier.java
index 0604e5ad64b..73fe3792277 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTElaboratedTypeSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTElaboratedTypeSpecifier.java
@@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.ICompositeType;
import org.eclipse.cdt.core.dom.ast.IEnumeration;
+import org.eclipse.cdt.core.dom.ast.ITypedef;
import org.eclipse.cdt.core.dom.ast.c.ICASTElaboratedTypeSpecifier;
/**
@@ -138,6 +139,8 @@ public class CASTElaboratedTypeSpecifier extends CASTBaseDeclSpecifier implement
} else if (b instanceof IEnumeration) {
if (getKind() != k_enum)
b= null;
+ } else if (b instanceof ITypedef) {
+ b= null;
}
if (b != null) {
result[nextPos++]= b;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java
index f190305a1d1..9d69b3178c6 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java
@@ -85,7 +85,7 @@ import org.eclipse.cdt.core.dom.ast.gnu.c.IGCCASTSimpleDeclSpecifier;
import org.eclipse.cdt.core.index.IIndexBinding;
import org.eclipse.cdt.core.index.IIndexFileSet;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
-import org.eclipse.cdt.core.parser.util.CharArrayObjectMap;
+import org.eclipse.cdt.core.parser.util.CharArraySet;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.internal.core.dom.parser.ASTInternal;
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
@@ -1123,28 +1123,30 @@ public class CVisitor extends ASTQueries {
}
}
- CharArrayObjectMap prefixMap = new CharArrayObjectMap(2);
+ IBinding[] result = null;
+ CharArraySet handled= new CharArraySet(1);
while (scope != null) {
try {
if (!(scope instanceof ICCompositeTypeScope)) {
IBinding[] bindings= scope.getBindings(name, true, true, fileSet);
for (IBinding b : bindings) {
final char[] n= b.getNameCharArray();
- if (!prefixMap.containsKey(n)) {
- prefixMap.put(n, b);
+ // consider binding only if no binding with the same name was found in another scope.
+ if (!handled.containsKey(n)) {
+ result= (IBinding[]) ArrayUtil.append(IBinding.class, result, b);
}
}
+ // store names of bindings
+ for (IBinding b : bindings) {
+ final char[] n= b.getNameCharArray();
+ handled.put(n);
+ }
}
} catch (DOMException e) {
}
scope= scope.getParent();
}
- IBinding[] result = null;
- Object[] vals = prefixMap.valueArray();
- for (Object val : vals) {
- result = (IBinding[]) ArrayUtil.append(IBinding.class, result, val);
- }
return (IBinding[]) ArrayUtil.trim(IBinding.class, result);
}

Back to the top