diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Resources.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Resources.java index 28bfec77f7e..15963c1437e 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Resources.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Resources.java @@ -280,10 +280,28 @@ public void registerIncludePattern(String module, String pattern) { assert MissingRegistrationUtils.throwMissingRegistrationErrors(); synchronized (includePatterns) { updateTimeStamp(); - includePatterns.add(new ModuleResourcePair(module, pattern)); + includePatterns.add(new ModuleResourcePair(module, handleEscapedCharacters(pattern))); } } + @Platforms(Platform.HOSTED_ONLY.class)// + private static final String BEGIN_ESCAPED_SEQUENCE = "\\Q"; + + @Platforms(Platform.HOSTED_ONLY.class)// + private static final String END_ESCAPED_SEQUENCE = "\\E"; + + /* + * This handles generated include patterns which start and end with \Q and \E. The actual + * resource name is located inbetween those tags. + */ + @Platforms(Platform.HOSTED_ONLY.class) + private static String handleEscapedCharacters(String pattern) { + if (pattern.startsWith(BEGIN_ESCAPED_SEQUENCE) && pattern.endsWith(END_ESCAPED_SEQUENCE)) { + return pattern.substring(BEGIN_ESCAPED_SEQUENCE.length(), pattern.length() - END_ESCAPED_SEQUENCE.length()); + } + return pattern; + } + /** * Avoid pulling native file system by using {@link NativeImageResourcePath} implementation to * convert resourceName to canonical variant.