Skip to content

Commit 6bf866c

Browse files
author
Vitaliy Boyko
committed
Merge branch '3.2.0-develop' of github.com:magento/magento2-phpstorm-plugin into 3.1.1->3.2.0-forwardport
� Conflicts: � .github/workflows/gradle.yml � CHANGELOG.md � build.gradle � resources/META-INF/plugin.xml
2 parents 8fc2a8a + 264c5ef commit 6bf866c

File tree

21 files changed

+275
-8
lines changed

21 files changed

+275
-8
lines changed

.github/workflows/gradle.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ name: Run automated tests
55

66
on:
77
pull_request:
8-
branches: [ master, 3.1.1-develop ]
8+
branches: [ master, 3.2.0-develop ]
99

1010
jobs:
1111
build-linux:

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0).
66

7+
## 3.2.0
8+
79
## 3.1.1
810

911
### Fixed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ repositories {
1515
}
1616

1717
group 'com.magento.idea'
18-
version '3.1.1'
18+
version '3.2.0'
1919

2020
apply plugin: 'org.jetbrains.intellij'
2121
apply plugin: 'java'

resources/META-INF/plugin.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<idea-plugin>
88
<id>com.magento.idea.magento2plugin</id>
99
<name>Magento PhpStorm</name>
10-
<version>3.1.1</version>
10+
<version>3.2.0</version>
1111
<vendor url="https://github.com/magento/magento2-phpstorm-plugin">Magento Inc.</vendor>
1212

1313
<description><![CDATA[
@@ -143,6 +143,7 @@
143143
<codeInsight.lineMarkerProvider language="PHP" implementationClass="com.magento.idea.magento2plugin.linemarker.php.PluginTargetLineMarkerProvider"/>
144144
<codeInsight.lineMarkerProvider language="PHP" implementationClass="com.magento.idea.magento2plugin.linemarker.php.ClassConfigurationLineMarkerProvider"/>
145145
<codeInsight.lineMarkerProvider language="PHP" implementationClass="com.magento.idea.magento2plugin.linemarker.php.WebApiLineMarkerProvider"/>
146+
<codeInsight.lineMarkerProvider language="PHP" implementationClass="com.magento.idea.magento2plugin.linemarker.php.TestFixtureLineMarkerProvider"/>
146147

147148
<directoryProjectConfigurator implementation="com.magento.idea.magento2plugin.project.ProjectDetector"/>
148149

src/com/magento/idea/magento2plugin/actions/generation/data/ModuleXmlData.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
package com.magento.idea.magento2plugin.actions.generation.data;
77

88
import com.intellij.psi.PsiDirectory;
9+
import java.util.List;
910

1011
@SuppressWarnings({"PMD.DataClass"})
1112
public class ModuleXmlData {
1213
private final String packageName;
1314
private final String moduleName;
1415
private final String setupVersion;
1516
private final PsiDirectory baseDir;
17+
private final List<String> moduleSequences;
1618
private final boolean createModuleDirs;
1719

1820
/**
@@ -29,12 +31,14 @@ public ModuleXmlData(
2931
final String moduleName,
3032
final String setupVersion,
3133
final PsiDirectory baseDir,
34+
final List<String> moduleSequences,
3235
final boolean createModuleDirs
3336
) {
3437
this.packageName = packageName;
3538
this.moduleName = moduleName;
3639
this.setupVersion = setupVersion;
3740
this.baseDir = baseDir;
41+
this.moduleSequences = moduleSequences;
3842
this.createModuleDirs = createModuleDirs;
3943
}
4044

@@ -54,6 +58,10 @@ public String getSetupVersion() {
5458
return this.setupVersion;
5559
}
5660

61+
public List<String> getModuleSequences() {
62+
return moduleSequences;
63+
}
64+
5765
public boolean isCreateModuleDirs() {
5866
return this.createModuleDirs;
5967
}

src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ private void generateModuleXml() {
213213
getModuleName(),
214214
getSetupVersion(),
215215
getBaseDir(),
216+
getModuleDependencies(),
216217
true
217218
), project).generate(NewModuleAction.actionName, true);
218219
}

src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleXmlGenerator.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator;
1515
import com.magento.idea.magento2plugin.magento.files.ModuleXml;
1616
import com.magento.idea.magento2plugin.magento.packages.Package;
17+
import java.util.List;
1718
import java.util.Properties;
1819
import org.jetbrains.annotations.NotNull;
1920

@@ -74,5 +75,30 @@ protected void fillAttributes(final Properties attributes) {
7475
if (moduleXmlData.getSetupVersion() != null) {
7576
attributes.setProperty("SETUP_VERSION", moduleXmlData.getSetupVersion());
7677
}
78+
79+
final String sequences = this.getSequencesString(moduleXmlData.getModuleSequences());
80+
if (!sequences.isEmpty()) {
81+
attributes.setProperty(
82+
"SEQUENCES",
83+
sequences
84+
);
85+
}
86+
}
87+
88+
private String getSequencesString(final List sequences) {
89+
String result = "";
90+
final Object[] dependencies = sequences.toArray();
91+
final boolean noDependency = dependencies.length == 1 && dependencies[0]
92+
.equals(ModuleXml.NO_SEQUENCES_LABEL);
93+
94+
if (noDependency) {
95+
return result;
96+
}
97+
98+
for (final Object o : dependencies) {
99+
result = result.concat(String.format("<module name=\"%s\"/>", o.toString()));
100+
}
101+
102+
return result;
77103
}
78104
}

src/com/magento/idea/magento2plugin/generation/php/MagentoModuleGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.jetbrains.annotations.NotNull;
3232
import org.jetbrains.annotations.Nullable;
3333

34-
3534
public class MagentoModuleGenerator extends WebProjectTemplate<MagentoProjectGeneratorSettings> {
3635
public static String actionName = "Magento 2 Module";
3736

@@ -133,7 +132,7 @@ private PsiFile generateComposerJson(
133132
* @param project Project
134133
* @param baseDir Base directory
135134
* @param settings Settings
136-
* @return
135+
* @return void
137136
*/
138137
private PsiFile generateRegistrationPhp(
139138
@NotNull final Project project,
@@ -165,6 +164,7 @@ private void generateModuleXml(
165164
settings.getModuleName(),
166165
settings.getModuleVersion(),
167166
baseDir,
167+
new ArrayList<>(),
168168
false
169169
);
170170
final ModuleXmlGenerator moduleXmlGenerator =
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.indexes;
7+
8+
import com.intellij.openapi.project.Project;
9+
import com.intellij.psi.PsiFile;
10+
import com.intellij.psi.search.FilenameIndex;
11+
import com.intellij.psi.search.GlobalSearchScope;
12+
import com.jetbrains.php.lang.psi.PhpFile;
13+
import com.magento.idea.magento2plugin.magento.files.TestFixture;
14+
import com.magento.idea.magento2plugin.magento.packages.File;
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
import org.jetbrains.annotations.NotNull;
18+
19+
public final class FixtureIndex {
20+
private final Project project;
21+
22+
public FixtureIndex(final Project project) {
23+
this.project = project;
24+
}
25+
26+
/**
27+
* Getter for data fixtures.
28+
*/
29+
public List<PhpFile> getDataFixtures(final String fixtureIdentifier) {
30+
final List<PhpFile> result = new ArrayList<>();
31+
32+
final String[] fixturePathParts = fixtureIdentifier.split(File.separator);
33+
final String fixtureName = fixturePathParts[fixturePathParts.length - 1];
34+
final String exactFilePath = TestFixture.FIXTURES_LOCATION.concat(fixtureIdentifier);
35+
36+
@NotNull final PsiFile[] psiFiles = FilenameIndex.getFilesByName(
37+
project,
38+
fixtureName,
39+
GlobalSearchScope.allScope(project)
40+
);
41+
42+
for (final PsiFile psiFile: psiFiles) {
43+
@NotNull final String filePath = psiFile.getVirtualFile().getPath();
44+
if (!filePath.contains(TestFixture.FIXTURES_EXCLUDE_PATH)
45+
&& filePath.contains(exactFilePath)) {
46+
result.add((PhpFile) psiFile);
47+
}
48+
}
49+
50+
return result;
51+
}
52+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.linemarker.php;
7+
8+
import com.intellij.codeInsight.daemon.LineMarkerInfo;
9+
import com.intellij.codeInsight.daemon.LineMarkerProvider;
10+
import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder;
11+
import com.intellij.psi.PsiElement;
12+
import com.intellij.psi.util.PsiTreeUtil;
13+
import com.jetbrains.php.PhpIcons;
14+
import com.jetbrains.php.lang.documentation.phpdoc.psi.tags.PhpDocTag;
15+
import com.jetbrains.php.lang.psi.PhpFile;
16+
import com.magento.idea.magento2plugin.indexes.FixtureIndex;
17+
import com.magento.idea.magento2plugin.magento.files.TestFixture;
18+
import com.magento.idea.magento2plugin.project.Settings;
19+
import java.util.ArrayList;
20+
import java.util.Collection;
21+
import java.util.List;
22+
import org.jetbrains.annotations.NotNull;
23+
import org.jetbrains.annotations.Nullable;
24+
25+
public class TestFixtureLineMarkerProvider implements LineMarkerProvider {
26+
27+
@Nullable
28+
@Override
29+
public LineMarkerInfo getLineMarkerInfo(final @NotNull PsiElement psiElement) {
30+
return null;
31+
}
32+
33+
@Override
34+
public void collectSlowLineMarkers(
35+
final @NotNull List<? extends PsiElement> elements,
36+
final @NotNull Collection<? super LineMarkerInfo<?>> result
37+
) {
38+
if (elements.isEmpty() || !Settings.isEnabled(elements.get(0).getProject())) {
39+
return;
40+
}
41+
final FixtureIndex fixtureIndex = new FixtureIndex(elements.get(0).getProject());
42+
final List<PhpFile> results = new ArrayList();
43+
for (final PsiElement psiElement: elements) {
44+
if (psiElement instanceof PhpDocTag) {
45+
@NotNull final String tagName = ((PhpDocTag) psiElement).getName();
46+
if (!tagName.equals(TestFixture.PHP_DOC_TAG_NAME)
47+
&& !tagName.equals(TestFixture.PHP_DOC_TAG_NAME_API)) {
48+
continue;
49+
}
50+
@NotNull final String tagValue = ((PhpDocTag) psiElement).getTagValue();
51+
if (tagValue.isEmpty()) {
52+
continue;
53+
}
54+
55+
final List<PhpFile> dataFixtures = fixtureIndex.getDataFixtures(tagValue);
56+
57+
if (dataFixtures.isEmpty()) {
58+
continue;
59+
}
60+
61+
results.addAll(dataFixtures);
62+
63+
final String tooltipText = "Navigate to fixtures";
64+
final NavigationGutterIconBuilder<PsiElement> builder = NavigationGutterIconBuilder
65+
.create(PhpIcons.PHP_FILE)
66+
.setTargets(results)
67+
.setTooltipText(tooltipText);
68+
69+
result.add(builder.createLineMarkerInfo(PsiTreeUtil.getDeepestFirst(psiElement)));
70+
}
71+
}
72+
}
73+
}

0 commit comments

Comments
 (0)