Nice/src/bossa/modules CompiledContent.java,1.4,1.5 Content.java,1.20,1.21 DirectoryCompiledContent.java,1.10,1.11 JarCompiledContent.java,1.8,1.9

Daniel Bonniot <[email protected]> Tue, 12 Apr 2005 12:38:13 +0000
Newsgroups gmane.comp.lang.nice.cvs
Message-ID <[email protected]>
Update of /cvsroot/nice/Nice/src/bossa/modules
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29311/src/bossa/modules

Modified Files:
	CompiledContent.java Content.java 
	DirectoryCompiledContent.java JarCompiledContent.java 
Log Message:
Fix archive creation so that the most recent version of each class file is
included in it (regenerated has priority over any previous version).


Index: DirectoryCompiledContent.java
===================================================================
RCS file: /cvsroot/nice/Nice/src/bossa/modules/DirectoryCompiledContent.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** DirectoryCompiledContent.java	8 Mar 2005 20:11:36 -0000	1.10
--- DirectoryCompiledContent.java	12 Apr 2005 12:38:11 -0000	1.11
***************
*** 106,126 ****
      }
    }
!   
!   Content.Stream[] getClasses(boolean wantDispatch)
    {
!     return getClasses(directory, wantDispatch);
    }
!   
!   static Content.Stream[] getClasses(File directory, 
! 				     final boolean wantDispatch)
    {
!     /*
!       To list out the "dispatch.class" file, 
!       we use the method File.compareTo(File) since it is correct 
!       both on case-sensitive and case-insensitive platforms.
!     */
!     final File dispatchFile = 
!       wantDispatch ? null : new File(directory, "dispatch.class");
!     File[] classes = directory.listFiles
        (new FileFilter()
  	{ 
--- 106,118 ----
      }
    }
! 
!   void addClasses(java.util.Set/*<Content.Stream>*/ classes)
    {
!     addClasses(classes, directory);
    }
! 
!   static void addClasses(java.util.Set/*<Content.Stream>*/ classes, File directory)
    {
!     File[] files = directory.listFiles
        (new FileFilter()
  	{ 
***************
*** 132,154 ****
                return true;
  
! 	    return name.endsWith(".class") 
! 	      && (wantDispatch || dispatchFile.compareTo(f) != 0)
! 	      && f.isFile();
  	  }
  	}
         );
  
!     Content.Stream[] res = 
!       new Content.Stream[classes.length + (wantDispatch ? 0 : 1)];
!     for (int i = 0; i < classes.length; i++)
        try{
! 	res[i] = new Content.Stream
! 	  (new BufferedInputStream(new FileInputStream(classes[i])), 
! 	   classes[i].getName());
        } catch(FileNotFoundException e) {}
- 
-     return res;
    }
!   
    private InputStream getFileStream(String name)
    {
--- 124,140 ----
                return true;
  
! 	    return name.endsWith(".class") && f.isFile();
  	  }
  	}
         );
  
!     for (int i = 0; i < files.length; i++)
        try{
!         classes.add(new Content.Stream
! 	  (new BufferedInputStream(new FileInputStream(files[i])),
!            files[i].getName()));
        } catch(FileNotFoundException e) {}
    }
! 
    private InputStream getFileStream(String name)
    {

Index: CompiledContent.java
===================================================================
RCS file: /cvsroot/nice/Nice/src/bossa/modules/CompiledContent.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** CompiledContent.java	2 Jul 2004 19:31:03 -0000	1.4
--- CompiledContent.java	12 Apr 2005 12:38:10 -0000	1.5
***************
*** 34,50 ****
    gnu.bytecode.ClassType dispatch;
  
!   /**
!      Returns the compiled classes of this source. 
!      
!      This method is valid for sources that were not compiled
!      because they were up-to-date.
!      It returns the classes generated by the compilation of the
!      package denoted by this source.
! 
!      @param wantDispatch wether the dispatch.class file must be included in the
!        result. If false, an extra null element must be added at then end of
!        the array.
!   */
!   abstract Content.Stream[] getClasses(boolean wantDispatch);
  
    /**
--- 34,38 ----
    gnu.bytecode.ClassType dispatch;
  
!   abstract void addClasses(java.util.Set/*<Content.Stream>*/ classes);
  
    /**

Index: JarCompiledContent.java
===================================================================
RCS file: /cvsroot/nice/Nice/src/bossa/modules/JarCompiledContent.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** JarCompiledContent.java	17 Sep 2004 16:31:36 -0000	1.8
--- JarCompiledContent.java	12 Apr 2005 12:38:11 -0000	1.9
***************
*** 20,24 ****
  /**
     A compiled package located in a jar file.
!     
     @author Daniel Bonniot ([email protected])
   */
--- 20,24 ----
  /**
     A compiled package located in a jar file.
! 
     @author Daniel Bonniot ([email protected])
   */
***************
*** 34,43 ****
      if (itfEntry == null)
        return null;
!     
      JarEntry bytecodeEntry = jar.getJarEntry
        (pkgName + "/" + Package.packageClassName + ".class");
      if (bytecodeEntry == null)
        return null;
!     
      JarEntry dispatchEntry = jar.getJarEntry(pkgName + "/dispatch.class");
      if (dispatchEntry == null)
--- 34,43 ----
      if (itfEntry == null)
        return null;
! 
      JarEntry bytecodeEntry = jar.getJarEntry
        (pkgName + "/" + Package.packageClassName + ".class");
      if (bytecodeEntry == null)
        return null;
! 
      JarEntry dispatchEntry = jar.getJarEntry(pkgName + "/dispatch.class");
      if (dispatchEntry == null)
***************
*** 107,113 ****
    }
  
!   Content.Stream[] getClasses(boolean wantDispatch)
    {
-     java.util.List res = new java.util.LinkedList();
      String pkgPrefix = pkg.getName().replace('.', '/') + "/";
  
--- 107,112 ----
    }
  
!   void addClasses(java.util.Set/*<Content.Stream>*/ classes)
    {
      String pkgPrefix = pkg.getName().replace('.', '/') + "/";
  
***************
*** 115,142 ****
      while(en.hasMoreElements())
        {
! 	JarEntry e = (JarEntry) en.nextElement();
! 	String fullname = e.getName();
! 	if (fullname.startsWith(pkgPrefix)
! 	    && fullname.indexOf('/', pkgPrefix.length()) == -1
! 	    && fullname.endsWith(".class"))
! 	  {
! 	    String name = fullname.substring(pkgPrefix.length());
! 	    if (wantDispatch || !name.equals("dispatch.class"))
! 	      try{
! 		res.add(new Content.Stream(jar.getInputStream(e), name));
! 	      }
! 	      catch(IOException ex){
! 		User.error(pkg.name,
! 			   "Error reading archive " + getName());
! 	      }
! 	  }
        }
- 
-     int len = res.size();
-     if (! wantDispatch)
-       len++;
-     return (Content.Stream[]) res.toArray(new Content.Stream[len]);
    }
!   
    InputStream getBytecodeStream()
    {
--- 114,135 ----
      while(en.hasMoreElements())
        {
!  	JarEntry e = (JarEntry) en.nextElement();
!  	String fullname = e.getName();
!  	if (fullname.startsWith(pkgPrefix)
!  	    && fullname.indexOf('/', pkgPrefix.length()) == -1
!  	    && fullname.endsWith(".class"))
!   	  {
!   	    String name = fullname.substring(pkgPrefix.length());
!             try{
!               classes.add(new Content.Stream(jar.getInputStream(e), name));
!             }
!             catch(IOException ex){
!               User.error(pkg.name,
!                          "Error reading archive " + getName());
!             }
!   	  }
        }
    }
! 
    InputStream getBytecodeStream()
    {
***************
*** 149,158 ****
      }
    }
!   
    public String getName()
    {
      return nice.tools.util.System.prettyPrint(jar);
    }
!   
    public String toString()
    {
--- 142,151 ----
      }
    }
! 
    public String getName()
    {
      return nice.tools.util.System.prettyPrint(jar);
    }
! 
    public String toString()
    {

Index: Content.java
===================================================================
RCS file: /cvsroot/nice/Nice/src/bossa/modules/Content.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -d -r1.20 -r1.21
*** Content.java	12 Mar 2005 10:12:56 -0000	1.20
--- Content.java	12 Apr 2005 12:38:11 -0000	1.21
***************
*** 295,298 ****
--- 295,306 ----
        this.name = name;
      }
+ 
+     public boolean equals(Object o)
+     {
+       return o instanceof Stream && name.equals(((Stream) o).name);
+     }
+ 
+     public int hashCode() { return name.hashCode(); }
+ 
      InputStream stream;
      String name;
***************
*** 300,336 ****
  
    /**
!      Returns the compiled classes of this source. 
!      
!      This method is valid for sources that were not compiled
!      because they were up-to-date.
!      It returns the classes generated by the compilation of the
!      package denoted by this source.
    */
    Stream[] getClasses(boolean linkPerformed)
    {
!     Stream[] res;
  
      if (!sourceRead)
!       {
! 	res = compiled.getClasses(! linkPerformed);
! 	if (linkPerformed)
! 	  {
! 	    File dispatchFile = new File(getOutputDirectory(), 
! 					 "dispatch.class");
! 	    try{
! 	      res[res.length - 1] = new Stream
! 		(new FileInputStream(dispatchFile), "dispatch.class");
! 	    }
! 	    catch(FileNotFoundException e) {
! 	      Internal.error(pkg + 
! 			     ": dispatch class could not be added to archive" +
! 			     "\nI expected it to be in " + dispatchFile);
! 	    }
! 	  }
!       }
!     else
!       res = DirectoryCompiledContent.getClasses(getOutputDirectory(), true);
  
!     return res;
    }
  }
--- 308,327 ----
  
    /**
!      Returns the compiled classes of this source.
    */
    Stream[] getClasses(boolean linkPerformed)
    {
!     /* We first add the generated classes, then all those compiled classes
!        that were not regenerated. The Set ensures that the previous version of
!        regenerated classes is not included.
!     */
!     Set res = new HashSet();
! 
!     DirectoryCompiledContent.addClasses(res, getOutputDirectory());
  
      if (!sourceRead)
!       compiled.addClasses(res);
  
!     return (Stream[]) res.toArray(new Stream[res.size()]);
    }
  }



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click