@Nullable
 String getPropertyDescription(@NotNull final PsiElement element, @Nullable final String name) {
   final RegExpLanguageHost host = findRegExpHost(element);
   return host != null
       ? host.getPropertyDescription(name)
       : myDefaultProvider.getPropertyDescription(name);
 }
 @NotNull
 String[][] getKnownCharacterClasses(@NotNull final PsiElement element) {
   final RegExpLanguageHost host = findRegExpHost(element);
   return host != null
       ? host.getKnownCharacterClasses()
       : myDefaultProvider.getKnownCharacterClasses();
 }
 public boolean supportsNamedGroupRefSyntax(@Nullable final RegExpNamedGroupRef ref) {
   final RegExpLanguageHost host = findRegExpHost(ref);
   try {
     return host != null && host.supportsNamedGroupRefSyntax(ref);
   } catch (AbstractMethodError e) {
     // supportsNamedGroupRefSyntax() not present
     return false;
   }
 }
 public boolean supportsExtendedHexCharacter(@Nullable RegExpChar regExpChar) {
   final RegExpLanguageHost host = findRegExpHost(regExpChar);
   try {
     return host != null && host.supportsExtendedHexCharacter(regExpChar);
   } catch (AbstractMethodError e) {
     // supportsExtendedHexCharacter not present
     return false;
   }
 }
 public boolean isRedundantEscape(@NotNull final RegExpChar ch, @NotNull final String text) {
   if (text.length() <= 1) {
     return false;
   }
   final RegExpLanguageHost host = findRegExpHost(ch);
   if (host != null) {
     final char c = text.charAt(1);
     final boolean needsEscaping = host.characterNeedsEscaping(c);
     return !needsEscaping;
   } else {
     return !("\\]".equals(text) || "\\}".equals(text));
   }
 }
 public boolean supportsNamedGroupSyntax(@Nullable final RegExpGroup group) {
   final RegExpLanguageHost host = findRegExpHost(group);
   return host != null && host.supportsNamedGroupSyntax(group);
 }
 @NotNull
 public String[][] getAllKnownProperties(@NotNull final PsiElement element) {
   final RegExpLanguageHost host = findRegExpHost(element);
   return host != null ? host.getAllKnownProperties() : myDefaultProvider.getAllKnownProperties();
 }
 public boolean isValidCategory(@NotNull final PsiElement element, @NotNull String category) {
   final RegExpLanguageHost host = findRegExpHost(element);
   return host != null
       ? host.isValidCategory(category)
       : myDefaultProvider.isValidCategory(category);
 }
 public boolean supportsPossessiveQuantifiers(@Nullable final RegExpQuantifier quantifier) {
   final RegExpLanguageHost host = findRegExpHost(quantifier);
   return host == null || host.supportsPossessiveQuantifiers();
 }
 public boolean supportsPythonConditionalRefs(@Nullable final RegExpPyCondRef condRef) {
   final RegExpLanguageHost host = findRegExpHost(condRef);
   return host != null && host.supportsPythonConditionalRefs();
 }
 public boolean supportsPerl5EmbeddedComments(@Nullable final PsiComment comment) {
   final RegExpLanguageHost host = findRegExpHost(comment);
   return host != null && host.supportsPerl5EmbeddedComments();
 }