Search in sources :

Example 1 with BeanInfo

use of java.beans.BeanInfo in project core-java by SpineEventEngine.

the class Columns method addToCache.

/**
     * Caches the {@linkplain Entity entity type} for further {@link Column Columns} retrieving.
     */
private static void addToCache(Class<? extends Entity> entityType) {
    final BeanInfo entityDescriptor;
    try {
        entityDescriptor = Introspector.getBeanInfo(entityType);
    } catch (IntrospectionException e) {
        throw new IllegalStateException(e);
    }
    for (PropertyDescriptor property : entityDescriptor.getPropertyDescriptors()) {
        final Method getter = property.getReadMethod();
        if (!ExcludedMethod.contain(getter.getName())) {
            final Column<?> storageField = Column.from(getter);
            knownEntityProperties.put(entityType, storageField);
        }
    }
}
Also used : PropertyDescriptor(java.beans.PropertyDescriptor) BeanInfo(java.beans.BeanInfo) IntrospectionException(java.beans.IntrospectionException) Method(java.lang.reflect.Method)

Example 2 with BeanInfo

use of java.beans.BeanInfo in project intellij-community by JetBrains.

the class Palette method getIntrospectedProperties.

/**
   * @return arrays of all properties that can be introspected from the
   * specified class. Only properties with getter and setter methods are
   * returned.
   */
@NotNull
public IntrospectedProperty[] getIntrospectedProperties(@NotNull final Class aClass, @NotNull final Class delegeeClass) {
    // TODO[vova, anton] update cache after class reloading (its properties could be hanged).
    if (myClass2Properties.containsKey(aClass)) {
        return myClass2Properties.get(aClass);
    }
    final ArrayList<IntrospectedProperty> result = new ArrayList<>();
    try {
        final BeanInfo beanInfo = Introspector.getBeanInfo(aClass);
        final PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
        for (final PropertyDescriptor descriptor : descriptors) {
            Method readMethod = descriptor.getReadMethod();
            Method writeMethod = descriptor.getWriteMethod();
            Class propertyType = descriptor.getPropertyType();
            if (writeMethod == null || readMethod == null || propertyType == null) {
                continue;
            }
            boolean storeAsClient = false;
            try {
                delegeeClass.getMethod(readMethod.getName(), readMethod.getParameterTypes());
                delegeeClass.getMethod(writeMethod.getName(), writeMethod.getParameterTypes());
            } catch (NoSuchMethodException e) {
                storeAsClient = true;
            }
            @NonNls final String name = descriptor.getName();
            final IntrospectedProperty property;
            final Properties properties = (myProject == null) ? new Properties() : Properties.getInstance();
            if (int.class.equals(propertyType)) {
                // int
                IntEnumEditor.Pair[] enumPairs = properties.getEnumPairs(aClass, name);
                if (enumPairs != null) {
                    property = createIntEnumProperty(name, readMethod, writeMethod, enumPairs);
                } else if (JLabel.class.isAssignableFrom(aClass)) {
                    // special handling for javax.swing.JLabel
                    if (JLabel.class.isAssignableFrom(aClass) && ("displayedMnemonic".equals(name) || "displayedMnemonicIndex".equals(name))) {
                        // skip JLabel#displayedMnemonic and JLabel#displayedMnemonicIndex
                        continue;
                    } else {
                        property = new IntroIntProperty(name, readMethod, writeMethod, storeAsClient);
                    }
                } else if (AbstractButton.class.isAssignableFrom(aClass)) {
                    // special handling AbstractButton subclasses
                    if ("mnemonic".equals(name) || "displayedMnemonicIndex".equals(name)) {
                        // AbstractButton#mnemonic
                        continue;
                    } else {
                        property = new IntroIntProperty(name, readMethod, writeMethod, storeAsClient);
                    }
                } else if (JTabbedPane.class.isAssignableFrom(aClass)) {
                    if (SwingProperties.SELECTED_INDEX.equals(name)) {
                        continue;
                    }
                    property = new IntroIntProperty(name, readMethod, writeMethod, storeAsClient);
                } else {
                    property = new IntroIntProperty(name, readMethod, writeMethod, storeAsClient);
                }
            } else if (boolean.class.equals(propertyType)) {
                // boolean
                property = new IntroBooleanProperty(name, readMethod, writeMethod, storeAsClient);
            } else if (double.class.equals(propertyType)) {
                property = new IntroPrimitiveTypeProperty(name, readMethod, writeMethod, storeAsClient, Double.class);
            } else if (float.class.equals(propertyType)) {
                property = new IntroPrimitiveTypeProperty(name, readMethod, writeMethod, storeAsClient, Float.class);
            } else if (long.class.equals(propertyType)) {
                property = new IntroPrimitiveTypeProperty(name, readMethod, writeMethod, storeAsClient, Long.class);
            } else if (byte.class.equals(propertyType)) {
                property = new IntroPrimitiveTypeProperty(name, readMethod, writeMethod, storeAsClient, Byte.class);
            } else if (short.class.equals(propertyType)) {
                property = new IntroPrimitiveTypeProperty(name, readMethod, writeMethod, storeAsClient, Short.class);
            } else if (char.class.equals(propertyType)) {
                // java.lang.String
                property = new IntroCharProperty(name, readMethod, writeMethod, storeAsClient);
            } else if (String.class.equals(propertyType)) {
                // java.lang.String
                property = new IntroStringProperty(name, readMethod, writeMethod, myProject, storeAsClient);
            } else if (Insets.class.equals(propertyType)) {
                // java.awt.Insets
                property = new IntroInsetsProperty(name, readMethod, writeMethod, storeAsClient);
            } else if (Dimension.class.equals(propertyType)) {
                // java.awt.Dimension
                property = new IntroDimensionProperty(name, readMethod, writeMethod, storeAsClient);
            } else if (Rectangle.class.equals(propertyType)) {
                // java.awt.Rectangle
                property = new IntroRectangleProperty(name, readMethod, writeMethod, storeAsClient);
            } else if (Component.class.isAssignableFrom(propertyType)) {
                if (JSplitPane.class.isAssignableFrom(aClass) && (name.equals("leftComponent") || name.equals("rightComponent") || name.equals("topComponent") || name.equals("bottomComponent"))) {
                    // these properties are set through layout
                    continue;
                }
                if (JTabbedPane.class.isAssignableFrom(aClass) && name.equals(SwingProperties.SELECTED_COMPONENT)) {
                    // can't set selectedComponent because of set property / add child sequence
                    continue;
                }
                if (JMenuBar.class.isAssignableFrom(propertyType) || JPopupMenu.class.isAssignableFrom(propertyType)) {
                    // no menu editing yet
                    continue;
                }
                Condition<RadComponent> filter = null;
                if (name.equals(SwingProperties.LABEL_FOR)) {
                    filter = t -> {
                        ComponentItem item = getItem(t.getComponentClassName());
                        return item != null && item.isCanAttachLabel();
                    };
                }
                property = new IntroComponentProperty(name, readMethod, writeMethod, propertyType, filter, storeAsClient);
            } else if (Color.class.equals(propertyType)) {
                property = new IntroColorProperty(name, readMethod, writeMethod, storeAsClient);
            } else if (Font.class.equals(propertyType)) {
                property = new IntroFontProperty(name, readMethod, writeMethod, storeAsClient);
            } else if (Icon.class.equals(propertyType)) {
                property = new IntroIconProperty(name, readMethod, writeMethod, storeAsClient);
            } else if (ListModel.class.isAssignableFrom(propertyType)) {
                property = new IntroListModelProperty(name, readMethod, writeMethod, storeAsClient);
            } else if (Enum.class.isAssignableFrom(propertyType)) {
                property = new IntroEnumProperty(name, readMethod, writeMethod, storeAsClient, propertyType);
            } else {
                // other types are not supported (yet?)
                continue;
            }
            result.add(property);
        }
    } catch (IntrospectionException e) {
        throw new RuntimeException(e);
    }
    final IntrospectedProperty[] properties = result.toArray(new IntrospectedProperty[result.size()]);
    myClass2Properties.put(aClass, properties);
    return properties;
}
Also used : BeanInfo(java.beans.BeanInfo) ArrayList(java.util.ArrayList) RadComponent(com.intellij.uiDesigner.radComponents.RadComponent) IntrospectionException(java.beans.IntrospectionException) SwingProperties(com.intellij.uiDesigner.SwingProperties) Properties(com.intellij.uiDesigner.Properties) NonNls(org.jetbrains.annotations.NonNls) PropertyDescriptor(java.beans.PropertyDescriptor) Method(java.lang.reflect.Method) IntrospectedProperty(com.intellij.uiDesigner.propertyInspector.IntrospectedProperty) NotNull(org.jetbrains.annotations.NotNull)

Example 3 with BeanInfo

use of java.beans.BeanInfo in project intellij-community by JetBrains.

the class CreateListenerAction method prepareActionGroup.

private DefaultActionGroup prepareActionGroup(final List<RadComponent> selection) {
    final DefaultActionGroup actionGroup = new DefaultActionGroup();
    final EventSetDescriptor[] eventSetDescriptors;
    try {
        BeanInfo beanInfo = Introspector.getBeanInfo(selection.get(0).getComponentClass());
        eventSetDescriptors = beanInfo.getEventSetDescriptors();
    } catch (IntrospectionException e) {
        LOG.error(e);
        return null;
    }
    EventSetDescriptor[] sortedDescriptors = new EventSetDescriptor[eventSetDescriptors.length];
    System.arraycopy(eventSetDescriptors, 0, sortedDescriptors, 0, eventSetDescriptors.length);
    Arrays.sort(sortedDescriptors, (o1, o2) -> o1.getListenerType().getName().compareTo(o2.getListenerType().getName()));
    for (EventSetDescriptor descriptor : sortedDescriptors) {
        actionGroup.add(new MyCreateListenerAction(selection, descriptor));
    }
    return actionGroup;
}
Also used : BeanInfo(java.beans.BeanInfo) IntrospectionException(java.beans.IntrospectionException) DefaultActionGroup(com.intellij.openapi.actionSystem.DefaultActionGroup) EventSetDescriptor(java.beans.EventSetDescriptor)

Example 4 with BeanInfo

use of java.beans.BeanInfo in project kotlin by JetBrains.

the class Args method usage.

/**
     * Generate usage information based on the target annotations.
     *
     * @param errStream A {@link java.io.PrintStream} to print the usage information to.
     * @param target    An instance or class.
     */
public static void usage(PrintStream errStream, Object target) {
    Class<?> clazz;
    if (target instanceof Class) {
        clazz = (Class) target;
    } else {
        clazz = target.getClass();
    }
    errStream.println("Usage: " + clazz.getName());
    for (Class<?> currentClazz = clazz; currentClazz != null; currentClazz = currentClazz.getSuperclass()) {
        for (Field field : currentClazz.getDeclaredFields()) {
            fieldUsage(errStream, target, field);
        }
    }
    try {
        BeanInfo info = Introspector.getBeanInfo(clazz);
        for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
            propertyUsage(errStream, target, pd);
        }
    } catch (IntrospectionException e) {
    // If its not a JavaBean we ignore it
    }
}
Also used : Field(java.lang.reflect.Field) PropertyDescriptor(java.beans.PropertyDescriptor) BeanInfo(java.beans.BeanInfo) IntrospectionException(java.beans.IntrospectionException)

Example 5 with BeanInfo

use of java.beans.BeanInfo in project jdk8u_jdk by JetBrains.

the class Test4168475 method main.

public static void main(String[] args) throws IntrospectionException {
    Introspector.setBeanInfoSearchPath(PATH);
    BeanInfo info = Introspector.getBeanInfo(Component.class);
    PropertyDescriptor[] pds = info.getPropertyDescriptors();
    if (pds.length != 1) {
        throw new Error("wrong number of properties");
    }
    if (!pds[0].getName().equals("name")) {
        throw new Error("unexpected property name");
    }
}
Also used : PropertyDescriptor(java.beans.PropertyDescriptor) BeanInfo(java.beans.BeanInfo) ComponentBeanInfo(infos.ComponentBeanInfo)

Aggregations

BeanInfo (java.beans.BeanInfo)420 PropertyDescriptor (java.beans.PropertyDescriptor)328 Method (java.lang.reflect.Method)217 SimpleBeanInfo (java.beans.SimpleBeanInfo)167 FakeFox01BeanInfo (org.apache.harmony.beans.tests.support.mock.FakeFox01BeanInfo)161 IndexedPropertyDescriptor (java.beans.IndexedPropertyDescriptor)148 IntrospectionException (java.beans.IntrospectionException)115 InvocationTargetException (java.lang.reflect.InvocationTargetException)38 HashMap (java.util.HashMap)33 Test (org.junit.jupiter.api.Test)33 ArrayList (java.util.ArrayList)30 Field (java.lang.reflect.Field)17 Map (java.util.Map)17 Test (org.junit.Test)13 EventSetDescriptor (java.beans.EventSetDescriptor)12 MethodDescriptor (java.beans.MethodDescriptor)12 List (java.util.List)11 BeanDescriptor (java.beans.BeanDescriptor)10 HashSet (java.util.HashSet)8 Introspector (java.beans.Introspector)7