Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Schorn2008-12-19 12:19:16 +0000
committerMarkus Schorn2008-12-19 12:19:16 +0000
commit416bf3a0e081946ce5471db619be15fd016d3d9d (patch)
tree3fe8d358c7cab8660d433e853444f95dc867484c /core/org.eclipse.cdt.core
parented9ade92a23ebaaac7c625348488c79d38006be3 (diff)
downloadorg.eclipse.cdt-416bf3a0e081946ce5471db619be15fd016d3d9d.tar.gz
org.eclipse.cdt-416bf3a0e081946ce5471db619be15fd016d3d9d.tar.xz
org.eclipse.cdt-416bf3a0e081946ce5471db619be15fd016d3d9d.zip
Correcting IASTName.toCharArray(), bug 258054.
Diffstat (limited to 'core/org.eclipse.cdt.core')
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java2
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ext/CElementHandleFactory.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IName.java22
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTNameCollector.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java48
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTDeclSpecifier.java14
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTName.java26
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java11
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/FindNodeForOffsetAction.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompositeTypeSpecifier.java14
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTEnumerationSpecifier.java5
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTName.java8
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/AbstractCPPClassSpecializationScope.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompositeTypeSpecifier.java5
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConversionName.java52
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarator.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTEnumerationSpecifier.java5
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTName.java81
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNameBase.java92
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java114
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java87
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java45
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumerator.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPField.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionScope.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPImplicitMethod.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPLabel.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethod.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplate.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespace.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceAlias.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceScope.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java7
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScope.java47
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java13
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUsingDeclaration.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVariable.java21
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java69
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java8
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java10
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/SingleMacroExpansionExplorer.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java7
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMInclude.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroDefinitionName.java10
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroReferenceName.java10
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMName.java23
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java5
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java6
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java2
68 files changed, 448 insertions, 549 deletions
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java
index b5a81617acb..cb51d5654c9 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java
@@ -671,7 +671,7 @@ public class ASTStringUtil {
}
buffer.append(Keywords.cpGT);
} else if (name != null) {
- buffer.append(name.toCharArray());
+ buffer.append(name.getSimpleID());
}
return buffer;
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ext/CElementHandleFactory.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ext/CElementHandleFactory.java
index 0a10e840773..f1010a76bb7 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ext/CElementHandleFactory.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ext/CElementHandleFactory.java
@@ -154,7 +154,7 @@ public class CElementHandleFactory {
return null;
}
else if (scope instanceof ICPPNamespaceScope) {
- element= new NamespaceHandle(parentElement, new String(scopeName.toCharArray()));
+ element= new NamespaceHandle(parentElement, new String(scopeName.getSimpleID()));
}
return element;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IName.java
index 4899b68d13d..54ac5b4e51a 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IName.java
@@ -16,21 +16,23 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
/**
* Common interface for names in the index and the AST.
- * <p> This interface is not intended to be implemented by clients. </p>
- * <p>
- * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
- * part of a work in progress. There is no guarantee that this API will
- * work or that it will remain the same. Please do not use this API without
- * consulting with the CDT team.
- * </p>
* @since 4.0
+ * @noimplement This interface is not intended to be implemented by clients.
*/
public interface IName {
/**
- * Return a char array representation of the name.
- *
- * @return ~ toString().toCharArray()
+ * Returns the name without qualification and without template arguments.
+ * @since 5.1
*/
+ public char[] getSimpleID();
+
+ /**
+ * @deprecated Using this method is problematic, because for names from the
+ * index never contain qualification or template arguments, which is different
+ * for names from the AST.
+ * Use {@link #getSimpleID()}, instead.
+ */
+ @Deprecated
public char[] toCharArray();
/**
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTNameCollector.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTNameCollector.java
index 851db518964..bca7eb6a167 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTNameCollector.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTNameCollector.java
@@ -45,7 +45,7 @@ public final class ASTNameCollector extends ASTVisitor {
@Override
public int visit(IASTName name) {
if (name != null && !(name instanceof ICPPASTQualifiedName) && !(name instanceof ICPPASTTemplateId)) {
- if (CharArrayUtils.equals(fName, name.toCharArray())) {
+ if (CharArrayUtils.equals(fName, name.getSimpleID())) {
fFound.add(name);
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java
index 2a87d5e771a..e5427b68185 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java
@@ -13,24 +13,18 @@ package org.eclipse.cdt.core.dom.ast;
import java.util.LinkedList;
-import org.eclipse.cdt.core.dom.IName;
import org.eclipse.cdt.core.dom.ast.c.ICArrayType;
import org.eclipse.cdt.core.dom.ast.c.ICBasicType;
import org.eclipse.cdt.core.dom.ast.c.ICPointerType;
import org.eclipse.cdt.core.dom.ast.c.ICQualifierType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBasicType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionScope;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceScope;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPReferenceType;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
-import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateScope;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPBasicType;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPPointerType;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPQualifierType;
@@ -653,30 +647,21 @@ public class ASTTypeUtil {
private static String[] getQualifiedNameForAnonymous(ICPPBinding binding) throws DOMException {
LinkedList<String> result= new LinkedList<String>();
result.addFirst(getNameForAnonymous(binding));
- ICPPScope scope = (ICPPScope) binding.getScope();
- while (scope != null) {
- if (scope instanceof ICPPBlockScope || scope instanceof ICPPFunctionScope) {
- break;
- }
- if (!(scope instanceof ICPPTemplateScope)) {
- IName n = scope.getScopeName();
- if (n == null) {
- break;
- }
- char[] name= n.toCharArray();
- if (name.length == 0) {
- if (!(scope instanceof ICPPNamespaceScope)) {
- name= createNameForAnonymous(scope);
- if (name == null) {
- break;
- }
- result.addFirst(new String(name));
+
+ IBinding owner= binding.getOwner();
+ while(owner instanceof ICPPNamespace || owner instanceof ICPPClassType) {
+ char[] name= owner.getNameCharArray();
+ if (name == null || name.length == 0) {
+ if (!(binding instanceof ICPPNamespace)) {
+ char[] altname= createNameForAnonymous(binding);
+ if (altname != null) {
+ result.addFirst(new String(altname));
}
- } else {
- result.addFirst(new String(name));
}
+ } else {
+ result.addFirst(new String(name));
}
- scope = (ICPPScope) scope.getParent();
+ owner= owner.getOwner();
}
return result.toArray(new String[result.size()]);
}
@@ -692,13 +677,6 @@ public class ASTTypeUtil {
return new String(name);
}
- private static char[] createNameForAnonymous(ICPPScope scope) {
- if (scope instanceof ICPPClassScope) {
- return createNameForAnonymous(((ICPPClassScope) scope).getClassType());
- }
- return null;
- }
-
public static char[] createNameForAnonymous(IBinding binding) {
IASTNode node= null;
if (binding instanceof ICInternalBinding) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTDeclSpecifier.java
index dff04eecdd7..38f9e1fde55 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTDeclSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTDeclSpecifier.java
@@ -1,19 +1,19 @@
/*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation 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:
- * IBM - Initial API and implementation
+ * Doug Schaefer (IBM) - Initial API and implementation
+ * Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast;
/**
* This is the base interface that represents a declaration specifier sequence.
*
- * @author Doug Schaefer
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IASTDeclSpecifier extends IASTNode {
@@ -117,14 +117,6 @@ public interface IASTDeclSpecifier extends IASTNode {
* boolean
*/
public void setInline(boolean value);
-
- /**
- * Get the string that represents the decl specifier seq. as represented in
- * the file pre-processing.
- *
- * @return String
- */
- public String getRawSignature();
/**
* @since 5.1
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTName.java
index 69be975a7c2..d52586ff310 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTName.java
@@ -19,9 +19,6 @@ import org.eclipse.cdt.core.dom.IName;
* This class represents a name in the program that represents a semantic object
* in the program.
*
- * The toString method produces a string representation of the name as
- * appropriate for the language.
- *
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IASTName extends IASTNode, IName {
@@ -32,18 +29,23 @@ public interface IASTName extends IASTNode, IName {
public static final IASTName[] EMPTY_NAME_ARRAY = new IASTName[0];
/**
+ * Returns the name including qualification and template arguments.
+ */
+ public char[] toCharArray();
+
+ /**
+ * Same as {@link #toCharArray()}.
+ * @since 5.1
+ */
+ public String toString();
+
+ /**
* Get the semantic object attached to this name. May be null if this name
* has not yet been semantically resolved (@see resolveBinding)
* @return <code>IBinding</code> if it has been resolved, otherwise null
*/
public IBinding getBinding();
- /**
- * Set the semantic object for this name to be the given binding
- * @param binding
- */
- public void setBinding( IBinding binding );
-
/**
* Resolve the semantic object this name is referring to.
*
@@ -100,4 +102,10 @@ public interface IASTName extends IASTNode, IName {
* @since 5.1
*/
public IASTName copy();
+
+ /**
+ * Set the semantic object for this name to be the given binding
+ * @noreference This method is not intended to be referenced by clients.
+ */
+ public void setBinding( IBinding binding );
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java
index 4eb258ccd8f..22b612e653d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java
@@ -66,7 +66,7 @@ public interface ICPPNodeFactory extends INodeFactory {
public ICPPASTTemplateId newTemplateId(IASTName templateName);
- public ICPPASTConversionName newConversionName(char[] name, IASTTypeId typeId);
+ public ICPPASTConversionName newConversionName(IASTTypeId typeId);
public ICPPASTQualifiedName newQualifiedName();
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java
index 7a9e425e827..18baaf6b0eb 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java
@@ -21,6 +21,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNodeLocation;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.OffsetLimitReachedException;
+import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.internal.core.parser.scanner.ILexerLog;
import org.eclipse.cdt.internal.core.parser.scanner.ILocationResolver;
import org.eclipse.cdt.internal.core.parser.scanner.Lexer;
@@ -143,16 +144,20 @@ public abstract class ASTNode implements IASTNode {
return null;
}
- public String getRawSignature() {
+ protected char[] getRawSignatureChars() {
final IASTFileLocation floc= getFileLocation();
final IASTTranslationUnit ast = getTranslationUnit();
if (floc != null && ast != null) {
ILocationResolver lr= (ILocationResolver) ast.getAdapter(ILocationResolver.class);
if (lr != null) {
- return new String(lr.getUnpreprocessedSignature(getFileLocation()));
+ return lr.getUnpreprocessedSignature(getFileLocation());
}
}
- return ""; //$NON-NLS-1$
+ return CharArrayUtils.EMPTY;
+ }
+
+ public String getRawSignature() {
+ return new String(getRawSignatureChars());
}
public String getContainingFilename() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java
index 69723f794d2..648f3bb8a86 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java
@@ -1615,11 +1615,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
}
}
- if (dtor.getName().toCharArray().length == 0 && dtor.getNestedDeclarator() == null) {
- throw new Error();
-// backup(lastTokenOfExpression); consume();
-// return expressionStatement;
- }
+ assert dtor.getNestedDeclarator() != null || dtor.getName().getSimpleID().length > 0;
}
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/FindNodeForOffsetAction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/FindNodeForOffsetAction.java
index a915c5d7777..17cf4987baa 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/FindNodeForOffsetAction.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/FindNodeForOffsetAction.java
@@ -122,9 +122,7 @@ public class FindNodeForOffsetAction extends CPPASTVisitor implements ICASTVisit
@Override
public int visit(IASTName name) {
- if (name.toString() != null)
- return processNode(name);
- return PROCESS_CONTINUE;
+ return processNode(name);
}
@Override
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompositeTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompositeTypeSpecifier.java
index 35c2a1d78ee..4c69b4b7efa 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompositeTypeSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompositeTypeSpecifier.java
@@ -6,9 +6,9 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * IBM Rational Software - Initial API and implementation
- * Markus Schorn (Wind River Systems)
- * Yuan Zhang / Beth Tibbitts (IBM Research)
+ * John Camelon (IBM Rational Software) - Initial API and implementation
+ * Markus Schorn (Wind River Systems)
+ * Yuan Zhang / Beth Tibbitts (IBM Research)
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.c;
@@ -20,7 +20,7 @@ import org.eclipse.cdt.core.dom.ast.c.ICASTCompositeTypeSpecifier;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
/**
- * @author jcamelon
+ * Implementation for C composite specifiers.
*/
public class CASTCompositeTypeSpecifier extends CASTBaseDeclSpecifier implements
ICASTCompositeTypeSpecifier {
@@ -102,12 +102,6 @@ public class CASTCompositeTypeSpecifier extends CASTBaseDeclSpecifier implements
return scope;
}
-
- @Override
- public String getRawSignature() {
- return getName().toString() == null ? "" : getName().toString(); //$NON-NLS-1$
- }
-
@Override
public boolean accept( ASTVisitor action ){
if( action.shouldVisitDeclSpecifiers ){
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTEnumerationSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTEnumerationSpecifier.java
index 2ed80ab93c8..bdf034e6679 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTEnumerationSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTEnumerationSpecifier.java
@@ -91,11 +91,6 @@ public class CASTEnumerationSpecifier extends CASTBaseDeclSpecifier
}
@Override
- public String getRawSignature() {
- return getName().toString() == null ? "" : getName().toString(); //$NON-NLS-1$
- }
-
- @Override
public boolean accept( ASTVisitor action ){
if( action.shouldVisitDeclSpecifiers ){
switch( action.visit( this ) ){
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTName.java
index 48f2ea99b40..094e0088f55 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTName.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * IBM Rational Software - Initial API and implementation
+ * John Camelon (IBM Rational Software) - Initial API and implementation
* Markus Schorn (Wind River Systems)
* Yuan Zhang / Beth Tibbitts (IBM Research)
* Bryan Wilkinson (QNX)
@@ -30,7 +30,7 @@ import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
import org.eclipse.cdt.internal.core.dom.parser.IASTInternalNameOwner;
/**
- * @author jcamelon
+ * Implementation for names in C translation units.
*/
public class CASTName extends ASTNode implements IASTName, IASTCompletionContext {
@@ -98,6 +98,10 @@ public class CASTName extends ASTNode implements IASTName, IASTCompletionContext
return name;
}
+ public char[] getSimpleID() {
+ return name;
+ }
+
@Override
public boolean accept(ASTVisitor action) {
if (action.shouldVisitNames) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/AbstractCPPClassSpecializationScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/AbstractCPPClassSpecializationScope.java
index c1695487b4c..8611bb1c97e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/AbstractCPPClassSpecializationScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/AbstractCPPClassSpecializationScope.java
@@ -60,7 +60,7 @@ public class AbstractCPPClassSpecializationScope implements ICPPClassSpecializat
}
public IBinding getBinding(IASTName name, boolean forceResolve, IIndexFileSet fileSet) throws DOMException {
- char[] c = name.toCharArray();
+ char[] c = name.getSimpleID();
if (CharArrayUtils.equals(c, specialClass.getNameCharArray()) && !CPPClassScope.isConstructorReference(name)) {
return specialClass;
@@ -83,7 +83,7 @@ public class AbstractCPPClassSpecializationScope implements ICPPClassSpecializat
public IBinding[] getBindings(IASTName name, boolean forceResolve, boolean prefixLookup,
IIndexFileSet fileSet) throws DOMException {
- char[] c = name.toCharArray();
+ char[] c = name.getSimpleID();
IBinding[] result = null;
if ((!prefixLookup && CharArrayUtils.equals(c, specialClass.getNameCharArray())) ||
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompositeTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompositeTypeSpecifier.java
index 3361679f802..cb819818515 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompositeTypeSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompositeTypeSpecifier.java
@@ -50,11 +50,6 @@ public class CPPASTCompositeTypeSpecifier extends CPPASTBaseDeclSpecifier
return copy;
}
- @Override
- public String getRawSignature() {
- return getName().toString() == null ? "" : getName().toString(); //$NON-NLS-1$
- }
-
public ICPPASTBaseSpecifier[] getBaseSpecifiers() {
if( baseSpecs == null ) return ICPPASTBaseSpecifier.EMPTY_BASESPECIFIER_ARRAY;
baseSpecs = (ICPPASTBaseSpecifier[]) ArrayUtil.removeNullsAfter( ICPPASTBaseSpecifier.class, baseSpecs, baseSpecsPos );
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConversionName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConversionName.java
index 69b2dd3ad9b..fa1c4b2d5a4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConversionName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConversionName.java
@@ -6,40 +6,35 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * IBM - Initial API and implementation
- * Emanuel Graf IFS - Bugfix for #198259
+ * Devin Steffler (IBM) - Initial API and implementation
+ * Emanuel Graf IFS - Fix for #198259
+ * Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTTypeId;
+import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName;
+import org.eclipse.cdt.core.parser.Keywords;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
/**
- * The implemented ICPPASTConversionName.
- *
- * @author dsteffle
+ * Implementation of conversion function ids
*/
-public class CPPASTConversionName extends CPPASTName implements ICPPASTConversionName {
-
+public class CPPASTConversionName extends CPPASTNameBase implements ICPPASTConversionName {
private IASTTypeId typeId = null;
+ private char[] fName;
public CPPASTConversionName() {
}
- public CPPASTConversionName(char[] name) {
- super(name);
- }
-
- public CPPASTConversionName(char[] name, IASTTypeId typeId) {
- super(name);
+ public CPPASTConversionName(IASTTypeId typeId) {
setTypeId(typeId);
}
- @Override
public CPPASTConversionName copy() {
- char[] name = toCharArray();
- CPPASTConversionName copy = new CPPASTConversionName(name == null ? null : name.clone());
+ CPPASTConversionName copy = new CPPASTConversionName();
copy.setTypeId(typeId == null ? null : typeId.copy());
copy.setOffsetAndLength(this);
return copy;
@@ -86,4 +81,29 @@ public class CPPASTConversionName extends CPPASTName implements ICPPASTConversio
}
return true;
}
+
+ @Override
+ protected IBinding createIntermediateBinding() {
+ return CPPVisitor.createBinding(this);
+ }
+
+ public char[] toCharArray() {
+ if (fName == null) {
+ StringBuilder buf= new StringBuilder();
+ buf.append(Keywords.cOPERATOR);
+ buf.append(' ');
+ if (typeId != null) {
+ buf.append(typeId.getRawSignature());
+ WHITESPACE_SEQ.matcher(buf).replaceAll(" "); //$NON-NLS-1$
+ }
+ final int len= buf.length();
+ fName= new char[len];
+ buf.getChars(0, len, fName, 0);
+ }
+ return fName;
+ }
+
+ public char[] getSimpleID() {
+ return toCharArray();
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarator.java
index fd5ab25e68c..16b2ced5920 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeclarator.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * IBM - Initial API and implementation
+ * John Camelon (IBM) - Initial API and implementation
* Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
@@ -29,7 +29,7 @@ import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
/**
- * @author jcamelon
+ * C++ specific declarator.
*/
public class CPPASTDeclarator extends ASTNode implements IASTDeclarator {
private IASTInitializer initializer;
@@ -205,7 +205,7 @@ public class CPPASTDeclarator extends ASTNode implements IASTDeclarator {
return r_reference;
}
if (getParent instanceof IASTParameterDeclaration)
- return (n.toCharArray().length > 0) ? r_definition : r_declaration;
+ return (n.getSimpleID().length > 0) ? r_definition : r_declaration;
return r_unclear;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTEnumerationSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTEnumerationSpecifier.java
index cb03b30b740..f4fb42ccffd 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTEnumerationSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTEnumerationSpecifier.java
@@ -84,11 +84,6 @@ public class CPPASTEnumerationSpecifier extends CPPASTBaseDeclSpecifier
}
@Override
- public String getRawSignature() {
- return getName().toString() == null ? "" : getName().toString(); //$NON-NLS-1$
- }
-
- @Override
public boolean accept(ASTVisitor action) {
if (action.shouldVisitDeclSpecifiers) {
switch (action.visit(this)) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTName.java
index a4c7a6e3f09..07c3fd2a8c1 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTName.java
@@ -14,13 +14,11 @@
package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IASTCompletionContext;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTName;
-import org.eclipse.cdt.core.dom.ast.IASTNameOwner;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.ICompositeType;
@@ -29,8 +27,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
-import org.eclipse.cdt.internal.core.dom.Linkage;
-import org.eclipse.cdt.internal.core.dom.parser.IASTInternalNameOwner;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
@@ -58,7 +54,8 @@ public class CPPASTName extends CPPASTNameBase implements IASTCompletionContext
return CPPVisitor.createBinding(this);
}
- public IASTCompletionContext getCompletionContext() {
+ @Override
+ public IASTCompletionContext getCompletionContext() {
IASTNode node = getParent();
while (node != null) {
if (node instanceof IASTCompletionContext) {
@@ -135,18 +132,15 @@ public class CPPASTName extends CPPASTNameBase implements IASTCompletionContext
return (IBinding[])ArrayUtil.removeNulls(IBinding.class, bindings);
}
- @Override
- public String toString() {
- if (name.length == 0)
- return ""; //$NON-NLS-1$
- return new String(name);
- }
-
public char[] toCharArray() {
return name;
}
- public void setName(char[] name) {
+ public char[] getSimpleID() {
+ return name;
+ }
+
+ public void setName(char[] name) {
assertNotFrozen();
this.name = name;
}
@@ -177,65 +171,4 @@ public class CPPASTName extends CPPASTNameBase implements IASTCompletionContext
}
return true;
}
-
- public int getRoleOfName(boolean allowResolution) {
- IASTNode parent = getParent();
- if (parent instanceof IASTInternalNameOwner) {
- return ((IASTInternalNameOwner) parent).getRoleForName(this, allowResolution);
- }
- if (parent instanceof IASTNameOwner) {
- return ((IASTNameOwner) parent).getRoleForName(this);
- }
- return IASTNameOwner.r_unclear;
- }
-
- public boolean isDeclaration() {
- IASTNode parent = getParent();
- if (parent instanceof IASTNameOwner) {
- int role = ((IASTNameOwner) parent).getRoleForName(this);
- switch (role) {
- case IASTNameOwner.r_reference:
- case IASTNameOwner.r_unclear:
- return false;
- default:
- return true;
- }
- }
- return false;
- }
-
- public boolean isReference() {
- IASTNode parent = getParent();
- if (parent instanceof IASTNameOwner) {
- int role = ((IASTNameOwner) parent).getRoleForName(this);
- switch (role) {
- case IASTNameOwner.r_reference:
- return true;
- default:
- return false;
- }
- }
- return false;
- }
-
- public boolean isDefinition() {
- IASTNode parent = getParent();
- if (parent instanceof IASTNameOwner) {
- int role = ((IASTNameOwner) parent).getRoleForName(this);
- switch (role) {
- case IASTNameOwner.r_definition:
- return true;
- default:
- return false;
- }
- }
- return false;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.dom.ast.IASTName#getLinkage()
- */
- public ILinkage getLinkage() {
- return Linkage.CPP_LINKAGE;
- }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNameBase.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNameBase.java
index 084537b0891..a8f21171acc 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNameBase.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNameBase.java
@@ -10,11 +10,21 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
+import java.util.regex.Pattern;
+
+import org.eclipse.cdt.core.dom.ILinkage;
+import org.eclipse.cdt.core.dom.ast.IASTCompletionContext;
import org.eclipse.cdt.core.dom.ast.IASTName;
+import org.eclipse.cdt.core.dom.ast.IASTNameOwner;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IProblemBinding;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
+import org.eclipse.cdt.core.parser.Keywords;
+import org.eclipse.cdt.internal.core.dom.Linkage;
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
+import org.eclipse.cdt.internal.core.dom.parser.IASTInternalNameOwner;
import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding;
import org.eclipse.core.runtime.Assert;
@@ -23,11 +33,13 @@ import org.eclipse.core.runtime.Assert;
* names plus template-ids
*/
public abstract class CPPASTNameBase extends ASTNode implements IASTName {
+ protected static final Pattern WHITESPACE_SEQ = Pattern.compile("\\s+"); //$NON-NLS-1$
/**
* For test-purposes, only.
*/
public static boolean sAllowRecursionBindings = true;
+ public static boolean sAllowNameComputation = true;
private static final byte MAX_RESOLUTION_DEPTH= 6;
protected final static class RecursionResolvingBinding extends ProblemBinding {
@@ -61,6 +73,18 @@ public abstract class CPPASTNameBase extends ASTNode implements IASTName {
return name.getBinding();
}
+ /**
+ * Helper method, returns "operator" for conversion names, and {@code IASTName#getSimpleName()}, otherwise.
+ */
+ public static char[] getLookupKey(IASTName name) {
+ name= name.getLastName();
+ if (name instanceof ICPPASTTemplateId)
+ name= ((ICPPASTTemplateId) name).getTemplateName();
+ if (name instanceof ICPPASTConversionName)
+ return Keywords.cOPERATOR;
+ return name.toCharArray();
+ }
+
private IBinding fBinding = null;
private byte fResolutionDepth = 0;
private boolean fIsFinal= false;
@@ -162,4 +186,72 @@ public abstract class CPPASTNameBase extends ASTNode implements IASTName {
public IASTName getLastName() {
return this;
}
+
+ @Override
+ public final String toString() {
+ return new String(toCharArray());
+ }
+
+ public IASTCompletionContext getCompletionContext() {
+ IASTNode node = getParent();
+ while (node != null) {
+ if (node instanceof IASTCompletionContext) {
+ return (IASTCompletionContext) node;
+ }
+ node = node.getParent();
+ }
+
+ return null;
+ }
+
+ public int getRoleOfName(boolean allowResolution) {
+ IASTNode parent = getParent();
+ if (parent instanceof IASTInternalNameOwner) {
+ return ((IASTInternalNameOwner) parent).getRoleForName(this, allowResolution);
+ }
+ if (parent instanceof IASTNameOwner) {
+ return ((IASTNameOwner) parent).getRoleForName(this);
+ }
+ return IASTNameOwner.r_unclear;
+ }
+
+ public boolean isDeclaration() {
+ IASTNode parent = getParent();
+ if (parent instanceof IASTNameOwner) {
+ int role = ((IASTNameOwner) parent).getRoleForName(this);
+ switch (role) {
+ case IASTNameOwner.r_reference:
+ case IASTNameOwner.r_unclear:
+ return false;
+ default:
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isReference() {
+ IASTNode parent = getParent();
+ if (parent instanceof IASTNameOwner) {
+ int role = ((IASTNameOwner) parent).getRoleForName(this);
+ return role == IASTNameOwner.r_reference;
+ }
+ return false;
+ }
+
+ public boolean isDefinition() {
+ IASTNode parent = getParent();
+ if (parent instanceof IASTNameOwner) {
+ int role = ((IASTNameOwner) parent).getRoleForName(this);
+ return role == IASTNameOwner.r_definition;
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.dom.ast.IASTName#getLinkage()
+ */
+ public ILinkage getLinkage() {
+ return Linkage.CPP_LINKAGE;
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java
index 3b3e9c28b00..a515aef677f 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTQualifiedName.java
@@ -15,7 +15,6 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp;
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IASTCompletionContext;
@@ -34,9 +33,9 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
+import org.eclipse.cdt.core.parser.Keywords;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
-import org.eclipse.cdt.internal.core.dom.Linkage;
import org.eclipse.cdt.internal.core.dom.parser.IASTInternalNameOwner;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics;
import org.eclipse.core.runtime.Assert;
@@ -51,8 +50,7 @@ public class CPPASTQualifiedName extends CPPASTNameBase
private IASTName[] names = null;
private int namesPos= -1;
private boolean isFullyQualified;
- private String signature;
-
+ private char[] signature;
public CPPASTQualifiedName() {
}
@@ -61,7 +59,6 @@ public class CPPASTQualifiedName extends CPPASTNameBase
for(IASTName name : getNames())
copy.addName(name == null ? null : name.copy());
copy.setFullyQualified(isFullyQualified);
- copy.setSignature(signature);
copy.setOffsetAndLength(this);
return copy;
}
@@ -95,22 +92,6 @@ public class CPPASTQualifiedName extends CPPASTNameBase
getLastName().setBinding(binding);
}
- public IASTCompletionContext getCompletionContext() {
- IASTNode node = getParent();
- while (node != null) {
- if (node instanceof IASTCompletionContext) {
- return (IASTCompletionContext) node;
- }
- node = node.getParent();
- }
-
- return null;
- }
-
- @Override
- public String toString() {
- return (signature == null) ? "" : signature; //$NON-NLS-1$
- }
public void addName(IASTName name) {
assertNotFrozen();
@@ -137,33 +118,26 @@ public class CPPASTQualifiedName extends CPPASTNameBase
return names[namesPos];
}
+
+ public char[] getSimpleID() {
+ return names[namesPos].getSimpleID();
+ }
public char[] toCharArray() {
- if (namesPos < 0)
- return new char[0];
-
- // count first
- int len = -2;
- for (int i = 0; i <= namesPos; ++i) {
- char[] n = names[i].toCharArray();
- if (n == null)
- return null;
- len+= 2;
- len+= n.length;
- }
-
- char[] nameArray = new char[len];
- int pos = 0;
- for (int i = 0; i <= namesPos; i++) {
- if (i != 0) {
- nameArray[pos++] = ':';
- nameArray[pos++] = ':';
+ if (signature == null) {
+ StringBuilder buf= new StringBuilder();
+ for (int i = 0; i <= namesPos; i++) {
+ if (i > 0 || isFullyQualified) {
+ buf.append(Keywords.cpCOLONCOLON);
+ }
+ buf.append(names[i].toCharArray());
}
- final char[] n = names[i].toCharArray();
- System.arraycopy(n, 0, nameArray, pos, n.length);
- pos += n.length;
+
+ final int len= buf.length();
+ signature= new char[len];
+ buf.getChars(0, len, signature, 0);
}
- return nameArray;
+ return signature;
}
public boolean isFullyQualified() {
@@ -175,10 +149,11 @@ public class CPPASTQualifiedName extends CPPASTNameBase
this.isFullyQualified = isFullyQualified;
}
-
+ /**
+ * @deprecated there is no need to set the signature, it will be computed lazily.
+ */
+ @Deprecated
public void setSignature(String signature) {
- assertNotFrozen();
- this.signature = signature;
}
@Override
@@ -194,11 +169,12 @@ public class CPPASTQualifiedName extends CPPASTNameBase
}
}
for (int i = 0; i <= namesPos; i++) {
+ final IASTName name = names[i];
if (i == namesPos) {
// pointer-to-member qualified names have a dummy name as the last part of the name, don't visit it
- if (names[i].toCharArray().length > 0 && !names[i].accept(action))
+ if (getLookupKey(name).length > 0 && !name.accept(action))
return false;
- } else if (!names[i].accept(action))
+ } else if (!name.accept(action))
return false;
}
@@ -216,6 +192,7 @@ public class CPPASTQualifiedName extends CPPASTNameBase
return true;
}
+ @Override
public int getRoleOfName(boolean allowResolution) {
IASTNode parent = getParent();
if (parent instanceof IASTInternalNameOwner) {
@@ -227,26 +204,6 @@ public class CPPASTQualifiedName extends CPPASTNameBase
return IASTNameOwner.r_unclear;
}
- public boolean isDeclaration() {
- IASTNode parent = getParent();
- if (parent instanceof IASTNameOwner) {
- int role = ((IASTNameOwner) parent).getRoleForName(this);
- if (role == IASTNameOwner.r_reference) return false;
- return true;
- }
- return false;
- }
-
- public boolean isReference() {
- IASTNode parent = getParent();
- if (parent instanceof IASTNameOwner) {
- int role = ((IASTNameOwner) parent).getRoleForName(this);
- if (role == IASTNameOwner.r_reference) return true;
- return false;
- }
- return false;
- }
-
public int getRoleForName(IASTName n) {
for (int i=0; i < namesPos; ++i) {
if (names[i] == n)
@@ -278,16 +235,6 @@ public class CPPASTQualifiedName extends CPPASTNameBase
return false;
}
- public boolean isDefinition() {
- IASTNode parent = getParent();
- if (parent instanceof IASTNameOwner) {
- int role = ((IASTNameOwner) parent).getRoleForName(this);
- if (role == IASTNameOwner.r_definition) return true;
- return false;
- }
- return false;
- }
-
public IBinding[] findBindings(IASTName n, boolean isPrefix) {
IBinding[] bindings = CPPSemantics.findBindingsForContentAssist(n, isPrefix);
@@ -299,7 +246,7 @@ public class CPPASTQualifiedName extends CPPASTNameBase
List<IBinding> filtered = filterClassScopeBindings(classType, bindings, isDeclaration);
if (isDeclaration && nameMatches(classType.getNameCharArray(),
- n.toCharArray(), isPrefix)) {
+ n.getSimpleID(), isPrefix)) {
try {
ICPPConstructor[] constructors = classType.getConstructors();
for (int i = 0; i < constructors.length; i++) {
@@ -359,13 +306,6 @@ public class CPPASTQualifiedName extends CPPASTNameBase
return CharArrayUtils.equals(potential, name);
}
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.dom.ast.IASTName#getLinkage()
- */
- public ILinkage getLinkage() {
- return Linkage.CPP_LINKAGE;
- }
-
@Override
protected IBinding createIntermediateBinding() {
Assert.isLegal(false);
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java
index 50cf5e79f33..6481c721b12 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java
@@ -12,23 +12,24 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
-import org.eclipse.cdt.core.dom.ILinkage;
+import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
-import org.eclipse.cdt.core.dom.ast.IASTCompletionContext;
import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTName;
-import org.eclipse.cdt.core.dom.ast.IASTNameOwner;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTTypeId;
import org.eclipse.cdt.core.dom.ast.IBinding;
+import org.eclipse.cdt.core.dom.ast.IProblemBinding;
+import org.eclipse.cdt.core.dom.ast.IType;
+import org.eclipse.cdt.core.dom.ast.IValue;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTAmbiguousTemplateArgument;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
-import org.eclipse.cdt.internal.core.dom.Linkage;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
-import org.eclipse.cdt.internal.core.dom.parser.IASTInternalNameOwner;
+import org.eclipse.cdt.internal.core.dom.parser.Value;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
/**
* Template ids consist of an unqualified name (or operator or conversion name)
@@ -53,6 +54,10 @@ public class CPPASTTemplateId extends CPPASTNameBase implements ICPPASTTemplateI
return copy;
}
+ public char[] getSimpleID() {
+ return templateName.getSimpleID();
+ }
+
public IASTName getTemplateName() {
return templateName;
}
@@ -98,17 +103,43 @@ public class CPPASTTemplateId extends CPPASTNameBase implements ICPPASTTemplateI
return CPPTemplates.createBinding(this);
}
- public IASTCompletionContext getCompletionContext() {
- return null;
- }
-
public char[] toCharArray() {
- return templateName.toCharArray();
- }
-
- @Override
- public String toString() {
- return templateName.toString();
+ assert sAllowNameComputation;
+
+ StringBuilder buf= new StringBuilder();
+ buf.append(getTemplateName().toCharArray());
+ buf.append('<');
+ boolean needComma= false;
+ boolean cleanupWhitespace= false;
+ final IASTNode[] args= getTemplateArguments();
+ for (IASTNode arg : args) {
+ if (needComma)
+ buf.append(", "); //$NON-NLS-1$
+ needComma= true;
+ if (arg instanceof IASTExpression) {
+ IValue value= Value.create((IASTExpression) arg, Value.MAX_RECURSION_DEPTH);
+ if (value != Value.UNKNOWN && !Value.isDependentValue(value)) {
+ buf.append(value.getSignature());
+ } else {
+ buf.append(arg.getRawSignature());
+ cleanupWhitespace= true;
+ }
+ } else {
+ IType type= CPPVisitor.createType(arg);
+ if (type == null || type instanceof IProblemBinding) {
+ buf.append(arg.getRawSignature());
+ } else {
+ buf.append(ASTTypeUtil.getType(type, false));
+ }
+ }
+ if (cleanupWhitespace)
+ WHITESPACE_SEQ.matcher(buf).replaceAll(" "); //$NON-NLS-1$
+ }
+ buf.append('>');
+ final int len= buf.length();
+ final char[] result= new char[len];
+ buf.getChars(0, len, result, 0);
+ return result;
}
@Override
@@ -136,10 +167,12 @@ public class CPPASTTemplateId extends CPPASTNameBase implements ICPPASTTemplateI
return true;
}
+ @Override
public boolean isDeclaration() {
return false; //for now this seems to be true
}
+ @Override
public boolean isReference() {
return true; //for now this seems to be true
}
@@ -160,28 +193,4 @@ public class CPPASTTemplateId extends CPPASTNameBase implements ICPPASTTemplateI
}
}
}
-
- public int getRoleOfName(boolean allowResolution) {
- IASTNode parent = getParent();
- if (parent instanceof IASTInternalNameOwner) {
- return ((IASTInternalNameOwner) parent).getRoleForName(this, allowResolution);
- }
- if (parent instanceof IASTNameOwner) {
- return ((IASTNameOwner) parent).getRoleForName(this);
- }
- return IASTNameOwner.r_unclear;
- }
-
- public boolean isDefinition() {
- IASTNode parent = getParent();
- if (parent instanceof IASTNameOwner) {
- int role = ((IASTNameOwner) parent).getRoleForName(this);
- return role == IASTNameOwner.r_definition;
- }
- return false;
- }
-
- public ILinkage getLinkage() {
- return Linkage.CPP_LINKAGE;
- }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java
index 2bdae254ecd..a4112aaa5af 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java
@@ -61,6 +61,8 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
/**
* Base implementation for c++ scopes.
+ *
+ * mstodo store user defined conversions under the same key, see {@link CPPASTNameBase#getLookupKey(IASTName)}
*/
public class CPPClassScope extends CPPScope implements ICPPClassScope {
private static final char[] CONSTRUCTOR_KEY = "!!!CTOR!!!".toCharArray(); //$NON-NLS-1$
@@ -84,11 +86,7 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope {
//will resolve to these bindings.
ICPPASTCompositeTypeSpecifier compTypeSpec = (ICPPASTCompositeTypeSpecifier) getPhysicalNode();
- IASTName name = compTypeSpec.getName();
- if (name instanceof ICPPASTQualifiedName) {
- name = ((ICPPASTQualifiedName) name).getLastName();
- }
-
+ IASTName name = compTypeSpec.getName().getLastName();
IBinding binding = name.resolveBinding();
if (!(binding instanceof ICPPClassType))
return;
@@ -100,7 +98,7 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope {
} catch (DOMException e) {
}
}
- char[] className = name.toCharArray();
+ char[] className = name.getSimpleID();
IParameter[] voidPs = new IParameter[] { new CPPParameter(CPPSemantics.VOID_TYPE) };
IType pType = new CPPReferenceType(new CPPQualifierType(clsType, true, false));
@@ -173,7 +171,7 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope {
final ICPPASTQualifiedName qname = (ICPPASTQualifiedName) name;
final IASTName[] names= qname.getNames();
for (int i = names.length-2; i>=0; i--) {
- if (b == null || !CharArrayUtils.equals(names[i].toCharArray(), b.getNameCharArray()))
+ if (b == null || !CharArrayUtils.equals(names[i].getSimpleID(), b.getNameCharArray()))
return;
b= b.getOwner();
@@ -215,14 +213,14 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope {
*/
@Override
public IBinding getBinding(IASTName name, boolean resolve, IIndexFileSet fileSet) throws DOMException {
- char[] c = name.toCharArray();
+ char[] c = name.getSimpleID();
ICPPASTCompositeTypeSpecifier compType = (ICPPASTCompositeTypeSpecifier) getPhysicalNode();
IASTName compName = compType.getName().getLastName();
if (compName instanceof ICPPASTTemplateId) {
compName= ((ICPPASTTemplateId) compName).getTemplateName();
}
- if (CharArrayUtils.equals(c, compName.toCharArray())) {
+ if (CharArrayUtils.equals(c, compName.getSimpleID())) {
if (isConstructorReference(name)) {
return CPPSemantics.resolveAmbiguities(name, getConstructors(bindings, resolve, name));
}
@@ -234,7 +232,7 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope {
@Override
public IBinding[] getBindings(IASTName name, boolean resolve, boolean prefixLookup, IIndexFileSet fileSet) throws DOMException {
- char[] c = name.toCharArray();
+ char[] c = name.getSimpleID();
ICPPASTCompositeTypeSpecifier compType = (ICPPASTCompositeTypeSpecifier) getPhysicalNode();
IASTName compName = compType.getName().getLastName();
@@ -242,8 +240,8 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope {
compName= ((ICPPASTTemplateId) compName).getTemplateName();
}
IBinding[] result = null;
- if ((!prefixLookup && CharArrayUtils.equals(c, compName.toCharArray()))
- || (prefixLookup && CharArrayUtils.equals(compName.toCharArray(), 0, c.length, c, true))) {
+ if ((!prefixLookup && CharArrayUtils.equals(c, compName.getSimpleID()))
+ || (prefixLookup && CharArrayUtils.equals(compName.getSimpleID(), 0, c.length, c, true))) {
if (isConstructorReference(name)) {
result = (IBinding[]) ArrayUtil.addAll(IBinding.class, result, getConstructors(bindings, resolve, name));
}
@@ -321,13 +319,13 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope {
public IBinding[] find(String name) throws DOMException {
char[] n = name.toCharArray();
ICPPASTCompositeTypeSpecifier compType = (ICPPASTCompositeTypeSpecifier) getPhysicalNode();
- IASTName compName = compType.getName();
- if (compName instanceof ICPPASTQualifiedName) {
- compName = ((ICPPASTQualifiedName) compName).getLastName();
- }
+ IASTName compName = compType.getName().getLastName();
+ if (compName instanceof ICPPASTTemplateId) {
+ compName= ((ICPPASTTemplateId) compName).getTemplateName();
+ }
- if (CharArrayUtils.equals(compName.toCharArray(), n)) {
- return new IBinding[] { getClassType() };
+ if (CharArrayUtils.equals(compName.getSimpleID(), n)) {
+ return new IBinding[] {compName.resolveBinding()};
}
return super.find(name);
@@ -358,11 +356,12 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope {
*/
public ICPPClassType getClassType() {
ICPPASTCompositeTypeSpecifier compSpec = (ICPPASTCompositeTypeSpecifier) getPhysicalNode();
- IBinding binding = compSpec.getName().resolveBinding();
+ final IASTName name = compSpec.getName();
+ IBinding binding = name.resolveBinding();
if (binding instanceof ICPPClassType)
return (ICPPClassType) binding;
- return new CPPClassType.CPPClassTypeProblem(compSpec.getName(), IProblemBinding.SEMANTIC_BAD_SCOPE, compSpec.getName().toCharArray());
+ return new CPPClassType.CPPClassTypeProblem(name, IProblemBinding.SEMANTIC_BAD_SCOPE, name.toCharArray());
}
/* (non-Javadoc)
@@ -449,7 +448,7 @@ class ImplicitsAnalysis {
private static ICPPASTFunctionDeclarator[] getUserDeclaredCtorOrDtor(ICPPASTCompositeTypeSpecifier compSpec, boolean constructor) {
List<ICPPASTFunctionDeclarator> result= new ArrayList<ICPPASTFunctionDeclarator>();
IASTDeclaration[] members = compSpec.getMembers();
- char[] name = compSpec.getName().toCharArray();
+ char[] name = compSpec.getName().getSimpleID();
IASTDeclarator dcltor = null;
IASTDeclSpecifier spec = null;
for (IASTDeclaration member : members) {
@@ -471,7 +470,7 @@ class ImplicitsAnalysis {
}
boolean nameEquals= false;
- char[] dtorname= CPPVisitor.findInnermostDeclarator(dcltor).getName().toCharArray();
+ char[] dtorname= CPPASTNameBase.getLookupKey(CPPVisitor.findInnermostDeclarator(dcltor).getName());
if (constructor) {
nameEquals= CharArrayUtils.equals(dtorname, name);
} else {
@@ -504,7 +503,7 @@ class ImplicitsAnalysis {
if (dcltor instanceof ICPPASTFunctionDeclarator == false)
continue;
- final char[] nchars= CPPVisitor.findInnermostDeclarator(dcltor).getName().toCharArray();
+ final char[] nchars= CPPASTNameBase.getLookupKey(CPPVisitor.findInnermostDeclarator(dcltor).getName());
if (!CharArrayUtils.equals(nchars, OverloadableOperator.ASSIGN.toCharArray()))
continue;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java
index 42e322915de..252f91c340e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java
@@ -257,12 +257,12 @@ public class CPPClassType extends PlatformObject implements ICPPInternalClassTyp
return null;
}
- public String getName() {
- return ( definition != null ) ? definition.toString() : declarations[0].toString();
+ public final String getName() {
+ return new String(getNameCharArray());
}
public char[] getNameCharArray() {
- return ( definition != null ) ? definition.toCharArray() : declarations[0].toCharArray();
+ return ( definition != null ) ? definition.getSimpleID() : declarations[0].getSimpleID();
}
public IScope getScope() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java
index d7e9f33aa9a..cd808086c16 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java
@@ -49,11 +49,11 @@ public class CPPEnumeration extends PlatformObject implements IEnumeration, ICPP
}
public String getName() {
- return enumName.toString();
+ return new String(getNameCharArray());
}
public char[] getNameCharArray() {
- return enumName.toCharArray();
+ return enumName.getSimpleID();
}
public IScope getScope() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumerator.java
index 1cc6e7f1773..cc5c6a2f9ab 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumerator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumerator.java
@@ -63,14 +63,14 @@ public class CPPEnumerator extends PlatformObject implements IEnumerator, ICPPIn
* @see org.eclipse.cdt.core.dom.ast.IBinding#getName()
*/
public String getName() {
- return enumName.toString();
+ return new String(getNameCharArray());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IBinding#getNameCharArray()
*/
public char[] getNameCharArray() {
- return enumName.toCharArray();
+ return enumName.getSimpleID();
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPField.java
index c2559063b7c..f0a302b9fef 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPField.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPField.java
@@ -89,7 +89,7 @@ public class CPPField extends CPPVariable implements ICPPField {
IASTDeclarator [] dtors = ((IASTSimpleDeclaration)member).getDeclarators();
for (IASTDeclarator dtor : dtors) {
IASTName name = dtor.getName();
- if( CharArrayUtils.equals( name.toCharArray(), myName ) &&
+ if( CharArrayUtils.equals( name.getSimpleID(), myName ) &&
name.resolveBinding() == this )
{
return member;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java
index ebfb80cd8ab..8efdabd4572 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java
@@ -257,7 +257,7 @@ public class CPPFunction extends PlatformObject implements ICPPFunction, ICPPInt
public char[] getNameCharArray() {
- return getASTName().toCharArray();
+ return getASTName().getSimpleID();
}
protected IASTName getASTName() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionScope.java
index a86f5022b33..64ca983dde6 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionScope.java
@@ -70,7 +70,7 @@ public class CPPFunctionScope extends CPPScope implements ICPPFunctionScope {
* @see org.eclipse.cdt.core.dom.ast.cpp.ICPPScope#getBinding(int, char[])
*/
public IBinding getBinding(IASTName name) {
- return (IBinding) labels.get(name.toCharArray());
+ return (IBinding) labels.get(name.getSimpleID());
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPImplicitMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPImplicitMethod.java
index 339f02584ec..e6bea0d4d47 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPImplicitMethod.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPImplicitMethod.java
@@ -112,7 +112,7 @@ public class CPPImplicitMethod extends CPPImplicitFunction implements ICPPMethod
while( dtor != null ){
IASTName name = CPPVisitor.findInnermostDeclarator(dtor).getName();
if( CPPVisitor.findTypeRelevantDeclarator(dtor) instanceof ICPPASTFunctionDeclarator &&
- CharArrayUtils.equals( name.toCharArray(), getNameCharArray() ) )
+ CharArrayUtils.equals( name.getSimpleID(), getNameCharArray() ) )
{
IType t0= CPPVisitor.createType( dtor );
boolean ok= false;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPLabel.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPLabel.java
index ac1f52c226f..7ea3174e8d4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPLabel.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPLabel.java
@@ -51,11 +51,11 @@ public class CPPLabel extends PlatformObject implements ILabel, ICPPInternalBind
}
public String getName() {
- return statement.toString();
+ return new String(getNameCharArray());
}
public char[] getNameCharArray() {
- return statement.toCharArray();
+ return statement.getSimpleID();
}
public IScope getScope() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethod.java
index 69e66f67a75..a1e8db0825c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethod.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethod.java
@@ -109,7 +109,7 @@ public class CPPMethod extends CPPFunction implements ICPPMethod {
IASTDeclarator [] dtors = ((IASTSimpleDeclaration)member).getDeclarators();
for (IASTDeclarator dtor : dtors) {
IASTName name = CPPVisitor.findInnermostDeclarator(dtor).getName();
- if( CharArrayUtils.equals( name.toCharArray(), myName ) &&
+ if( CharArrayUtils.equals( name.getSimpleID(), myName ) &&
name.resolveBinding() == this )
{
return member;
@@ -118,7 +118,7 @@ public class CPPMethod extends CPPFunction implements ICPPMethod {
} else if( member instanceof IASTFunctionDefinition ){
final IASTFunctionDeclarator declarator = ((IASTFunctionDefinition) member).getDeclarator();
IASTName name = CPPVisitor.findInnermostDeclarator(declarator).getName();
- if( CharArrayUtils.equals( name.toCharArray(), myName ) &&
+ if( CharArrayUtils.equals( name.getSimpleID(), myName ) &&
name.resolveBinding() == this )
{
return member;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplate.java
index 75e3daf9016..45b5de1eb7a 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplate.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplate.java
@@ -73,7 +73,7 @@ public class CPPMethodTemplate extends CPPFunctionTemplate implements
IASTDeclarator [] dtors = ((IASTSimpleDeclaration)decl).getDeclarators();
for (IASTDeclarator dtor : dtors) {
IASTName name = CPPVisitor.findInnermostDeclarator(dtor).getName();
- if( CharArrayUtils.equals( name.toCharArray(), myName ) &&
+ if( CharArrayUtils.equals( name.getSimpleID(), myName ) &&
name.resolveBinding() == this )
{
return member;
@@ -81,7 +81,7 @@ public class CPPMethodTemplate extends CPPFunctionTemplate implements
}
} else if( decl instanceof IASTFunctionDefinition ){
IASTName name = CPPVisitor.findInnermostDeclarator(((IASTFunctionDefinition) decl).getDeclarator()).getName();
- if( CharArrayUtils.equals( name.toCharArray(), myName ) &&
+ if( CharArrayUtils.equals( name.getSimpleID(), myName ) &&
name.resolveBinding() == this )
{
return member;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespace.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespace.java
index 0af3e6b7aaa..b7755876fbe 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespace.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespace.java
@@ -109,7 +109,7 @@ public class CPPNamespace extends PlatformObject implements ICPPNamespace, ICPPI
public int visit(ICPPASTNamespaceDefinition namespace) {
ICPPASTNamespaceDefinition orig = namespaceDef, candidate = namespace;
while(candidate != null) {
- if (!CharArrayUtils.equals(orig.getName().toCharArray(), candidate.getName().toCharArray()))
+ if (!CharArrayUtils.equals(orig.getName().getSimpleID(), candidate.getName().getSimpleID()))
return PROCESS_CONTINUE;
if (orig.getParent() instanceof ICPPASTNamespaceDefinition) {
if (!(candidate.getParent() instanceof ICPPASTNamespaceDefinition))
@@ -238,14 +238,14 @@ public class CPPNamespace extends PlatformObject implements ICPPNamespace, ICPPI
* @see org.eclipse.cdt.core.dom.ast.IBinding#getName()
*/
public String getName() {
- return tu != null ? null : namespaceDefinitions[0].toString();
+ return new String(getNameCharArray());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IBinding#getNameCharArray()
*/
public char[] getNameCharArray() {
- return tu != null ? EMPTY_CHAR_ARRAY : namespaceDefinitions[0].toCharArray();
+ return tu != null ? EMPTY_CHAR_ARRAY : namespaceDefinitions[0].getSimpleID();
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceAlias.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceAlias.java
index e16979ca421..73f87cce2dd 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceAlias.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceAlias.java
@@ -50,11 +50,11 @@ public class CPPNamespaceAlias extends PlatformObject implements ICPPNamespaceAl
}
public String getName() {
- return alias.toString();
+ return new String(getNameCharArray());
}
public char[] getNameCharArray() {
- return alias.toCharArray();
+ return alias.getSimpleID();
}
public String[] getQualifiedName() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceScope.java
index 9b0447d4658..b86be78357d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceScope.java
@@ -103,7 +103,7 @@ public class CPPNamespaceScope extends CPPScope implements ICPPNamespaceScope{
}
@Override
public int leave(ICPPASTNamespaceDefinition namespace) {
- if (namespace.getName().toCharArray().length > 0) {
+ if (namespace.getName().getSimpleID().length > 0) {
--depth;
}
return PROCESS_CONTINUE;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java
index 98b8972bf01..bfb87eae7a4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java
@@ -206,8 +206,8 @@ public class CPPNodeFactory implements ICPPNodeFactory {
return new CPPASTTemplateId(templateName);
}
- public ICPPASTConversionName newConversionName(char[] name, IASTTypeId typeId) {
- return new CPPASTConversionName(name, typeId);
+ public ICPPASTConversionName newConversionName(IASTTypeId typeId) {
+ return new CPPASTConversionName(typeId);
}
public ICPPASTQualifiedName newQualifiedName() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java
index f5e9be4acab..dc952503472 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java
@@ -144,10 +144,7 @@ public class CPPParameter extends PlatformObject implements ICPPParameter, ICPPI
* @see org.eclipse.cdt.core.dom.ast.IBinding#getName()
*/
public String getName() {
- IASTName name = getPrimaryDeclaration();
- if (name != null)
- return name.toString();
- return CPPSemantics.EMPTY_NAME;
+ return new String(getNameCharArray());
}
/* (non-Javadoc)
@@ -156,7 +153,7 @@ public class CPPParameter extends PlatformObject implements ICPPParameter, ICPPI
public char[] getNameCharArray() {
IASTName name = getPrimaryDeclaration();
if (name != null)
- return name.toCharArray();
+ return name.getSimpleID();
return CPPSemantics.EMPTY_NAME_ARRAY;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScope.java
index ea698863dff..cf0704eb72e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScope.java
@@ -76,22 +76,17 @@ abstract public class CPPScope implements ICPPScope, IASTInternalScope {
public void addName(IASTName name) throws DOMException {
if (bindings == null)
bindings = new CharArrayObjectMap(1);
- char[] c;
if (name instanceof ICPPASTQualifiedName) {
if (!(physicalNode instanceof ICPPASTCompositeTypeSpecifier) &&
!(physicalNode instanceof ICPPASTNamespaceDefinition)) {
return;
}
- //name belongs to a different scope, don't add it here except it names this scope
- final ICPPASTQualifiedName qname = (ICPPASTQualifiedName) name;
- final IASTName[] ns= qname.getNames();
- if (!canDenoteScopeMember(qname))
+ // name belongs to a different scope, don't add it here except it names this scope
+ if (!canDenoteScopeMember((ICPPASTQualifiedName) name))
return;
- c= ns[ns.length - 1].toCharArray();
- } else {
- c= name.toCharArray();
- }
+ }
+ final char[] c= name.getSimpleID();
Object o = bindings.get(c);
if (o != null) {
if (o instanceof ObjectSet) {
@@ -114,9 +109,11 @@ abstract public class CPPScope implements ICPPScope, IASTInternalScope {
for (int i= na.length - 2; i >= 0; i++) {
if (scope == null)
return false;
- IASTName n= na[i];
- final IName scopeName = scope.getScopeName();
- if (scopeName == null || !CharArrayUtils.equals(scopeName.toCharArray(), n.toCharArray()))
+ IName scopeName = scope.getScopeName();
+ if (scopeName == null)
+ return false;
+
+ if (!CharArrayUtils.equals(scopeName.getSimpleID(), na[i].getSimpleID()))
return false;
scope= scope.getParent();
}
@@ -135,10 +132,11 @@ abstract public class CPPScope implements ICPPScope, IASTInternalScope {
final IASTTranslationUnit tu = name.getTranslationUnit();
IIndex index = tu == null ? null : tu.getIndex();
if (index != null) {
+ final char[] nchars = name.getSimpleID();
// Try looking this up in the PDOM
if (physicalNode instanceof IASTTranslationUnit) {
try {
- IBinding[] bindings= index.findBindings(name.toCharArray(),
+ IBinding[] bindings= index.findBindings(nchars,
IndexFilter.CPP_DECLARED_OR_IMPLICIT_NO_INSTANCE, NPM);
if (fileSet != null) {
bindings= fileSet.filterFileLocalBindings(bindings);
@@ -158,7 +156,7 @@ abstract public class CPPScope implements ICPPScope, IASTInternalScope {
if (nsbinding instanceof ICPPNamespace) {
ICPPNamespace nsbindingAdapted = (ICPPNamespace) index.adaptBinding(nsbinding);
if (nsbindingAdapted!=null) {
- IBinding[] bindings = nsbindingAdapted.getNamespaceScope().find(name.toString());
+ IBinding[] bindings = nsbindingAdapted.getNamespaceScope().find(new String(nchars));
if (fileSet != null) {
bindings= fileSet.filterFileLocalBindings(bindings);
}
@@ -176,7 +174,7 @@ abstract public class CPPScope implements ICPPScope, IASTInternalScope {
}
public IBinding getBindingInAST(IASTName name, boolean forceResolve) throws DOMException {
- char[] c = name.toCharArray();
+ char[] c = name.getSimpleID();
//can't look up bindings that don't have a name
if (c.length == 0)
return null;
@@ -236,9 +234,10 @@ abstract public class CPPScope implements ICPPScope, IASTInternalScope {
if (physicalNode instanceof IASTTranslationUnit) {
try {
IndexFilter filter = IndexFilter.CPP_DECLARED_OR_IMPLICIT_NO_INSTANCE;
+ final char[] nchars = name.getSimpleID();
IBinding[] bindings = prefixLookup ?
- index.findBindingsForPrefix(name.toCharArray(), true, filter, null) :
- index.findBindings(name.toCharArray(), filter, null);
+ index.findBindingsForPrefix(nchars, true, filter, null) :
+ index.findBindings(nchars, filter, null);
if (fileSet != null) {
bindings= fileSet.filterFileLocalBindings(bindings);
}
@@ -270,7 +269,7 @@ abstract public class CPPScope implements ICPPScope, IASTInternalScope {
public IBinding[] getBindingsInAST(IASTName name, boolean forceResolve, boolean prefixLookup)
throws DOMException {
- char[] c = name.toCharArray();
+ char[] c = name.getSimpleID();
IBinding[] result = null;
Object[] obj = null;
@@ -294,11 +293,7 @@ abstract public class CPPScope implements ICPPScope, IASTInternalScope {
for (int j = 0; j < os.size(); j++) {
Object o = os.keyAt(j);
if (o instanceof IASTName) {
- IASTName n = (IASTName) o;
- if (n instanceof ICPPASTQualifiedName) {
- IASTName[] ns = ((ICPPASTQualifiedName)n).getNames();
- n = ns[ns.length - 1];
- }
+ IASTName n = ((IASTName) o).getLastName();
IBinding binding = forceResolve ? n.resolveBinding() : n.getBinding();
result = (IBinding[]) ArrayUtil.append(IBinding.class, result, binding);
} else {
@@ -310,11 +305,7 @@ abstract public class CPPScope implements ICPPScope, IASTInternalScope {
if (forceResolve && element != name && element != name.getParent()) {
binding = ((IASTName) element).resolveBinding();
} else {
- IASTName n = (IASTName) element;
- if (n instanceof ICPPASTQualifiedName) {
- IASTName[] ns = ((ICPPASTQualifiedName)n).getNames();
- n = ns[ns.length - 1];
- }
+ IASTName n = ((IASTName) element).getLastName();
binding = n.getBinding();
}
if (binding instanceof ICPPUsingDeclaration) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java
index 57af9c5d782..2ecf65334c9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScopeMapper.java
@@ -183,14 +183,14 @@ public class CPPScopeMapper {
StringBuilder buf= new StringBuilder();
IName scopeName = scope.getScopeName();
if (scopeName != null) {
- buf.append(scopeName.toCharArray());
+ buf.append(scopeName.getSimpleID());
}
scope= scope.getParent();
while (scope != null && scope != tuscope) {
buf.append(':');
scopeName= scope.getScopeName();
if (scopeName != null) {
- buf.append(scope.getScopeName().toCharArray());
+ buf.append(scope.getScopeName().getSimpleID());
}
scope= scope.getParent();
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java
index 396279b1612..f0d524de1b6 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java
@@ -134,14 +134,14 @@ public abstract class CPPTemplateDefinition extends PlatformObject implements IC
* @see org.eclipse.cdt.core.dom.ast.IBinding#getName()
*/
public String getName() {
- return getTemplateName().toString();
+ return new String(getNameCharArray());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IBinding#getNameCharArray()
*/
public char[] getNameCharArray() {
- return getTemplateName().toCharArray();
+ return getTemplateName().getSimpleID();
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java
index 5307eb7f3b8..429ebb745de 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java
@@ -92,14 +92,14 @@ public abstract class CPPTemplateParameter extends PlatformObject
* @see org.eclipse.cdt.core.dom.ast.IBinding#getName()
*/
public String getName() {
- return declarations[0].toString();
+ return new String(getNameCharArray());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IBinding#getNameCharArray()
*/
public char[] getNameCharArray() {
- return declarations[0].toCharArray();
+ return declarations[0].getSimpleID();
}
public int getParameterID() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java
index d361a0f8b73..6b52fe147e1 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java
@@ -99,23 +99,14 @@ public class CPPTypedef extends PlatformObject implements ITypedef, ITypeContain
* @see org.eclipse.cdt.core.dom.ast.IBinding#getName()
*/
public String getName() {
- return getSimpleName().toString();
- }
-
- private IASTName getSimpleName() {
- IASTName name= declarations[0];
- if (name instanceof ICPPASTQualifiedName) {
- IASTName[] na= ((ICPPASTQualifiedName) name).getNames();
- name= na[na.length-1];
- }
- return name;
+ return new String(getNameCharArray());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IBinding#getNameCharArray()
*/
public char[] getNameCharArray() {
- return getSimpleName().toCharArray();
+ return declarations[0].getSimpleID();
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java
index 0c6cc4043b6..354824081e8 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java
@@ -75,7 +75,7 @@ public class CPPUnknownBinding extends PlatformObject
}
public char[] getNameCharArray() {
- return name.toCharArray();
+ return name.getSimpleID();
}
public IScope getScope() throws DOMException {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java
index ca8b0f5056f..a38f51accaf 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownScope.java
@@ -147,7 +147,7 @@ public class CPPUnknownScope implements ICPPScope, ICPPInternalUnknownScope {
if (map == null)
map = new CharArrayObjectMap(2);
- char[] c = name.toCharArray();
+ char[] c = name.getSimpleID();
IBinding[] o= (IBinding[]) map.get(c);
if (o == null) {
o= new IBinding[3];
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUsingDeclaration.java
index c3ce2a8575b..bbb67a3e3e1 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUsingDeclaration.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUsingDeclaration.java
@@ -64,11 +64,11 @@ public class CPPUsingDeclaration extends PlatformObject implements ICPPUsingDecl
}
public String getName() {
- return name.toString();
+ return new String(getNameCharArray());
}
public char[] getNameCharArray() {
- return name.toCharArray();
+ return name.getSimpleID();
}
public IScope getScope() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVariable.java
index 58c2e5ae732..77bf0a47919 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVariable.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVariable.java
@@ -216,16 +216,7 @@ public class CPPVariable extends PlatformObject implements ICPPVariable, ICPPInt
* @see org.eclipse.cdt.core.dom.ast.IBinding#getName()
*/
public String getName() {
- if (declarations != null) {
- return declarations[0].toString();
- }
- IASTName name = definition;
- if (name instanceof ICPPASTQualifiedName) {
- IASTName[] ns = ((ICPPASTQualifiedName) name).getNames();
- name = ns[ns.length - 1];
- }
-
- return name.toString();
+ return new String(getNameCharArray());
}
/* (non-Javadoc)
@@ -233,15 +224,9 @@ public class CPPVariable extends PlatformObject implements ICPPVariable, ICPPInt
*/
public char[] getNameCharArray() {
if (declarations != null) {
- return declarations[0].toCharArray();
+ return declarations[0].getSimpleID();
}
- IASTName name = definition;
- if (name instanceof ICPPASTQualifiedName) {
- IASTName[] ns = ((ICPPASTQualifiedName) name).getNames();
- name = ns[ns.length - 1];
- }
-
- return name.toCharArray();
+ return definition.getSimpleID();
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
index fc9f5b3a293..91519e49596 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
@@ -220,8 +220,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
* @throws BacktrackException request a backtrack
*/
private IASTName qualifiedName() throws BacktrackException, EndOfFileException {
- // mstodo
- IToken first= LA(1);
ICPPASTQualifiedName qname= null;
IASTName name= null;
final int offset= LA(1).getOffset();
@@ -293,8 +291,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
return name;
setRange(qname, offset, endOffset);
- // mstodo
- ((CPPASTQualifiedName) qname).setSignature(new String(computeOperatorImage(first, LA(1))));
return qname;
}
@@ -579,41 +575,11 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
if (typeId == null)
throwBacktrack(t);
- char[] image= computeOperatorImage(firstToken, LA(1));
- IASTName name = nodeFactory.newConversionName(image, typeId);
+ IASTName name = nodeFactory.newConversionName(typeId);
setRange(name, firstToken.getOffset(), calculateEndOffset(typeId));
return name;
}
- private char[] computeOperatorImage(IToken from, final IToken to) throws EndOfFileException {
- if(from == to)
- return CharArrayUtils.EMPTY;
-
- StringBuilder buf= new StringBuilder();
- int prevKind= -1;
- while (from != to && from != null) {
- final int nextKind= from.getType();
- if (prevKind != -1 &&
- prevKind != IToken.tCOLONCOLON &&
- prevKind != IToken.tIDENTIFIER &&
- prevKind != IToken.tLT &&
- prevKind != IToken.tBITCOMPLEMENT &&
- prevKind != IToken.tLBRACKET &&
- nextKind != IToken.tGT &&
- nextKind != IToken.tRBRACKET &&
- nextKind != IToken.tCOLONCOLON) {
- buf.append(' ');
- }
- buf.append(from.getCharImage());
- prevKind= nextKind;
- from= from.getNext();
- }
- final int len= buf.length();
- final char[] result= new char[len];
- buf.getChars(0, len, result, 0);
- return result;
- }
-
@Override
protected IASTExpression expression() throws EndOfFileException, BacktrackException {
final boolean wasOnTop= onTopInTemplateArgs;
@@ -2316,7 +2282,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
}
identifier= qualifiedName();
- if (identifier.getLastName().toCharArray().length == 0 && LT(1) != IToken.tEOC)
+ if (identifier.getSimpleID().length == 0 && LT(1) != IToken.tEOC)
throwBacktrack(LA(1));
endOffset= calculateEndOffset(identifier);
@@ -2427,23 +2393,22 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
final ICPPASTQualifiedName qname = (ICPPASTQualifiedName) name;
final IASTName names[]= qname.getNames();
final int len = names.length;
- if (len > 1 && CharArrayUtils.equals(names[len-2].toCharArray(), names[len-1].toCharArray()))
+ final IASTName lastName = names[len-1];
+
+ if (len > 1 && CharArrayUtils.equals(CPPASTNameBase.getLookupKey(names[len-2]), CPPASTNameBase.getLookupKey(lastName)))
return true; // constructor
- name= qname.getLastName();
+ name= lastName;
}
+ if (name instanceof ICPPASTTemplateId)
+ name= ((ICPPASTTemplateId) name).getTemplateName();
+
if (name instanceof ICPPASTConversionName)
- return true; // conversion
- if (name instanceof ICPPASTTemplateId) {
- if (((ICPPASTTemplateId) name).getTemplateName() instanceof ICPPASTConversionName) {
- return true;
- }
-
- }
- final char[] nchars= name.toCharArray();
+ return true;
+
+ final char[] nchars= name.getSimpleID();
if (nchars.length > 0 && nchars[0] == '~')
return true; // destructor
-
if (declOption == DeclarationOptions.CPP_MEMBER && CharArrayUtils.equals(nchars, currentClassName))
return true;
}
@@ -2977,7 +2942,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
if (coloncolon != 0) {
try {
name= qualifiedName();
- if (name.getLastName().toCharArray().length != 0) {
+ if (CPPASTNameBase.getLookupKey(name).length != 0) {
backup(mark);
return;
}
@@ -3321,11 +3286,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
int endOffset= consume().getEndOffset();
final char[] outerName= currentClassName;
- if (name instanceof ICPPASTQualifiedName) {
- currentClassName= ((ICPPASTQualifiedName)name).getLastName().toCharArray();
- } else {
- currentClassName= name.toCharArray();
- }
+ currentClassName= name.getSimpleID();
+
try {
int declOffset= -1;
loop: while (true) {
@@ -3396,7 +3358,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
((ASTNode) astClassSpecifier).setOffsetAndLength(offset, endOffset - offset);
return astClassSpecifier;
}
-
protected int token2Visibility(int type) {
switch (type) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java
index f074eeeb632..a710f07adc9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java
@@ -591,7 +591,7 @@ public class CPPSemantics {
so= map.get(key);
} else if (objs != null) {
so= objs[i];
- key= (so instanceof IBinding) ? ((IBinding) so).getNameCharArray() : ((IASTName) so).toCharArray();
+ key= (so instanceof IBinding) ? ((IBinding) so).getNameCharArray() : ((IASTName) so).getSimpleID();
} else {
return resultMap;
}
@@ -1189,7 +1189,7 @@ public class CPPSemantics {
nsscope.addUsingDirective(new CPPUsingDirective(usingDirective));
}
} else if (item instanceof ICPPASTNamespaceDefinition &&
- ((ICPPASTNamespaceDefinition)item).getName().toCharArray().length == 0) {
+ ((ICPPASTNamespaceDefinition)item).getName().getSimpleID().length == 0) {
if (scope instanceof ICPPNamespaceScope) {
final ICPPNamespaceScope nsscope = (ICPPNamespaceScope)scope;
final ICPPASTNamespaceDefinition nsdef= (ICPPASTNamespaceDefinition) item;
@@ -1414,7 +1414,7 @@ public class CPPSemantics {
//anonymous union? //GCC supports anonymous structs too
if (declarators.length == 0 && /*compSpec.getKey() == IASTCompositeTypeSpecifier.k_union &&*/
- specName.toCharArray().length == 0)
+ specName.getSimpleID().length == 0)
{
Object o = null;
IASTDeclaration[] decls = compSpec.getMembers();
@@ -1531,7 +1531,7 @@ public class CPPSemantics {
potential= qname.getLastName();
}
- char[] c = potential.toCharArray();
+ char[] c = potential.getSimpleID();
char[] n = data.name();
return (data.prefixLookup && CharArrayUtils.equals(c, 0, n.length, n, true))
|| (!data.prefixLookup && CharArrayUtils.equals(c, n));
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java
index bb04b7b771e..c0bfc0c75b5 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java
@@ -1083,7 +1083,7 @@ public class CPPTemplates {
for (ICPPASTTemplateParameter par : pars) {
IASTName name= CPPTemplates.getTemplateParameterName(par);
if (name != null)
- set.put(name.toCharArray());
+ set.put(name.getSimpleID());
}
final IASTNode next= tdecl.getDeclaration();
if (next instanceof ICPPASTTemplateDeclaration) {
@@ -1110,7 +1110,7 @@ public class CPPTemplates {
return PROCESS_CONTINUE;
}
- if (names.containsKey(name.toCharArray())) {
+ if (names.containsKey(name.getSimpleID())) {
IASTNode parent= name.getParent();
if (parent instanceof ICPPASTQualifiedName) {
if (((ICPPASTQualifiedName) parent).getNames()[0] != name) {
@@ -1289,7 +1289,7 @@ public class CPPTemplates {
return true;
}
- return CharArrayUtils.equals(definition.getNameCharArray(), name.toCharArray());
+ return CharArrayUtils.equals(definition.getNameCharArray(), name.getSimpleID());
}
} catch (DOMException e) {
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java
index 2abc21e4709..19c4e3a0bf9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java
@@ -267,7 +267,7 @@ public class CPPVisitor extends ASTQueries {
return CPPTemplates.createBinding((ICPPASTTemplateParameter) parent);
}
- if (name.toCharArray().length > 0)
+ if (name.getSimpleID().length > 0)
return binding;
return null;
}
@@ -444,7 +444,7 @@ public class CPPVisitor extends ASTQueries {
if (name instanceof ICPPASTTemplateId) {
return CPPTemplates.createBinding((ICPPASTTemplateId) name);
}
- if (name.toCharArray().length > 0 && scope != null) //can't lookup anonymous things
+ if (name.getSimpleID().length > 0 && scope != null) //can't lookup anonymous things
binding = scope.getBinding(name, false);
if (!(binding instanceof ICPPInternalBinding) || !(binding instanceof ICPPClassType)) {
if (template) {
@@ -732,11 +732,7 @@ public class CPPVisitor extends ASTQueries {
return false;
IASTName name = findInnermostDeclarator(declarator).getName();
- if (name instanceof ICPPASTQualifiedName) {
- IASTName[] names = ((ICPPASTQualifiedName)name).getNames();
- name = names[names.length - 1];
- }
- if (!CharArrayUtils.equals(name.toCharArray(), parentName.toCharArray()))
+ if (!CharArrayUtils.equals(CPPASTNameBase.getLookupKey(name), CPPASTNameBase.getLookupKey(parentName)))
return false;
IASTDeclSpecifier declSpec = null;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java
index c7a2b55a519..d753a30a250 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java
@@ -115,7 +115,7 @@ class LookupData {
public final char[] name() {
if (astName != null)
- return astName.toCharArray();
+ return astName.getSimpleID();
return CPPSemantics.EMPTY_NAME_ARRAY;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java
index d797787abcf..fd90dee4806 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java
@@ -62,6 +62,10 @@ class ASTPreprocessorName extends ASTPreprocessorNode implements IASTName {
public char[] toCharArray() {
return fName;
}
+ public char[] getSimpleID() {
+ return fName;
+ }
+
@Override
public String toString() {
return new String(fName);
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java
index 190f77fdfd3..a0ebe901133 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java
@@ -406,7 +406,7 @@ class ASTFunctionStyleMacroDefinition extends ASTMacroDefinition implements IAST
@Override
public String toString() {
StringBuilder result= new StringBuilder();
- result.append(getName().toCharArray());
+ result.append(getName().getSimpleID());
result.append('(');
boolean needComma= false;
for (IASTFunctionStyleMacroParameter param : getParameters()) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/SingleMacroExpansionExplorer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/SingleMacroExpansionExplorer.java
index 34900655913..2069fd11c55 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/SingleMacroExpansionExplorer.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/SingleMacroExpansionExplorer.java
@@ -60,7 +60,7 @@ public class SingleMacroExpansionExplorer extends MacroExpansionExplorer {
private void addMacroDefinition(CharArrayMap<PreprocessorMacro> map, IASTName name) {
IBinding binding= name.getBinding();
if (binding instanceof PreprocessorMacro) {
- map.put(name.toCharArray(), (PreprocessorMacro) binding);
+ map.put(name.getSimpleID(), (PreprocessorMacro) binding);
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java
index 75621c6fdc7..3a7dd496ed2 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java
@@ -380,7 +380,7 @@ public class PDOM extends PlatformObject implements IPDOM {
} else if (name.getPropertyInParent() == IASTPreprocessorStatement.MACRO_NAME) {
PDOMLinkage linkage= adaptLinkage(name.getLinkage());
if (linkage != null) {
- return linkage.findMacroContainer(name.toCharArray());
+ return linkage.findMacroContainer(name.getSimpleID());
}
}
return null;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java
index a9d8ab539c8..3c96df9a48b 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java
@@ -38,6 +38,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
import org.eclipse.cdt.core.index.IIndexBinding;
import org.eclipse.cdt.core.parser.IToken;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNameBase;
import org.eclipse.core.runtime.CoreException;
public class PDOMASTAdapter {
@@ -162,6 +163,10 @@ public class PDOMASTAdapter {
return fDelegate.toCharArray();
}
+ public char[] getSimpleID() {
+ return fDelegate.getSimpleID();
+ }
+
public IASTImageLocation getImageLocation() {
return null;
}
@@ -494,7 +499,7 @@ public class PDOMASTAdapter {
* it is returned unchanged.
*/
public static IASTName getAdapterIfAnonymous(IASTName name) {
- if (name.toCharArray().length == 0) {
+ if (CPPASTNameBase.getLookupKey(name).length == 0) {
if (name.getFileLocation() == null) {
IASTNode parent= name.getParent();
if (parent != null) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java
index a9bdb99df67..d14ae36435f 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java
@@ -241,11 +241,11 @@ public class PDOMFile implements IIndexFragmentFile {
PDOMMacro pdomMacro= null;
if (stmt instanceof IASTPreprocessorMacroDefinition) {
IASTPreprocessorMacroDefinition macro= (IASTPreprocessorMacroDefinition) stmt;
- PDOMMacroContainer container= linkage.getMacroContainer(macro.getName().toCharArray());
+ PDOMMacroContainer container= linkage.getMacroContainer(macro.getName().getSimpleID());
pdomMacro = new PDOMMacro(pdom, container, macro, this);
} else if (stmt instanceof IASTPreprocessorUndefStatement) {
IASTPreprocessorUndefStatement undef= (IASTPreprocessorUndefStatement) stmt;
- PDOMMacroContainer container= linkage.getMacroContainer(undef.getMacroName().toCharArray());
+ PDOMMacroContainer container= linkage.getMacroContainer(undef.getMacroName().getSimpleID());
pdomMacro = new PDOMMacro(pdom, container, undef, this);
}
if (pdomMacro != null) {
@@ -326,7 +326,7 @@ public class PDOMFile implements IIndexFragmentFile {
}
private IIndexFragmentName createPDOMMacroReferenceName(PDOMLinkage linkage, IASTName name) throws CoreException {
- PDOMMacroContainer cont= linkage.getMacroContainer(name.toCharArray());
+ PDOMMacroContainer cont= linkage.getMacroContainer(name.getSimpleID());
return new PDOMMacroReferenceName(pdom, name, this, cont);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMInclude.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMInclude.java
index 98dec0f1f34..31bf73834a2 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMInclude.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMInclude.java
@@ -69,7 +69,7 @@ public class PDOMInclude implements IIndexFragmentInclude {
setFlag(encodeFlags(include, targetFile == null));
setIncludedBy(containerFile);
- setIncludes(targetFile, name.toCharArray());
+ setIncludes(targetFile, name.getSimpleID());
}
private byte encodeFlags(IASTPreprocessorIncludeStatement include, boolean unresolved) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroDefinitionName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroDefinitionName.java
index 696a7b32c68..be9b7523d62 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroDefinitionName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroDefinitionName.java
@@ -68,9 +68,19 @@ class PDOMMacroDefinitionName implements IIndexFragmentName {
public boolean isReference() {
return false;
}
+
+ @Deprecated
public char[] toCharArray() {
return fMacro.getNameCharArray();
}
+ @Override
+ public String toString() {
+ return new String(getSimpleID());
+ }
+
+ public char[] getSimpleID() {
+ return fMacro.getNameCharArray();
+ }
public IIndexFragmentBinding getBinding() {
return fMacro;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroReferenceName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroReferenceName.java
index 4c57cdf31df..144066b3759 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroReferenceName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroReferenceName.java
@@ -122,7 +122,15 @@ public final class PDOMMacroReferenceName implements IIndexFragmentName, IASTFil
setNameField(FILE_NEXT_OFFSET, name);
}
+ /**
+ * @deprecated use {@link #getSimpleID()}.
+ */
+ @Deprecated
public char[] toCharArray() {
+ return getSimpleID();
+ }
+
+ public char[] getSimpleID() {
try {
return getContainer().getNameCharArray();
} catch (CoreException e) {
@@ -133,7 +141,7 @@ public final class PDOMMacroReferenceName implements IIndexFragmentName, IASTFil
@Override
public String toString() {
- return new String(toCharArray());
+ return new String(getSimpleID());
}
public boolean isBaseSpecifier() throws CoreException {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMName.java
index c0178577afe..310d39fbaa4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMName.java
@@ -20,6 +20,7 @@ import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.index.IIndexFile;
import org.eclipse.cdt.core.index.IIndexName;
+import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.internal.core.index.IIndexFragment;
import org.eclipse.cdt.internal.core.index.IIndexFragmentName;
import org.eclipse.cdt.internal.core.pdom.PDOM;
@@ -180,8 +181,16 @@ public final class PDOMName implements IIndexFragmentName, IASTFileLocation {
public void setNextInFile(PDOMName name) throws CoreException {
setNameField(FILE_NEXT_OFFSET, name);
}
-
+
+ /**
+ * @deprecated use {@link #getSimpleID()}, instead.
+ */
+ @Deprecated
public char[] toCharArray() {
+ return getSimpleID();
+ }
+
+ public char[] getSimpleID() {
try {
Database db = pdom.getDB();
int bindingRec = db.getInt(record + BINDING_REC_OFFSET);
@@ -189,21 +198,13 @@ public final class PDOMName implements IIndexFragmentName, IASTFileLocation {
return binding != null ? binding.getNameCharArray() : null;
} catch (CoreException e) {
CCorePlugin.log(e);
- return null;
+ return CharArrayUtils.EMPTY;
}
}
@Override
public String toString() {
- try {
- Database db = pdom.getDB();
- int bindingRec = db.getInt(record + BINDING_REC_OFFSET);
- PDOMBinding binding = pdom.getBinding(bindingRec);
- return binding != null ? binding.getName() : null;
- } catch (CoreException e) {
- CCorePlugin.log(e);
- return null;
- }
+ return new String(getSimpleID());
}
private int getFlags(int mask) throws CoreException {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java
index 890ed3a161f..c6bad422213 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java
@@ -161,7 +161,7 @@ class PDOMCLinkage extends PDOMLinkage implements IIndexCBindingConstants {
if (name == null)
return null;
- char[] namechars = name.toCharArray();
+ char[] namechars = name.getSimpleID();
if (namechars == null)
return null;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java
index f6cb43da564..9121ac4f5fa 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassScope.java
@@ -75,7 +75,7 @@ class PDOMCPPClassScope implements ICPPClassScope, IIndexScope {
public IBinding getBinding(IASTName name, boolean resolve, IIndexFileSet fileSet) throws DOMException {
try {
- final char[] nameChars = name.toCharArray();
+ final char[] nameChars = name.getSimpleID();
if (CharArrayUtils.equals(fBinding.getNameCharArray(), nameChars)) {
if (CPPClassScope.isConstructorReference(name)){
return CPPSemantics.resolveAmbiguities(name, fBinding.getConstructors());
@@ -99,7 +99,7 @@ class PDOMCPPClassScope implements ICPPClassScope, IIndexScope {
public IBinding[] getBindings(IASTName name, boolean resolve, boolean prefixLookup, IIndexFileSet fileSet) throws DOMException {
IBinding[] result = null;
try {
- final char[] nameChars = name.toCharArray();
+ final char[] nameChars = name.getSimpleID();
if (!prefixLookup) {
return getBindingsViaCache(fBinding, nameChars, IndexFilter.CPP_DECLARED_OR_IMPLICIT_NO_INSTANCE);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java
index 66576d7a299..fd8352b47d9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java
@@ -204,11 +204,6 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
if (name == null || name instanceof ICPPASTQualifiedName)
return null;
- // Check for null name
- char[] namechars = name.toCharArray();
- if (namechars == null)
- return null;
-
IBinding binding = name.resolveBinding();
PDOMBinding pdomBinding = addBinding(binding, name);
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java
index b993f452bbd..201d3f35b8f 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java
@@ -129,7 +129,7 @@ class PDOMCPPNamespace extends PDOMCPPBinding
@Override
public IBinding getBinding(IASTName name, boolean resolve, IIndexFileSet fileSet) throws DOMException {
try {
- IBinding[] bindings= getBindingsViaCache(name.toCharArray());
+ IBinding[] bindings= getBindingsViaCache(name.getSimpleID());
if (fileSet != null) {
bindings= fileSet.filterFileLocalBindings(bindings);
}
@@ -146,9 +146,9 @@ class PDOMCPPNamespace extends PDOMCPPBinding
IBinding[] result = null;
try {
if (!prefixLookup) {
- return getBindingsViaCache(name.toCharArray());
+ return getBindingsViaCache(name.getSimpleID());
}
- BindingCollector visitor= new BindingCollector(getLinkageImpl(), name.toCharArray(),
+ BindingCollector visitor= new BindingCollector(getLinkageImpl(), name.getSimpleID(),
IndexFilter.CPP_DECLARED_OR_IMPLICIT_NO_INSTANCE, prefixLookup, !prefixLookup);
getIndex().accept(visitor);
IBinding[] bindings = visitor.getBindings();
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java
index 6ca492a816e..fdfc1355446 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java
@@ -470,7 +470,7 @@ public class CodeFormatterVisitor extends CPPASTVisitor {
}
}
IASTName name= node.getName();
- if (name != null && name.toCharArray().length != 0) {
+ if (name != null && name.getSimpleID().length != 0) {
if (isFirstDeclarator(node)) {
// preserve non-space between pointer operator and name
if (pointerOperators.length == 0 || scribe.printComment()) {

Back to the top