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); typeId = typeId(true, false);
switch (LT(1)) { switch (LT(1)) {
case IToken.tRPAREN: case IToken.tRPAREN:
lastOffset = consume(IToken.tRPAREN).getEndOffset();
break;
case IToken.tEOC: case IToken.tEOC:
lastOffset = Integer.MAX_VALUE; lastOffset = consume().getEndOffset();
break; break;
default: default:
throw backtrack; throw backtrack;
@ -1501,10 +1499,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
int lastOffset; int lastOffset;
switch (LT(1)) { switch (LT(1)) {
case IToken.tRBRACKET: case IToken.tRBRACKET:
lastOffset = consume(IToken.tRBRACKET).getEndOffset();
break;
case IToken.tEOC: case IToken.tEOC:
lastOffset = Integer.MAX_VALUE; lastOffset = consume().getEndOffset();
break; break;
default: default:
throw backtrack; throw backtrack;
@ -1540,10 +1536,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
secondExpression = null; secondExpression = null;
switch (LT(1)) { switch (LT(1)) {
case IToken.tRPAREN: case IToken.tRPAREN:
lastOffset = consume(IToken.tRPAREN).getEndOffset();
break;
case IToken.tEOC: case IToken.tEOC:
lastOffset = Integer.MAX_VALUE; lastOffset = consume().getEndOffset();
break; break;
default: default:
throw backtrack; throw backtrack;
@ -1959,13 +1953,26 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
// using-directive // using-directive
int endOffset = consume(IToken.t_namespace).getEndOffset(); int endOffset = consume(IToken.t_namespace).getEndOffset();
IASTName name = null; 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()); name = createName(name());
else break;
default:
throwBacktrack(firstToken.getOffset(), endOffset throwBacktrack(firstToken.getOffset(), endOffset
- firstToken.getOffset()); - 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(); ICPPASTUsingDirective astUD = createUsingDirective();
((ASTNode) astUD).setOffsetAndLength(firstToken.getOffset(), ((ASTNode) astUD).setOffsetAndLength(firstToken.getOffset(),
endOffset - firstToken.getOffset()); endOffset - firstToken.getOffset());
@ -1983,7 +1990,16 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
} }
IASTName name = createName(name()); 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(); ICPPASTUsingDeclaration result = createUsingDeclaration();
((ASTNode) result).setOffsetAndLength(firstToken.getOffset(), end ((ASTNode) result).setOffsetAndLength(firstToken.getOffset(), end
- firstToken.getOffset()); - firstToken.getOffset());
@ -4549,10 +4565,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
int l; int l;
switch (LT(1)) { switch (LT(1)) {
case IToken.tRBRACKET: case IToken.tRBRACKET:
l = consume(IToken.tRBRACKET).getEndOffset();
break;
case IToken.tEOC: case IToken.tEOC:
l = Integer.MAX_VALUE; l = consume().getEndOffset();
break; break;
default: default:
throw backtrack; 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.IType;
import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.ITypedef;
import org.eclipse.cdt.core.dom.ast.IVariable; 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.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.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.ICPPNamespace;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility; import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider; import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
@ -229,7 +233,7 @@ public class DOMCompletionContributor implements ICompletionContributor {
if (binding instanceof ITypedef) { if (binding instanceof ITypedef) {
imageDescriptor = CElementImageProvider.getTypedefImageDescriptor(); imageDescriptor = CElementImageProvider.getTypedefImageDescriptor();
} else if (binding instanceof ICompositeType) { } 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(); imageDescriptor = CElementImageProvider.getClassImageDescriptor();
else if (((ICompositeType)binding).getKey() == ICompositeType.k_struct) else if (((ICompositeType)binding).getKey() == ICompositeType.k_struct)
imageDescriptor = CElementImageProvider.getStructImageDescriptor(); imageDescriptor = CElementImageProvider.getStructImageDescriptor();
@ -253,6 +257,12 @@ public class DOMCompletionContributor implements ICompletionContributor {
imageDescriptor = CElementImageProvider.getVariableImageDescriptor(); imageDescriptor = CElementImageProvider.getVariableImageDescriptor();
} else if (binding instanceof ICPPNamespace) { } else if (binding instanceof ICPPNamespace) {
imageDescriptor = CElementImageProvider.getNamespaceImageDescriptor(); 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) { } catch (DOMException e) {
} }