lazy DomUIFactory

This commit is contained in:
Dmitry Avdeev
2011-06-06 12:51:51 +04:00
parent b8f647d578
commit 6bc70372b9
4 changed files with 21 additions and 3 deletions
@@ -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<DomUIFactory> {
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<DomWrapper<String>, BaseControl>() {
public BaseControl fun(final DomWrapper<String> wrapper) {
return new PsiClassControl(wrapper, false);
@@ -57,5 +62,4 @@ public class JavaDomApplicationComponent {
}
});
}
}
+2
View File
@@ -15,6 +15,8 @@
<extensionPoint name="dom.customAnnotationChecker"
interface="com.intellij.util.xml.highlighting.DomCustomAnnotationChecker"/>
<extensionPoint name="dom.uiControlsProvider"
interface="com.intellij.util.Consumer"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
@@ -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<Function<DomWrapper<String>, BaseControl>> myCustomControlCreators = new ClassMap<Function<DomWrapper<String>, BaseControl>>();
private final ClassMap<Function<DomElement, TableCellEditor>> myCustomCellEditorCreators = new ClassMap<Function<DomElement, TableCellEditor>>();
@@ -65,6 +68,10 @@ public class DomUIFactoryImpl extends DomUIFactory {
return new DefaultCellEditor(removeBorder(new JTextField()));
}
});
Consumer<DomUIFactory>[] extensions = Extensions.getExtensions(EXTENSION_POINT_NAME);
for (Consumer<DomUIFactory> extension : extensions) {
extension.consume(this);
}
}
protected TableCellEditor createCellEditor(DomElement element, Class type) {
@@ -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<Consumer<DomUIFactory>> 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");