Skip to content

Commit 946c968

Browse files
UCT-722: Extended API coverage index
1 parent 2bf50ba commit 946c968

File tree

2 files changed

+77
-16
lines changed

2 files changed

+77
-16
lines changed

src/com/magento/idea/magento2uct/versioning/VersionStateManager.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.intellij.openapi.project.Project;
99
import com.magento.idea.magento2uct.packages.SupportedVersion;
1010
import com.magento.idea.magento2uct.settings.UctSettingsService;
11+
import com.magento.idea.magento2uct.versioning.indexes.data.ApiCoverageStateIndex;
1112
import com.magento.idea.magento2uct.versioning.indexes.data.DeprecationStateIndex;
1213
import com.magento.idea.magento2uct.versioning.indexes.data.ExistenceStateIndex;
1314
import com.magento.idea.magento2uct.versioning.indexes.data.VersionStateIndex;
@@ -20,6 +21,7 @@ public final class VersionStateManager {
2021
private static VersionStateManager instance;
2122
private final DeprecationStateIndex deprecationStateIndex;
2223
private final ExistenceStateIndex existenceStateIndex;
24+
private final ApiCoverageStateIndex apiCoverageStateIndex;
2325
private final Boolean isSetIgnoreFlag;
2426
private final SupportedVersion currentVersion;
2527
private final SupportedVersion targetVersion;
@@ -81,6 +83,28 @@ public String getRemovedInVersion(final @NotNull String fqn) {
8183
return existenceStateIndex.getVersion(fqn);
8284
}
8385

86+
/**
87+
* Check if specified FQN is marked as API.
88+
*
89+
* @param fqn String
90+
*
91+
* @return boolean
92+
*/
93+
public boolean isApi(final @NotNull String fqn) {
94+
return apiCoverageStateIndex.has(fqn);
95+
}
96+
97+
/**
98+
* Get version in which an FQN was marked as an API.
99+
*
100+
* @param fqn String
101+
*
102+
* @return String
103+
*/
104+
public String getMarkedAsApiInVersion(final @NotNull String fqn) {
105+
return apiCoverageStateIndex.getVersion(fqn);
106+
}
107+
84108
/**
85109
* Version state manager constructor.
86110
*/
@@ -96,6 +120,9 @@ private VersionStateManager(final @NotNull Project project) {
96120

97121
existenceStateIndex = new ExistenceStateIndex();
98122
compute(existenceStateIndex);
123+
124+
apiCoverageStateIndex = new ApiCoverageStateIndex();
125+
compute(apiCoverageStateIndex);
99126
}
100127

101128
/**

src/com/magento/idea/magento2uct/versioning/indexes/data/ApiCoverageStateIndex.java

Lines changed: 50 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,18 @@ public class ApiCoverageStateIndex implements VersionStateIndex {
2525

2626
private static final String RESOURCE_DIR = "api";
2727

28-
private final Map<String, Map<String, Boolean>> data;
29-
private final Map<String, String> changelog = new HashMap<>();//NOPMD
28+
private final Map<String, Map<String, Boolean>> versioningData;
29+
private final Map<String, Boolean> targetVersionData;
30+
private final Map<String, String> changelog;
3031
private String projectBasePath;
31-
private String version;//NOPMD
3232

33+
/**
34+
* Api coverage state index constructor.
35+
*/
3336
public ApiCoverageStateIndex() {
34-
data = new LinkedHashMap<>();
37+
versioningData = new LinkedHashMap<>();
38+
targetVersionData = new HashMap<>();
39+
changelog = new HashMap<>();
3540
}
3641

3742
/**
@@ -43,13 +48,31 @@ public void setProjectBasePath(final @NotNull String projectBasePath) {
4348
this.projectBasePath = projectBasePath;
4449
}
4550

51+
/**
52+
* Check if the specified FQN exists in the existence index.
53+
*
54+
* @param fqn String
55+
*
56+
* @return boolean
57+
*/
58+
@SuppressWarnings("PMD.AvoidSynchronizedAtMethodLevel")
59+
public synchronized boolean has(final @NotNull String fqn) {
60+
groupLoadedData();
61+
62+
return targetVersionData.containsKey(fqn);
63+
}
64+
4665
/**
4766
* Get version state after lookup.
4867
*
68+
* @param fqn String
69+
*
4970
* @return String
5071
*/
51-
public String getVersion() {
52-
return version;
72+
public String getVersion(final @NotNull String fqn) {
73+
final String version = changelog.get(fqn);
74+
75+
return version == null ? "some" : version;
5376
}
5477

5578
/**
@@ -58,16 +81,9 @@ public String getVersion() {
5881
* @return Map[String, Boolean]
5982
*/
6083
public Map<String, Boolean> getIndexData() {
61-
final Pair<Map<String, Boolean>, Map<String, String>> gatheredData =
62-
VersioningDataOperationsUtil.unionVersionDataWithChangelog(
63-
data,
64-
new ArrayList<>(Collections.singletonList(
65-
SupportedVersion.V230.getVersion()
66-
)),
67-
true
68-
);
84+
groupLoadedData();
6985

70-
return gatheredData.getFirst();
86+
return targetVersionData;
7187
}
7288

7389
@Override
@@ -139,7 +155,25 @@ private void putIndexData(
139155
final Map<String, Boolean> indexData
140156
) {
141157
if (indexData != null) {
142-
data.put(version, indexData);
158+
versioningData.put(version, indexData);
159+
}
160+
}
161+
162+
/**
163+
* Group data according to purpose.
164+
*/
165+
private void groupLoadedData() {
166+
if (targetVersionData.isEmpty() && !versioningData.isEmpty()) {
167+
final Pair<Map<String, Boolean>, Map<String, String>> gatheredData =
168+
VersioningDataOperationsUtil.unionVersionDataWithChangelog(
169+
versioningData,
170+
new ArrayList<>(Collections.singletonList(
171+
SupportedVersion.V230.getVersion()
172+
)),
173+
true
174+
);
175+
targetVersionData.putAll(gatheredData.getFirst());
176+
changelog.putAll(gatheredData.getSecond());
143177
}
144178
}
145179
}

0 commit comments

Comments
 (0)