diff --git a/platform/util/src/com/intellij/util/xmlb/TextBinding.java b/platform/util/src/com/intellij/util/xmlb/TextBinding.java
index a195b3b6b134..57cc3ef79315 100644
--- a/platform/util/src/com/intellij/util/xmlb/TextBinding.java
+++ b/platform/util/src/com/intellij/util/xmlb/TextBinding.java
@@ -32,6 +32,7 @@ public class TextBinding implements Binding {
@Override
public Object serialize(Object o, Object context, SerializationFilter filter) {
final Object v = myAccessor.read(o);
+ if (v == null) return context;
final Object node = myBinding.serialize(v, context, filter);
return new Text(((Content)node).getValue());
diff --git a/platform/util/testSrc/com/intellij/util/xmlb/XmlSerializerTest.java b/platform/util/testSrc/com/intellij/util/xmlb/XmlSerializerTest.java
index d70588834481..7a147e074468 100644
--- a/platform/util/testSrc/com/intellij/util/xmlb/XmlSerializerTest.java
+++ b/platform/util/testSrc/com/intellij/util/xmlb/XmlSerializerTest.java
@@ -1029,6 +1029,31 @@ public class XmlSerializerTest extends TestCase {
}
}
+ public static class ConversionFromTextToAttributeBean {
+ @Property(surroundWithTag = false)
+ public ConditionBean myConditionBean = new ConditionBean();
+ }
+ @Tag("condition")
+ public static class ConditionBean {
+ @Attribute("expression")
+ public String myNewCondition;
+ @Text
+ public String myOldCondition;
+ }
+
+ public void testConversionFromTextToAttribute() {
+ ConversionFromTextToAttributeBean bean = new ConversionFromTextToAttributeBean();
+ bean.myConditionBean.myOldCondition = "2+2";
+ doSerializerTest("\n" +
+ " 2+2\n" +
+ "", bean);
+
+ bean = new ConversionFromTextToAttributeBean();
+ bean.myConditionBean.myNewCondition = "2+2";
+ doSerializerTest("\n" +
+ " \n" +
+ "", bean);
+ }
public void testDeserializeInto() throws Exception {
BeanWithPublicFields bean = new BeanWithPublicFields();