diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTReference.java index 7c358bdc49b..a952f930d26 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTReference.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTReference.java @@ -21,6 +21,7 @@ public interface IASTReference extends ISourceElementCallbackDelegate public int getOffset(); public String getName(); + public char[] getNameCharArray(); public ISourceElementCallbackDelegate getReferencedElement(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java index f798f0439a7..68214299202 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java @@ -169,7 +169,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto while (i.hasNext()){ IASTReference ref = (IASTReference)i.next(); if (ref != null){ - if( (ref.getName().equals(reference.getName())) + if( (CharArrayUtils.equals( ref.getNameCharArray(), reference.getNameCharArray())) && (ref.getOffset() == reference.getOffset()) ){ cache.returnReference( ref ); @@ -1120,7 +1120,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto ITokenDuple idExpression, char[] literal, IASTNewExpressionDescriptor newDescriptor) throws ASTSemanticException { setFilename( idExpression ); - if( idExpression != null ) + if( idExpression != null && logService.isTracing() ) { TraceUtil.outputTrace( logService, @@ -1131,7 +1131,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto idExpression.toString() ); } - else if( literal != null && literal.length > 0 ) + else if( literal != null && literal.length > 0 && logService.isTracing() ) { TraceUtil.outputTrace( logService, diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ReferenceCache.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ReferenceCache.java index 9ca823943d8..5298a7dbb88 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ReferenceCache.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ReferenceCache.java @@ -638,6 +638,7 @@ public class ReferenceCache implements IReferenceManager { public abstract static class ASTReference implements IASTReference { protected int offset; private static final String EMPTY_STRING = ""; //$NON-NLS-1$ + private static final char[] EMPTY_CHAR_ARRAY = "".toCharArray(); //$NON-NLS-1$ public abstract void reset(); @@ -681,7 +682,12 @@ public class ReferenceCache implements IReferenceManager { .getName(); return EMPTY_STRING; } - + public char[] getNameCharArray() { + if (getReferencedElement() instanceof IASTOffsetableNamedElement) + return ((IASTOffsetableNamedElement) getReferencedElement()) + .getNameCharArray(); + return EMPTY_CHAR_ARRAY; + } public boolean equals(Object obj) { if (obj == null) return false;