[jboss-cvs] JBossAS SVN: r104008 - in projects/scanning/trunk: scanning-impl/src/main/java/org/jboss/scanning/plugins/helpers and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Apr 15 12:12:14 EDT 2010


Author: alesj
Date: 2010-04-15 12:12:13 -0400 (Thu, 15 Apr 2010)
New Revision: 104008

Added:
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/SignatureSerializer.java
   projects/scanning/trunk/testsuite/src/test/resources/hibernate/pre-defaultpar.jar
Modified:
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/ClassSignaturePair.java
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/DefaultAnnotationRepository.java
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/MutableAnnotationRepository.java
   projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/helpers/WeakClassLoaderHolder.java
   projects/scanning/trunk/scanning-spi/src/main/java/org/jboss/scanning/spi/helpers/UrlScanner.java
   projects/scanning/trunk/testsuite/src/test/java/org/jboss/test/scanning/indexer/test/IndexerRuntimeTestCase.java
Log:
Fix annotation index serialization.

Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/ClassSignaturePair.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/ClassSignaturePair.java	2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/ClassSignaturePair.java	2010-04-15 16:12:13 UTC (rev 104008)
@@ -22,11 +22,15 @@
 
 package org.jboss.scanning.annotations.plugins;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.lang.annotation.Annotation;
+
+import org.jboss.metadata.spi.signature.Signature;
 import org.jboss.util.JBossObject;
-import org.jboss.metadata.spi.signature.Signature;
 
-import java.lang.annotation.Annotation;
-
 /**
  * Class name and signature pair.
  * With those two we can re-create annotation value.
@@ -36,12 +40,22 @@
  *
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
  */
-public class ClassSignaturePair extends JBossObject
+public class ClassSignaturePair extends JBossObject implements Externalizable
 {
+   /** The serial version UID */
+   private static final long serialVersionUID = 1L;
+
    private String className;
    private Signature signature;
    private Annotation annotation;
 
+   /**
+    * Should only be used for de-serialization.
+    */
+   public ClassSignaturePair()
+   {
+   }
+
    public ClassSignaturePair(String className, Signature signature)
    {
       this(className, signature, null);
@@ -57,6 +71,26 @@
       this.annotation = annotation;
    }
 
+   public void writeExternal(ObjectOutput out) throws IOException
+   {
+      out.writeUTF(className);
+      // signature
+      boolean bs = signature != null;
+      out.writeBoolean(bs);
+      if (bs)
+         out.writeObject(new SignatureSerializer(signature));
+   }
+
+   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
+   {
+      className = in.readUTF();
+      if (in.readBoolean())
+      {
+         SignatureSerializer ss = (SignatureSerializer) in.readObject();
+         signature = ss.getSignature();
+      }
+   }
+
    /**
     * Get the classname.
     *

Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/DefaultAnnotationRepository.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/DefaultAnnotationRepository.java	2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/DefaultAnnotationRepository.java	2010-04-15 16:12:13 UTC (rev 104008)
@@ -22,7 +22,10 @@
 
 package org.jboss.scanning.annotations.plugins;
 
-import java.io.Serializable;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.lang.annotation.Annotation;
 import java.lang.annotation.ElementType;
 import java.lang.reflect.AnnotatedElement;
@@ -42,14 +45,14 @@
  *
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
  */
-public class DefaultAnnotationRepository extends MutableAnnotationRepository implements Serializable, ScanningHandle<DefaultAnnotationRepository>
+public class DefaultAnnotationRepository extends MutableAnnotationRepository implements Externalizable, ScanningHandle<DefaultAnnotationRepository>
 {
    /** The serial version UID */
    private static final long serialVersionUID = 1L;
    /** The info map */
-   private transient Map<String, Map<Class<? extends Annotation>, Map<ElementType, Set<ClassSignaturePair>>>> env;
+   private Map<String, Map<Class<? extends Annotation>, Map<ElementType, Set<ClassSignaturePair>>>> env;
    /** The checked class names */
-   private transient Set<String> checkedClassNames;
+   private transient Set<String> checkedClassNames = new HashSet<String>();
    /** Should we keep the annotation */
    private boolean keepAnnotations;
 
@@ -59,24 +62,25 @@
    public DefaultAnnotationRepository()
    {
       super();
-      init();
    }
 
    public DefaultAnnotationRepository(ClassLoader classLoader)
    {
       super(classLoader);
-      init();
+      env = new HashMap<String, Map<Class<? extends Annotation>, Map<ElementType, Set<ClassSignaturePair>>>>();
    }
 
-   /**
-    * Init.
-    */
-   protected void init()
+   public void writeExternal(ObjectOutput out) throws IOException
    {
-      env = new HashMap<String, Map<Class<? extends Annotation>, Map<ElementType, Set<ClassSignaturePair>>>>();
-      checkedClassNames = new HashSet<String>();
+      out.writeObject(env);
    }
 
+   @SuppressWarnings("unchecked")
+   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
+   {
+      env = (Map)in.readObject();
+   }
+
    /**
     * Set the keep annotations flag.
     *

Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/MutableAnnotationRepository.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/MutableAnnotationRepository.java	2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/MutableAnnotationRepository.java	2010-04-15 16:12:13 UTC (rev 104008)
@@ -37,6 +37,8 @@
  */
 public abstract class MutableAnnotationRepository extends WeakClassLoaderHolder implements AnnotationIndex
 {
+   private static final long serialVersionUID = 1l;
+
    /**
     * Should only be used for de-serialization.
     */

Copied: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/SignatureSerializer.java (from rev 103689, projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/ClassSignaturePair.java)
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/SignatureSerializer.java	                        (rev 0)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/SignatureSerializer.java	2010-04-15 16:12:13 UTC (rev 104008)
@@ -0,0 +1,164 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.scanning.annotations.plugins;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.jboss.metadata.spi.signature.*;
+
+/**
+ * Serialization helper for Signature
+ * TODO - move to MDR
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class SignatureSerializer implements Externalizable
+{
+   /** The serial version UID */
+   private static final long serialVersionUID = 1L;
+
+   private transient Signature signature;
+
+   public SignatureSerializer()
+   {
+      // for de-serialization
+   }
+
+   public SignatureSerializer(Signature signature)
+   {
+      this.signature = signature;
+   }
+
+   public Signature getSignature()
+   {
+      return signature;
+   }
+
+   public void writeExternal(ObjectOutput out) throws IOException
+   {
+      String declaringClass = null;
+      String name = null;
+      String[] parameters = null;
+      Integer parameterIndex = -1;
+
+      if (signature instanceof ConstructorSignature)
+      {
+         ConstructorSignature constructorSignature = (ConstructorSignature) signature;
+         parameters = constructorSignature.getParameters();
+      }
+      else if (signature instanceof MethodSignature)
+      {
+         MethodSignature methodSignature = (MethodSignature) signature;
+         name = methodSignature.getName();
+         parameters = methodSignature.getParameters();
+      }
+      else if (signature instanceof DeclaredMethodSignature)
+      {
+         DeclaredMethodSignature methodSignature = (DeclaredMethodSignature) signature;
+         declaringClass = methodSignature.getDeclaringClass();
+         name = methodSignature.getName();
+         parameters = methodSignature.getParameters();
+      }
+      else if (signature instanceof MethodParametersSignature)
+      {
+         MethodParametersSignature methodSignature = (MethodParametersSignature) signature;
+         name = methodSignature.getName();
+         parameters = methodSignature.getParameters();
+         parameterIndex = methodSignature.getParam();
+      }
+      else if (signature instanceof ConstructorParametersSignature)
+      {
+         ConstructorParametersSignature constructorSignature = (ConstructorParametersSignature) signature;
+         parameters = constructorSignature.getParameters();
+         parameterIndex = constructorSignature.getParam();
+      }
+      else if (signature instanceof FieldSignature)
+      {
+         FieldSignature fieldSignature = (FieldSignature) signature;
+         name = fieldSignature.getName();
+      }
+      else
+         throw new IllegalArgumentException("Unknown signature type: " + signature);
+
+      // declaring class
+      boolean bdc = declaringClass != null;
+      out.writeBoolean(bdc);
+      if (bdc)
+         out.writeUTF(declaringClass);
+      // name
+      out.writeUTF(name);
+      // parameters
+      boolean bp = parameters != null;
+      out.writeBoolean(bp);
+      if (bp)
+         out.writeObject(parameters);
+      // index
+      out.writeObject(parameterIndex);
+   }
+
+   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
+   {
+      // declaring class
+      String declaringClass = null;
+      if (in.readBoolean())
+         declaringClass = in.readUTF();
+      // name
+      String name = in.readUTF();
+      // parameters
+      String[] parameters = null;
+      if (in.readBoolean())
+         parameters = (String[]) in.readObject();
+      // index
+      Integer parameterIndex = (Integer) in.readObject();
+
+      if (name == null)
+      {
+         if (parameterIndex >= 0)
+            signature = new ConstructorParametersSignature(parameterIndex, parameters);
+         else
+            signature = new ConstructorSignature(parameters);
+      }
+      else
+      {
+         if (declaringClass != null)
+         {
+            signature = new DeclaredMethodSignature(declaringClass, name, parameters);
+         }
+         else if (parameters == null)
+         {
+            signature = new FieldSignature(name);
+         }
+         else if (parameterIndex >= 0)
+         {
+            signature = new MethodParametersSignature(name, parameters, parameterIndex);
+         }
+         else
+         {
+            signature = new MethodSignature(name, parameters);
+         }
+      }
+   }
+}
\ No newline at end of file

Modified: projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/helpers/WeakClassLoaderHolder.java
===================================================================
--- projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/helpers/WeakClassLoaderHolder.java	2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/helpers/WeakClassLoaderHolder.java	2010-04-15 16:12:13 UTC (rev 104008)
@@ -22,6 +22,7 @@
 
 package org.jboss.scanning.plugins.helpers;
 
+import java.io.Serializable;
 import java.lang.ref.WeakReference;
 
 import org.jboss.util.JBossObject;
@@ -31,8 +32,10 @@
  *
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
  */
-public abstract class WeakClassLoaderHolder extends JBossObject
+public abstract class WeakClassLoaderHolder extends JBossObject implements Serializable
 {
+   private static final long serialVersionUID = 1l;
+
    private transient WeakReference<ClassLoader> clRef;
 
    /**

Modified: projects/scanning/trunk/scanning-spi/src/main/java/org/jboss/scanning/spi/helpers/UrlScanner.java
===================================================================
--- projects/scanning/trunk/scanning-spi/src/main/java/org/jboss/scanning/spi/helpers/UrlScanner.java	2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/scanning-spi/src/main/java/org/jboss/scanning/spi/helpers/UrlScanner.java	2010-04-15 16:12:13 UTC (rev 104008)
@@ -130,12 +130,12 @@
       {
          GZIPInputStream gis = new GZIPInputStream(is);
          ois = new ObjectInputStream(gis);
+         return (ScanningHandle) ois.readObject();
       }
       finally
       {
          is.close();
       }
-      return (ScanningHandle) ois.readObject();
    }
 
    protected abstract ScanningHandle createHandle(ScanningPlugin plugin);

Modified: projects/scanning/trunk/testsuite/src/test/java/org/jboss/test/scanning/indexer/test/IndexerRuntimeTestCase.java
===================================================================
--- projects/scanning/trunk/testsuite/src/test/java/org/jboss/test/scanning/indexer/test/IndexerRuntimeTestCase.java	2010-04-15 15:51:25 UTC (rev 104007)
+++ projects/scanning/trunk/testsuite/src/test/java/org/jboss/test/scanning/indexer/test/IndexerRuntimeTestCase.java	2010-04-15 16:12:13 UTC (rev 104008)
@@ -71,7 +71,7 @@
 
    public void testPreIndexedUsage() throws Exception
    {
-      // testUsage("pre-defaultpar", true);
+      testUsage("pre-defaultpar", true);
    }
 
    protected void testUsage(String name, boolean preIndexed) throws Exception

Added: projects/scanning/trunk/testsuite/src/test/resources/hibernate/pre-defaultpar.jar
===================================================================
(Binary files differ)


Property changes on: projects/scanning/trunk/testsuite/src/test/resources/hibernate/pre-defaultpar.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream




More information about the jboss-cvs-commits mailing list