aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/tools/clangbackend/source/codecompletionsextractor.cpp6
-rw-r--r--tests/unit/unittest/codecompletionsextractor-test.cpp19
-rw-r--r--tests/unit/unittest/data/complete_extractor_private_function_definition.cpp5
3 files changed, 28 insertions, 2 deletions
diff --git a/src/tools/clangbackend/source/codecompletionsextractor.cpp b/src/tools/clangbackend/source/codecompletionsextractor.cpp
index 09bae479fd..c2386149be 100644
--- a/src/tools/clangbackend/source/codecompletionsextractor.cpp
+++ b/src/tools/clangbackend/source/codecompletionsextractor.cpp
@@ -362,7 +362,11 @@ void CodeCompletionsExtractor::extractAvailability()
currentCodeCompletion_.availability = CodeCompletion::NotAvailable;
break;
case CXAvailability_NotAccessible:
- currentCodeCompletion_.availability = CodeCompletion::NotAccessible;
+ // QTCREATORBUG-25244
+ if (currentCodeCompletion_.completionKind == CodeCompletion::FunctionDefinitionCompletionKind)
+ currentCodeCompletion_.availability = CodeCompletion::Available;
+ else
+ currentCodeCompletion_.availability = CodeCompletion::NotAccessible;
break;
}
}
diff --git a/tests/unit/unittest/codecompletionsextractor-test.cpp b/tests/unit/unittest/codecompletionsextractor-test.cpp
index 509dfd49dc..25c83cd14c 100644
--- a/tests/unit/unittest/codecompletionsextractor-test.cpp
+++ b/tests/unit/unittest/codecompletionsextractor-test.cpp
@@ -158,6 +158,7 @@ protected:
Document constructorDocument{Utf8StringLiteral(TESTDATA_DIR"/complete_extractor_constructor.cpp"), compilationArguments, {}, documents};
Document constructorMemberInitDocument{Utf8StringLiteral(TESTDATA_DIR"/complete_extractor_constructorMemberInitialization.cpp"), compilationArguments, {}, documents};
Document briefCommentDocument{Utf8StringLiteral(TESTDATA_DIR"/complete_extractor_brief_comment.cpp"), compilationArguments, {}, documents};
+ Document privateFunctionDefinitionDocument{Utf8StringLiteral(TESTDATA_DIR"/complete_extractor_private_function_definition.cpp"), compilationArguments, {}, documents};
};
using CodeCompletionsExtractorSlowTest = CodeCompletionsExtractor;
@@ -602,9 +603,12 @@ TEST_F(CodeCompletionsExtractorSlowTest, NotAccessibleFunction)
unsavedFiles.unsavedFile(functionDocument.filePath()),
completeResults.data());
+ // Availability should be NotAccessible, but see QTCREATORBUG-25244.
+ // It's better to offer completion for some non-accessible functions than
+ // not to offer completion for some accessible ones.
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("NotAccessibleFunction"),
CodeCompletion::FunctionDefinitionCompletionKind,
- CodeCompletion::NotAccessible));
+ CodeCompletion::Available));
}
TEST_F(CodeCompletionsExtractorSlowTest, NotAvailableFunction)
@@ -824,6 +828,19 @@ TEST_F(CodeCompletionsExtractorSlowTest, ExtractAll)
ASSERT_THAT(codeCompletions.empty(), false);
}
+TEST_F(CodeCompletionsExtractorSlowTest, PrivateFunctionDefinition)
+{
+ ClangCodeCompleteResults completeResults(getResults(privateFunctionDefinitionDocument, 5, 12));
+
+ ::CodeCompletionsExtractor extractor(
+ unsavedFiles.unsavedFile(privateFunctionDefinitionDocument.filePath()),
+ completeResults.data());
+
+ ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("method"),
+ CodeCompletion::FunctionDefinitionCompletionKind,
+ CodeCompletion::Available));
+}
+
ClangCodeCompleteResults CodeCompletionsExtractor::getResults(const Document &document,
uint line,
uint column,
diff --git a/tests/unit/unittest/data/complete_extractor_private_function_definition.cpp b/tests/unit/unittest/data/complete_extractor_private_function_definition.cpp
new file mode 100644
index 0000000000..c2dd9e3dab
--- /dev/null
+++ b/tests/unit/unittest/data/complete_extractor_private_function_definition.cpp
@@ -0,0 +1,5 @@
+class Foo {
+ void method();
+};
+
+void Foo::m