diff --git a/archunit/src/main/java/com/tngtech/archunit/core/domain/Formatters.java b/archunit/src/main/java/com/tngtech/archunit/core/domain/Formatters.java index a5a4628b3..4009de38b 100644 --- a/archunit/src/main/java/com/tngtech/archunit/core/domain/Formatters.java +++ b/archunit/src/main/java/com/tngtech/archunit/core/domain/Formatters.java @@ -118,7 +118,11 @@ public static String ensureSimpleName(String name) { int lastIndexOfDot = name.lastIndexOf('.'); String partAfterDot = lastIndexOfDot >= 0 ? name.substring(lastIndexOfDot + 1) : name; - int lastIndexOf$ = partAfterDot.lastIndexOf('$'); + int lastIndexOfNon$ = partAfterDot.length() - 1; + while(lastIndexOfNon$ > 0 && partAfterDot.charAt(lastIndexOfNon$) == '$') { + lastIndexOfNon$--; + } + int lastIndexOf$ = lastIndexOfNon$ > 0 ? partAfterDot.lastIndexOf('$', lastIndexOfNon$ - 1): -1; String simpleNameCandidate = lastIndexOf$ >= 0 ? partAfterDot.substring(lastIndexOf$ + 1) : partAfterDot; for (int i = 0; i < simpleNameCandidate.length(); i++) { diff --git a/archunit/src/test/java/com/tngtech/archunit/core/domain/FormattersTest.java b/archunit/src/test/java/com/tngtech/archunit/core/domain/FormattersTest.java index 4eef0db7a..cc61796b8 100644 --- a/archunit/src/test/java/com/tngtech/archunit/core/domain/FormattersTest.java +++ b/archunit/src/test/java/com/tngtech/archunit/core/domain/FormattersTest.java @@ -62,8 +62,13 @@ public static Object[][] simple_name_test_cases() { $("", ""), $("Dummy", "Dummy"), $("org.example.Dummy", "Dummy"), + $("org.example.Dummy$", "Dummy$"), + $("org.example.Dummy$$", "Dummy$$"), + $("org.example.Dummy$$$", "Dummy$$$"), + $("org.example.$$$", "$$$"), $("org.example.Dummy$123", ""), $("org.example.Dummy$NestedClass", "NestedClass"), + $("org.example.Dummy$NestedClass$", "NestedClass$"), $("org.example.Dummy$NestedClass123", "NestedClass123"), $("org.example.Dummy$NestedClass$123", ""), $("org.example.Dummy$NestedClass$MoreNestedClass", "MoreNestedClass"),