From dffb9aa5147650d2975e8e056d23b2c44e0baa5d Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Fri, 13 Sep 2013 19:02:56 -0700 Subject: [PATCH] Bug 417243 - Organize Includes inserts unnecessary include for the header declaring a function parameter type --- .../refactoring/includes/BindingClassifierTest.java | 12 ++++++++++++ .../ui/refactoring/includes/BindingClassifier.java | 3 +++ 2 files changed, 15 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 07a096ada9c..4c63997f3d3 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 @@ -258,6 +258,18 @@ public class BindingClassifierTest extends OneSourceMultipleHeadersTestCase { assertDeclared("f"); } + // typedef int int32; + // void f(int32* p); + + // void test(int i) { + // f(&i); + // } + public void testFunctionCallWithTypedef() throws Exception { + getPreferenceStore().setValue(PreferenceConstants.FORWARD_DECLARE_FUNCTIONS, false); + assertDefined("f"); + assertDeclared(); + } + // struct A { // A(void* p); // }; 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 897a33e8e42..ed6394a0d50 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 @@ -535,6 +535,9 @@ public class BindingClassifier { } private void declareFunction(IFunction function, IASTInitializerClause[] arguments) { + if (!canForwardDeclare(function)) + defineBinding(function); + // Handle return or expression type of the function or constructor call. IType returnType = function.getType().getReturnType(); if (!(returnType instanceof IPointerType) && !(returnType instanceof ICPPReferenceType)) {