mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-05 22:53:13 +02:00
Fix for bug 72818 - [Search] Selection Search for Union does not work
This commit is contained in:
parent
81400bdcc2
commit
173c4dc627
3 changed files with 39 additions and 3 deletions
|
@ -13,6 +13,7 @@ package org.eclipse.cdt.core.parser.tests;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.io.Writer;
|
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.IASTClassSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTField;
|
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTFunction;
|
import org.eclipse.cdt.core.parser.ast.IASTFunction;
|
||||||
|
@ -363,7 +364,21 @@ public class SelectionParseTest extends SelectionParseBaseTest {
|
||||||
|
|
||||||
assertTrue( node instanceof IASTFunction );
|
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$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
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.ASTUtil;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
|
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
|
||||||
|
|
||||||
|
@ -55,4 +56,13 @@ public class ASTTypeIdExpression extends ASTExpression {
|
||||||
public String toString(){
|
public String toString(){
|
||||||
return ASTUtil.getExpressionString( this );
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
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.ASTUtil;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
|
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
|
||||||
|
@ -60,4 +61,14 @@ public class ASTUnaryTypeIdExpression extends ASTUnaryExpression {
|
||||||
public String toString(){
|
public String toString(){
|
||||||
return ASTUtil.getExpressionString( this );
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue