You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by od...@apache.org on 2010/04/19 13:15:36 UTC
svn commit: r935528 - in /harmony/enhanced/java/trunk/jdktools/modules:
jdktools/src/main/java/org/apache/harmony/tools/serialver/
jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/ samsa/
Author: odeakin
Date: Mon Apr 19 11:15:35 2010
New Revision: 935528
URL: http://svn.apache.org/viewvc?rev=935528&view=rev
Log:
Apply patch for HARMONY-6476 ([jdktools] Implement the serialver command line tool) with some minor modifications.
Added:
harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/
harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Clazz.java (with props)
harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Main.java (with props)
harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/
harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/NoSerialize.java (with props)
harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Point.java (with props)
harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Test.java (with props)
Modified:
harmony/enhanced/java/trunk/jdktools/modules/samsa/build.xml
Added: harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Clazz.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Clazz.java?rev=935528&view=auto
==============================================================================
--- harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Clazz.java (added)
+++ harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Clazz.java Mon Apr 19 11:15:35 2010
@@ -0,0 +1,337 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.tools.serialver;
+
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Vector;
+
+import org.apache.bcel.classfile.Field;
+import org.apache.bcel.classfile.JavaClass;
+import org.apache.bcel.classfile.Method;
+import org.apache.harmony.tools.ClassProvider;
+
+/**
+ * This class is a wrapper of BCEL's Class class.
+ *
+ * This class depends on Apache Byte Code Engineering Library (BCEL) 5.0 or
+ * later. Please see http://jakarta.apache.org/bcel for more information about
+ * this library.
+ */
+public class Clazz {
+
+ /**
+ * A wrapped class.
+ */
+ private JavaClass wrappedClass;
+
+ /**
+ * Class fields that will be used to calculate the serialversionUID. All
+ * fields except private static and private transient. (SORTED)
+ */
+ private Vector<Field> fields;
+
+ /**
+ * Class constructors that will be used to calculate the serialversionUID.
+ * Default constructor (if exists) and all non-private constructors.
+ * (SORTED)
+ */
+ private Vector<Method> constructors;
+
+ /**
+ * Class methods that will be used to calculate the serialversionUID. All
+ * non-private methods. (SORTED)
+ */
+ private Vector<Method> methods;
+
+ /**
+ * Field that represents existance SUID (if-exists).
+ */
+ private Field suidField;
+
+ /**
+ * Constructs a <code>Clazz</code> object.
+ *
+ * @param classProvider
+ * - a helper that provides the class information.
+ * @param className
+ * - a fully qualified name of a class.
+ * @throws ClassNotFoundException
+ * - if a give class is not found
+ */
+ public Clazz(ClassProvider classProvider, String className)
+ throws ClassNotFoundException {
+ try {
+ wrappedClass = classProvider.getJavaClass(className);
+
+ // Collect up all valid fields (non transient and private, and non
+ // static private) and sort it.
+ fields = sortFields(collectValidFields(wrappedClass));
+
+ // Collect all valid constructors (non-private) and sort it.
+ constructors = sortConstructors(collectConstructors(wrappedClass));
+
+ // Collect all valid methods (non-private) and sort it.
+ methods = sortMethods(collectMethods(wrappedClass));
+ } catch (ClassNotFoundException e) {
+ throw new ClassNotFoundException();
+ }
+ }
+
+ /**
+ * Returns a name of a wrapped class.
+ *
+ * @return a class name.
+ */
+ public String getName() {
+ return wrappedClass.getClassName();
+ }
+
+ /**
+ * Returns the {@link Modifiers} of the wrapped class.
+ *
+ * @return a constant int
+ */
+ public int getModifiers() {
+ return wrappedClass.getModifiers();
+ }
+
+ /**
+ * Get all interfaces names that the wrapped class implement and sort it.
+ *
+ * @return interfaces names implemented (sorted).
+ */
+ public String[] getSortedInterfaces() {
+ String[] ifNames = wrappedClass.getInterfaceNames();
+ Arrays.sort(ifNames);
+ return ifNames;
+ }
+
+ /**
+ * Get all valid Fields (i.e., all excluding private static and private
+ * transient) of the wrapped class and sort it.
+ *
+ * @return a Field Vector (Sorted).
+ */
+ public Vector<Field> getSortedValidFields() {
+ return fields;
+ }
+
+ /**
+ * Get all valid Constructors (i.e., non-private) of the wrapped class and
+ * sort it.
+ *
+ * @return a Method Vector (Sorted).
+ */
+ public Vector<Method> getSortedValidConstructors() {
+ return constructors;
+ }
+
+ /**
+ * Get all valid Methods (i.e., non-private) of the wrapped class and sort
+ * it.
+ *
+ * @return a Method Vector (Sorted).
+ */
+ public Vector<Method> getSortedValidMethods() {
+ return methods;
+ }
+
+ /**
+ * Get the existing serialVersionUID of the wrapped class.
+ *
+ * @return a long that is the serialVersionUID of the wrapped class.
+ * @throws NoSuchFieldException
+ * if the field doesn't exist.
+ */
+ public long getExistantSerialVersionUID() throws NoSuchFieldException {
+ return Long.parseLong(suidField.getAttributes()[0].toString());
+ }
+
+ /**
+ * Verify if the wrapped class is serializable.
+ *
+ * @return true - if it's serializable<br />
+ * false otherwise.
+ * @throws ClassNotFoundException
+ * if the wrappedclass isn't found.
+ */
+ public boolean isSerializable() throws ClassNotFoundException {
+ boolean serial = false;
+ for (JavaClass clazzInterface : wrappedClass.getAllInterfaces()) {
+ if (clazzInterface.getClassName().equals("java.io.Serializable"))
+ serial = true;
+ }
+ return serial;
+ }
+
+ /**
+ * Verify if a give class has a serialVersionUID Field.
+ *
+ * @return true - if it has this field<br />
+ * false otherwise.
+ */
+ public boolean hasSerialVersionUID() {
+ return suidField != null;
+ }
+
+ /**
+ * Collect valid fields of the wrapped class. Valid fields includes all
+ * except private static and private transient.
+ *
+ * @param clazz
+ * - the wrapped class.
+ * @return a {@link Vector} of valid fields.
+ */
+ private Vector<Field> collectValidFields(JavaClass clazz) {
+ Field[] allFields = clazz.getFields();
+ Vector<Field> validFields = new Vector<Field>();
+ suidField = null;
+
+ int PRIVATE_STATIC = Modifier.PRIVATE | Modifier.STATIC;
+ int PRIVATE_TRANSIENT = Modifier.PRIVATE | Modifier.TRANSIENT;
+
+ // Excluding all PRIVATE_STATIC and PRIVATE_TRANSIENT fields
+ for (int i = 0; i < allFields.length; i++) {
+ if ((allFields[i].getModifiers() != PRIVATE_STATIC)
+ && (allFields[i].getModifiers() != PRIVATE_TRANSIENT)) {
+ // Adding
+ validFields.add(allFields[i]);
+
+ // Let's check if the Field is a existing SUID
+ if (allFields[i].getName().equals("serialVersionUID")) {
+ suidField = allFields[i];
+ }
+ }
+ }
+ return validFields;
+ }
+
+ /**
+ * Collect valid constructors of the wrapped class. Valid constructors
+ * includes all except private.
+ *
+ * @param clazz
+ * - the wrapped class.
+ * @return a {@link Vector} of valid constructors.
+ */
+ private Vector<Method> collectConstructors(JavaClass clazz) {
+ Method methods[] = clazz.getMethods();
+ Vector<Method> validConstructors = new Vector<Method>();
+
+ // Excludes all constructors that are private
+ for (int i = 0; i < methods.length; i++) {
+ Method m = methods[i];
+ String mName = m.getName();
+
+ if (mName.equals("<clinit>") || mName.equals("<init>"))
+ if (!m.isPrivate())
+ validConstructors.add(m);
+ }
+
+ return validConstructors;
+ }
+
+ /**
+ * Collect valid methods of the wrapped class. Valid methods includes all
+ * except private.
+ *
+ * @param clazz
+ * - the wrapped class.
+ * @return a {@link Vector} of valid methods.
+ */
+ private Vector<Method> collectMethods(JavaClass clazz) {
+ Method methods[] = clazz.getMethods();
+ Vector<Method> validMethods = new Vector<Method>();
+
+ // Excludes all methods that are private
+ for (int i = 0; i < methods.length; i++) {
+ Method m = methods[i];
+ String mName = m.getName();
+
+ // is not a constructor
+ if (!mName.equals("<clinit>") && !mName.equals("<init>")) {
+ if (!m.isPrivate()) {
+ validMethods.add(m);
+ }
+ }
+ }
+
+ return validMethods;
+ }
+
+ /**
+ * Sort the valid fields of the wrapped class.
+ *
+ * @param vector
+ * - to be sorted.
+ * @return a Field Vector sorted.
+ */
+ private Vector<Field> sortFields(Vector<Field> vector) {
+ Collections.sort(vector, new Comparator<Field>() {
+ public int compare(Field f1, Field f2) {
+ return f1.getName().compareTo(f2.getName());
+ }
+ });
+ return vector;
+ }
+
+ /**
+ * Sort the valid constructors of the wrapped class.
+ *
+ * @param vector
+ * - to be sorted.
+ * @return a Method Vector sorted.
+ */
+ private Vector<Method> sortConstructors(Vector<Method> vector) {
+ Collections.sort(vector, new Comparator<Method>() {
+ public int compare(Method m1, Method m2) {
+ if (m1.getName() == "<clinit>")
+ return 1;
+
+ return m1.getSignature().compareTo(m2.getSignature());
+ }
+ });
+
+ return vector;
+ }
+
+ /**
+ * Sort the valid methods of the wrapped class.
+ *
+ * @param vector
+ * - to be sorted.
+ * @return a Method Vector sorted.
+ */
+ private Vector<Method> sortMethods(Vector<Method> vector) {
+ Collections.sort(vector, new Comparator<Method>() {
+ public int compare(Method m1, Method m2) {
+ int name = m1.getName().compareTo(m2.getName());
+ if (name != 0) {
+ return name;
+ } else {
+ return m1.getSignature().compareTo(m2.getSignature());
+ }
+ }
+ });
+
+ return vector;
+ }
+}
Propchange: harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Clazz.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Main.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Main.java?rev=935528&view=auto
==============================================================================
--- harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Main.java (added)
+++ harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Main.java Mon Apr 19 11:15:35 2010
@@ -0,0 +1,308 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.tools.serialver;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.lang.reflect.Modifier;
+import java.security.MessageDigest;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Vector;
+
+import org.apache.bcel.classfile.Field;
+import org.apache.bcel.classfile.Method;
+import org.apache.harmony.tools.ClassProvider;
+
+/**
+ * This is a tool that calculates the serialVersionUID of a serializable class.
+ */
+public class Main {
+
+ public static void main(String args[]) {
+ if (args.length < 1) {
+ usage();
+ System.exit(1);
+ }
+
+ String pathSep = null;
+ try {
+ pathSep = System.getProperty("path.separator");
+ } catch (SecurityException e) {
+ // ignore
+ }
+
+ Vector<String> names = new Vector<String>();
+ Map options = new HashMap();
+ int i = 0;
+ while (i < args.length) {
+ if (args[i].equals("-classpath")) {
+ try {
+ String path = (String) args[i + 1];
+
+ // We can concatenate several options, if there is no
+ // security restriction; otherwise, the new option replaces
+ // the old one.
+ if (pathSep != null) {
+ String prevPath = (String) options.get(args[i]);
+ if (prevPath != null) {
+ path = prevPath + pathSep + path;
+ }
+ }
+
+ options.put(args[i], path);
+ i++;
+ } catch (ArrayIndexOutOfBoundsException ex) {
+ System.out
+ .println("Missing argument for -classpath option");
+ usage();
+ System.exit(1);
+ }
+ } else if (args[i].equals("-show")) {
+ options.put(args[i], Boolean.valueOf(true));
+ } else if (args[i].charAt(0) == '-') {
+ // invalid flag (only allowed -show and -classpath
+ System.out.println("Invalid flag " + args[i]);
+ usage();
+ System.exit(1);
+ } else {
+ names.add(args[i]);
+ }
+ i++;
+ }
+ System.exit(run(options, names));
+ }
+
+ /**
+ * Runs a tool.
+ *
+ * @param options
+ * - a <code>java.util.Map</code> of the following key-value
+ * pairs.
+ *
+ * <li><i>key</i> - "-classpath" <li><i>value</i> - a
+ * <code>java.lang.String</code> which is a path where classes
+ * are located.
+ *
+ * <li><i>key</i> - "-show" <li><i>value</i> - display a simple
+ * GUI with a textfield, where the user can enter the name of the
+ * class he wants to generate the serialversionUID.
+ *
+ * @param classNames
+ * - a vector of the fully qualified class names.
+ * @return <code>0</code> if there is no error; <code>1</code> otherwise.
+ */
+ public static int run(Map options, Vector<String> classNames) {
+ int returnValue = 0;
+
+ String classpath = getString(options, "-classpath");
+ boolean show = getBoolean(options, "-show"); // TODO make show GUI
+ Iterator namesIter = classNames.iterator();
+
+ // The user can't type -show and put classnames - SUN Spec
+ if ((namesIter.hasNext() == true) && (show == true)) {
+ System.out.println("Cannot specify class arguments with the -show option");
+ return 1;
+ }
+
+ ClassProvider classProvider = new ClassProvider(null, classpath, false);
+ while (namesIter.hasNext()) {
+ String className = (String) namesIter.next();
+ try {
+ // Parse the next class.
+ Clazz clazz = new Clazz(classProvider, className);
+
+ // Let's check if the class has any 'annoiance'
+ if (!isSerializable(clazz)) {
+ System.out.println("Class " + clazz.getName() + " is not Serializable.");
+ continue;
+ }
+
+ long hash = calculeSUID(clazz);
+ printResult(clazz, hash);
+ } catch (Exception e) {
+ System.out.println("Class " + className + " not found.");
+ returnValue = 1;
+ }
+ }
+ return returnValue;
+ }
+
+ /**
+ * Calculates the serialversionUID for a given {@link Clazz}.
+ *
+ * @param clazz
+ * - wrapped class
+ * @return the serialversionUID
+ * @throws ClassNotFoundException
+ * if a class is not found
+ */
+ public static long calculeSUID(Clazz clazz) throws ClassNotFoundException {
+ try {
+ // Let's check if class has already a suid, if yes, we don't need to calculate
+ if (clazz.hasSerialVersionUID()) {
+ return clazz.getExistantSerialVersionUID();
+ }
+
+ // Let's compute the serialversionUID
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ DataOutputStream daos = new DataOutputStream(baos);
+
+ // Class name
+ daos.writeUTF(clazz.getName());
+
+ // Class Modifier
+ int classMask = Modifier.PUBLIC | Modifier.FINAL
+ | Modifier.INTERFACE | Modifier.ABSTRACT;
+ daos.writeInt(clazz.getModifiers() & classMask);
+
+ // Write all interfaces name (Sorted)
+ for (String clazzInterface : clazz.getSortedInterfaces()) {
+ daos.writeUTF(clazzInterface);
+ }
+
+ // We need to write the field/constructor/method information in
+ // the following order:
+ // 1 - Name
+ // 2 - Modifier
+ // 3 - Signature
+
+ // Only valid fields, i.e. , all fields except
+ // static private and transient private
+ int fieldMask = Modifier.PUBLIC | Modifier.PRIVATE
+ | Modifier.PROTECTED | Modifier.STATIC | Modifier.FINAL
+ | Modifier.VOLATILE | Modifier.TRANSIENT;
+
+ for (Field field : clazz.getSortedValidFields()) {
+ daos.writeUTF(field.getName());
+ daos.writeInt(field.getModifiers() & fieldMask);
+ daos.writeUTF(field.getSignature());
+ }
+
+ // Only valid Constructors, i.e., all non-private
+ // The first constructor must be the default ()V [if-exists]
+ // The method already takes cares of this
+ int methodMask = Modifier.PUBLIC | Modifier.PRIVATE
+ | Modifier.PROTECTED | Modifier.STATIC | Modifier.FINAL
+ | Modifier.SYNCHRONIZED | Modifier.NATIVE
+ | Modifier.ABSTRACT | Modifier.STRICT;
+
+ for (Method constructor : clazz.getSortedValidConstructors()) {
+ daos.writeUTF(constructor.getName());
+ daos.writeInt(constructor.getModifiers() & methodMask);
+ daos.writeUTF(constructor.getSignature());
+ }
+
+ // Only valid Methods, i.e., all non-private
+ for (Method methods : clazz.getSortedValidMethods()) {
+ daos.writeUTF(methods.getName());
+ daos.writeInt(methods.getModifiers() & methodMask);
+ daos.writeUTF(methods.getSignature().replace('/', '.'));
+ }
+
+ // Hash is calculated the following way:
+ // Get the 8 [0 ... 7] bytes and invert their order, i.e,
+ // Suppose bytes are 00110011 ... 11110000, the final order
+ // would be:
+ // Result: 11110000 ... 00110011
+ MessageDigest md = MessageDigest.getInstance("SHA");
+ byte[] sha = md.digest(baos.toByteArray());
+ long hash = 0;
+
+ for (int i = 7; i >= 0; i--) {
+ hash = (hash << 8) | (sha[i] & 0xFF);
+ }
+
+ return hash;
+ } catch (Exception e) {
+ throw new ClassNotFoundException();
+ }
+ }
+
+ /**
+ * Verify if the wrapped class is serializable.
+ *
+ * @return true - if it's serializable<br />
+ * false otherwise.
+ * @throws ClassNotFoundException
+ * if the wrappedclass isn't found.
+ */
+ public static boolean isSerializable(Clazz wrappedclazz) throws ClassNotFoundException {
+ return wrappedclazz.isSerializable();
+ }
+
+ /**
+ * Prints the usage information.
+ */
+ public static void usage() {
+ System.out.println("Use: serialver [-classpath classpath] [-show] [classname...]");
+ }
+
+ /**
+ * Prints the serialversionUID of a given class.
+ *
+ * @param clazz
+ * the class
+ * @param suid
+ * the value to be printed
+ */
+ public static void printResult(Clazz clazz, long suid) {
+ System.out.println(clazz.getName() + "\t" + "static final long serialVersionUID = " + suid + "L");
+ }
+
+ /**
+ * Get the options from the Map, string options (-classpath <i>path</i>).
+ *
+ * @param options
+ * map.
+ * @param name
+ * option.
+ * @return value of the option.
+ */
+ private static String getString(Map options, String name) {
+ try {
+ return (String) options.get(name);
+ } catch (ClassCastException e) {
+ throw new RuntimeException("'" + name + "': expected java.lang.String", e);
+ }
+ }
+
+ /**
+ * Get the options from the Map, boolean options (<i>-show</i>).
+ *
+ * @param options
+ * map.
+ * @param name
+ * option.
+ * @return true if option was passed as arg<br />
+ * false otherwise.
+ */
+ private static boolean getBoolean(Map options, String name) {
+ try {
+ Object value = options.get(name);
+ if (value != null) {
+ return ((Boolean) value).booleanValue();
+ }
+ } catch (ClassCastException e) {
+ throw new RuntimeException("'" + name + "': expected java.lang.Boolean", e);
+ }
+ return false;
+ }
+
+}
Propchange: harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/main/java/org/apache/harmony/tools/serialver/Main.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/NoSerialize.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/NoSerialize.java?rev=935528&view=auto
==============================================================================
--- harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/NoSerialize.java (added)
+++ harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/NoSerialize.java Mon Apr 19 11:15:35 2010
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.harmony.tests.tools.serialver;
+
+public class NoSerialize {
+ private int x;
+ private int y;
+
+ public String lol;
+}
Propchange: harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/NoSerialize.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Point.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Point.java?rev=935528&view=auto
==============================================================================
--- harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Point.java (added)
+++ harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Point.java Mon Apr 19 11:15:35 2010
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.harmony.tests.tools.serialver;
+
+import java.io.Serializable;
+
+public class Point implements Serializable {
+
+ //private static final long serialVersionUID = -2044326457932868113L;
+ private int x;
+ private int y;
+ private Point p;
+
+ public Point(int x, int y) {
+ }
+
+ public void setP(Point p) {
+ this.p = p;
+ }
+}
Propchange: harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Point.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Test.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Test.java?rev=935528&view=auto
==============================================================================
--- harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Test.java (added)
+++ harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Test.java Mon Apr 19 11:15:35 2010
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.harmony.tests.tools.serialver;
+
+import org.apache.harmony.tools.ClassProvider;
+import org.apache.harmony.tools.serialver.Clazz;
+import org.apache.harmony.tools.serialver.Main;
+
+import junit.framework.*;
+
+public class Test extends TestCase {
+
+ public void testCalculeSUID() throws ClassNotFoundException {
+ ClassProvider classProvider = new ClassProvider(null, null, false);
+
+ Clazz clazz = new Clazz(classProvider, "org.apache.harmony.tests.tools.serialver.Point");
+ assertEquals("-2044326457932868113", "" + Main.calculeSUID(clazz));
+
+ clazz = new Clazz(classProvider, "java.lang.String");
+ assertEquals("-6849794470754667710", "" + Main.calculeSUID(clazz));
+
+ clazz = new Clazz(classProvider, "java.util.Random");
+ assertEquals("3905348978240129619", "" + Main.calculeSUID(clazz));
+ }
+
+ public void testIsSerializable() throws ClassNotFoundException {
+ ClassProvider classProvider = new ClassProvider(null, null, false);
+
+ Clazz clazz = new Clazz(classProvider, "org.apache.harmony.tests.tools.serialver.NoSerialize");
+ assertEquals(false, Main.isSerializable(clazz));
+
+ clazz = new Clazz(classProvider, "java.lang.Thread");
+ assertEquals(false, Main.isSerializable(clazz));
+
+ clazz = new Clazz(classProvider, "java.io.File");
+ assertEquals(true, Main.isSerializable(clazz));
+ }
+
+}
Propchange: harmony/enhanced/java/trunk/jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/serialver/Test.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: harmony/enhanced/java/trunk/jdktools/modules/samsa/build.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/jdktools/modules/samsa/build.xml?rev=935528&r1=935527&r2=935528&view=diff
==============================================================================
--- harmony/enhanced/java/trunk/jdktools/modules/samsa/build.xml (original)
+++ harmony/enhanced/java/trunk/jdktools/modules/samsa/build.xml Mon Apr 19 11:15:35 2010
@@ -100,6 +100,9 @@
<copy file="${hy.samsa.exe}" tofile="${jdktools.deploy.dir}/bin/rmiregistry${exe.suffix}" />
<chmod file="${jdktools.deploy.dir}/bin/rmiregistry${exe.suffix}" perm="ugo+x" />
+ <copy file="${hy.samsa.exe}" tofile="${jdktools.deploy.dir}/bin/serialver${exe.suffix}" />
+ <chmod file="${jdktools.deploy.dir}/bin/serialver${exe.suffix}" perm="ugo+x" />
+
<copy file="${hy.samsa.exe}" tofile="${jretools.deploy.dir}/bin/keytool${exe.suffix}" />
<chmod file="${jretools.deploy.dir}/bin/keytool${exe.suffix}" perm="ugo+x" />