diff --git a/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java b/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java index 9d49f77a..51a63da2 100644 --- a/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java +++ b/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java @@ -34,7 +34,7 @@ public class SimpleRelocator implements Relocator { /** * Match dot, slash or space at end of string */ - private static final Pattern RX_ENDS_WITH_DOT_SLASH_SPACE = Pattern.compile("[./ ]$"); + private static final Pattern RX_ENDS_WITH_DOT_SLASH_SPACE = Pattern.compile("(\\.|/|[^ @@ -46,7 +46,7 @@ public class SimpleRelocator implements Relocator { * at end of string */ private static final Pattern RX_ENDS_WITH_JAVA_KEYWORD = Pattern.compile( - "\\b(import|package|public|protected|private|static|final|synchronized|abstract|volatile|extends|implements|throws) $" + "\\b(import|package|public|protected|private|static|final|synchronized|abstract|volatile|extends|implements|instanceof|throws|throw|return|new|case) $" + "|" + "\\{@link( \\*)* $" + "|" diff --git a/src/test/java/org/apache/maven/plugins/shade/relocation/SimpleRelocatorTest.java b/src/test/java/org/apache/maven/plugins/shade/relocation/SimpleRelocatorTest.java index 9f7c29d4..3d70e017 100644 --- a/src/test/java/org/apache/maven/plugins/shade/relocation/SimpleRelocatorTest.java +++ b/src/test/java/org/apache/maven/plugins/shade/relocation/SimpleRelocatorTest.java @@ -208,6 +208,30 @@ public void testRelocateMavenFiles() { + " /** Javadoc, followed by default visibility method with fully qualified return type */\n" + " org.apache.maven.MyReturnType doSomething( org.apache.maven.Bar bar, org.objectweb.asm.sub.Something something) {\n" + " org.apache.maven.Bar bar;\n" + + " Map map1;\n" + + " Map< org.apache.maven.Key, org.apache.maven.Value > map2;\n" + + " throw org.apache.maven.Error.newError();\n" + + " throw new org.apache.maven.Error();\n" + + " boolean flag1 = bar instanceof org.apache.maven.Bar;\n" + + " boolean flag2 = org.apache.maven.Utils.yes() ? org.apache.maven.Utils.one() : org.apache.maven.Utils.zero();\n" + + " boolean flag3 = org.apache.maven.Utils.yes() || org.apache.maven.Utils.no();\n" + + " boolean flag4 = org.apache.maven.Utils.yes() && org.apache.maven.Utils.no();\n" + + " boolean flag5 = org.apache.maven.Utils.yes() ^^ org.apache.maven.Utils.no();\n" + + " int value1 = org.apache.maven.Utils.x() + org.apache.maven.Utils.y()\n" + + " int value2 = org.apache.maven.Utils.x() - org.apache.maven.Utils.y()\n" + + " int value3 = org.apache.maven.Utils.x() * org.apache.maven.Utils.y()\n" + + " int value4 = org.apache.maven.Utils.x() / org.apache.maven.Utils.y()\n" + + " int value5 = org.apache.maven.Utils.one() | org.apache.maven.Utils.two()\n" + + " int value6 = org.apache.maven.Utils.one() & org.apache.maven.Utils.two()\n" + + " int value7 = org.apache.maven.Utils.one() ^ org.apache.maven.Utils.two()\n" + + " switch (org.apache.maven.Utils.getValue()) {\n" + + " case org.apache.maven.Utils.STATIC_VALUE:\n" + + " org.apache.maven.Utils.info(\"known value\"):\n" + + " break;\n" + + " default:\n" + + " org.apache.maven.Utils.warn(\"unknown value\"):\n" + + " break;\n" + + " }\n" + " org.objectweb.asm.sub.Something something;\n" + " String io, val;\n" + " String noRelocation = \"NoWordBoundaryXXXorg.apache.maven.In\";\n" @@ -241,6 +265,30 @@ public void testRelocateMavenFiles() { + " /** Javadoc, followed by default visibility method with fully qualified return type */\n" + " com.acme.maven.MyReturnType doSomething( com.acme.maven.Bar bar, aj.org.objectweb.asm.sub.Something something) {\n" + " com.acme.maven.Bar bar;\n" + + " Map map1;\n" + + " Map< com.acme.maven.Key, com.acme.maven.Value > map2;\n" + + " throw com.acme.maven.Error.newError();\n" + + " throw new com.acme.maven.Error();\n" + + " boolean flag1 = bar instanceof com.acme.maven.Bar;\n" + + " boolean flag2 = com.acme.maven.Utils.yes() ? com.acme.maven.Utils.one() : com.acme.maven.Utils.zero();\n" + + " boolean flag3 = com.acme.maven.Utils.yes() || com.acme.maven.Utils.no();\n" + + " boolean flag4 = com.acme.maven.Utils.yes() && com.acme.maven.Utils.no();\n" + + " boolean flag5 = com.acme.maven.Utils.yes() ^^ com.acme.maven.Utils.no();\n" + + " int value1 = com.acme.maven.Utils.x() + com.acme.maven.Utils.y()\n" + + " int value2 = com.acme.maven.Utils.x() - com.acme.maven.Utils.y()\n" + + " int value3 = com.acme.maven.Utils.x() * com.acme.maven.Utils.y()\n" + + " int value4 = com.acme.maven.Utils.x() / com.acme.maven.Utils.y()\n" + + " int value5 = com.acme.maven.Utils.one() | com.acme.maven.Utils.two()\n" + + " int value6 = com.acme.maven.Utils.one() & com.acme.maven.Utils.two()\n" + + " int value7 = com.acme.maven.Utils.one() ^ com.acme.maven.Utils.two()\n" + + " switch (com.acme.maven.Utils.getValue()) {\n" + + " case com.acme.maven.Utils.STATIC_VALUE:\n" + + " com.acme.maven.Utils.info(\"known value\"):\n" + + " break;\n" + + " default:\n" + + " com.acme.maven.Utils.warn(\"unknown value\"):\n" + + " break;\n" + + " }\n" + " aj.org.objectweb.asm.sub.Something something;\n" + " String io, val;\n" + " String noRelocation = \"NoWordBoundaryXXXorg.apache.maven.In\";\n"