diff --git a/java/java-impl/src/com/intellij/util/xml/impl/JavaDomApplicationComponent.java b/java/java-impl/src/com/intellij/util/xml/impl/JavaDomApplicationComponent.java index 63e5c0bdebd2..107095c4146d 100644 --- a/java/java-impl/src/com/intellij/util/xml/impl/JavaDomApplicationComponent.java +++ b/java/java-impl/src/com/intellij/util/xml/impl/JavaDomApplicationComponent.java @@ -17,6 +17,7 @@ package com.intellij.util.xml.impl; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiType; +import com.intellij.util.Consumer; import com.intellij.util.Function; import com.intellij.util.xml.*; import com.intellij.util.xml.converters.values.ClassValueConverter; @@ -28,8 +29,8 @@ import javax.swing.table.TableCellEditor; /** * @author peter */ -public class JavaDomApplicationComponent { - public JavaDomApplicationComponent(DomUIFactory factory, ConverterManager converterManager) { +public class JavaDomApplicationComponent implements Consumer { + public JavaDomApplicationComponent(ConverterManager converterManager) { converterManager.addConverter(PsiClass.class, new PsiClassConverter()); converterManager.addConverter(PsiType.class, new CanonicalPsiTypeConverterImpl()); converterManager.registerConverterImplementation(JvmPsiTypeConverter.class, new JvmPsiTypeConverterImpl()); @@ -40,6 +41,10 @@ public class JavaDomApplicationComponent { final ClassArrayConverter classArrayConverter = ClassArrayConverter.getClassArrayConverter(); converterManager.registerConverterImplementation(ClassArrayConverter.class, classArrayConverter); + } + + @Override + public void consume(DomUIFactory factory) { factory.registerCustomControl(PsiClass.class, new Function, BaseControl>() { public BaseControl fun(final DomWrapper wrapper) { return new PsiClassControl(wrapper, false); @@ -57,5 +62,4 @@ public class JavaDomApplicationComponent { } }); } - } \ No newline at end of file diff --git a/xml/dom-impl/src/META-INF/DomPlugin.xml b/xml/dom-impl/src/META-INF/DomPlugin.xml index 561d5a1a10bd..02f04bb99ed9 100644 --- a/xml/dom-impl/src/META-INF/DomPlugin.xml +++ b/xml/dom-impl/src/META-INF/DomPlugin.xml @@ -15,6 +15,8 @@ + diff --git a/xml/dom-impl/src/com/intellij/util/xml/ui/DomUIFactoryImpl.java b/xml/dom-impl/src/com/intellij/util/xml/ui/DomUIFactoryImpl.java index a03014ba0953..9952df687a7f 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/ui/DomUIFactoryImpl.java +++ b/xml/dom-impl/src/com/intellij/util/xml/ui/DomUIFactoryImpl.java @@ -23,12 +23,14 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.event.DocumentAdapter; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.impl.EditorComponentImpl; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.xml.XmlFile; import com.intellij.ui.BooleanTableCellEditor; import com.intellij.ui.UserActivityListener; import com.intellij.ui.UserActivityWatcher; +import com.intellij.util.Consumer; import com.intellij.util.Function; import com.intellij.util.ReflectionUtil; import com.intellij.util.containers.ClassMap; @@ -49,6 +51,7 @@ import java.lang.reflect.Type; * @author peter */ public class DomUIFactoryImpl extends DomUIFactory { + private final ClassMap, BaseControl>> myCustomControlCreators = new ClassMap, BaseControl>>(); private final ClassMap> myCustomCellEditorCreators = new ClassMap>(); @@ -65,6 +68,10 @@ public class DomUIFactoryImpl extends DomUIFactory { return new DefaultCellEditor(removeBorder(new JTextField())); } }); + Consumer[] extensions = Extensions.getExtensions(EXTENSION_POINT_NAME); + for (Consumer extension : extensions) { + extension.consume(this); + } } protected TableCellEditor createCellEditor(DomElement element, Class type) { diff --git a/xml/dom-openapi/src/com/intellij/util/xml/ui/DomUIFactory.java b/xml/dom-openapi/src/com/intellij/util/xml/ui/DomUIFactory.java index 941fc001694c..221b6f33e6ef 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/ui/DomUIFactory.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/ui/DomUIFactory.java @@ -17,8 +17,10 @@ package com.intellij.util.xml.ui; import com.intellij.codeHighlighting.BackgroundEditorHighlighter; import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.project.Project; import com.intellij.ui.UserActivityWatcher; +import com.intellij.util.Consumer; import com.intellij.util.Function; import com.intellij.util.ReflectionUtil; import com.intellij.util.ui.ColumnInfo; @@ -39,6 +41,9 @@ import java.lang.reflect.Type; * @author peter */ public abstract class DomUIFactory { + + public final static ExtensionPointName> EXTENSION_POINT_NAME = ExtensionPointName.create("com.intellij.dom.uiControlsProvider"); + public static Method GET_VALUE_METHOD = ReflectionUtil.getMethod(GenericDomValue.class, "getValue"); public static Method SET_VALUE_METHOD = findMethod(GenericDomValue.class, "setValue"); public static Method GET_STRING_METHOD = ReflectionUtil.getMethod(GenericDomValue.class, "getStringValue");