From 62f4735f8e342b5195275b189fb8fdccb873a9ef Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Thu, 4 Sep 2014 15:44:59 -0700 Subject: [PATCH] Bug 443356 - Organize Includes adds an unnecessary include for a function referenced by a macro --- .../refactoring/includes/BindingClassifierTest.java | 10 ++++++++++ .../ui/refactoring/includes/BindingClassifier.java | 2 ++ 2 files changed, 12 insertions(+) diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/includes/BindingClassifierTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/includes/BindingClassifierTest.java index 8e6c0127fca..1e484cb69cb 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/includes/BindingClassifierTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/includes/BindingClassifierTest.java @@ -648,4 +648,14 @@ public class BindingClassifierTest extends OneSourceMultipleHeadersTestCase { assertDefined("MACRO"); assertDeclared(); } + + // void f(int); + // #define MACRO(name, arg) void name() { f(arg); } + + // int bar; + // MACRO(foo, bar); + public void testMacro_4() throws Exception { + assertDefined("MACRO"); + assertDeclared(); + } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/includes/BindingClassifier.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/includes/BindingClassifier.java index 05045831072..9581c245e69 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/includes/BindingClassifier.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/includes/BindingClassifier.java @@ -692,6 +692,8 @@ public class BindingClassifier { */ IASTFunctionCallExpression functionCallExpression = (IASTFunctionCallExpression) expression; IASTExpression functionNameExpression = functionCallExpression.getFunctionNameExpression(); + if (isPartOfExternalMacroDefinition(functionNameExpression)) + return PROCESS_CONTINUE; IBinding binding = getBindingOfExpression(functionNameExpression); if (binding != null) {