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

Added using support. Cleaned up tEOC handling.

This commit is contained in:
Doug Schaefer 2005-04-20 14:14:14 +00:00
parent cf1d5bf0d1
commit 0b0d156d87
2 changed files with 41 additions and 17 deletions

View file

@ -1307,10 +1307,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
typeId = typeId(true, false);
switch (LT(1)) {
case IToken.tRPAREN:
lastOffset = consume(IToken.tRPAREN).getEndOffset();
break;
case IToken.tEOC:
lastOffset = Integer.MAX_VALUE;
lastOffset = consume().getEndOffset();
break;
default:
throw backtrack;
@ -1501,10 +1499,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
int lastOffset;
switch (LT(1)) {
case IToken.tRBRACKET:
lastOffset = consume(IToken.tRBRACKET).getEndOffset();
break;
case IToken.tEOC:
lastOffset = Integer.MAX_VALUE;
lastOffset = consume().getEndOffset();
break;
default:
throw backtrack;
@ -1540,10 +1536,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
secondExpression = null;
switch (LT(1)) {
case IToken.tRPAREN:
lastOffset = consume(IToken.tRPAREN).getEndOffset();
break;
case IToken.tEOC:
lastOffset = Integer.MAX_VALUE;
lastOffset = consume().getEndOffset();
break;
default:
throw backtrack;
@ -1959,13 +1953,26 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
// using-directive
int endOffset = consume(IToken.t_namespace).getEndOffset();
IASTName name = null;
if (LT(1) == IToken.tIDENTIFIER || LT(1) == IToken.tCOLONCOLON)
switch (LT(1)) {
case IToken.tIDENTIFIER:
case IToken.tCOLONCOLON:
case IToken.tCOMPLETION:
name = createName(name());
else
break;
default:
throwBacktrack(firstToken.getOffset(), endOffset
- firstToken.getOffset());
}
switch (LT(1)) {
case IToken.tSEMI:
case IToken.tEOC:
endOffset = consume().getEndOffset();
break;
default:
throw backtrack;
}
endOffset = consume(IToken.tSEMI).getEndOffset();
ICPPASTUsingDirective astUD = createUsingDirective();
((ASTNode) astUD).setOffsetAndLength(firstToken.getOffset(),
endOffset - firstToken.getOffset());
@ -1983,7 +1990,16 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
}
IASTName name = createName(name());
int end = consume(IToken.tSEMI).getEndOffset();
int end;
switch (LT(1)) {
case IToken.tSEMI:
case IToken.tEOC:
end = consume().getEndOffset();
break;
default:
throw backtrack;
}
ICPPASTUsingDeclaration result = createUsingDeclaration();
((ASTNode) result).setOffsetAndLength(firstToken.getOffset(), end
- firstToken.getOffset());
@ -4549,10 +4565,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
int l;
switch (LT(1)) {
case IToken.tRBRACKET:
l = consume(IToken.tRBRACKET).getEndOffset();
break;
case IToken.tEOC:
l = Integer.MAX_VALUE;
l = consume().getEndOffset();
break;
default:
throw backtrack;

View file

@ -25,9 +25,13 @@ import org.eclipse.cdt.core.dom.ast.IParameter;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.ITypedef;
import org.eclipse.cdt.core.dom.ast.IVariable;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionTemplate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
@ -229,7 +233,7 @@ public class DOMCompletionContributor implements ICompletionContributor {
if (binding instanceof ITypedef) {
imageDescriptor = CElementImageProvider.getTypedefImageDescriptor();
} else if (binding instanceof ICompositeType) {
if (((ICompositeType)binding).getKey() == ICPPClassType.k_class)
if (((ICompositeType)binding).getKey() == ICPPClassType.k_class || binding instanceof ICPPClassTemplate)
imageDescriptor = CElementImageProvider.getClassImageDescriptor();
else if (((ICompositeType)binding).getKey() == ICompositeType.k_struct)
imageDescriptor = CElementImageProvider.getStructImageDescriptor();
@ -253,6 +257,12 @@ public class DOMCompletionContributor implements ICompletionContributor {
imageDescriptor = CElementImageProvider.getVariableImageDescriptor();
} else if (binding instanceof ICPPNamespace) {
imageDescriptor = CElementImageProvider.getNamespaceImageDescriptor();
} else if (binding instanceof ICPPFunctionTemplate) {
imageDescriptor = CElementImageProvider.getFunctionImageDescriptor();
} else if (binding instanceof ICPPUsingDeclaration) {
ICPPDelegate[] delegates = ((ICPPUsingDeclaration)binding).getDelegates();
if (delegates.length > 0)
return getImage(delegates[0]);
}
} catch (DOMException e) {
}