Repository: ericsson/codechecker
Issue: files with a path that contains '@' are skipped 

**Describe the bug**
Given a compilation_database.json where all file paths contain a '@'.
For example:
~~~~
{
  "directory": "C:/jenkins/workspace/MS-1234-5.6-use_withCredentials@2/b",
  "command": "C://msys64//mingw64//bin//c++.exe ",
  "file": "C:/jenkins/workspace/MS-1234-5.6-use_withCredentials@2/lol_common/components/Logger/Source/Logger.cpp"
},
~~~~
The `command` is removed because of company internals. But it also had an '@' in there.

Codechecker prints:
~~~~
[INFO 2021-10-26 19:24] - No analysis is required.
There were no compilation commands in the provided compilation database or all of them were skipped.
~~~~
 
**CodeChecker version**
6.17.0


**Desktop (please complete the following information)**
 - OS: windows

**Additional context**
those paths are used on jenkins to create workspaces
Please notice: 
The original compile_commands.json has `\\` in all paths. Those get replaced with `/` before passing it to Codechecker.
Otherwise the jenkins plugin 'warnings-ng' would not find and display them in the UI.
But as long as there are no `@` in there, it works.


Changed files:
analyzer/tests/unit/test_log_parser.py, analyzer/codechecker_analyzer/buildlog/log_parser.py

diff --git a/analyzer/codechecker_analyzer/buildlog/log_parser.py b/analyzer/codechecker_analyzer/buildlog/log_parser.py
index 872e5131..b7807b18 100644
--- a/analyzer/codechecker_analyzer/buildlog/log_parser.py
+++ b/analyzer/codechecker_analyzer/buildlog/log_parser.py
@@ -1178,7 +1178,7 @@ def extend_compilation_database_entries(compilation_database):
 
             entry['command'] = ' '.join(cmd)
 
-            if '@' in entry['file']:
+            if entry['file'].startswith('@'):
                 for source_file in source_files:
                     new_entry = dict(entry)
                     new_entry['file'] = source_file
diff --git a/analyzer/tests/unit/test_log_parser.py b/analyzer/tests/unit/test_log_parser.py
index d106b60a..447b97f9 100644
--- a/analyzer/tests/unit/test_log_parser.py
+++ b/analyzer/tests/unit/test_log_parser.py
@@ -526,3 +526,29 @@ class LogParserTest(unittest.TestCase):
                           if b.source == b_file_path][0]
         self.assertEqual(len(b_build_action.analyzer_options), 1)
         self.assertEqual(b_build_action.analyzer_options[0], '-DVARIABLE=some')
+
+    def test_source_file_contains_at_sign(self):
+        """
+        Test source file which path contains '@' sign in path.
+
+        Source file path can contain '@' sign which doesn't mean it is a
+        response file.
+        """
+        with tempfile.TemporaryDirectory(suffix='@') as tmp_dir:
+            src_file_path = shutil.copy(self.src_file_path, tmp_dir)
+
+            with open(self.compile_command_file_path, "w",
+                      encoding="utf-8", errors="ignore") as f:
+                f.write(json.dumps([dict(
+                    directory=tmp_dir,
+                    command=f"g++ {src_file_path}",
+                    file=src_file_path
+                )]))
+
+        build_actions, _ = log_parser.parse_unique_log(load_json_or_empty(
+            self.compile_command_file_path), self.__this_dir)
+
+        self.assertEqual(len(build_actions), 1)
+
+        build_action = build_actions[0]
+        self.assertEqual(build_action.source, src_file_path)