mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
org.eclipse.cdt.core: Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=52253 <BR>
org.eclipse.cdt.core.tests: Added CompletionTest::testBug52253().
This commit is contained in:
parent
f6c0374580
commit
92d011ea1d
7 changed files with 45 additions and 29 deletions
|
@ -1,3 +1,6 @@
|
||||||
|
2004-04-14 John Camelon
|
||||||
|
Added CompletionTest::testBug52253().
|
||||||
|
|
||||||
2004-04-14 John Camelon
|
2004-04-14 John Camelon
|
||||||
Added CompleteParseASTTest::testBug44249().
|
Added CompleteParseASTTest::testBug44249().
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@ import org.eclipse.cdt.core.parser.NullLogService;
|
||||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||||
import org.eclipse.cdt.core.parser.ParserMode;
|
import org.eclipse.cdt.core.parser.ParserMode;
|
||||||
import org.eclipse.cdt.core.parser.ParserUtil;
|
|
||||||
import org.eclipse.cdt.core.parser.ScannerInfo;
|
import org.eclipse.cdt.core.parser.ScannerInfo;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTCodeScope;
|
import org.eclipse.cdt.core.parser.ast.IASTCodeScope;
|
||||||
|
@ -841,5 +840,26 @@ public class CompletionParseTest extends CompleteParseBaseTest {
|
||||||
IASTCompletionNode node = parse( code, code.indexOf( where ) + where.length() );
|
IASTCompletionNode node = parse( code, code.indexOf( where ) + where.length() );
|
||||||
assertEquals( node.getCompletionPrefix(), "GL_T");
|
assertEquals( node.getCompletionPrefix(), "GL_T");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBug52253() throws Exception
|
||||||
|
{
|
||||||
|
Writer writer = new StringWriter();
|
||||||
|
writer.write( "class CMyClass {public:\n void doorBell(){ return; }};");
|
||||||
|
writer.write( "int main(int argc, char **argv) {CMyClass mc; mc.do }");
|
||||||
|
String code = writer.toString();
|
||||||
|
final String where = "mc.do";
|
||||||
|
IASTCompletionNode node = parse( code, code.indexOf( where) + where.length() );
|
||||||
|
assertEquals( node.getCompletionPrefix(), "do");
|
||||||
|
assertEquals( node.getCompletionKind(), CompletionKind.MEMBER_REFERENCE );
|
||||||
|
ILookupResult result = node.getCompletionScope().lookup( node.getCompletionPrefix(),
|
||||||
|
new IASTNode.LookupKind[]{ IASTNode.LookupKind.ALL },
|
||||||
|
node.getCompletionContext() );
|
||||||
|
assertEquals( result.getResultsSize(), 1 );
|
||||||
|
Iterator i = result.getNodes();
|
||||||
|
IASTMethod doorBell = (IASTMethod) i.next();
|
||||||
|
assertFalse( i.hasNext() );
|
||||||
|
assertEquals( doorBell.getName(), "doorBell");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
2004-04-14 John Camelon
|
||||||
|
Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=52253
|
||||||
|
|
||||||
2004-04-14 John Camelon
|
2004-04-14 John Camelon
|
||||||
Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=44249
|
Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=44249
|
||||||
Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=52004
|
Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=52004
|
||||||
|
|
|
@ -37,7 +37,7 @@ public interface IToken {
|
||||||
public boolean looksLikeExpression();
|
public boolean looksLikeExpression();
|
||||||
public boolean isPointer();
|
public boolean isPointer();
|
||||||
public boolean isOperator();
|
public boolean isOperator();
|
||||||
public boolean isKeywordOrOperator();
|
public boolean canBeAPrefix();
|
||||||
|
|
||||||
|
|
||||||
// Token types
|
// Token types
|
||||||
|
@ -143,8 +143,6 @@ public interface IToken {
|
||||||
|
|
||||||
static public final int tDIV = 52;
|
static public final int tDIV = 52;
|
||||||
|
|
||||||
// static public final int tCLASSNAME = 53;
|
|
||||||
|
|
||||||
static public final int t_and = 54;
|
static public final int t_and = 54;
|
||||||
|
|
||||||
static public final int t_and_eq = 55;
|
static public final int t_and_eq = 55;
|
||||||
|
|
|
@ -93,7 +93,7 @@ public class CompletionParser extends ContextualParser implements IParser {
|
||||||
if( exception.getCompletionNode() == null )
|
if( exception.getCompletionNode() == null )
|
||||||
{
|
{
|
||||||
setCompletionToken( exception.getFinalToken() );
|
setCompletionToken( exception.getFinalToken() );
|
||||||
if( (finalToken!= null )&& (finalToken.isKeywordOrOperator() ))
|
if( (finalToken!= null )&& (!finalToken.canBeAPrefix() ))
|
||||||
setCompletionToken(null);
|
setCompletionToken(null);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -2230,9 +2230,6 @@ public class ExpressionParser implements IExpressionParser {
|
||||||
setCompletionValues(scope, CompletionKind.MEMBER_REFERENCE, KeywordSets.Key.EMPTY, firstExpression, isTemplate );
|
setCompletionValues(scope, CompletionKind.MEMBER_REFERENCE, KeywordSets.Key.EMPTY, firstExpression, isTemplate );
|
||||||
|
|
||||||
secondExpression = primaryExpression(scope, CompletionKind.MEMBER_REFERENCE);
|
secondExpression = primaryExpression(scope, CompletionKind.MEMBER_REFERENCE);
|
||||||
checkEndOfFile();
|
|
||||||
|
|
||||||
setCompletionValues(scope, CompletionKind.NO_SUCH_KIND, KeywordSets.Key.EMPTY );
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -2269,12 +2266,9 @@ public class ExpressionParser implements IExpressionParser {
|
||||||
isTemplate = true;
|
isTemplate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setCompletionValues(scope, CompletionKind.MEMBER_REFERENCE, KeywordSets.Key.EMPTY, firstExpression, isTemplate );
|
setCompletionValues(scope, CompletionKind.MEMBER_REFERENCE, KeywordSets.Key.EMPTY, firstExpression, isTemplate );
|
||||||
|
secondExpression = primaryExpression(scope, CompletionKind.MEMBER_REFERENCE);
|
||||||
secondExpression = primaryExpression(scope, CompletionKind.MEMBER_REFERENCE);
|
|
||||||
checkEndOfFile();
|
|
||||||
|
|
||||||
setCompletionValues(scope, CompletionKind.NO_SUCH_KIND, KeywordSets.Key.EMPTY );
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
firstExpression =
|
firstExpression =
|
||||||
|
@ -2560,7 +2554,6 @@ public class ExpressionParser implements IExpressionParser {
|
||||||
duple = d.getNameDuple();
|
duple = d.getNameDuple();
|
||||||
}
|
}
|
||||||
|
|
||||||
checkEndOfFile();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return astFactory.createExpression(
|
return astFactory.createExpression(
|
||||||
|
@ -2581,6 +2574,14 @@ public class ExpressionParser implements IExpressionParser {
|
||||||
throw backtrack;
|
throw backtrack;
|
||||||
}
|
}
|
||||||
default :
|
default :
|
||||||
|
if( !queryLookaheadCapability(2) )
|
||||||
|
{
|
||||||
|
if( LA(1).canBeAPrefix() )
|
||||||
|
{
|
||||||
|
consume();
|
||||||
|
checkEndOfFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
IASTExpression empty = null;
|
IASTExpression empty = null;
|
||||||
try {
|
try {
|
||||||
empty = astFactory.createExpression(
|
empty = astFactory.createExpression(
|
||||||
|
|
|
@ -16,7 +16,7 @@ import org.eclipse.cdt.core.parser.IToken;
|
||||||
/**
|
/**
|
||||||
* @author johnc
|
* @author johnc
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractToken {
|
public abstract class AbstractToken implements IToken {
|
||||||
|
|
||||||
public AbstractToken( int type, int lineNumber )
|
public AbstractToken( int type, int lineNumber )
|
||||||
{
|
{
|
||||||
|
@ -70,20 +70,11 @@ public abstract class AbstractToken {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.parser.IToken#isKeyword()
|
* @see org.eclipse.cdt.core.parser.IToken#isKeyword()
|
||||||
*/
|
*/
|
||||||
public boolean isKeywordOrOperator() {
|
public boolean canBeAPrefix() {
|
||||||
switch( getType() )
|
if( getType() == tIDENTIFIER ) return true;
|
||||||
{
|
if( getType() >= t_and && getType() <= t_xor_eq ) return true;
|
||||||
case IToken.tCHAR:
|
if( getType() >= t__Bool && getType() <= t_restrict ) return true;
|
||||||
case IToken.tFLOATINGPT:
|
return false;
|
||||||
case IToken.tIDENTIFIER:
|
|
||||||
case IToken.tINTEGER:
|
|
||||||
case IToken.tSTRING:
|
|
||||||
case IToken.tLSTRING:
|
|
||||||
case IToken.tLCHAR:
|
|
||||||
return false;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean looksLikeExpression()
|
public boolean looksLikeExpression()
|
||||||
|
|
Loading…
Add table
Reference in a new issue