From a9662b7f9ffddce0b0c9c0d1b157dd5e98f5cbbf Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Tue, 7 Feb 2012 20:40:29 -0800 Subject: [PATCH] Fixed VariableReadWriteFlagsTest.testImplicitArgument. --- .../parser/tests/ast2/VariableReadWriteFlagsTest.java | 2 +- .../core/dom/parser/VariableReadWriteFlags.java | 6 +++++- .../cpp/semantics/CPPVariableReadWriteFlags.java | 10 ++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/VariableReadWriteFlagsTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/VariableReadWriteFlagsTest.java index de6ed76f3be..43b4926929c 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/VariableReadWriteFlagsTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/VariableReadWriteFlagsTest.java @@ -152,7 +152,7 @@ public class VariableReadWriteFlagsTest extends AST2BaseTest { // a.m1(); // a.m2(); // }; - public void _testImplicitArgument() throws Exception { + public void testImplicitArgument() throws Exception { AssertionHelper a = getCPPAssertionHelper(); a.assertReadWriteFlags("a.m1", READ | WRITE); a.assertReadWriteFlags("a.m2", READ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/VariableReadWriteFlags.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/VariableReadWriteFlags.java index 6f2c0a4342e..29e5bb8fdb7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/VariableReadWriteFlags.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/VariableReadWriteFlags.java @@ -146,7 +146,7 @@ public abstract class VariableReadWriteFlags { } if (expr instanceof IASTFunctionCallExpression) { if (node.getPropertyInParent() == IASTFunctionCallExpression.FUNCTION_NAME) { - return READ; + return rwFunctionName((IASTExpression) node); } return rwArgumentForFunctionCall((IASTFunctionCallExpression) expr, node, indirection); } @@ -160,6 +160,10 @@ public abstract class VariableReadWriteFlags { return READ | WRITE; // fall back } + protected int rwFunctionName(IASTExpression node) { + return READ; + } + protected int rwArgumentForFunctionCall(final IASTFunctionCallExpression funcCall, IASTNode argument, int indirection) { final IASTInitializerClause[] args = funcCall.getArguments(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVariableReadWriteFlags.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVariableReadWriteFlags.java index 482b1551f40..40a7d9b50d9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVariableReadWriteFlags.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVariableReadWriteFlags.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp.semantics; import org.eclipse.cdt.core.dom.ast.IASTDeclarator; +import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTImplicitName; import org.eclipse.cdt.core.dom.ast.IASTImplicitNameOwner; import org.eclipse.cdt.core.dom.ast.IASTName; @@ -25,6 +26,7 @@ import org.eclipse.cdt.core.dom.ast.IVariable; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPReferenceType; import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer; import org.eclipse.cdt.internal.core.dom.parser.VariableReadWriteFlags; @@ -91,6 +93,14 @@ public final class CPPVariableReadWriteFlags extends VariableReadWriteFlags { return super.rwInUnaryExpression(node, expr, indirection); } + @Override + protected int rwFunctionName(IASTExpression node) { + IType type= node.getExpressionType(); + if (type instanceof ICPPFunctionType && !((ICPPFunctionType) type).isConst()) + return READ | WRITE; + return READ; + } + @Override protected int rwAssignmentToType(IType type, int indirection) { if (indirection == 0) {