Python stubs: remove 3.6.8 version and add 3.9.0
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / components / StateSplitterEx.java
1 // 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.
2 package com.intellij.openapi.components;
3
4 import com.intellij.openapi.util.JDOMUtil;
5 import com.intellij.openapi.util.Pair;
6 import com.intellij.openapi.util.io.FileUtil;
7 import com.intellij.util.SmartList;
8 import com.intellij.util.text.UniqueNameGenerator;
9 import org.jdom.Element;
10 import org.jetbrains.annotations.NotNull;
11 import org.jetbrains.jps.model.serialization.SerializationConstants;
12
13 import java.util.List;
14
15 @SuppressWarnings("deprecation")
16 public abstract class StateSplitterEx implements StateSplitter {
17   @NotNull
18   @Override
19   public abstract List<Pair<Element, String>> splitState(@NotNull Element state);
20
21   public void mergeStateInto(@NotNull Element target, @NotNull Element subState) {
22     target.addContent(subState);
23   }
24
25   @Override
26   public final void mergeStatesInto(@NotNull Element target, Element @NotNull [] elements) {
27     throw new IllegalStateException();
28   }
29
30   @NotNull
31   protected static List<Pair<Element, String>> splitState(@NotNull Element state, @NotNull String attributeName) {
32     UniqueNameGenerator generator = new UniqueNameGenerator();
33     List<Pair<Element, String>> result = new SmartList<>();
34     for (Element subState : state.getChildren()) {
35       if (subState.getAttribute(SerializationConstants.EXTERNAL_SYSTEM_ID_ATTRIBUTE) == null) {
36         result.add(createItem(subState.getAttributeValue(attributeName), generator, subState));
37       }
38     }
39     return result;
40   }
41
42   @NotNull
43   protected static Pair<Element, String> createItem(@NotNull String fileName, @NotNull UniqueNameGenerator generator, @NotNull Element element) {
44     return Pair.create(element, generator.generateUniqueName(FileUtil.sanitizeFileName(fileName)) + ".xml");
45   }
46
47   protected static void mergeStateInto(@NotNull Element target, @NotNull Element subState, @NotNull String subStateName) {
48     if (subState.getName().equals(subStateName)) {
49       target.addContent(subState);
50     }
51     else {
52       JDOMUtil.merge(target, subState);
53     }
54   }
55 }