diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTCompletionNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTCompletionNode.java index ec7294043d9..e4364ef6215 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTCompletionNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTCompletionNode.java @@ -66,7 +66,7 @@ public class ASTCompletionNode { * @return the prefix text up to the point of completion */ public String getPrefix() { - return completionToken.getImage(); + return completionToken.getType() != IToken.tEOC ? completionToken.getImage() : ""; } /** diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTExpression.java index 405e46ab458..675e9b874f3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTExpression.java @@ -20,4 +20,7 @@ public interface IASTExpression extends IASTNode { * Empty expression array. */ public static final IASTExpression[] EMPTY_EXPRESSION_ARRAY = new IASTExpression[0]; + + public IType getExpressionType(); + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java index 3b83236daa1..55e25aac803 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java @@ -95,7 +95,7 @@ public class GCCLanguage extends PlatformObject implements ILanguage { IFile rfile = (IFile)file.getResource(); if (file instanceof IWorkingCopy) { // get the working copy contents - reader = new CodeReader(rfile.getLocation().toOSString(), file.getContents()); + reader = new CodeReader(((IWorkingCopy)file).getOriginalElement().getPath().toOSString(), file.getContents()); } else { String path = rfile != null @@ -125,7 +125,48 @@ public class GCCLanguage extends PlatformObject implements ILanguage { } public ASTCompletionNode getCompletionNode(IWorkingCopy workingCopy, int offset) { - return null; + IResource resource = workingCopy.getResource(); + ICProject project = workingCopy.getCProject(); + IProject rproject = project.getProject(); + + IScannerInfo scanInfo = null; + IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(rproject); + if (provider != null){ + IResource infoResource = resource != null ? resource : rproject; + IScannerInfo buildScanInfo = provider.getScannerInformation(infoResource); + if (buildScanInfo != null) + scanInfo = buildScanInfo; + else + scanInfo = new ScannerInfo(); + } + + PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(project).getAdapter(PDOM.class); + ICodeReaderFactory fileCreator = new PDOMCodeReaderFactory(pdom); + + String path + = resource != null + ? resource.getLocation().toOSString() + : workingCopy.getOriginalElement().getPath().toOSString(); + CodeReader reader = new CodeReader(path, workingCopy.getContents()); + IScannerExtensionConfiguration scannerExtensionConfiguration + = C_GNU_SCANNER_EXTENSION; + IScanner scanner = new DOMScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE, + ParserLanguage.C, ParserFactory.createDefaultLogService(), scannerExtensionConfiguration, fileCreator ); + scanner.setContentAssistMode(offset); + + ISourceCodeParser parser = new GNUCSourceParser( + scanner, + ParserMode.COMPLETION_PARSE, + ParserUtil.getParserLogService(), + new GCCParserExtensionConfiguration()); + + // Run the parse and return the completion node + parser.parse(); + ASTCompletionNode node = parser.getCompletionNode(); + if (node != null) { + node.count = scanner.getCount(); + } + return node; } public IContributedModelBuilder createModelBuilder(ITranslationUnit tu) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java index e490d91926a..e664b0c2c99 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java @@ -94,7 +94,7 @@ public class GPPLanguage extends PlatformObject implements ILanguage { IFile rfile = (IFile)file.getResource(); if (file instanceof IWorkingCopy) { // get the working copy contents - reader = new CodeReader(rfile.getLocation().toOSString(), file.getContents()); + reader = new CodeReader(((IWorkingCopy)file).getOriginalElement().getPath().toOSString(), file.getContents()); } else { String path = rfile != null @@ -123,9 +123,45 @@ public class GPPLanguage extends PlatformObject implements ILanguage { return ast; } - public ASTCompletionNode getCompletionNode(IWorkingCopy workingCopy, - int offset) { - return null; + public ASTCompletionNode getCompletionNode(IWorkingCopy workingCopy, int offset) { + IResource resource = workingCopy.getResource(); + ICProject project = workingCopy.getCProject(); + IProject rproject = project.getProject(); + + IScannerInfo scanInfo = null; + IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(rproject); + if (provider != null){ + IResource infoResource = resource != null ? resource : rproject; + IScannerInfo buildScanInfo = provider.getScannerInformation(infoResource); + if (buildScanInfo != null) + scanInfo = buildScanInfo; + else + scanInfo = new ScannerInfo(); + } + + PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(project).getAdapter(PDOM.class); + ICodeReaderFactory fileCreator = new PDOMCodeReaderFactory(pdom); + + CodeReader reader = new CodeReader(resource.getLocation().toOSString(), workingCopy.getContents()); + IScannerExtensionConfiguration scannerExtensionConfiguration + = CPP_GNU_SCANNER_EXTENSION; + IScanner scanner = new DOMScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE, + ParserLanguage.CPP, ParserFactory.createDefaultLogService(), scannerExtensionConfiguration, fileCreator ); + scanner.setContentAssistMode(offset); + + ISourceCodeParser parser = new GNUCPPSourceParser( + scanner, + ParserMode.COMPLETION_PARSE, + ParserUtil.getParserLogService(), + new GPPParserExtensionConfiguration()); + + // Run the parse and return the completion node + parser.parse(); + ASTCompletionNode node = parser.getCompletionNode(); + if (node != null) { + node.count = scanner.getCount(); + } + return node; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousExpression.java index d01e3891a8b..377be248443 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTAmbiguousExpression.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.c; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousExpression; @@ -37,5 +38,8 @@ public class CASTAmbiguousExpression extends CASTAmbiguity implements return getExpressions(); } - + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArraySubscriptExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArraySubscriptExpression.java index 122858ec75e..8a0d5ede6d0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArraySubscriptExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArraySubscriptExpression.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** @@ -25,30 +26,18 @@ public class CASTArraySubscriptExpression extends CASTNode implements private IASTExpression array; private IASTExpression subscript; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#getArrayExpression() - */ public IASTExpression getArrayExpression() { return array; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#setArrayExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setArrayExpression(IASTExpression expression) { array = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#getSubscriptExpression() - */ public IASTExpression getSubscriptExpression() { return subscript; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#setSubscriptExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setSubscriptExpression(IASTExpression expression) { this.subscript = expression; } @@ -81,4 +70,9 @@ public class CASTArraySubscriptExpression extends CASTNode implements subscript = (IASTExpression) other; } } + + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBinaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBinaryExpression.java index a8d3a178801..9bd2885f229 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBinaryExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBinaryExpression.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** @@ -26,44 +27,26 @@ public class CASTBinaryExpression extends CASTNode implements private IASTExpression operand1; private IASTExpression operand2; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#getOperator() - */ public int getOperator() { return op; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#getOperand1() - */ public IASTExpression getOperand1() { return operand1; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#getOperand2() - */ public IASTExpression getOperand2() { return operand2; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#setOperator(int) - */ public void setOperator(int op) { this.op = op; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#setOperand1(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setOperand1(IASTExpression expression) { operand1 = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#setOperand2(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setOperand2(IASTExpression expression) { operand2 = expression; } @@ -96,4 +79,9 @@ public class CASTBinaryExpression extends CASTNode implements operand2 = (IASTExpression) other; } } + + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatementExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatementExpression.java index ee30910b5d6..4e16edc08c8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatementExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTCompoundStatementExpression.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.c; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; /** @@ -22,16 +23,10 @@ public class CASTCompoundStatementExpression extends CASTNode implements private IASTCompoundStatement statement; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.c.gcc.IGCCASTCompoundStatementExpression#getCompoundStatement() - */ public IASTCompoundStatement getCompoundStatement() { return statement; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.c.gcc.IGCCASTCompoundStatementExpression#setCompoundStatement(org.eclipse.cdt.core.dom.ast.IASTCompoundStatement) - */ public void setCompoundStatement(IASTCompoundStatement statement) { this.statement = statement; } @@ -48,4 +43,9 @@ public class CASTCompoundStatementExpression extends CASTNode implements if( statement != null ) if( !statement.accept( action ) ) return false; return true; } + + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTConditionalExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTConditionalExpression.java index 0b933678c26..6a758da45b1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTConditionalExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTConditionalExpression.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTConditionalExpression; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** @@ -26,44 +27,26 @@ public class CASTConditionalExpression extends CASTNode implements private IASTExpression negative; private IASTExpression positive; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#getLogicalConditionExpression() - */ public IASTExpression getLogicalConditionExpression() { return condition; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#setLogicalConditionExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setLogicalConditionExpression(IASTExpression expression) { condition = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#getPositiveResultExpression() - */ public IASTExpression getPositiveResultExpression() { return positive; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#setPositiveResultExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setPositiveResultExpression(IASTExpression expression) { this.positive = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#getNegativeResultExpression() - */ public IASTExpression getNegativeResultExpression() { return negative; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#setNegativeResultExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setNegativeResultExpression(IASTExpression expression) { this.negative = expression; } @@ -103,4 +86,9 @@ public class CASTConditionalExpression extends CASTNode implements negative= (IASTExpression) other; } } + + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionList.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionList.java index bb9a14f15ea..33f22f4ec1e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionList.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTExpressionList.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTExpressionList; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; @@ -23,27 +24,16 @@ import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; public class CASTExpressionList extends CASTNode implements IASTExpressionList, IASTAmbiguityParent { - /* - * (non-Javadoc) - * - * @see org.eclipse.cdt.core.dom.ast.IASTExpressionList#getExpressions() - */ public IASTExpression[] getExpressions() { if (expressions == null) return IASTExpression.EMPTY_EXPRESSION_ARRAY; return (IASTExpression[]) ArrayUtil.removeNulls( IASTExpression.class, expressions ); } - /* - * (non-Javadoc) - * - * @see org.eclipse.cdt.core.dom.ast.IASTExpressionList#addExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void addExpression(IASTExpression expression) { expressions = (IASTExpression[]) ArrayUtil.append( IASTExpression.class, expressions, expression ); } - private IASTExpression [] expressions = new IASTExpression[2]; public boolean accept(ASTVisitor action) { @@ -76,4 +66,9 @@ public class CASTExpressionList extends CASTNode implements IASTExpressionList, } } } + + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldReference.java index 4c049b75ff2..6768849b621 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldReference.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFieldReference.java @@ -15,6 +15,7 @@ import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTFieldReference; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** @@ -26,44 +27,26 @@ public class CASTFieldReference extends CASTNode implements IASTFieldReference, private IASTName name; private boolean ptr; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#getFieldOwner() - */ public IASTExpression getFieldOwner() { return owner; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#setFieldOwner(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setFieldOwner(IASTExpression expression) { this.owner = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#getFieldName() - */ public IASTName getFieldName() { return name; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#setFieldName(org.eclipse.cdt.core.dom.ast.IASTName) - */ public void setFieldName(IASTName name) { this.name = name; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#isPointerDereference() - */ public boolean isPointerDereference() { return ptr; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#setIsPointerDereference(boolean) - */ public void setIsPointerDereference(boolean value) { ptr = value; } @@ -82,9 +65,6 @@ public class CASTFieldReference extends CASTNode implements IASTFieldReference, return true; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTNameOwner#getRoleForName(org.eclipse.cdt.core.dom.ast.IASTName) - */ public int getRoleForName(IASTName n ) { if( n == this.name ) return r_reference; @@ -100,5 +80,8 @@ public class CASTFieldReference extends CASTNode implements IASTFieldReference, } } + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionCallExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionCallExpression.java index 4a5fe72bbd1..5894a4ddfdf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionCallExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTFunctionCallExpression.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** @@ -25,30 +26,18 @@ public class CASTFunctionCallExpression extends CASTNode implements private IASTExpression functionName; private IASTExpression parameter; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression#setFunctionNameExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setFunctionNameExpression(IASTExpression expression) { this.functionName = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression#getFunctionNameExpression() - */ public IASTExpression getFunctionNameExpression() { return functionName; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression#setParameterExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setParameterExpression(IASTExpression expression) { this.parameter = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression#getParameterExpression() - */ public IASTExpression getParameterExpression() { return parameter; } @@ -82,4 +71,8 @@ public class CASTFunctionCallExpression extends CASTNode implements } } + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java index 91a5d9084b8..9a785d25797 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.parser.c; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTIdExpression; import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IType; /** * @author jcamelon @@ -21,16 +22,10 @@ public class CASTIdExpression extends CASTNode implements IASTIdExpression { private IASTName name; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTIdExpression#getName() - */ public IASTName getName() { return name; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTIdExpression#setName(org.eclipse.cdt.core.dom.ast.IASTName) - */ public void setName(IASTName name) { this.name = name; } @@ -48,11 +43,13 @@ public class CASTIdExpression extends CASTNode implements IASTIdExpression { return true; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTNameOwner#getRoleForName(org.eclipse.cdt.core.dom.ast.IASTName) - */ public int getRoleForName(IASTName n) { if( n == name ) return r_reference; return r_unclear; } + + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLiteralExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLiteralExpression.java index c1315b0a0ee..f3324415302 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLiteralExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTLiteralExpression.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.c; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression; +import org.eclipse.cdt.core.dom.ast.IType; /** * @author jcamelon @@ -22,30 +23,18 @@ public class CASTLiteralExpression extends CASTNode implements private int kind; private String value = ""; //$NON-NLS-1$ - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTLiteralExpression#getKind() - */ public int getKind() { return kind; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTLiteralExpression#setKind(int) - */ public void setKind(int value) { kind = value; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTLiteralExpression#setValue(java.lang.String) - */ public void setValue(String value) { this.value = value; } - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ public String toString() { return value; } @@ -60,4 +49,9 @@ public class CASTLiteralExpression extends CASTNode implements } return true; } + + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemExpression.java index 73b43ba949d..a5c06b1b613 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemExpression.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.c; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTProblemExpression; +import org.eclipse.cdt.core.dom.ast.IType; /** * @author jcamelon @@ -29,4 +30,9 @@ public class CASTProblemExpression extends CASTProblemOwner implements } return true; } + + public IType getExpressionType() { + return null; + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdExpression.java index feac19a41a6..e4199d51bb3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdExpression.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.parser.c; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression; +import org.eclipse.cdt.core.dom.ast.IType; /** * @author jcamelon @@ -23,30 +24,18 @@ public class CASTTypeIdExpression extends CASTNode implements private int op; private IASTTypeId typeId; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression#getOperator() - */ public int getOperator() { return op; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression#setOperator(int) - */ public void setOperator(int value) { this.op = value; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression#setTypeId(org.eclipse.cdt.core.dom.ast.IASTTypeId) - */ public void setTypeId(IASTTypeId typeId) { this.typeId = typeId; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression#getTypeId() - */ public IASTTypeId getTypeId() { return typeId; } @@ -63,4 +52,9 @@ public class CASTTypeIdExpression extends CASTNode implements if( typeId != null ) if( !typeId.accept( action ) ) return false; return true; } + + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdInitializerExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdInitializerExpression.java index 94de5b2c4b3..298c0004dd5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdInitializerExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTTypeIdInitializerExpression.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.parser.c; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTTypeId; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.c.ICASTTypeIdInitializerExpression; /** @@ -24,30 +25,18 @@ public class CASTTypeIdInitializerExpression extends CASTNode implements private IASTTypeId t; private IASTInitializer i; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.c.ICASTTypeIdInitializerExpression#getTypeId() - */ public IASTTypeId getTypeId() { return t; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.c.ICASTTypeIdInitializerExpression#setTypeId(org.eclipse.cdt.core.dom.ast.IASTTypeId) - */ public void setTypeId(IASTTypeId typeId) { t = typeId; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.c.ICASTTypeIdInitializerExpression#getInitializer() - */ public IASTInitializer getInitializer() { return i; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.c.ICASTTypeIdInitializerExpression#setInitializer(org.eclipse.cdt.core.dom.ast.IASTInitializer) - */ public void setInitializer(IASTInitializer initializer) { i = initializer; } @@ -65,4 +54,9 @@ public class CASTTypeIdInitializerExpression extends CASTNode implements if( i != null ) if( !i.accept( action ) ) return false; return true; } + + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTUnaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTUnaryExpression.java index 11f2842b7b4..df7e020a6e9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTUnaryExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTUnaryExpression.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** @@ -25,30 +26,18 @@ public class CASTUnaryExpression extends CASTNode implements private int operator; private IASTExpression operand; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTUnaryExpression#getOperator() - */ public int getOperator() { return operator; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTUnaryExpression#setOperator(int) - */ public void setOperator(int value) { this.operator = value; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTUnaryExpression#getOperand() - */ public IASTExpression getOperand() { return operand; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTUnaryExpression#setOperand(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setOperand(IASTExpression expression) { operand = expression; } @@ -74,4 +63,9 @@ public class CASTUnaryExpression extends CASTNode implements operand = (IASTExpression) other; } } + + public IType getExpressionType() { + return CVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousExpression.java index 7c919e71b7e..5e95569310d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousExpression.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousExpression; @@ -36,5 +37,9 @@ public class CPPASTAmbiguousExpression extends CPPASTAmbiguity implements protected IASTNode[] getNodes() { return getExpressions(); } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java index 9e2c0f1dacd..438f78d2360 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTArraySubscriptExpression.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** @@ -25,30 +26,18 @@ public class CPPASTArraySubscriptExpression extends CPPASTNode implements private IASTExpression subscriptExp; private IASTExpression arrayExpression; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#getArrayExpression() - */ public IASTExpression getArrayExpression() { return arrayExpression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#setArrayExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setArrayExpression(IASTExpression expression) { arrayExpression = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#getSubscriptExpression() - */ public IASTExpression getSubscriptExpression() { return subscriptExp; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#setSubscriptExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setSubscriptExpression(IASTExpression expression) { subscriptExp = expression; } @@ -83,4 +72,8 @@ public class CPPASTArraySubscriptExpression extends CPPASTNode implements } } + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBinaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBinaryExpression.java index 7b9c3ad2e3f..b277f89609b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBinaryExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBinaryExpression.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTBinaryExpression; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; @@ -26,44 +27,26 @@ public class CPPASTBinaryExpression extends CPPASTNode implements private IASTExpression operand1; private IASTExpression operand2; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#getOperator() - */ public int getOperator() { return op; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#getOperand1() - */ public IASTExpression getOperand1() { return operand1; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#getOperand2() - */ public IASTExpression getOperand2() { return operand2; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#setOperator(int) - */ public void setOperator(int op) { this.op = op; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#setOperand1(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setOperand1(IASTExpression expression) { operand1 = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTBinaryExpression#setOperand2(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setOperand2(IASTExpression expression) { operand2 = expression; } @@ -97,4 +80,8 @@ public class CPPASTBinaryExpression extends CPPASTNode implements } } + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatementExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatementExpression.java index b67eb48cd65..d08f9bff881 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatementExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCompoundStatementExpression.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; /** @@ -21,16 +22,10 @@ public class CPPASTCompoundStatementExpression extends CPPASTNode implements IGNUASTCompoundStatementExpression { private IASTCompoundStatement statement; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.c.gcc.IGCCASTCompoundStatementExpression#getCompoundStatement() - */ public IASTCompoundStatement getCompoundStatement() { return statement; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.c.gcc.IGCCASTCompoundStatementExpression#setCompoundStatement(org.eclipse.cdt.core.dom.ast.IASTCompoundStatement) - */ public void setCompoundStatement(IASTCompoundStatement statement) { this.statement = statement; } @@ -47,4 +42,9 @@ public class CPPASTCompoundStatementExpression extends CPPASTNode implements if( statement != null ) if( !statement.accept( action ) ) return false; return true; } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConditionalExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConditionalExpression.java index 5a3238023ea..ec91d8ee581 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConditionalExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTConditionalExpression.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTConditionalExpression; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** @@ -25,44 +26,26 @@ public class CPPASTConditionalExpression extends CPPASTNode implements private IASTExpression negative; private IASTExpression postive; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#getLogicalConditionExpression() - */ public IASTExpression getLogicalConditionExpression() { return condition; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#setLogicalConditionExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setLogicalConditionExpression(IASTExpression expression) { condition = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#getPositiveResultExpression() - */ public IASTExpression getPositiveResultExpression() { return postive; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#setPositiveResultExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setPositiveResultExpression(IASTExpression expression) { this.postive = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#getNegativeResultExpression() - */ public IASTExpression getNegativeResultExpression() { return negative; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTConditionalExpression#setNegativeResultExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setNegativeResultExpression(IASTExpression expression) { this.negative = expression; } @@ -102,4 +85,9 @@ public class CPPASTConditionalExpression extends CPPASTNode implements negative = (IASTExpression) other; } } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeleteExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeleteExpression.java index a42838c48f4..db52738a0d8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeleteExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDeleteExpression.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression; /** @@ -24,44 +25,26 @@ public class CPPASTDeleteExpression extends CPPASTNode implements private boolean isGlobal; private boolean isVectored; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression#getOperand() - */ public IASTExpression getOperand() { return operand; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression#setOperand(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setOperand(IASTExpression expression) { operand = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression#setIsGlobal(boolean) - */ public void setIsGlobal(boolean global) { isGlobal = global; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression#isGlobal() - */ public boolean isGlobal() { return isGlobal; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression#setIsVectored(boolean) - */ public void setIsVectored(boolean vectored) { isVectored = vectored; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression#isVectored() - */ public boolean isVectored() { return isVectored; } @@ -78,4 +61,9 @@ public class CPPASTDeleteExpression extends CPPASTNode implements if( operand != null ) if( !operand.accept( action ) ) return false; return true; } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionList.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionList.java index 644c15f21fb..4f2f310d98a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionList.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTExpressionList.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTExpressionList; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; @@ -22,22 +23,18 @@ import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; */ public class CPPASTExpressionList extends CPPASTNode implements IASTExpressionList, IASTAmbiguityParent { - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTExpressionList#getExpressions() - */ - public IASTExpression [] getExpressions() { + + public IASTExpression [] getExpressions() { if( expressions == null ) return IASTExpression.EMPTY_EXPRESSION_ARRAY; return (IASTExpression[]) ArrayUtil.removeNulls( IASTExpression.class, expressions ); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTExpressionList#addExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void addExpression(IASTExpression expression) { expressions = (IASTExpression [])ArrayUtil.append( IASTExpression.class, expressions, expression ); } private IASTExpression [] expressions = new IASTExpression[2]; + public boolean accept( ASTVisitor action ){ if( action.shouldVisitExpressions ){ switch( action.visit( this ) ){ @@ -64,4 +61,9 @@ public class CPPASTExpressionList extends CPPASTNode implements } } } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java index e77de05b567..2868f47528f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFieldReference.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; @@ -28,58 +29,34 @@ public class CPPASTFieldReference extends CPPASTNode implements private IASTName name; private boolean isDeref; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference#isTemplate() - */ public boolean isTemplate() { return isTemplate; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference#setIsTemplate(boolean) - */ public void setIsTemplate(boolean value) { isTemplate = value; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#getFieldOwner() - */ public IASTExpression getFieldOwner() { return owner; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#setFieldOwner(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setFieldOwner(IASTExpression expression) { owner = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#getFieldName() - */ public IASTName getFieldName() { return name; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#setFieldName(org.eclipse.cdt.core.dom.ast.IASTName) - */ public void setFieldName(IASTName name) { this.name =name; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#isPointerDereference() - */ public boolean isPointerDereference() { return isDeref; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFieldReference#setIsPointerDereference(boolean) - */ public void setIsPointerDereference(boolean value) { isDeref = value; } @@ -98,9 +75,6 @@ public class CPPASTFieldReference extends CPPASTNode implements return true; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTNameOwner#getRoleForName(org.eclipse.cdt.core.dom.ast.IASTName) - */ public int getRoleForName(IASTName n) { if( n == name ) return r_reference; @@ -116,5 +90,8 @@ public class CPPASTFieldReference extends CPPASTNode implements } } - + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionCallExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionCallExpression.java index 48bf60b529d..287e373af2e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionCallExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionCallExpression.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** @@ -24,30 +25,18 @@ public class CPPASTFunctionCallExpression extends CPPASTNode implements private IASTExpression functionName; private IASTExpression parameter; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression#setFunctionNameExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setFunctionNameExpression(IASTExpression expression) { this.functionName = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression#getFunctionNameExpression() - */ public IASTExpression getFunctionNameExpression() { return functionName; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression#setParameterExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setParameterExpression(IASTExpression expression) { this.parameter = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression#getParameterExpression() - */ public IASTExpression getParameterExpression() { return parameter; } @@ -79,6 +68,10 @@ public class CPPASTFunctionCallExpression extends CPPASTNode implements other.setParent( child.getParent() ); parameter = (IASTExpression) other; } - } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIdExpression.java index 73dda31bbdf..61c85f42436 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTIdExpression.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTIdExpression; import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IType; /** * @author jcamelon @@ -20,16 +21,10 @@ import org.eclipse.cdt.core.dom.ast.IASTName; public class CPPASTIdExpression extends CPPASTNode implements IASTIdExpression { private IASTName name; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTIdExpression#getName() - */ public IASTName getName() { return name; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTIdExpression#setName(org.eclipse.cdt.core.dom.ast.IASTName) - */ public void setName(IASTName name) { this.name = name; } @@ -47,11 +42,13 @@ public class CPPASTIdExpression extends CPPASTNode implements IASTIdExpression { return true; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTNameOwner#getRoleForName(org.eclipse.cdt.core.dom.ast.IASTName) - */ public int getRoleForName(IASTName n) { if( name == n )return r_reference; return r_unclear; } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java index e56515101e4..f765b6df604 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java @@ -11,6 +11,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLiteralExpression; @@ -23,30 +24,18 @@ public class CPPASTLiteralExpression extends CPPASTNode implements private int kind; private String value = ""; //$NON-NLS-1$ - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTLiteralExpression#getKind() - */ public int getKind() { return kind; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTLiteralExpression#setKind(int) - */ public void setKind(int value) { this.kind = value; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTLiteralExpression#setValue(java.lang.String) - */ public void setValue(String value) { this.value = value; } - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ public String toString() { return value; } @@ -61,4 +50,9 @@ public class CPPASTLiteralExpression extends CPPASTNode implements } return true; } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNewExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNewExpression.java index aeaa2b22236..f1141109f58 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNewExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNewExpression.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTTypeId; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; @@ -30,87 +31,51 @@ public class CPPASTNewExpression extends CPPASTNode implements private IASTTypeId typeId; private boolean isNewTypeId; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#isGlobal() - */ public boolean isGlobal() { return global; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#setIsGlobal(boolean) - */ public void setIsGlobal(boolean value) { global = value; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#getNewPlacement() - */ public IASTExpression getNewPlacement() { return placement; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#setNewPlacement(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setNewPlacement(IASTExpression expression) { placement = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#getNewInitializer() - */ public IASTExpression getNewInitializer() { return initializer; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#setNewInitializer(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setNewInitializer(IASTExpression expression) { initializer = expression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#getTypeId() - */ public IASTTypeId getTypeId() { return typeId; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#setTypeId(org.eclipse.cdt.core.dom.ast.IASTTypeId) - */ public void setTypeId(IASTTypeId typeId) { this.typeId = typeId; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#isNewTypeId() - */ public boolean isNewTypeId() { return isNewTypeId; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#setIsNewTypeId(boolean) - */ public void setIsNewTypeId(boolean value) { isNewTypeId = value; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#getNewTypeIdArrayExpressions() - */ public IASTExpression [] getNewTypeIdArrayExpressions() { if( arrayExpressions == null ) return IASTExpression.EMPTY_EXPRESSION_ARRAY; return (IASTExpression[]) ArrayUtil.removeNulls( IASTExpression.class, arrayExpressions ); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression#addNewTypeIdArrayExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void addNewTypeIdArrayExpression(IASTExpression expression) { arrayExpressions = (IASTExpression[]) ArrayUtil.append( IASTExpression.class, arrayExpressions, expression ); } @@ -159,4 +124,9 @@ public class CPPASTNewExpression extends CPPASTNode implements arrayExpressions[i] = (IASTExpression) other; } } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemExpression.java index f78bfa5187e..fc39997d2c6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemExpression.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTProblemExpression; +import org.eclipse.cdt.core.dom.ast.IType; /** * @author jcamelon @@ -29,4 +30,9 @@ public class CPPASTProblemExpression extends CPPASTProblemOwner implements } return true; } + + public IType getExpressionType() { + return null; + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeConstructorExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeConstructorExpression.java index e369583c125..93c667a5e50 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeConstructorExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTSimpleTypeConstructorExpression.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeConstructorExpression; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; @@ -25,30 +26,18 @@ public class CPPASTSimpleTypeConstructorExpression extends CPPASTNode implements private int st; private IASTExpression init; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeConstructorExpression#getSimpleType() - */ public int getSimpleType() { return st; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeConstructorExpression#setSimpleType(int) - */ public void setSimpleType(int value) { st = value; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeConstructorExpression#getInitialValue() - */ public IASTExpression getInitialValue() { return init; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeConstructorExpression#setInitialValue(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setInitialValue(IASTExpression expression) { init = expression; } @@ -74,4 +63,9 @@ public class CPPASTSimpleTypeConstructorExpression extends CPPASTNode implements init = (IASTExpression) other; } } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeIdExpression.java index a9a91d5c014..1bf197ace53 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypeIdExpression.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTTypeId; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypeIdExpression; /** @@ -23,30 +24,18 @@ public class CPPASTTypeIdExpression extends CPPASTNode implements private int op; private IASTTypeId typeId; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression#getOperator() - */ public int getOperator() { return op; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression#setOperator(int) - */ public void setOperator(int value) { this.op = value; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression#setTypeId(org.eclipse.cdt.core.dom.ast.IASTTypeId) - */ public void setTypeId(IASTTypeId typeId) { this.typeId = typeId; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression#getTypeId() - */ public IASTTypeId getTypeId() { return typeId; } @@ -63,4 +52,9 @@ public class CPPASTTypeIdExpression extends CPPASTNode implements if( typeId != null ) if( !typeId.accept( action ) ) return false; return true; } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypenameExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypenameExpression.java index bd86eb185ce..58c28da403b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypenameExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTypenameExpression.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; @@ -27,44 +28,26 @@ public class CPPASTTypenameExpression extends CPPASTNode implements private IASTName name; private IASTExpression init; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression#setIsTemplate(boolean) - */ public void setIsTemplate(boolean templateTokenConsumed) { isTemplate = templateTokenConsumed; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression#isTemplate() - */ public boolean isTemplate() { return isTemplate; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression#setName(org.eclipse.cdt.core.dom.ast.IASTName) - */ public void setName(IASTName name) { this.name = name; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression#getName() - */ public IASTName getName() { return name; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression#setInitialValue(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setInitialValue(IASTExpression expressionList) { init = expressionList; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression#getInitialValue() - */ public IASTExpression getInitialValue() { return init; } @@ -83,9 +66,6 @@ public class CPPASTTypenameExpression extends CPPASTNode implements return true; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTNameOwner#getRoleForName(org.eclipse.cdt.core.dom.ast.IASTName) - */ public int getRoleForName(IASTName n) { if( n == name ) return r_reference; @@ -101,4 +81,9 @@ public class CPPASTTypenameExpression extends CPPASTNode implements } } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java index 2363fd932eb..e6609b70272 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** @@ -25,30 +26,18 @@ public class CPPASTUnaryExpression extends CPPASTNode implements private int operator; private IASTExpression operand; - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTUnaryExpression#getOperator() - */ public int getOperator() { return operator; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTUnaryExpression#setOperator(int) - */ public void setOperator(int value) { this.operator = value; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTUnaryExpression#getOperand() - */ public IASTExpression getOperand() { return operand; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IASTUnaryExpression#setOperand(org.eclipse.cdt.core.dom.ast.IASTExpression) - */ public void setOperand(IASTExpression expression) { operand = expression; } @@ -75,4 +64,9 @@ public class CPPASTUnaryExpression extends CPPASTNode implements } } + + public IType getExpressionType() { + return CPPVisitor.getExpressionType(this); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java index 280c9945257..6323da33b7c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java @@ -112,7 +112,8 @@ public class PDOMCPPClassType extends PDOMMemberOwner implements ICPPClassType, } public int getKey() throws DOMException { - throw new PDOMNotImplementedError(); + // TODO + return ICPPClassType.k_class; } public String[] getQualifiedName() throws DOMException { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFunction.java index 65c339b5963..ff9e88f3c25 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFunction.java @@ -55,7 +55,8 @@ public class PDOMCPPFunction extends PDOMBinding implements ICPPFunction { } public IParameter[] getParameters() throws DOMException { - throw new PDOMNotImplementedError(); + // TODO + return new IParameter[0]; } public IFunctionType getType() throws DOMException { @@ -80,7 +81,8 @@ public class PDOMCPPFunction extends PDOMBinding implements ICPPFunction { } public boolean takesVarArgs() throws DOMException { - throw new PDOMNotImplementedError(); + // TODO + return false; } public String[] getQualifiedName() throws DOMException { diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index 769e825f659..f363e423b1a 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -1375,10 +1375,6 @@ class="org.eclipse.cdt.internal.ui.text.template.TemplateEngine" id="CodeTemplates" priority="2"/> - + diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor2.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor2.java index 913c328216b..2dcc006fc06 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor2.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor2.java @@ -13,31 +13,21 @@ package org.eclipse.cdt.internal.ui.text.contentassist; import java.util.ArrayList; import java.util.List; -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.dom.CDOM; -import org.eclipse.cdt.core.dom.ICodeReaderFactory; -import org.eclipse.cdt.core.dom.IPDOM; -import org.eclipse.cdt.core.dom.IASTServiceProvider.UnsupportedDialectException; import org.eclipse.cdt.core.dom.ast.ASTCompletionNode; import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.internal.ui.CUIMessages; import org.eclipse.cdt.internal.ui.preferences.ProposalFilterPreferencesUtil; import org.eclipse.cdt.internal.ui.text.CParameterListValidator; -import org.eclipse.cdt.internal.ui.util.ExternalEditorInput; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.text.ICCompletionProposal; import org.eclipse.cdt.ui.text.contentassist.ICompletionContributor; import org.eclipse.cdt.ui.text.contentassist.IProposalFilter; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.InvalidRegistryObjectException; import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextViewer; @@ -60,8 +50,6 @@ public class CCompletionProcessor2 implements IContentAssistProcessor { // Property names private String assistPrefix = "CEditor.contentassist"; //$NON-NLS-1$ private String noCompletions = assistPrefix + ".noCompletions"; //$NON-NLS-1$ - private String parseError = assistPrefix + ".parseError"; //$NON-NLS-1$ - private String dialectError = assistPrefix + ".badDialect"; //$NON-NLS-1$ private ASTCompletionNode fCurrentCompletionNode; public CCompletionProcessor2(IEditorPart editor) { @@ -73,37 +61,12 @@ public class CCompletionProcessor2 implements IContentAssistProcessor { try { IWorkingCopy workingCopy = CUIPlugin.getDefault().getWorkingCopyManager().getWorkingCopy(editor.getEditorInput()); String prefix = null; - - IPreferenceStore store = CUIPlugin.getDefault().getPreferenceStore(); - boolean fileScope = store.getBoolean(ContentAssistPreference.CURRENT_FILE_SEARCH_SCOPE); - boolean projectScope = store.getBoolean(ContentAssistPreference.PROJECT_SEARCH_SCOPE); - if (fileScope && workingCopy != null) { // do a full parse + if (workingCopy != null) { + fCurrentCompletionNode = workingCopy.getLanguage().getCompletionNode(workingCopy, offset); - IFile file = (IFile)workingCopy.getResource(); - if (file != null) { - IPDOM pdom = null; //CCorePlugin.getPDOMManager().getPDOM(workingCopy.getCProject()); - ICodeReaderFactory readerFactory; - if (pdom != null) - readerFactory = pdom.getCodeReaderFactory(workingCopy); - else - readerFactory = CDOM.getInstance().getCodeReaderFactory(CDOM.PARSE_WORKING_COPY_WHENEVER_POSSIBLE); - fCurrentCompletionNode = CDOM.getInstance().getCompletionNode(file, offset, readerFactory); - } else if (editor.getEditorInput() instanceof ExternalEditorInput) { - IStorage storage = ((ExternalEditorInput)(editor.getEditorInput())).getStorage(); - IProject project = workingCopy.getCProject().getProject(); - IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(workingCopy.getCProject()); - ICodeReaderFactory readerFactory; - if (pdom != null) - readerFactory = pdom.getCodeReaderFactory(workingCopy); - else - readerFactory = CDOM.getInstance().getCodeReaderFactory(CDOM.PARSE_WORKING_COPY_WHENEVER_POSSIBLE); - fCurrentCompletionNode = CDOM.getInstance().getCompletionNode(storage, project, offset, readerFactory); - } - if (fCurrentCompletionNode != null) prefix = fCurrentCompletionNode.getPrefix(); - } if (prefix == null) @@ -133,13 +96,10 @@ public class CCompletionProcessor2 implements IContentAssistProcessor { IProposalFilter filter = getCompletionFilter(); ICCompletionProposal[] proposalsInput = (ICCompletionProposal[]) proposals.toArray(new ICCompletionProposal[proposals.size()]) ; - ICCompletionProposal[] proposalsFiltered = filter.filterProposals(proposalsInput); return proposalsFiltered; - } catch (UnsupportedDialectException e) { - errorMessage = CUIMessages.getString(dialectError); } catch (Throwable e) { errorMessage = e.toString(); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/DOMCompletionContributor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/DOMCompletionContributor.java index 8b114321502..61ada144b26 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/DOMCompletionContributor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/DOMCompletionContributor.java @@ -25,6 +25,7 @@ import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.ICompositeType; import org.eclipse.cdt.core.dom.ast.IEnumerator; import org.eclipse.cdt.core.dom.ast.IFunction; +import org.eclipse.cdt.core.dom.ast.IFunctionType; import org.eclipse.cdt.core.dom.ast.IParameter; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; @@ -93,7 +94,7 @@ public class DOMCompletionContributor implements ICompletionContributor { } } - private void handleBinding(IBinding binding, ASTCompletionNode completionNode, int offset, ITextViewer viewer, List proposals) { + protected void handleBinding(IBinding binding, ASTCompletionNode completionNode, int offset, ITextViewer viewer, List proposals) { if (binding instanceof IFunction) { handleFunction((IFunction)binding, completionNode, offset, viewer, proposals); } else if (binding instanceof IVariable) { @@ -144,9 +145,12 @@ public class DOMCompletionContributor implements ICompletionContributor { idargs.append("void"); //$NON-NLS-1$ } - IType returnType = function.getType().getReturnType(); - if (returnType != null) - returnTypeStr = ASTTypeUtil.getType(returnType); + IFunctionType functionType = function.getType(); + if (functionType != null) { + IType returnType = functionType.getReturnType(); + if (returnType != null) + returnTypeStr = ASTTypeUtil.getType(returnType); + } } catch (DOMException e) { } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/PDOMCompletionContributor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/PDOMCompletionContributor.java new file mode 100644 index 00000000000..08ecc615056 --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/PDOMCompletionContributor.java @@ -0,0 +1,107 @@ +/******************************************************************************* + * Copyright (c) 2006 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * QNX - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.ui.text.contentassist; + +import java.util.List; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.IPDOM; +import org.eclipse.cdt.core.dom.IPDOMNode; +import org.eclipse.cdt.core.dom.IPDOMVisitor; +import org.eclipse.cdt.core.dom.ast.ASTCompletionNode; +import org.eclipse.cdt.core.dom.ast.IASTExpression; +import org.eclipse.cdt.core.dom.ast.IASTFieldReference; +import org.eclipse.cdt.core.dom.ast.IASTIdExpression; +import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IASTNamedTypeSpecifier; +import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IBinding; +import org.eclipse.cdt.core.dom.ast.IField; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.model.IWorkingCopy; +import org.eclipse.cdt.internal.core.pdom.PDOM; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; +import org.eclipse.cdt.ui.CUIPlugin; +import org.eclipse.cdt.ui.text.contentassist.ICompletionContributor; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jface.text.ITextViewer; + +/** + * @author Doug Schaefer + * + * Completion contributor that looks up prefixes in the PDOM. + */ +public class PDOMCompletionContributor extends DOMCompletionContributor implements ICompletionContributor { + + public void contributeCompletionProposals( + final ITextViewer viewer, + final int offset, + final IWorkingCopy workingCopy, + final ASTCompletionNode completionNode, + final String prefix, + final List proposals) { + + if (completionNode == null) + return; + + try { + IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(workingCopy.getCProject()); + IASTName[] names = completionNode.getNames(); + for (int i = 0; i < names.length; ++i) { + IASTName name = names[i]; + IASTNode parent = name.getParent(); + if (parent instanceof IASTIdExpression || parent instanceof IASTNamedTypeSpecifier) { + pdom.accept(new IPDOMVisitor() { + public boolean visit(IPDOMNode node) throws CoreException { + if (node instanceof PDOMLinkage) + return true; + + if (node instanceof PDOMBinding) { + PDOMBinding binding = (PDOMBinding)node; + if (binding.getName().startsWith(prefix)) { + handleBinding(binding, completionNode, offset, viewer, proposals); + } + } + return false; + } + }); + } else if (parent instanceof IASTFieldReference) { + // Find the type the look at the fields + IASTFieldReference fieldRef = (IASTFieldReference)parent; + IASTExpression expression = fieldRef.getFieldOwner(); + IType type = expression.getExpressionType(); + if (type != null && type instanceof IBinding) { + IBinding binding = (IBinding)type; + PDOMLinkage linkage = ((PDOM)pdom).getLinkage(workingCopy.getLanguage()); + PDOMBinding pdomBinding = linkage.adaptBinding(binding); + if (pdomBinding != null) { + pdomBinding.accept(new IPDOMVisitor() { + public boolean visit(IPDOMNode node) throws CoreException { + if (node instanceof IField) { + PDOMBinding binding = (PDOMBinding)node; + if (binding.getName().startsWith(prefix)) + handleBinding(binding, completionNode, offset, viewer, proposals); + } + return false; + }; + }); + } + } + } + } + } catch (CoreException e) { + CUIPlugin.getDefault().log(e); + } + } + +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/SearchCompletionContributor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/SearchCompletionContributor.java deleted file mode 100644 index 21a43d99881..00000000000 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/SearchCompletionContributor.java +++ /dev/null @@ -1,189 +0,0 @@ -/********************************************************************** - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.internal.ui.text.contentassist; - -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.eclipse.cdt.core.dom.ast.ASTCompletionNode; -import org.eclipse.cdt.core.dom.ast.IASTFieldReference; -import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.model.ICElement; -import org.eclipse.cdt.core.model.IWorkingCopy; -import org.eclipse.cdt.core.search.BasicSearchResultCollector; -import org.eclipse.cdt.core.search.ICSearchConstants; -import org.eclipse.cdt.core.search.ICSearchScope; -import org.eclipse.cdt.core.search.IMatch; -import org.eclipse.cdt.core.search.OrPattern; -import org.eclipse.cdt.core.search.SearchEngine; -import org.eclipse.cdt.core.search.SearchFor; -import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider; -import org.eclipse.cdt.ui.CUIPlugin; -import org.eclipse.cdt.ui.text.contentassist.ICompletionContributor; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.swt.graphics.Image; - -public class SearchCompletionContributor implements ICompletionContributor { - - // The completion search for list - // Kind of like the All Elements but excluding METHODS and FIELDS - private static SearchFor[] completionSearchFor = { - ICSearchConstants.CLASS_STRUCT, - ICSearchConstants.FUNCTION, - ICSearchConstants.VAR, - ICSearchConstants.UNION, - ICSearchConstants.ENUM, - ICSearchConstants.ENUMTOR, - ICSearchConstants.NAMESPACE, - ICSearchConstants.TYPEDEF, - ICSearchConstants.MACRO - }; - - public void contributeCompletionProposals(ITextViewer viewer, int offset, - IWorkingCopy workingCopy, ASTCompletionNode completionNode, String prefix, - List proposals) - { - if (!validContext(completionNode)) - return; - - if (prefix == null || prefix.length() == 0) - return; - - // Create search engine - SearchEngine searchEngine = new SearchEngine(); - searchEngine.setWaitingPolicy( ICSearchConstants.FORCE_IMMEDIATE_SEARCH ); - - // Create search scope - ICSearchScope scope; - if (workingCopy != null) { - ICElement[] projects = new ICElement[] { workingCopy.getCProject() }; - scope = SearchEngine.createCSearchScope(projects, true); - } else - scope = SearchEngine.createWorkspaceScope(); - - // Create the pattern - String patternString = prefix + "*"; //$NON-NLS-1$ - OrPattern pattern = new OrPattern(); - for (int i = 0; i < completionSearchFor.length; i++) - pattern.addPattern( SearchEngine.createSearchPattern( patternString, - completionSearchFor[i], ICSearchConstants.ALL_OCCURRENCES, true)); - - // Run the search - BasicSearchResultCollector collector = new BasicSearchResultCollector(); - try { - searchEngine.search(CUIPlugin.getWorkspace(), pattern, scope, collector, false); - } catch (InterruptedException e) { - return; - } - - Set results = collector.getSearchResults(); - Iterator iResults = results.iterator(); - while (iResults.hasNext()) { - IMatch match = (IMatch)iResults.next(); - switch (match.getElementType()) { - case ICElement.C_FUNCTION: - case ICElement.C_FUNCTION_DECLARATION: - case ICElement.C_METHOD: - case ICElement.C_METHOD_DECLARATION: - handleFunction(match, viewer, prefix, offset, proposals); - break; - default: - handleMatch(match, viewer, prefix, offset, proposals); - } - } - } - - private boolean validContext(ASTCompletionNode completionNode) { - if (completionNode == null) - // No completion node, assume true - return true; - - boolean valid = true; - IASTName[] names = completionNode.getNames(); - for (int i = 0; i < names.length; i++) { - IASTName name = names[i]; - - // not hooked up, not a valid name, ignore - if (name.getTranslationUnit() == null) - continue; - - // member access currently isn't valid - if (name.getParent() instanceof IASTFieldReference) { - valid = false; - continue; - } - - // found one that was valid - return true; - } - - // Couldn't find a valid context - return valid; - } - - private void handleMatch(IMatch match, ITextViewer viewer, String prefix, int offset, List proposals) { - int repLength = prefix.length(); - int repOffset = offset - repLength; - Image image = CUIPlugin.getImageDescriptorRegistry().get(CElementImageProvider.getImageDescriptor(match.getElementType())); - String repString = match.getName(); - CCompletionProposal proposal = new CCompletionProposal(repString, repOffset, repLength, image, repString, 1, viewer); - proposals.add(proposal); - } - - private void handleFunction(IMatch match, ITextViewer viewer, String prefix, int offset, List proposals) { - Image image = CUIPlugin.getImageDescriptorRegistry().get(CElementImageProvider.getImageDescriptor(match.getElementType())); - - StringBuffer repStringBuff = new StringBuffer(); - repStringBuff.append(match.getName()); - repStringBuff.append('('); - - StringBuffer args = new StringBuffer(); - String[] params = match.getParameters(); - if (params != null) - for (int i = 0; i < params.length; ++i) { - if (i > 0) - args.append(','); - args.append(params[i]); - } - - String returnType = match.getReturnType(); - String argString = args.toString(); - - StringBuffer dispStringBuff = new StringBuffer(repStringBuff.toString()); - dispStringBuff.append(argString); - dispStringBuff.append(')'); - - repStringBuff.append(')'); - String repString = repStringBuff.toString(); - - String idString = null; - if (returnType != null) { - idString = dispStringBuff.toString(); - dispStringBuff.append(' '); - dispStringBuff.append(returnType); - } - String dispString = dispStringBuff.toString(); - - int repLength = prefix.length(); - int repOffset = offset - repLength; - CCompletionProposal proposal = new CCompletionProposal(repString, repOffset, repLength, image, dispString, idString, 1, viewer); - proposal.setCursorPosition(repString.length() - 1); - - if (argString.length() > 0) { - CProposalContextInformation info = new CProposalContextInformation(repString, argString); - info.setContextInformationPosition(offset); - proposal.setContextInformation(info); - } - - proposals.add(proposal); - } -}