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:
parent
cf1d5bf0d1
commit
0b0d156d87
2 changed files with 41 additions and 17 deletions
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue