Skip to content

Commit bbcabf3

Browse files
1030: Extended fqn escaping and references analysis
1 parent 23d1931 commit bbcabf3

File tree

6 files changed

+77
-67
lines changed

6 files changed

+77
-67
lines changed

src/com/magento/idea/magento2uct/inspections/UctProblemsHolder.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ public void registerProblem(final @NotNull ProblemDescriptor problemDescriptor)
7474
// if problem has been added successfully
7575
if (problemCount != getMyProblems().size()) {
7676
myProblemCodes.put(problemDescriptor, issue);
77-
issue = null;//NOPMD
7877
}
7978
}
8079

src/com/magento/idea/magento2uct/util/php/FqnValidatorUtil.java

Lines changed: 0 additions & 53 deletions
This file was deleted.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2uct.util.php;
7+
8+
import com.intellij.openapi.util.text.StringUtil;
9+
import org.jetbrains.annotations.NotNull;
10+
11+
public final class MagentoReferenceUtil {
12+
13+
public static final String PHP_REFERENCE_SEPARATOR = "::";
14+
15+
private MagentoReferenceUtil() {
16+
}
17+
18+
/**
19+
* Check if reference looks like a PHP reference.
20+
*
21+
* @param referenceCandidate String
22+
*
23+
* @return boolean
24+
*/
25+
public static boolean isReference(final @NotNull String referenceCandidate) {
26+
return referenceCandidate.contains(PHP_REFERENCE_SEPARATOR)
27+
&& referenceCandidate.split(PHP_REFERENCE_SEPARATOR).length == 2;
28+
}
29+
30+
/**
31+
* Check if reference looks like a PHP method reference.
32+
*
33+
* @param referenceCandidate String
34+
*
35+
* @return boolean
36+
*/
37+
public static boolean isMethodReference(final @NotNull String referenceCandidate) {
38+
if (isReference(referenceCandidate)) {
39+
final String referencePart = referenceCandidate.split(PHP_REFERENCE_SEPARATOR)[1];
40+
41+
return StringUtil.isJavaIdentifier(referencePart);
42+
}
43+
44+
return false;
45+
}
46+
47+
/**
48+
* Check if reference looks like a PHP constant reference.
49+
*
50+
* @param referenceCandidate String
51+
*
52+
* @return boolean
53+
*/
54+
public static boolean isConstantReference(final @NotNull String referenceCandidate) {
55+
if (isReference(referenceCandidate)) {
56+
final String referencePart = referenceCandidate.split(PHP_REFERENCE_SEPARATOR)[1];
57+
58+
return StringUtil.isUpperCase(referencePart);
59+
}
60+
61+
return false;
62+
}
63+
}

src/com/magento/idea/magento2uct/util/php/MagentoTypeEscapeUtil.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ public final class MagentoTypeEscapeUtil {
1515
= "(Factory|\\\\Proxy|Factory\\\\Proxy)($|\\.)";
1616
public static final Pattern FACTORY_PROXY_TYPE_PATTERN
1717
= Pattern.compile(FACTORY_PROXY_TYPE_REGEX, Pattern.MULTILINE);
18-
public static final String PHP_PROPERTY_REFERENCE_SEPARATOR = "::";
19-
public static final String JAVA_PROPERTY_REFERENCE_SEPARATOR = ".";
18+
public static final String JAVA_REFERENCE_SEPARATOR = ".";
2019

2120
private MagentoTypeEscapeUtil() {
2221
}
@@ -43,7 +42,7 @@ private MagentoTypeEscapeUtil() {
4342
result = result.substring(0, begin) + result.substring(end);
4443
}
4544

46-
return typeFqn.equals(result) ? typeFqn : result;
45+
return typeFqn.equals(result) ? escapeProperty(typeFqn) : escapeProperty(result);
4746
}
4847

4948
/**
@@ -54,11 +53,10 @@ private MagentoTypeEscapeUtil() {
5453
* @return String
5554
*/
5655
public static @NotNull String escapeProperty(final @NotNull String typeFqn) {
57-
if (typeFqn.contains(PHP_PROPERTY_REFERENCE_SEPARATOR)
58-
&& typeFqn.split(PHP_PROPERTY_REFERENCE_SEPARATOR).length == 1) {
56+
if (MagentoReferenceUtil.isReference(typeFqn)) {
5957
return typeFqn.replace(
60-
PHP_PROPERTY_REFERENCE_SEPARATOR,
61-
JAVA_PROPERTY_REFERENCE_SEPARATOR
58+
MagentoReferenceUtil.PHP_REFERENCE_SEPARATOR,
59+
JAVA_REFERENCE_SEPARATOR
6260
);
6361
}
6462

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.util.List;
1818
import org.jetbrains.annotations.NotNull;
1919

20+
@SuppressWarnings("PMD.AvoidSynchronizedAtMethodLevel")
2021
public final class VersionStateManager {
2122

2223
private static VersionStateManager instance;
@@ -35,7 +36,6 @@ public final class VersionStateManager {
3536
*
3637
* @return VersionStateManager
3738
*/
38-
@SuppressWarnings("PMD.AvoidSynchronizedAtMethodLevel")
3939
public static synchronized VersionStateManager getInstance(
4040
final @NotNull Project project
4141
) { //NOPMD
@@ -60,9 +60,7 @@ public static synchronized VersionStateManager getInstance(
6060
* @return boolean
6161
*/
6262
public synchronized boolean isPresentInCodebase(final @NotNull String fqn) {
63-
String safeFqn = MagentoTypeEscapeUtil.escapeProperty(escapeFqn(fqn));
64-
65-
return existenceStateIndex.isPresentInCodebase(safeFqn);
63+
return existenceStateIndex.isPresentInCodebase(escapeFqn(fqn));
6664
}
6765

6866
/**

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,22 @@
1616
import java.util.ArrayList;
1717
import java.util.Collections;
1818
import java.util.HashMap;
19+
import java.util.HashSet;
1920
import java.util.LinkedHashMap;
2021
import java.util.List;
2122
import java.util.Map;
23+
import java.util.Set;
2224
import org.jetbrains.annotations.NotNull;
2325

26+
@SuppressWarnings("PMD.AvoidSynchronizedAtMethodLevel")
2427
public class ExistenceStateIndex implements VersionStateIndex {
2528

2629
private static final String RESOURCE_DIR = "existence";
2730

2831
private final Map<String, Map<String, Boolean>> versioningData;
2932
private final Map<String, Boolean> targetVersionData;
3033
private final Map<String, String> changelog;
34+
private final Set<String> codebase;
3135
private String projectBasePath;
3236

3337
/**
@@ -37,6 +41,7 @@ public ExistenceStateIndex() {
3741
versioningData = new LinkedHashMap<>();
3842
targetVersionData = new HashMap<>();
3943
changelog = new HashMap<>();
44+
codebase = new HashSet<>();
4045
}
4146

4247
/**
@@ -55,7 +60,6 @@ public void setProjectBasePath(final @NotNull String projectBasePath) {
5560
*
5661
* @return boolean
5762
*/
58-
@SuppressWarnings("PMD.AvoidSynchronizedAtMethodLevel")
5963
public synchronized boolean has(final @NotNull String fqn) {
6064
groupLoadedData();
6165

@@ -74,7 +78,7 @@ public synchronized boolean has(final @NotNull String fqn) {
7478
* @return boolean
7579
*/
7680
public synchronized boolean isPresentInCodebase(final @NotNull String fqn) {
77-
return changelog.containsKey(fqn);
81+
return codebase.contains(fqn);
7882
}
7983

8084
/**
@@ -198,6 +202,7 @@ private void groupLoadedData() {
198202
);
199203
targetVersionData.putAll(gatheredData.getFirst());
200204
changelog.putAll(gatheredData.getSecond());
205+
codebase.addAll(VersioningDataOperationsUtil.unionVersionData(versioningData).keySet());
201206
}
202207
}
203208
}

0 commit comments

Comments
 (0)