mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
lazy DomUIFactory
This commit is contained in:
@@ -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 {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user