You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2011/03/18 15:15:34 UTC
svn commit: r1082930 - in /aries/trunk/spi-fly:
spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java
spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java
Author: davidb
Date: Fri Mar 18 14:15:34 2011
New Revision: 1082930
URL: http://svn.apache.org/viewvc?rev=1082930&view=rev
Log:
More changes to the static tool. WIP
Modified:
aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java
aries/trunk/spi-fly/spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java
Modified: aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java?rev=1082930&r1=1082929&r2=1082930&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/api/SpiFlyConstants.java Fri Mar 18 14:15:34 2011
@@ -22,5 +22,7 @@ public interface SpiFlyConstants {
String SPI_CONSUMER_HEADER = "SPI-Consumer";
String SPI_PROVIDER_HEADER = "SPI-Provider";
+ String PROCESSED_SPI_CONSUMER_HEADER = "X-SpiFly-Processed-SPI-Consumer";
+
String SPI_PROVIDER_URL = "spi.provider.url";
}
Modified: aries/trunk/spi-fly/spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java?rev=1082930&r1=1082929&r2=1082930&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java (original)
+++ aries/trunk/spi-fly/spi-fly-static/src/main/java/org/apache/aries/spifly/statictool/Main.java Fri Mar 18 14:15:34 2011
@@ -24,6 +24,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
@@ -58,25 +59,45 @@ public class Main {
String consumerHeader = manifest.getMainAttributes().getValue(SpiFlyConstants.SPI_CONSUMER_HEADER);
if (consumerHeader != null) {
weaveDir(tempDir, consumerHeader);
- // jar(tempDir, newJar);
+
+ manifest.getMainAttributes().remove(new Attributes.Name(SpiFlyConstants.SPI_CONSUMER_HEADER));
+ manifest.getMainAttributes().putValue(SpiFlyConstants.PROCESSED_SPI_CONSUMER_HEADER, consumerHeader);
+
+ File newJar = getNewJarFile(jarFile);
+ jar(newJar, tempDir, manifest);
}
delTree(tempDir);
- // finally - clean up
+ }
+
+ private static File getNewJarFile(File jarFile) {
+ String s = jarFile.getAbsolutePath();
+ int idx = s.lastIndexOf('.');
+ s = s.substring(0, idx);
+ s += "_spifly.jar";
+ return new File(s);
}
private static void weaveDir(File dir, String consumerHeader) throws IOException {
+ String dirName = dir.getAbsolutePath();
+
DirTree dt = new DirTree(dir);
for (File f : dt.getFiles()) {
if (!f.getName().endsWith(".class"))
continue;
+ String className = f.getAbsolutePath().substring(dirName.length());
+ if (className.startsWith(File.separator))
+ className = className.substring(1);
+ className = className.substring(0, className.length() - ".class".length());
+ className = className.replace(File.separator, ".");
+
WeavingData[] wd = ConsumerHeaderProcessor.processHeader(consumerHeader);
InputStream is = new FileInputStream(f);
byte[] b;
try {
ClassReader cr = new ClassReader(is);
- ClassWriter cw = new ClassWriter(0);
- ClassVisitor cv = new TCCLSetterVisitor(cw, null, wd);
+ ClassWriter cw = new ClassWriter(0);
+ ClassVisitor cv = new TCCLSetterVisitor(cw, className, wd);
cr.accept(cv, 0);
b = cw.toByteArray();
} finally {