Author: davidb Date: Fri Nov 17 05:08:44 2017 New Revision: 1815548 URL: http://svn.apache.org/viewvc?rev=1815548&view=rev Log: Updates to the Converter to handle name mangling better.
Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Util.java felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/MyDTO7.java Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java?rev=1815548&r1=1815547&r2=1815548&view=diff ============================================================================== --- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java (original) +++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java Fri Nov 17 05:08:44 2017 @@ -436,9 +436,9 @@ class ConvertingImpl extends AbstractSpe else if (targetAsDTO || DTOUtil.isDTOType(targetAsClass)) return convertToDTO(sourceClass, targetAsClass); else if (targetAsClass.isInterface()) - return createInterface(sourceClass, targetAsClass); + return convertToInterface(sourceClass, targetAsClass); else if (targetAsJavaBean) - return createJavaBean(sourceClass, targetAsClass); + return convertToJavaBean(sourceClass, targetAsClass); throw new ConversionException("Cannot convert " + object + " to " + targetAsClass); } @@ -463,7 +463,9 @@ class ConvertingImpl extends AbstractSpe })); } - private Object createJavaBean(Class<?> sourceCls, Class<?> targetCls) { + private Object convertToJavaBean(Class<?> sourceCls, Class<?> targetCls) { + String prefix = Util.getPrefix(targetCls); + @SuppressWarnings("rawtypes") Map m = mapView(object, sourceCls, converter); try { @@ -475,7 +477,10 @@ class ConvertingImpl extends AbstractSpe propName.append(setterName.substring(4)); Class<?> setterType = setter.getParameterTypes()[0]; - setter.invoke(res, converter.convert(m.get(propName.toString())).to(setterType)); + String key = propName.toString(); + Object val = m + .get(Util.unMangleName(prefix, key)); + setter.invoke(res, converter.convert(val).to(setterType)); } return res; } catch (Exception e) { @@ -485,7 +490,7 @@ class ConvertingImpl extends AbstractSpe } @SuppressWarnings("rawtypes") - private Object createInterface(Class<?> sourceCls, final Class<?> targetCls) { + private Object convertToInterface(Class<?> sourceCls, final Class<?> targetCls) { InternalConverting ic = converter.convert(object); ic.sourceAs(sourceAsClass); if (sourceAsDTO) Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Util.java URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Util.java?rev=1815548&r1=1815547&r2=1815548&view=diff ============================================================================== --- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Util.java (original) +++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/Util.java Fri Nov 17 05:08:44 2017 @@ -126,7 +126,8 @@ class Util { if (propStr.length() > 1) propName.append(propStr.substring(1)); - return propName.toString(); + return unMangleName( + getPrefix(md.getDeclaringClass()), propName.toString()); } @@ -326,6 +327,7 @@ class Util { String res = key.replace("_", "__"); res = res.replace("$", "$$"); + res = res.replace("-", "$_$"); res = res.replaceAll("[.]([._])", "_\\$$1"); res = res.replace('.', '_'); // TODO handle Java keywords @@ -333,10 +335,12 @@ class Util { } static String unMangleName(String prefix, String key) { - String res = key.replaceAll("_\\$", "."); + String res = key; + res = res.replace("$$", "\b"); // park double dollar as backspace char + res = res.replace("$_$", "-"); + res = res.replaceAll("_\\$", "."); res = res.replace("__", "\f"); // park double underscore as formfeed char res = res.replace('_', '.'); - res = res.replace("$$", "\b"); // park double dollar as backspace char res = res.replace("$", ""); res = res.replace('\f', '_'); // convert formfeed char back to single underscore res = res.replace('\b', '$'); // convert backspace char back go dollar Modified: felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java?rev=1815548&r1=1815547&r2=1815548&view=diff ============================================================================== --- felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java (original) +++ felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java Fri Nov 17 05:08:44 2017 @@ -824,6 +824,8 @@ public class ConverterTest { m.put("three_.prop", "hi ha ho"); m.put("four._prop", ""); m.put("five..prop", "test"); + m.put("six-prop", "987"); + m.put("seven$.prop", "3.141"); MyDTO7 dto = converter.convert(m).to(MyDTO7.class); assertEquals("test123", dto.org_osgi_framework_uuid); @@ -835,6 +837,8 @@ public class ConverterTest { assertEquals("hi ha ho", dto.three___prop); assertEquals("", dto.four_$__prop); assertEquals("test", dto.five_$_prop); + assertEquals((short) 987, dto.six$_$prop); + dto.seven$$_$prop = 3.141; // And convert back Map<String, String> m2 = converter.convert(dto).to(new TypeReference<Map<String,String>>() {}); Modified: felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/MyDTO7.java URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/MyDTO7.java?rev=1815548&r1=1815547&r2=1815548&view=diff ============================================================================== --- felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/MyDTO7.java (original) +++ felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/MyDTO7.java Fri Nov 17 05:08:44 2017 @@ -26,4 +26,6 @@ public class MyDTO7 { public String three___prop; public String four_$__prop; public String five_$_prop; + public short six$_$prop; + public double seven$$_$prop; }