From 2fdd392e19dfad7f9d2365fffb7945f5b8049140 Mon Sep 17 00:00:00 2001 From: sjaakd Date: Wed, 21 Dec 2016 19:31:08 +0100 Subject: [PATCH] #941 adapting strategy naming of safe variable names --- .../mapstruct/ap/internal/util/Strings.java | 12 +++++++--- .../ap/internal/util/StringsTest.java | 24 ++++++++++++------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/processor/src/main/java/org/mapstruct/ap/internal/util/Strings.java b/processor/src/main/java/org/mapstruct/ap/internal/util/Strings.java index d0c6dcb63..a0bf265af 100644 --- a/processor/src/main/java/org/mapstruct/ap/internal/util/Strings.java +++ b/processor/src/main/java/org/mapstruct/ap/internal/util/Strings.java @@ -156,11 +156,17 @@ public class Strings { Set conflictingNames = new HashSet( KEYWORDS ); conflictingNames.addAll( existingVariableNames ); - while ( conflictingNames.contains( name ) ) { - name = name + "_"; + if ( !conflictingNames.contains( name ) ) { + return name; } - return name; + int c = 1; + String seperator = Character.isDigit( name.charAt( name.length() - 1 ) ) ? "_" : ""; + while ( conflictingNames.contains( name + seperator + c ) ) { + c++; + } + + return name + seperator + c; } /** diff --git a/processor/src/test/java/org/mapstruct/ap/internal/util/StringsTest.java b/processor/src/test/java/org/mapstruct/ap/internal/util/StringsTest.java index 2bf21b5e6..0ac09d1e8 100644 --- a/processor/src/test/java/org/mapstruct/ap/internal/util/StringsTest.java +++ b/processor/src/test/java/org/mapstruct/ap/internal/util/StringsTest.java @@ -73,21 +73,27 @@ public class StringsTest { @Test public void testGetSaveVariableNameWithArrayExistingVariables() throws Exception { assertThat( Strings.getSaveVariableName( "int[]" ) ).isEqualTo( "intArray" ); - assertThat( Strings.getSaveVariableName( "Extends" ) ).isEqualTo( "extends_" ); - assertThat( Strings.getSaveVariableName( "class" ) ).isEqualTo( "class_" ); - assertThat( Strings.getSaveVariableName( "Class" ) ).isEqualTo( "class_" ); - assertThat( Strings.getSaveVariableName( "Case" ) ).isEqualTo( "case_" ); - assertThat( Strings.getSaveVariableName( "Synchronized" ) ).isEqualTo( "synchronized_" ); - assertThat( Strings.getSaveVariableName( "prop", "prop", "prop_" ) ).isEqualTo( "prop__" ); + assertThat( Strings.getSaveVariableName( "Extends" ) ).isEqualTo( "extends1" ); + assertThat( Strings.getSaveVariableName( "class" ) ).isEqualTo( "class1" ); + assertThat( Strings.getSaveVariableName( "Class" ) ).isEqualTo( "class1" ); + assertThat( Strings.getSaveVariableName( "Case" ) ).isEqualTo( "case1" ); + assertThat( Strings.getSaveVariableName( "Synchronized" ) ).isEqualTo( "synchronized1" ); + assertThat( Strings.getSaveVariableName( "prop", "prop", "prop_" ) ).isEqualTo( "prop1" ); + } + + @Test + public void testGetSaveVariableNameVariablesEndingOnNumberVariables() throws Exception { + assertThat( Strings.getSaveVariableName( "prop1", "prop1" ) ).isEqualTo( "prop1_1" ); + assertThat( Strings.getSaveVariableName( "prop1", "prop1", "prop1_1" ) ).isEqualTo( "prop1_2" ); } @Test public void testGetSaveVariableNameWithCollection() throws Exception { assertThat( Strings.getSaveVariableName( "int[]", new ArrayList() ) ).isEqualTo( "intArray" ); - assertThat( Strings.getSaveVariableName( "Extends", new ArrayList() ) ).isEqualTo( "extends_" ); - assertThat( Strings.getSaveVariableName( "prop", Arrays.asList( "prop", "prop_" ) ) ).isEqualTo( "prop__" ); + assertThat( Strings.getSaveVariableName( "Extends", new ArrayList() ) ).isEqualTo( "extends1" ); + assertThat( Strings.getSaveVariableName( "prop", Arrays.asList( "prop", "prop1" ) ) ).isEqualTo( "prop2" ); assertThat( Strings.getSaveVariableName( "prop.font", Arrays.asList( "propFont", "propFont_" ) ) ) - .isEqualTo( "propFont__" ); + .isEqualTo( "propFont1" ); } @Test