diff options
author | Markus Schorn | 2009-06-22 13:42:00 +0000 |
---|---|---|
committer | Markus Schorn | 2009-06-22 13:42:00 +0000 |
commit | f36c6d3c70e26b17c814275064aa56167f7e67b1 (patch) | |
tree | 38d733cabd90cf2c3213806670f1a6076c4e30ee /core/org.eclipse.cdt.core | |
parent | aaecc0852cdf1bb508cc2a3979f843bb6e9f67c1 (diff) | |
download | org.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')
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); } |