summaryrefslogtreecommitdiff
path: root/platform/platform-impl/src/com/intellij/openapi/options/ex
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-impl/src/com/intellij/openapi/options/ex')
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java7
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java26
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/options/ex/NodeConfigurable.java71
3 files changed, 101 insertions, 3 deletions
diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java
index c06dbee44c1a..429a55b2b809 100644
--- a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java
+++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java
@@ -71,7 +71,7 @@ public class ConfigurableExtensionPointUtil {
idToConfigurable.put(parentId, parent.addChild(wrapper));
}
else {
- LOG.error("Can't find parent for " + parentId + " (" + wrapper + ")");
+ LOG.debug("Can't find parent for " + parentId + " (" + wrapper + ")");
}
}
}
@@ -79,8 +79,9 @@ public class ConfigurableExtensionPointUtil {
for (final Iterator<String> iterator = idToConfigurable.keySet().iterator(); iterator.hasNext(); ) {
final String key = iterator.next();
final ConfigurableWrapper wrapper = idToConfigurable.get(key);
- if (wrapper.getParentId() != null) {
- iterator.remove();
+ final String parentId = wrapper.getParentId();
+ if (parentId != null && idToConfigurable.containsKey(parentId)) {
+ iterator.remove(); // remove only processed parents
}
}
ContainerUtil.addAll(result, idToConfigurable.values());
diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java
index f465e2d0fecb..f1411cf3551d 100644
--- a/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java
+++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java
@@ -18,9 +18,11 @@ package com.intellij.openapi.options.ex;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurableGroup;
import com.intellij.openapi.options.OptionsBundle;
+import com.intellij.openapi.options.SearchableConfigurable;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map.Entry;
public final class MixedConfigurableGroup implements ConfigurableGroup {
@@ -66,6 +68,16 @@ public final class MixedConfigurableGroup implements ConfigurableGroup {
}
list.add(configurable);
}
+ ArrayList<Configurable> buildList = map.get("build");
+ if (buildList != null) {
+ NodeConfigurable buildTools = new NodeConfigurable("build.tools");
+ buildTools.add(find("MavenSettings", buildList.iterator()));
+ buildTools.add(find("reference.settingsdialog.project.gradle", buildList.iterator()));
+ buildTools.add(find("reference.settingsdialog.project.gant", buildList.iterator()));
+ if (buildTools.getConfigurables() != null) {
+ buildList.add(0, buildTools);
+ }
+ }
ArrayList<ConfigurableGroup> groups = new ArrayList<ConfigurableGroup>(map.size());
groups.add(new MixedConfigurableGroup("appearance", map));
groups.add(new MixedConfigurableGroup("editor", map));
@@ -80,4 +92,18 @@ public final class MixedConfigurableGroup implements ConfigurableGroup {
groups.add(other);
return groups.toArray(new ConfigurableGroup[groups.size()]);
}
+
+ private static Configurable find(String id, Iterator<Configurable> iterator) {
+ while (iterator.hasNext()) {
+ Configurable configurable = iterator.next();
+ if (configurable instanceof SearchableConfigurable) {
+ SearchableConfigurable sc = (SearchableConfigurable)configurable;
+ if (id.equals(sc.getId())) {
+ iterator.remove();
+ return configurable;
+ }
+ }
+ }
+ return null;
+ }
}
diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/NodeConfigurable.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/NodeConfigurable.java
new file mode 100644
index 000000000000..6571c7a63746
--- /dev/null
+++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/NodeConfigurable.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2000-2014 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.
+ */
+package com.intellij.openapi.options.ex;
+
+import com.intellij.openapi.options.Configurable;
+import com.intellij.openapi.options.OptionsBundle;
+import com.intellij.openapi.options.SearchableConfigurable;
+import org.jetbrains.annotations.Nls;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.ArrayList;
+
+public final class NodeConfigurable extends SearchableConfigurable.Parent.Abstract {
+ private final ArrayList<Configurable> myConfigurables = new ArrayList<Configurable>();
+ private final String myId;
+
+ public NodeConfigurable(@NotNull String id) {
+ myId = id;
+ }
+
+ public void add(Configurable configurable) {
+ if (configurable != null) {
+ super.disposeUIResources();
+ myConfigurables.add(configurable);
+ }
+ }
+
+ @Override
+ public void disposeUIResources() {
+ super.disposeUIResources();
+ myConfigurables.clear();
+ }
+
+ @NotNull
+ @Override
+ public String getId() {
+ return myId;
+ }
+
+ @Nullable
+ @Override
+ public String getHelpTopic() {
+ return myId;
+ }
+
+ @Nls
+ @Override
+ public String getDisplayName() {
+ return OptionsBundle.message("node.configurable." + myId + ".display.name");
+ }
+
+ @Override
+ protected Configurable[] buildConfigurables() {
+ int size = myConfigurables.size();
+ return size == 0 ? null : myConfigurables.toArray(new Configurable[size]);
+ }
+}