1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fix for bug 72818 - [Search] Selection Search for Union does not work

This commit is contained in:
John Camelon 2004-09-09 02:13:58 +00:00
parent 81400bdcc2
commit 173c4dc627
3 changed files with 39 additions and 3 deletions

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.core.parser.tests;
import java.io.StringWriter;
import java.io.Writer;
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTField;
import org.eclipse.cdt.core.parser.ast.IASTFunction;
@ -362,8 +363,22 @@ public class SelectionParseTest extends SelectionParseBaseTest {
IASTNode node = parse( code, startIndex, startIndex+ 7 );
assertTrue( node instanceof IASTFunction );
assertEquals( ((IASTFunction)node).getName(), "fprintf" ); //$NON-NLS-1$
assertEquals( ((IASTFunction)node).getName(), "fprintf" ); //$NON-NLS-1$
}
public void testBug72818() throws Exception
{
Writer writer = new StringWriter();
writer.write( "union Squaw { int x; double u; };\n" ); //$NON-NLS-1$
writer.write( "int main(int argc, char **argv) {\n" ); //$NON-NLS-1$
writer.write( "return sizeof( Squaw );\n" ); //$NON-NLS-1$
writer.write( "}\n" ); //$NON-NLS-1$
String code = writer.toString();
int startIndex = code.indexOf( "sizeof( ") + "sizeof( ".length(); //$NON-NLS-1$ //$NON-NLS-2$
IASTNode node = parse( code, startIndex, startIndex + 5 );
assertTrue( node instanceof IASTClassSpecifier );
IASTClassSpecifier classSpecifier = (IASTClassSpecifier) node;
assertEquals( classSpecifier.getClassKind(), ASTClassKind.UNION );
assertEquals( classSpecifier.getName(), "Squaw"); //$NON-NLS-1$
}
}

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
@ -55,4 +56,13 @@ public class ASTTypeIdExpression extends ASTExpression {
public String toString(){
return ASTUtil.getExpressionString( this );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.complete.ASTExpression#findOwnerExpressionForIDExpression(org.eclipse.cdt.core.parser.ITokenDuple)
*/
public ASTExpression findOwnerExpressionForIDExpression(ITokenDuple duple) {
if( typeId instanceof ASTTypeId && ((ASTTypeId)typeId).getTokenDuple() == duple )
return this;
return super.findOwnerExpressionForIDExpression(duple);
}
}

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
@ -60,4 +61,14 @@ public class ASTUnaryTypeIdExpression extends ASTUnaryExpression {
public String toString(){
return ASTUtil.getExpressionString( this );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.complete.ASTUnaryExpression#findOwnerExpressionForIDExpression(org.eclipse.cdt.core.parser.ITokenDuple)
*/
public ASTExpression findOwnerExpressionForIDExpression(ITokenDuple duple) {
if( typeId instanceof ASTTypeId && ((ASTTypeId)typeId).getTokenDuple() == duple )
return this;
return super.findOwnerExpressionForIDExpression(duple);
}
}