mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
regex: disallow literal backspace [\b] inside java
This commit is contained in:
@@ -38,6 +38,10 @@ public interface RegExpLanguageHost {
|
||||
return true;
|
||||
}
|
||||
|
||||
default boolean supportsLiteralBackspace(RegExpChar aChar) {
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean isValidCategory(@NotNull String category);
|
||||
@NotNull
|
||||
String[][] getAllKnownProperties();
|
||||
|
||||
@@ -91,6 +91,11 @@ public final class RegExpLanguageHosts extends ClassExtension<RegExpLanguageHost
|
||||
}
|
||||
}
|
||||
|
||||
public boolean supportsLiteralBackspace(@Nullable RegExpChar regExpChar) {
|
||||
final RegExpLanguageHost host = findRegExpHost(regExpChar);
|
||||
return host != null && host.supportsLiteralBackspace(regExpChar);
|
||||
}
|
||||
|
||||
public boolean supportsNamedGroupSyntax(@Nullable final RegExpGroup group) {
|
||||
final RegExpLanguageHost host = findRegExpHost(group);
|
||||
return host != null && host.supportsNamedGroupSyntax(group);
|
||||
|
||||
@@ -133,7 +133,7 @@ public final class RegExpAnnotator extends RegExpElementVisitor implements Annot
|
||||
@Override
|
||||
public void visitRegExpChar(final RegExpChar ch) {
|
||||
final Character value = ch.getValue();
|
||||
if (value == null) {
|
||||
if (value == null || (value == '\b' && !myLanguageHosts.supportsLiteralBackspace(ch))) {
|
||||
switch (ch.getType()) {
|
||||
case CHAR:
|
||||
myHolder.createErrorAnnotation(ch, "Illegal/unsupported escape sequence");
|
||||
|
||||
@@ -434,6 +434,10 @@
|
||||
<pattern><![CDATA[<weak_warning descr="Redundant character escape">\-</weak_warning>[<weak_warning descr="Redundant character escape">\*</weak_warning>\-\[\]\\<weak_warning descr="Redundant character escape">\+]</weak_warning>]]></pattern>
|
||||
<expected>OK</expected>
|
||||
</test>
|
||||
<test host="com.intellij.psi.impl.JavaRegExpHost">
|
||||
<pattern>[\b]</pattern>
|
||||
<expected>ERR</expected>
|
||||
</test>
|
||||
</charclasses>
|
||||
|
||||
<groups>
|
||||
|
||||
@@ -101,6 +101,11 @@ public class JavaRegExpHost implements RegExpLanguageHost {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsLiteralBackspace(RegExpChar aChar) {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean hasAtLeastJdkVersion(PsiElement element, JavaSdkVersion version) {
|
||||
final JavaSdkVersion version1 = getJavaVersion(element);
|
||||
return version1 != null && version1.isAtLeast(version);
|
||||
|
||||
Reference in New Issue
Block a user