diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml
index ca4f8fa1a..d52d309c2 100644
--- a/resources/META-INF/plugin.xml
+++ b/resources/META-INF/plugin.xml
@@ -143,6 +143,7 @@
+
diff --git a/src/com/magento/idea/magento2plugin/indexes/FixtureIndex.java b/src/com/magento/idea/magento2plugin/indexes/FixtureIndex.java
new file mode 100644
index 000000000..28c29ee7f
--- /dev/null
+++ b/src/com/magento/idea/magento2plugin/indexes/FixtureIndex.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+package com.magento.idea.magento2plugin.indexes;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.search.FilenameIndex;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.jetbrains.php.lang.psi.PhpFile;
+import com.magento.idea.magento2plugin.magento.files.TestFixture;
+import com.magento.idea.magento2plugin.magento.packages.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.jetbrains.annotations.NotNull;
+
+public final class FixtureIndex {
+ private final Project project;
+
+ public FixtureIndex(final Project project) {
+ this.project = project;
+ }
+
+ /**
+ * Getter for data fixtures.
+ */
+ public List getDataFixtures(final String fixtureIdentifier) {
+ final List result = new ArrayList<>();
+
+ final String[] fixturePathParts = fixtureIdentifier.split(File.separator);
+ final String fixtureName = fixturePathParts[fixturePathParts.length - 1];
+ final String exactFilePath = TestFixture.FIXTURES_LOCATION.concat(fixtureIdentifier);
+
+ @NotNull final PsiFile[] psiFiles = FilenameIndex.getFilesByName(
+ project,
+ fixtureName,
+ GlobalSearchScope.allScope(project)
+ );
+
+ for (final PsiFile psiFile: psiFiles) {
+ @NotNull final String filePath = psiFile.getVirtualFile().getPath();
+ if (!filePath.contains(TestFixture.FIXTURES_EXCLUDE_PATH)
+ && filePath.contains(exactFilePath)) {
+ result.add((PhpFile) psiFile);
+ }
+ }
+
+ return result;
+ }
+}
diff --git a/src/com/magento/idea/magento2plugin/linemarker/php/TestFixtureLineMarkerProvider.java b/src/com/magento/idea/magento2plugin/linemarker/php/TestFixtureLineMarkerProvider.java
new file mode 100644
index 000000000..093446829
--- /dev/null
+++ b/src/com/magento/idea/magento2plugin/linemarker/php/TestFixtureLineMarkerProvider.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+package com.magento.idea.magento2plugin.linemarker.php;
+
+import com.intellij.codeInsight.daemon.LineMarkerInfo;
+import com.intellij.codeInsight.daemon.LineMarkerProvider;
+import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.util.PsiTreeUtil;
+import com.jetbrains.php.PhpIcons;
+import com.jetbrains.php.lang.documentation.phpdoc.psi.tags.PhpDocTag;
+import com.jetbrains.php.lang.psi.PhpFile;
+import com.magento.idea.magento2plugin.indexes.FixtureIndex;
+import com.magento.idea.magento2plugin.magento.files.TestFixture;
+import com.magento.idea.magento2plugin.project.Settings;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class TestFixtureLineMarkerProvider implements LineMarkerProvider {
+
+ @Nullable
+ @Override
+ public LineMarkerInfo getLineMarkerInfo(final @NotNull PsiElement psiElement) {
+ return null;
+ }
+
+ @Override
+ public void collectSlowLineMarkers(
+ final @NotNull List extends PsiElement> elements,
+ final @NotNull Collection super LineMarkerInfo>> result
+ ) {
+ if (elements.isEmpty() || !Settings.isEnabled(elements.get(0).getProject())) {
+ return;
+ }
+ final FixtureIndex fixtureIndex = new FixtureIndex(elements.get(0).getProject());
+ final List results = new ArrayList();
+ for (final PsiElement psiElement: elements) {
+ if (psiElement instanceof PhpDocTag) {
+ @NotNull final String tagName = ((PhpDocTag) psiElement).getName();
+ if (!tagName.equals(TestFixture.PHP_DOC_TAG_NAME)
+ && !tagName.equals(TestFixture.PHP_DOC_TAG_NAME_API)) {
+ continue;
+ }
+ @NotNull final String tagValue = ((PhpDocTag) psiElement).getTagValue();
+ if (tagValue.isEmpty()) {
+ continue;
+ }
+
+ final List dataFixtures = fixtureIndex.getDataFixtures(tagValue);
+
+ if (dataFixtures.isEmpty()) {
+ continue;
+ }
+
+ results.addAll(dataFixtures);
+
+ final String tooltipText = "Navigate to fixtures";
+ final NavigationGutterIconBuilder builder = NavigationGutterIconBuilder
+ .create(PhpIcons.PHP_FILE)
+ .setTargets(results)
+ .setTooltipText(tooltipText);
+
+ result.add(builder.createLineMarkerInfo(PsiTreeUtil.getDeepestFirst(psiElement)));
+ }
+ }
+ }
+}
diff --git a/src/com/magento/idea/magento2plugin/magento/files/TestFixture.java b/src/com/magento/idea/magento2plugin/magento/files/TestFixture.java
new file mode 100644
index 000000000..5b0b24d60
--- /dev/null
+++ b/src/com/magento/idea/magento2plugin/magento/files/TestFixture.java
@@ -0,0 +1,16 @@
+/*
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+package com.magento.idea.magento2plugin.magento.files;
+
+@SuppressWarnings({
+ "PMD.ClassNamingConventions"
+})
+public class TestFixture {
+ public static final String PHP_DOC_TAG_NAME = "@magentoDataFixture";
+ public static final String PHP_DOC_TAG_NAME_API = "@magentoApiDataFixture";
+ public static final String FIXTURES_LOCATION = "dev/tests/integration/testsuite/";
+ public static final String FIXTURES_EXCLUDE_PATH = "vendor";
+}
diff --git a/testData/linemarker/php/FixtureLinemarkerRegistrar/magentoApiDataFixtureHaveLinemarker/Test.php b/testData/linemarker/php/FixtureLinemarkerRegistrar/magentoApiDataFixtureHaveLinemarker/Test.php
new file mode 100644
index 000000000..29506cf10
--- /dev/null
+++ b/testData/linemarker/php/FixtureLinemarkerRegistrar/magentoApiDataFixtureHaveLinemarker/Test.php
@@ -0,0 +1,18 @@
+