diff --git a/platform/configuration-store-impl/testSrc/xml/XmlSerializerOldMapAnnotationTest.kt b/platform/configuration-store-impl/testSrc/xml/XmlSerializerOldMapAnnotationTest.kt
index 1ba5f595f5a8..2011a07daeff 100644
--- a/platform/configuration-store-impl/testSrc/xml/XmlSerializerOldMapAnnotationTest.kt
+++ b/platform/configuration-store-impl/testSrc/xml/XmlSerializerOldMapAnnotationTest.kt
@@ -1,18 +1,4 @@
-/*
- * Copyright 2000-2016 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.configurationStore.xml
import com.intellij.util.xmlb.SkipDefaultsSerializationFilter
@@ -163,4 +149,25 @@ internal class XmlSerializerOldMapAnnotationTest {
testSerializer("\n \n \n \n", bean)
}
+
+ @Test fun `propertyWithoutSurroundingElement`() {
+ @Tag("branch-storage")
+ class BranchStorage {
+ @Property(surroundWithTag = false)
+ @MapAnnotation(keyAttributeName = "type")
+ @JvmField
+ var branches = THashMap()
+ }
+
+ val bean = BranchStorage()
+ bean.branches.put("branchName", "foo")
+
+ testSerializer("""
+
+
+
+ """, bean, SkipDefaultsSerializationFilter())
+ }
}
\ No newline at end of file
diff --git a/platform/util/src/com/intellij/util/xmlb/AccessorBindingWrapper.java b/platform/util/src/com/intellij/util/xmlb/AccessorBindingWrapper.java
index b0dc703cce08..bff0f7a428b4 100644
--- a/platform/util/src/com/intellij/util/xmlb/AccessorBindingWrapper.java
+++ b/platform/util/src/com/intellij/util/xmlb/AccessorBindingWrapper.java
@@ -123,7 +123,7 @@ class AccessorBindingWrapper extends Binding implements MultiNodeBinding {
@Override
public boolean isBoundTo(@NotNull Element element) {
if (myBinding instanceof MapBinding) {
- return element.getName().equals(((MapBinding)myBinding).getEntryElementName());
+ return ((MapBinding)myBinding).isBoundToWithoutProperty(element);
}
else {
return myBinding.isBoundTo(element);
diff --git a/platform/util/src/com/intellij/util/xmlb/MapBinding.java b/platform/util/src/com/intellij/util/xmlb/MapBinding.java
index 9a24979a5ff8..d42a274d04c8 100644
--- a/platform/util/src/com/intellij/util/xmlb/MapBinding.java
+++ b/platform/util/src/com/intellij/util/xmlb/MapBinding.java
@@ -258,6 +258,19 @@ class MapBinding extends Binding implements MultiNodeBinding {
return oldAnnotation == null || oldAnnotation.surroundKeyWithTag();
}
+ boolean isBoundToWithoutProperty(@NotNull Element element) {
+ String elementName = element.getName();
+ if (annotation != null) {
+ return elementName.equals(annotation.entryTagName());
+ }
+ else if (oldAnnotation != null && !oldAnnotation.surroundWithTag()) {
+ return elementName.equals(oldAnnotation.entryTagName());
+ }
+ else {
+ return elementName.equals(MAP);
+ }
+ }
+
@Override
public boolean isBoundTo(@NotNull Element element) {
if (oldAnnotation != null && !oldAnnotation.surroundWithTag()) {