Properly show TipTexts again

refs #29
This commit is contained in:
Fabian Becker 2014-11-01 14:53:28 +01:00
parent 4909cdd6bc
commit cb83280a55
3 changed files with 16 additions and 37 deletions

View File

@ -7,12 +7,9 @@ import eva2.tools.SelectedTag;
import eva2.tools.StringTools;
import eva2.tools.Tag;
import eva2.util.annotation.Description;
import eva2.util.annotation.Parameter;
import java.beans.*;
import java.lang.annotation.Annotation;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
@ -985,30 +982,6 @@ public class BeanInspector {
}
}
/**
* Annotations on Fields are not retained when inherited. This method traverses the
* superclass hierarchy and looks for an annotation on a given field name.
*
* @param name Name of the field in the class
* @param c Class to start searching for the field with the annotation
* @param annotation The annotation to look for
* @param <T>
* @return Returns the annotation of the field if found, null otherwise
*/
public static <T extends Annotation> T getAnnotationFromField(final String name, final Class c, final Class<T> annotation) {
for (Field field : c.getDeclaredFields()) {
if (field.isAnnotationPresent(annotation) && field.getName().equals(name)) {
return field.getAnnotation(annotation);
}
}
if (!c.getSuperclass().equals(Object.class)) {
return getAnnotationFromField(name, c.getSuperclass(), annotation);
} else {
return null;
}
}
/**
* This method simply looks for an appropriate tiptext
*
@ -1021,12 +994,6 @@ public class BeanInspector {
String result = "";
String tipName = name + "TipText";
// Find by annotation
Parameter parameter = BeanInspector.getAnnotationFromField(name, target.getClass(), Parameter.class);
if (parameter != null) {
return parameter.description();
}
// Find by deprecated TipText method
for (MethodDescriptor method : methods) {
String mname = method.getDisplayName();

View File

@ -1,10 +1,10 @@
package eva2.gui;
import eva2.gui.editor.GenericObjectEditor;
import eva2.optimization.strategies.InterfaceOptimizer;
import eva2.tools.EVAHELP;
import eva2.util.annotation.Description;
import eva2.util.annotation.Hidden;
import eva2.util.annotation.Parameter;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
@ -16,7 +16,6 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.beans.*;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.EventObject;
@ -290,7 +289,13 @@ public final class PropertySheetPanel extends JPanel implements PropertyChangeLi
continue;
}
toolTips[itemIndex] = BeanInspector.getToolTipText(name, methodDescriptors, targetObject, stripToolTipToFirstPoint, tipTextLineLen);
// If the property's setter has the Parameter annotation use the description as tipText
if (propertyDescriptors[i].getWriteMethod() != null && propertyDescriptors[i].getWriteMethod().isAnnotationPresent(Parameter.class)) {
Parameter parameter = propertyDescriptors[i].getWriteMethod().getAnnotation(Parameter.class);
toolTips[itemIndex] = parameter.description();
} else {
toolTips[itemIndex] = BeanInspector.getToolTipText(name, methodDescriptors, targetObject);
}
itemIndex++;
newView = getView(propertyEditors[i]);
if (newView == null) {

View File

@ -7,6 +7,7 @@ import eva2.gui.PropertyEditorProvider;
import eva2.gui.PropertySheetPanel;
import eva2.gui.editor.GenericObjectEditor;
import eva2.tools.EVAHELP;
import eva2.util.annotation.Parameter;
import javax.swing.*;
import java.awt.*;
@ -265,7 +266,13 @@ public abstract class AbstractObjectEditor implements PropertyEditor, java.beans
result.propertyType = propertyDescriptor.getPropertyType();
result.name = propertyDescriptor.getDisplayName();
result.label = new JLabel(result.name, SwingConstants.RIGHT);
result.tipText = BeanInspector.getToolTipText(result.name, methods, target);
// If the property's setter has the Parameter annotation use the description as tipText
if (propertyDescriptor.getWriteMethod() != null && propertyDescriptor.getWriteMethod().isAnnotationPresent(Parameter.class)) {
Parameter parameter = propertyDescriptor.getWriteMethod().getAnnotation(Parameter.class);
result.tipText = parameter.description();
} else {
result.tipText = BeanInspector.getToolTipText(result.name, methods, target);
}
try {
result.value = result.getMethod.invoke(target, args);
result.editor = PropertyEditorProvider.findEditor(propertyDescriptor, result.value);