mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fix for Bug 72824 - [Content Assist] Content Assist erases code (Patch by Bryan Wilkinson)
This commit is contained in:
parent
2a54313bd6
commit
dcff673b3e
5 changed files with 41 additions and 34 deletions
|
@ -21,12 +21,14 @@ 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.IEnumerator;
|
||||
import org.eclipse.cdt.core.dom.ast.IField;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
|
||||
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.ICPPMember;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
|
||||
import org.eclipse.cdt.core.parser.util.ArrayUtil;
|
||||
|
@ -314,44 +316,41 @@ public class CPPASTQualifiedName extends CPPASTNode implements
|
|||
|
||||
private IBinding[] findClassScopeBindings(ICPPClassType classType,
|
||||
char[] name, boolean isPrefix) {
|
||||
List bindings = new ArrayList();
|
||||
|
||||
try {
|
||||
IField[] fields = classType.getFields();
|
||||
for (int i = 0; i < fields.length; i++) {
|
||||
if (fields[i].isStatic()) {
|
||||
char[] potential = fields[i].getNameCharArray();
|
||||
if (nameMatches(potential, name, isPrefix)) {
|
||||
bindings.add(fields[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (DOMException e) {
|
||||
}
|
||||
|
||||
try {
|
||||
ICPPMethod[] methods = classType.getDeclaredMethods();
|
||||
for (int i = 0; i < methods.length; i++) {
|
||||
char[] potential = methods[i].getNameCharArray();
|
||||
if (nameMatches(potential, name, isPrefix)) {
|
||||
bindings.add(methods[i]);
|
||||
}
|
||||
}
|
||||
} catch (DOMException e) {
|
||||
}
|
||||
List filtered = new ArrayList();
|
||||
|
||||
try {
|
||||
ICPPClassType[] nested = classType.getNestedClasses();
|
||||
for (int i = 0; i < nested.length; i++) {
|
||||
char[] potential = nested[i].getNameCharArray();
|
||||
if (nameMatches(potential, name, isPrefix)) {
|
||||
bindings.add(nested[i]);
|
||||
filtered.add(nested[i]);
|
||||
}
|
||||
}
|
||||
} catch (DOMException e) {
|
||||
}
|
||||
|
||||
return (IBinding[]) bindings.toArray(new IBinding[bindings.size()]);
|
||||
try {
|
||||
IBinding[] bindings = classType.getCompositeScope().find(new String(name), isPrefix);
|
||||
for (int i = 0; i < bindings.length; i++) {
|
||||
if (bindings[i] instanceof ICPPMember) {
|
||||
ICPPMember member = (ICPPMember) bindings[i];
|
||||
if (!classType.isSameType(member.getClassOwner())) continue;
|
||||
|
||||
if (member instanceof IField) {
|
||||
IField field = (IField) member;
|
||||
if (!field.isStatic()) continue;
|
||||
} else if (member instanceof ICPPMethod) {
|
||||
ICPPMethod method = (ICPPMethod) member;
|
||||
if (method.isImplicit()) continue;
|
||||
}
|
||||
} else if (!(bindings[i] instanceof IEnumerator)) continue;
|
||||
|
||||
filtered.add(bindings[i]);
|
||||
}
|
||||
} catch(DOMException e) {
|
||||
}
|
||||
|
||||
return (IBinding[]) filtered.toArray(new IBinding[filtered.size()]);
|
||||
}
|
||||
|
||||
private IBinding[] findNamespaceScopeBindings(ICPPNamespace namespace,
|
||||
|
|
|
@ -315,11 +315,19 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope {
|
|||
IASTName [] ns = ((ICPPASTQualifiedName)compName).getNames();
|
||||
compName = ns[ ns.length - 1 ];
|
||||
}
|
||||
|
||||
IBinding[] results = null;
|
||||
|
||||
if((prefixLookup && CharArrayUtils.equals(compName.toCharArray(), 0, n.length, n, false))
|
||||
|| (!prefixLookup && CharArrayUtils.equals(compName.toCharArray(), n))) {
|
||||
return (IBinding[]) ArrayUtil.addAll( IBinding.class, null, getConstructors( bindings, true ) );
|
||||
results = (IBinding[]) ArrayUtil.addAll( IBinding.class, null, getConstructors( bindings, true ) );
|
||||
if (!prefixLookup) {
|
||||
return results;
|
||||
}
|
||||
return super.find( name, prefixLookup );
|
||||
}
|
||||
|
||||
results = (IBinding[]) ArrayUtil.addAll( IBinding.class, results, super.find( name, prefixLookup ));
|
||||
return results != null ? results : IBinding.EMPTY_BINDING_ARRAY;
|
||||
}
|
||||
|
||||
public static boolean isConstructorReference( IASTName name ){
|
||||
|
|
|
@ -3806,7 +3806,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
|||
clause
|
||||
.setPropertyInParent(IASTInitializerList.NESTED_INITIALIZER);
|
||||
}
|
||||
if (LT(1) == IToken.tRBRACE)
|
||||
if (LT(1) == IToken.tRBRACE || LT(1) == IToken.tEOC)
|
||||
break;
|
||||
consume(IToken.tCOMMA);
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
* QNX - Initial API and implementation
|
||||
* Markus Schorn (Wind River Systems)
|
||||
* Andrew Ferguson (Symbian)
|
||||
* Bryan Wilkinson (QNX)
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.pdom.dom.cpp;
|
||||
|
@ -416,8 +417,7 @@ ICPPClassScope, IPDOMMemberOwner, IIndexType, IIndexScope {
|
|||
}
|
||||
|
||||
public boolean visit(IPDOMNode node) throws CoreException {
|
||||
if (node instanceof PDOMNamedNode && node instanceof IBinding
|
||||
&& !(node instanceof ICPPConstructor)) {
|
||||
if (node instanceof PDOMNamedNode && node instanceof IBinding) {
|
||||
char[] n= ((PDOMNamedNode) node).getDBName().getChars();
|
||||
if ((fPrefixLookup && CharArrayUtils.equals(n, 0, fName.length, fName, false))
|
||||
|| (!fPrefixLookup && CharArrayUtils.equals(n, fName))) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2004, 2006 IBM Corporation and others.
|
||||
* Copyright (c) 2004, 2007 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
|
||||
|
@ -193,7 +193,7 @@ public class ContentAssistTests extends BaseUITestCase {
|
|||
assertEquals( "veryLongName : int", results[0].getDisplayString() ); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public void _testBug72824() throws Exception {
|
||||
public void testBug72824() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write( "class Strategy { \n"); //$NON-NLS-1$
|
||||
writer.write( "public : \n"); //$NON-NLS-1$
|
||||
|
|
Loading…
Add table
Reference in a new issue