From 9d94f8b34d6b3281dc1785e016e61b1e1910d608 Mon Sep 17 00:00:00 2001 From: Sergey Vasiliev Date: Tue, 31 Jul 2007 15:40:55 +0400 Subject: [PATCH] IDEADEV-19595 && IDEADEV-17359 --- .../xml/impl/CollectionChildDescriptionImpl.java | 4 ++-- .../generate/DefaultGenerateElementProvider.java | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/dom/impl/src/com/intellij/util/xml/impl/CollectionChildDescriptionImpl.java b/dom/impl/src/com/intellij/util/xml/impl/CollectionChildDescriptionImpl.java index 93c45ab361..9ea3b73137 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/CollectionChildDescriptionImpl.java +++ b/dom/impl/src/com/intellij/util/xml/impl/CollectionChildDescriptionImpl.java @@ -5,8 +5,8 @@ package com.intellij.util.xml.impl; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.ArrayUtil; -import com.intellij.util.IncorrectOperationException; import com.intellij.util.Function; +import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.xml.*; import com.intellij.util.xml.reflect.DomCollectionChildDescription; @@ -97,7 +97,7 @@ public class CollectionChildDescriptionImpl extends DomChildDescriptionImpl impl } public final DomElement addValue(DomElement parent, Type type, int index) { - return addChild(parent, type, Integer.MAX_VALUE); + return addChild(parent, type, index); } @Nullable diff --git a/dom/openapi/src/com/intellij/util/xml/ui/actions/generate/DefaultGenerateElementProvider.java b/dom/openapi/src/com/intellij/util/xml/ui/actions/generate/DefaultGenerateElementProvider.java index 36c9d1841c..88a8d0ec71 100644 --- a/dom/openapi/src/com/intellij/util/xml/ui/actions/generate/DefaultGenerateElementProvider.java +++ b/dom/openapi/src/com/intellij/util/xml/ui/actions/generate/DefaultGenerateElementProvider.java @@ -3,6 +3,7 @@ package com.intellij.util.xml.ui.actions.generate; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; +import com.intellij.psi.xml.XmlElement; import com.intellij.util.ReflectionUtil; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.reflect.DomCollectionChildDescription; @@ -38,11 +39,26 @@ public abstract class DefaultGenerateElementProvider exten for (DomCollectionChildDescription childDescription : list) { if (ReflectionUtil.getRawType(childDescription.getType()).isAssignableFrom(myChildElementClass)) { - return (T)childDescription.addValue(parent, myChildElementClass); + int index = getCollectionIndex(parent, childDescription, editor); + + return index < 0 ? (T)childDescription.addValue(parent, myChildElementClass) : (T)childDescription.addValue(parent, myChildElementClass, index) ; } } } - return null; } + + private static int getCollectionIndex(final DomElement parent, final DomCollectionChildDescription childDescription, final Editor editor) { + int offset = editor.getCaretModel().getOffset(); + + for (int i = 0; i < childDescription.getValues(parent).size(); i++) { + DomElement element = childDescription.getValues(parent).get(i); + XmlElement xmlElement = element.getXmlElement(); + if (xmlElement != null && xmlElement.getTextRange().getStartOffset() >= offset) { + return i; + } + } + + return -1; + } } -- 2.11.4.GIT