Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo')
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/BeanRecord.java53
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/EventSetRecord.java37
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/FeatureAttributeValue.java785
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/FeatureRecord.java41
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/IBeanInfoIntrospectionConstants.java129
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/IndexedPropertyRecord.java32
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/InvalidObject.java53
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/MethodRecord.java38
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ParameterRecord.java32
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/PropertyRecord.java37
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ReflectFieldRecord.java35
-rw-r--r--plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ReflectMethodRecord.java35
12 files changed, 0 insertions, 1307 deletions
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/BeanRecord.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/BeanRecord.java
deleted file mode 100644
index 724b0d811..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/BeanRecord.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-
-/**
- * This is the data structure for sending the BeanDescriptor info from
- * the BeanInfo vm to the IDE vm. It is serializable so that it can
- * be serialized for transmission.
- * <p>
- * It contains the properties of the BeanDescriptor.
- * @since 1.1.0
- */
-public class BeanRecord extends FeatureRecord {
-
- private static final long serialVersionUID = 1105979920664L;
-
- public String customizerClassName;
- public boolean mergeInheritedProperties;
- public boolean mergeInheritedOperations;
- public boolean mergeInheritedEvents;
- /**
- * Names of properties that are to not be inherited in getAllProperties(). It is set only
- * if the list is not the full list of inherited properties.
- * If all inherited or mergeInheritedProperties is false, then the field will be <code>null</code>. Save space that way.
- */
- public String[] notInheritedPropertyNames;
- /**
- * Names of operations that are to not be inherited in getEAllOperations(). It is set only
- * if the list is not the full list of inherited operations.
- * If all are inherited or if mergeInheritedOperations is false, then the field will be <code>null</code>. Save space that way.
- */
- public String[] notInheritedOperationNames;
- /**
- * Names of events that are to not be inherited in getAllEvents(). It is set only
- * if the list is not the full list of inherited events.
- * If all are inherited or if mergeInheritedEvents is false, then the field will be <code>null</code>. Save space that way.
- */
- public String[] notInheritedEventNames;
-
-}
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/EventSetRecord.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/EventSetRecord.java
deleted file mode 100644
index b235382cc..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/EventSetRecord.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-
-/**
- * This is the data structure for sending the EventSetDescriptor info from
- * the BeanInfo vm to the IDE vm. It is serializable so that it can
- * be serialized for transmission.
- * <p>
- * It contains the properties of the EventSetDescriptor.
- * @since 1.1.0
- */
-public class EventSetRecord extends FeatureRecord {
-
- private static final long serialVersionUID = 1105980773420L;
-
- public ReflectMethodRecord addListenerMethod;
- public String eventAdapterClassName;
- public MethodRecord[] listenerMethodDescriptors;
- public String listenerTypeName;
- public ReflectMethodRecord removeListenerMethod;
- public boolean inDefaultEventSet;
- public boolean unicast;
-}
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/FeatureAttributeValue.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/FeatureAttributeValue.java
deleted file mode 100644
index 860b55f96..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/FeatureAttributeValue.java
+++ /dev/null
@@ -1,785 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-import java.io.*;
-import java.lang.reflect.*;
-import java.util.Arrays;
-import java.util.logging.Level;
-import java.util.regex.Pattern;
-
-import org.eclipse.jem.internal.proxy.common.MapTypes;
-
-
-
-/**
- * This is the value for a FeatureAttribute. It wrappers the true java object.
- * Use the getObject method to get the java value.
- * <p>
- * We can only represent Strings, primitives, and arrays. (Primitives will converted
- * to their wrapper class (e.g. Long), and byte, short, and int will move up to Long,
- * and float will move up to Double). And any kind of valid array on the java BeanInfo side
- * will be converted to an Object array on the IDE side. We don't have the capability to allow more complex objects
- * because the IDE may not have the necessary classes available to it that
- * the BeanInfo may of had available to it. Invalid objects will be represented
- * by the singleton instance of {@link org.eclipse.jem.internal.beaninfo.common.InvalidObject}.
- * <p>
- * <b>Note:</b>
- * Class objects that are values of Feature attributes on the java BeanInfo side will be
- * converted to simple strings containing the classname when moved to the client (IDE) side.
- * That is because the classes probably will not be available on the IDE side, but can be
- * used to reconstruct the class when used back on the java vm side.
- * @since 1.1.0
- */
-public class FeatureAttributeValue implements Serializable {
-
- private transient Object value;
- private transient Object internalValue;
- private boolean implicitValue;
- private static final long serialVersionUID = 1105717634844L;
-
- /**
- * Create the value with the given init string.
- * <p>
- * This is not meant to be used by clients.
- * @param initString
- *
- * @since 1.1.0
- */
- public FeatureAttributeValue(String initString) {
- // Use the init string to create the value. This is our
- // own short-hand for this.
- if (initString.startsWith(IMPLICIT)) {
- setImplicitValue(true);
- initString = initString.substring(IMPLICIT.length());
- }
- value = parseString(initString);
- }
-
- /**
- * This is used when customer wants to fluff one up.
- *
- *
- * @since 1.1.0
- */
- public FeatureAttributeValue() {
-
- }
-
- /**
- * @return Returns the value.
- *
- * @since 1.1.0
- */
- public Object getValue() {
- return value;
- }
-
- /**
- * Set a value.
- * @param value The value to set.
- * @since 1.1.0
- */
- public void setValue(Object value) {
- this.value = value;
- this.setInternalValue(null);
- }
-
- /**
- * Set the internal value.
- * @param internalValue The internalValue to set.
- *
- * @since 1.1.0
- */
- public void setInternalValue(Object internalValue) {
- this.internalValue = internalValue;
- }
-
- /**
- * This is the internal value. It is the <code>value</code> massaged into an easier to use form
- * in the IDE. It will not be serialized out. It will not be reconstructed from an init string.
- * <p>
- * It does not need to be used. It will be cleared if
- * a new value is set. For example, if the value is a complicated array (because you can't have
- * special classes in the attribute value on the BeanInfo side) the first usage of this value can
- * be translated into an easier form to use, such as a map.
- *
- * @return Returns the internalValue.
- *
- * @since 1.1.0
- */
- public Object getInternalValue() {
- return internalValue;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- public String toString() {
- if (value == null)
- return super.toString();
- StringBuffer out = new StringBuffer(100);
- if (isImplicitValue())
- out.append(IMPLICIT);
- makeString(value, out);
- return out.toString();
- }
-
-
- /**
- * Helper method to take the object and turn it into the
- * string form that is required for EMF serialization.
- * <p>
- * This is used internally. It can be used for development
- * purposes by clients, but they would not have any real
- * runtime need for this.
- * <p>
- * Output format would be (there won't be any newlines in the actual string)
- * <pre>
- * String: "zxvzxv"
- * Number: number
- * Boolean: true or false
- * Character: 'c'
- * null: null
- *
- * Array: (all arrays will be turned into Object[])
- * [dim]{e1, e2}
- * [dim1][dim2]{[dim1a]{e1, e2}, [dim2a]{e3, e4}}
- * where en are objects that follow the pattern for single output above.
- *
- * Any invalid object (i.e. not one of the ones we handle) will be:
- * INV
- *
- * Arrays of invalid types (not Object, String, Number, Boolean, Character,
- * or primitives) will be marked as INV.
- * </pre>
- * @param value
- * @return serialized form as a string.
- *
- * @since 1.1.0
- */
- public static String makeString(Object value) {
- StringBuffer out = new StringBuffer(100);
- makeString(value, out);
- return out.toString();
- }
-
- private static final Pattern QUOTE = Pattern.compile("\""); // Pattern for searching for double-quote. Make it static so don't waste time compiling each time. //$NON-NLS-1$
- private static final String NULL = "null"; // Output string for null //$NON-NLS-1$
- private static final String INVALID = "INV"; // Invalid object flag. //$NON-NLS-1$
- private static final String IMPLICIT = "implicit,"; // Implicit flag. //$NON-NLS-1$
-
- /*
- * Used for recursive building of the string.
- */
- private static void makeString(Object value, StringBuffer out) {
- if (value == null)
- out.append(NULL);
- else if (value instanceof String || value instanceof Class) {
- // String: "string" or "string\"stringend" if str included a double-quote.
- out.append('"');
- // If class, turn value into the classname.
- String str = value instanceof String ? (String) value : ((Class) value).getName();
- if (str.indexOf('"') != -1) {
- // Replace double-quote with escape double-quote so we can distinquish it from the terminating double-quote.
- out.append(QUOTE.matcher(str).replaceAll("\\\\\"")); // Don't know why we need the back-slash to be doubled for replaceall, but it doesn't work otherwise. //$NON-NLS-1$
- } else
- out.append(str);
- out.append('\"');
- } else if (value instanceof Number) {
- // Will go out as either a integer number or a floating point number.
- // When read back in it will be either a Long or a Double.
- out.append(value);
- } else if (value instanceof Boolean) {
- // It will go out as either true or false.
- out.append(value);
- } else if (value instanceof Character) {
- // Character: 'c' or '\'' if char was a quote.
- out.append('\'');
- Character c = (Character) value;
- if (c.charValue() != '\'')
- out.append(c.charValue());
- else
- out.append("\\'"); //$NON-NLS-1$
- out.append('\'');
- } else if (value.getClass().isArray()) {
- // Handle array format.
- Class type = value.getClass();
- // See if final type is a valid type.
- Class ft = type.getComponentType();
- int dims = 1;
- while (ft.isArray()) {
- dims++;
- ft = ft.getComponentType();
- }
- if (ft == Object.class || ft == String.class || ft == Boolean.class || ft == Character.class || ft.isPrimitive() || Number.class.isAssignableFrom(ft)) {
- // [length][][] {....}
- out.append('[');
- int length = Array.getLength(value);
- out.append(length);
- out.append(']');
- while(--dims > 0) {
- out.append("[]"); //$NON-NLS-1$
- }
- out.append('{');
- for (int i=0; i < length; i++) {
- if (i != 0)
- out.append(',');
- makeString(Array.get(value, i), out);
- }
- out.append('}');
- } else
- out.append(INVALID); // Any other kind of array is invalid.
- } else {
- out.append(INVALID);
- }
- }
-
-
- /**
- * Helper method to take the string input from EMF serialization and turn it
- * into an Object.
- * <p>
- * This is used internally. It can be used for development
- * purposes by clients, but they would not have any real
- * runtime need for this.
- * <p>
- * The object will be an object, null, or an Object array. Any value
- * that is invalid will be set to the {@link InvalidObject#INSTANCE} static
- * instance.
- *
- * @param input
- * @return object decoded from the input.
- *
- * @see #makeString(Object)
- * @since 1.1.0
- */
- public static Object parseString(String input) {
- return parseString(new StringParser(input));
- }
-
- private static class StringParser {
- private int next=0;
- private int length;
- private String input;
-
- public StringParser(String input) {
- this.input = input;
- this.length = input.length();
- }
-
- public String toString() {
- return "StringParser: \""+input+'"'; //$NON-NLS-1$
- }
-
- public void skipWhitespace() {
- while(next < length) {
- if (!Character.isWhitespace(input.charAt(next++))) {
- next--; // Put it back as not yet read since it is not whitespace.
- break;
- }
- }
- }
-
- /**
- * Return the next index
- * @return
- *
- * @since 1.1.0
- */
- public int nextIndex() {
- return next;
- }
-
- /**
- * Get the length of the input
- * @return input length
- *
- * @since 1.1.0
- */
- public int getLength() {
- return length;
- }
-
-
- /**
- * Read the current character and go to next.
- * @return current character
- *
- * @since 1.1.0
- */
- public char read() {
- return next<length ? input.charAt(next++) : 0;
- }
-
- /**
- * Backup the parser one character.
- *
- *
- * @since 1.1.0
- */
- public void backup() {
- if (--next < 0)
- next = 0;
- }
-
- /**
- * Peek at the char at the next index, but don't increment afterwards.
- * @return
- *
- * @since 1.1.0
- */
- public char peek() {
- return next<length ? input.charAt(next) : 0;
- }
-
- /**
- * Have we read the last char.
- * @return <code>true</code> if read last char.
- *
- * @since 1.1.0
- */
- public boolean atEnd() {
- return next>=length;
- }
-
- /**
- * Reset to the given next index.
- * @param nextIndex the next index to do a read at.
- *
- * @since 1.1.0
- */
- public void reset(int nextIndex) {
- if (nextIndex<=length)
- next = nextIndex;
- else
- next = length;
- }
-
- /**
- * Skip the next number of chars.
- * @param skip number of chars to skip.
- *
- * @since 1.1.0
- */
- public void skip(int skip) {
- if ((next+=skip) > length)
- next = length;
- }
-
- /**
- * Return the string input.
- * @return the string input
- *
- * @since 1.1.0
- */
- public String getInput() {
- return input;
- }
-
- }
-
- /*
- * Starting a parse for an object at the given index.
- * Return the parsed object or InvalidObject if no
- * object or if there was an error parsing.
- */
- private static Object parseString(StringParser parser) {
- parser.skipWhitespace();
- if (!parser.atEnd()) {
- char c = parser.read();
- switch (c) {
- case '"':
- // Start of a quoted string. Scan for closing quote, ignoring escaped quotes.
- int start = parser.nextIndex(); // Index of first char after '"'
- char[] dequoted = null; // Used if there is an escaped quote. That is the only thing we support escape on, quotes.
- int dequoteIndex = 0;
- while (!parser.atEnd()) {
- char cc = parser.read();
- if (cc == '"') {
- // If we didn't dequote, then just do substring.
- if (dequoted == null)
- return parser.getInput().substring(start, parser.nextIndex()-1); // next is char after '"', so end of string index is index of '"'
- else {
- // We have a dequoted string. So turn into a string.
- // Gather the last group
- int endNdx = parser.nextIndex()-1;
- parser.getInput().getChars(start, endNdx, dequoted, dequoteIndex);
- dequoteIndex+= (endNdx-start);
- return new String(dequoted, 0, dequoteIndex);
- }
- } else if (cc == '\\') {
- // We had an escape, see if next is a quote. If it is we need to strip out the '\'.
- if (parser.peek() == '"') {
- if (dequoted == null) {
- dequoted = new char[parser.getLength()];
- }
- int endNdx = parser.nextIndex()-1;
- parser.getInput().getChars(start, endNdx, dequoted, dequoteIndex); // Get up to, but not including '\'
- dequoteIndex+= (endNdx-start);
- // Now also add in the escaped quote.
- dequoted[dequoteIndex++] = parser.read();
- start = parser.nextIndex(); // Next group is from next index.
- }
- }
- }
- break; // If we got here, it is invalid.
-
- case '-':
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- // Possible number.
- // Scan to next non-digit, or not part of valid number.
- boolean numberComplete = false;
- boolean floatType = false;
- boolean foundE = false;
- boolean foundESign = false;
- start = parser.nextIndex()-1; // We want to include the sign or first digit in the number.
- while (!parser.atEnd() && !numberComplete) {
- char cc = parser.read();
- switch (cc) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- break; // This is good, go on.
- case '.':
- if (floatType)
- return InvalidObject.INSTANCE; // We already found a '.', two are invalid.
- floatType = true;
- break;
- case 'e':
- case 'E':
- if (foundE)
- return InvalidObject.INSTANCE; // We already found a 'e', two are invalid.
- foundE = true;
- floatType = true; // An 'e' makes it a float, if not already.
- break;
- case '+':
- case '-':
- if (!foundE || foundESign)
- return InvalidObject.INSTANCE; // A +/- with no 'e' first is invalid. Or more than one sign.
- foundESign = true;
- break;
- default:
- // Anything else is end of number.
- parser.backup(); // Back it up so that next parse will start with this char.
- numberComplete = true; // So we stop scanning
- break;
- }
- }
- try {
- if (!floatType)
- return Long.valueOf(parser.getInput().substring(start, parser.nextIndex()));
- else
- return Double.valueOf(parser.getInput().substring(start, parser.nextIndex()));
- } catch (NumberFormatException e) {
- }
- break; // If we got here, it is invalid.
-
- case 't':
- case 'T':
- case 'f':
- case 'F':
- // Possible boolean.
- if (parser.getInput().regionMatches(true, parser.nextIndex()-1, "true", 0, 4)) { //$NON-NLS-1$
- parser.skip(3); // Skip over rest of string.
- return Boolean.TRUE;
- } else if (parser.getInput().regionMatches(true, parser.nextIndex()-1, "false", 0, 5)) { //$NON-NLS-1$
- parser.skip(4); // Skip over rest of string.
- return Boolean.FALSE;
- }
- break; // If we got here, it is invalid.
-
- case '\'':
- // Possible character
- char cc = parser.read();
- // We really only support '\\' and '\'' anything else will be treated as ignore '\' because we don't know handle full escapes.
- if (cc == '\\')
- cc = parser.read(); // Get what's after it.
- else if (cc == '\'')
- break; // '' is invalid.
- if (parser.peek() == '\'') {
- // So next char after "character" is is a quote. This is good.
- parser.read(); // Now consume the quote
- return new Character(cc);
- }
- break; // If we got here, it is invalid.
-
- case 'n':
- // Possible null.
- if (parser.getInput().regionMatches(parser.nextIndex()-1, "null", 0, 4)) { //$NON-NLS-1$
- parser.skip(3); // Skip over rest of string.
- return null;
- }
- break; // If we got here, it is invalid.
-
- case 'I':
- // Possible invalid value.
- if (parser.getInput().regionMatches(parser.nextIndex()-1, INVALID, 0, INVALID.length())) {
- parser.skip(INVALID.length()-1); // Skip over rest of string.
- return InvalidObject.INSTANCE;
- }
- break; // If we got here, it is invalid.
-
- case '[':
- // Possible array.
- // The next field should be a number, so we'll use parseString to get the number.
- Object size = parseString(parser);
- if (size instanceof Long) {
- parser.skipWhitespace();
- cc = parser.read(); // Se if next is ']'
- if (cc == ']') {
- // Good, well-formed first dimension
- int dim = 1;
- boolean valid = true;
- // See if there are more of just "[]". the number of them is the dim.
- while (true) {
- parser.skipWhitespace();
- cc = parser.read();
- if (cc == '[') {
- parser.skipWhitespace();
- cc = parser.read();
- if (cc == ']')
- dim++;
- else {
- // This is invalid.
- valid = false;
- parser.backup();
- break; // No more dims.
- }
- } else {
- parser.backup();
- break; // No more dims.
- }
- }
- if (valid) {
- parser.skipWhitespace();
- cc = parser.read();
- if (cc == '{') {
- // Good, we're at the start of the initialization code.
- int[] dims = new int[dim];
- int len = ((Long) size).intValue();
- dims[0] = len;
- Object array = Array.newInstance(Object.class, dims);
- Arrays.fill((Object[]) array, null); // Because newInstance used above fills the array created with empty arrays when a dim>1.
-
- // Now we start filling it in.
- Object invSetting = null; // What we will use for the invalid setting. If this is a multidim, this needs to be an array. Will not create it until needed.
- Object entry = parseString(parser); // Get the first entry
- Class compType = array.getClass().getComponentType();
- int i = -1;
- while (true) {
- if (++i < len) {
- if (compType.isInstance(entry)) {
- // Good, it can be assigned.
- Array.set(array, i, entry);
- } else {
- // Bad. Need to set invalid.
- if (invSetting == null) {
- // We haven't created it yet.
- if (dim == 1)
- invSetting = InvalidObject.INSTANCE; // Great, one dimensional, we can use invalid directly
- else {
- // Multi-dim. Need to create a valid array that we can set.
- int[] invDims = new int[dim - 1];
- Arrays.fill(invDims, 1); // Length one all of the way so that the final component can be invalid object
- invSetting = Array.newInstance(Object.class, invDims);
- Object finalEntry = invSetting; // Final array (with component type of just Object). Start with the full array and work down.
- for (int j = invDims.length - 1; j > 0; j--) {
- finalEntry = Array.get(finalEntry, 0);
- }
- Array.set(finalEntry, 0, InvalidObject.INSTANCE);
- }
- }
- Array.set(array, i, invSetting);
- }
- }
-
- parser.skipWhitespace();
- cc = parser.read();
- if (cc == ',') {
- // Good, get next
- entry = parseString(parser);
- } else if (cc == '}') {
- // Good, reached the end.
- break;
- } else {
- if (!parser.atEnd()) {
- parser.backup();
- entry = parseString(parser); // Technically this should be invalid, but we'll let a whitespace also denote next entry.
- } else {
- // It's really screwed up. The string just ended. Log it.
- Exception e = new IllegalStateException(parser.toString());
- try {
- // See if Beaninfo plugin is available (we are running under eclipse). If so, use it, else just print to error.
- // We may be in the remote vm and so it won't be available.
- Class biPluginClass = Class.forName("org.eclipse.jem.internal.beaninfo.core.BeaninfoPlugin"); //$NON-NLS-1$
- Method getPlugin = biPluginClass.getMethod("getPlugin", (Class[]) null); //$NON-NLS-1$
- Method getLogger = biPluginClass.getMethod("getLogger", (Class[]) null); //$NON-NLS-1$
- Method log = getLogger.getReturnType().getMethod("log", new Class[] {Throwable.class, Level.class}); //$NON-NLS-1$
- Object biPlugin = getPlugin.invoke(null, (Object[]) null);
- Object logger = getLogger.invoke(biPlugin, (Object[]) null);
- log.invoke(logger, new Object[] {e, Level.WARNING});
- return InvalidObject.INSTANCE;
- } catch (SecurityException e1) {
- } catch (IllegalArgumentException e1) {
- } catch (ClassNotFoundException e1) {
- } catch (NoSuchMethodException e1) {
- } catch (IllegalAccessException e1) {
- } catch (InvocationTargetException e1) {
- } catch (NullPointerException e1) {
- }
- e.printStackTrace(); // Not in eclipse, so just print stack trace.
- return InvalidObject.INSTANCE;
- }
- }
- }
-
- return array;
- }
- }
- }
- }
- break; // If we got here, it is invalid.
- }
- }
- return InvalidObject.INSTANCE;
- }
-
- private void writeObject(ObjectOutputStream out) throws IOException {
- // Write out any hidden stuff
- out.defaultWriteObject();
- writeObject(value, out);
- }
-
- private void writeObject(Object value, ObjectOutputStream out) throws IOException {
- if (value == null)
- out.writeObject(value);
- else {
- if (value instanceof Class)
- out.writeObject(((Class) value).getName());
- else if (!value.getClass().isArray()) {
- if (value instanceof String || value instanceof Number || value instanceof Boolean || value instanceof Character)
- out.writeObject(value);
- else
- out.writeObject(InvalidObject.INSTANCE);
- } else {
- // Array is tricky. See if it is one we can handle, if not then invalid.
- // To indicate array, we will first write out the Class of the Component type of the array (it will
- // be converted to be Object or Object[]...).
- // This will be the clue that an array is coming. Class values will never
- // be returned, so that is how we can tell it is an array.
- // Note: The reason we are using the component type (converted to Object) is because to reconstruct on the other side we need
- // to use the component type plus length of the array's first dimension.
- //
- // We can not just serialize the array in the normal way because it may contain invalid values, and we need to
- // handle that. Also, if it wasn't an Object array, we need to turn it into an object array. We need consistency
- // in that it should always be an Object array.
- // So output format will be:
- // Class(component type)
- // int(size of first dimension)
- // Object(value of first entry) - Actually use out writeObject() format to allow nesting of arrays.
- // Object(value of second entry)
- // ... up to size of dimension.
- Class type = value.getClass();
- // See if final type is a valid type.
- Class ft = type.getComponentType();
- int dims = 1;
- while (ft.isArray()) {
- dims++;
- ft = ft.getComponentType();
- }
- if (ft == Object.class || ft == String.class || ft == Boolean.class || ft == Character.class || ft.isPrimitive() || ft == Class.class || Number.class.isAssignableFrom(ft)) {
- String jniType = dims == 1 ? "java.lang.Object" : MapTypes.getJNITypeName("java.lang.Object", dims-1); //$NON-NLS-1$ //$NON-NLS-2$
- try {
- Class componentType = Class.forName(jniType);
- out.writeObject(componentType);
- int length = Array.getLength(value);
- out.writeInt(length);
- for (int i = 0; i < length; i++) {
- writeObject(Array.get(value, i), out);
- }
- } catch (ClassNotFoundException e) {
- // This should never happen. Object arrays are always available.
- }
- } else
- out.writeObject(InvalidObject.INSTANCE);
- }
- }
- }
-
-
- private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
- // Read in any hidden stuff
- in.defaultReadObject();
-
- value = readActualObject(in);
- }
-
- private Object readActualObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
- Object val = in.readObject();
- if (val instanceof Class) {
- // It must be an array. Only Class objects that come in are Arrays of Object.
- int length = in.readInt();
- Object array = Array.newInstance((Class) val, length);
- for (int i = 0; i < length; i++) {
- Array.set(array, i, readActualObject(in));
- }
- return array;
- } else
- return val; // It is the value itself.
- }
-
-
- /**
- * Is this FeatureAttributeValue an implicit value, i.e. one that came from
- * BeanInfo Introspection and not from an override file.
- *
- * @return Returns the implicitValue.
- *
- * @since 1.2.0
- */
- public boolean isImplicitValue() {
- return implicitValue;
- }
-
-
- /**
- * Set the implicit value flag.
- * @param implicitValue The implicitValue to set.
- *
- * @see #isImplicitValue()
- * @since 1.2.0
- */
- public void setImplicitValue(boolean implicitValue) {
- this.implicitValue = implicitValue;
- }
-
-}
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/FeatureRecord.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/FeatureRecord.java
deleted file mode 100644
index 9d392fca3..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/FeatureRecord.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-import java.io.Serializable;
-
-
-/**
- * This is the data structure for sending the FeatureDescriptor info from
- * the BeanInfo vm to the IDE vm. It is serializable so that it can
- * be serialized for transmission.
- * <p>
- * It contains the properties of the FeatureDescriptor.
- * @since 1.1.0
- */
-public class FeatureRecord implements Serializable {
-
- private static final long serialVersionUID = 1105979276648L;
-
- public String name; // Some decorators use this and others don't. Each decorator type will decide whether this is of importance.
- public String displayName;
- public String shortDescription;
- public String category;
- public boolean expert;
- public boolean hidden;
- public boolean preferred;
- public String[] attributeNames;
- public FeatureAttributeValue[] attributeValues;
-}
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/IBeanInfoIntrospectionConstants.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/IBeanInfoIntrospectionConstants.java
deleted file mode 100644
index e067449fa..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/IBeanInfoIntrospectionConstants.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-
-/**
- * These are constants needed for transferring BeanInfo results from the BeanInfo VM.
- * @since 1.1.0
- */
-public interface IBeanInfoIntrospectionConstants {
-
- /**
- * Introspection bit flag indicating do the BeanDecorator. Sent to ModelingBeanInfo.introspect method.
- * @since 1.1.0
- */
- public static final int DO_BEAN_DECOR = 0x1;
-
- /**
- * Introspection bit flag indicating do the Properties. Sent to ModelingBeanInfo.introspect method.
- * @since 1.1.0
- */
- public static final int DO_PROPERTIES = 0x2;
-
- /**
- * Introspection bit flag indicating do the Methods. Sent to ModelingBeanInfo.introspect method.
- * @since 1.1.0
- */
- public static final int DO_METHODS = 0x4;
-
- /**
- * Introspection bit flag indicating do the Events. Sent to ModelingBeanInfo.introspect method.
- * @since 1.1.0
- */
- public static final int DO_EVENTS = 0x8;
-
- /**
- * BeanDecorator was sent command id.
- * <p>
- * This will be sent to callBack(int id, InputStream is). The InputStream will be Objects (use ObjectInputStream).
- * The stream will be broken into sections.
- * Each section will be headed by the command id of that section (e.g. BEAN_DECORATOR_SENT or PROPERTY_DECORATORS_SENT).
- * Following the command id will be the type of input specific data.
- * <p>
- * The data following the command id will be a BeanRecord from the ObjectInputStream.
- *
- * @see BeanRecord
- * @see org.eclipse.jem.internal.proxy.core.ICallback#calledBackStream(int, InputStream)
- * @since 1.1.0
- */
- public static final int BEAN_DECORATOR_SENT = 1;
-
- /**
- * PropertyDecorators send command id.
- * <p>
- * This will be sent to callBack(int id, InputStream is). The InputStream will be Objects (use ObjectInputStream).
- * The stream will be broken into sections.
- * Each section will be headed by the command id of that section (e.g. BEAN_DECORATOR_SENT or PROPERTY_DECORATORS_SENT).
- * Following the command id will be the type of input specific data.
- * <p>
- * The first object will be an int and will be the number of properties and each object after that
- * will be a PropertyRecord/IndexedPropertyRecord.
- *
- * @see org.eclipse.jem.internal.proxy.core.ICallback#calledBackStream(int, InputStream)
- * @see PropertyRecord
- * @see IndexedPropertyRecord
- */
- public static final int PROPERTY_DECORATORS_SENT = 2;
-
- /**
- * MethodDecorators send command id.
- * <p>
- * This will be sent to callBack(int id, InputStream is). The InputStream will be Objects (use ObjectInputStream).
- * The stream will be broken into sections.
- * Each section will be headed by the command id of that section (e.g. BEAN_DECORATOR_SENT or PROPERTY_DECORATORS_SENT).
- * Following the command id will be the type of input specific data.
- * <p>
- * The InputStream will be Objects (use ObjectInputStream).
- * The first object will be an int and will be the number of methods and each object after that
- * will be a MethodRecord.
- *
- * @see org.eclipse.jem.internal.proxy.core.ICallback#calledBackStream(int, InputStream)
- * @see MethodRecord
- */
- public static final int METHOD_DECORATORS_SENT = 3;
-
- /**
- * EventSetDecorators send command id.
- * <p>
- * This will be sent to callBack(int id, InputStream is). The InputStream will be Objects (use ObjectInputStream).
- * The stream will be broken into sections.
- * Each section will be headed by the command id of that section (e.g. BEAN_DECORATOR_SENT or PROPERTY_DECORATORS_SENT).
- * Following the command id will be the type of input specific data.
- * <p>
- * The first object will be an int and will be the number of events and each object after that
- * will be a EventSetRecord.
- *
- * @see org.eclipse.jem.internal.proxy.core.ICallback#calledBackStream(int, InputStream)
- * @see MethodRecord
- */
- public static final int EVENT_DECORATORS_SENT = 4;
-
- /**
- * Done send command id.
- * <p>
- * This will be sent to callBack(int id, InputStream is). The InputStream will be Objects (use ObjectInputStream).
- * The stream will be broken into sections.
- * Each section will be headed by the command id of that section (e.g. BEAN_DECORATOR_SENT or PROPERTY_DECORATORS_SENT).
- * Following the command id will be the type of input specific data.
- * <p>
- * This command id means there is no more data and it should return.
- *
- * @see org.eclipse.jem.internal.proxy.core.ICallback#calledBackStream(int, InputStream)
- * @see MethodRecord
- */
- public static final int DONE = 5;
-
-}
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/IndexedPropertyRecord.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/IndexedPropertyRecord.java
deleted file mode 100644
index 88d291615..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/IndexedPropertyRecord.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-
-/**
- * This is the data structure for sending the IndexedPropertyDescriptor info from
- * the BeanInfo vm to the IDE vm. It is serializable so that it can
- * be serialized for transmission.
- * <p>
- * It contains the properties of the IndexedPropertyDescriptor.
- * @since 1.1.0
- */
-public class IndexedPropertyRecord extends PropertyRecord {
- private static final long serialVersionUID = 1105983227990L;
-
- public ReflectMethodRecord indexedReadMethod;
- public ReflectMethodRecord indexedWriteMethod;
- public String indexedPropertyTypeName;
-}
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/InvalidObject.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/InvalidObject.java
deleted file mode 100644
index 7e731ceba..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/InvalidObject.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-
-
-/**
- * An indicator object for invalid object type. This is used with feature attribute
- * values from the BeanInfo classes. We can only handle certain types when we
- * bring them over from the BeanInfo VM. That is because the classes instantiated
- * in the BeanInfo class may not be available in the IDE. So any invalid value
- * will be replaced by this class instance.
- * <p>
- * This is a singleton class.
- * There will be one instance (InvalidObject.INSTANCE) in the system. That way
- * "==" can be used to test for it.
- *
- * @since 1.1.0
- */
-public class InvalidObject implements Serializable {
-
- /**
- * Singleton instance of InvalidObject.
- * @since 1.1.0
- */
- public static final InvalidObject INSTANCE = new InvalidObject();
-
- private static final long serialVersionUID = 1105643804370L;
-
- /*
- * Nobody else should create one of these.
- */
- private InvalidObject() {
- }
-
- private Object readResolve() throws ObjectStreamException {
- return INSTANCE;
- }
-}
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/MethodRecord.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/MethodRecord.java
deleted file mode 100644
index 4b37be9ed..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/MethodRecord.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-
-/**
- * This is the data structure for sending the MethodDescriptor info from
- * the BeanInfo vm to the IDE vm. It is serializable so that it can
- * be serialized for transmission.
- * <p>
- * It contains the properties of the MethodDescriptor.
- * @since 1.1.0
- */
-public class MethodRecord extends FeatureRecord {
-
- private static final long serialVersionUID = 1105982213110L;
-
- /**
- * Method signature for the method this record describes.
- */
- public ReflectMethodRecord methodForDescriptor;
- /**
- * Parameter records array. It may be <code>null</code> if there aren't any.
- */
- public ParameterRecord[] parameters;
-}
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ParameterRecord.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ParameterRecord.java
deleted file mode 100644
index 5b2f370bb..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ParameterRecord.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-
-/**
- * This is the data structure for sending the ParameterDescriptor info from
- * the BeanInfo vm to the IDE vm. It is serializable so that it can
- * be serialized for transmission.
- * <p>
- * It contains the properties of the ParameterDescriptor.
- * <p>
- * The only field of importance is the name, and that comes from FeatureRecord.
- * @since 1.1.0
- */
-public class ParameterRecord extends FeatureRecord {
-
- private static final long serialVersionUID = 1105982438955L;
-
-}
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/PropertyRecord.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/PropertyRecord.java
deleted file mode 100644
index 3e032412d..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/PropertyRecord.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-
-/**
- * This is the data structure for sending the PropertyDescriptor info from
- * the BeanInfo vm to the IDE vm. It is serializable so that it can
- * be serialized for transmission.
- * <p>
- * It contains the properties of the PropertyDescriptor.
- * @since 1.1.0
- */
-public class PropertyRecord extends FeatureRecord {
- private static final long serialVersionUID = 1105979276648L;
-
- public String propertyEditorClassName;
- public String propertyTypeName;
- public ReflectMethodRecord readMethod;
- public ReflectMethodRecord writeMethod;
- public ReflectFieldRecord field;
- public boolean bound;
- public boolean constrained;
- public Boolean designTime;
-}
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ReflectFieldRecord.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ReflectFieldRecord.java
deleted file mode 100644
index 98298394a..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ReflectFieldRecord.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-import java.io.Serializable;
-
-
-/**
- * This is the data structure for sending the java.lang.reflect.Field info from
- * the BeanInfo vm to the IDE vm. It is serializable so that it can
- * be serialized for transmission.
- * <p>
- * It contains the properties of the java.lang.reflect.Field.
- * @since 1.1.0
- */
-public class ReflectFieldRecord implements Serializable {
-
- private static final long serialVersionUID = 1105981512453L;
-
- public String className;
- public String fieldName;
- public boolean readOnly;
-}
diff --git a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ReflectMethodRecord.java b/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ReflectMethodRecord.java
deleted file mode 100644
index 9f112910d..000000000
--- a/plugins/org.eclipse.jem.beaninfo/beaninfoCommon/org/eclipse/jem/internal/beaninfo/common/ReflectMethodRecord.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-/*
-
-
- */
-package org.eclipse.jem.internal.beaninfo.common;
-
-import java.io.Serializable;
-
-
-/**
- * This is the data structure for sending the java.lang.reflect.Method info from
- * the BeanInfo vm to the IDE vm. It is serializable so that it can
- * be serialized for transmission.
- * <p>
- * It contains the properties of the java.lang.reflect.Method.
- * @since 1.1.0
- */
-public class ReflectMethodRecord implements Serializable {
-
- private static final long serialVersionUID = 1105981512773L;
-
- public String className;
- public String methodName;
- public String[] parameterTypeNames; // Maybe null if no parameters.
-}

Back to the top