dashg-commit Mailing List for dashg (Page 2)
Status: Pre-Alpha
Brought to you by:
dbrosius
You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(40) |
Nov
(2) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
(6) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <dbr...@us...> - 2008-10-28 17:27:11
|
Revision: 25 http://dashg.svn.sourceforge.net/dashg/?rev=25&view=rev Author: dbrosius Date: 2008-10-28 17:27:06 +0000 (Tue, 28 Oct 2008) Log Message: ----------- get rid of old lineOffsets method of getting source lines (to be replaced with DashGSourceWriter interface Modified Paths: -------------- trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java 2008-10-28 17:22:58 UTC (rev 24) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java 2008-10-28 17:27:06 UTC (rev 25) @@ -18,10 +18,6 @@ */ package com.mebigfatguy.dashg; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - import org.objectweb.asm.ClassAdapter; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; @@ -29,14 +25,8 @@ public class DashGClassAdapter extends ClassAdapter { - private final String fullyQualifiedName; - private final Map<String, Map<Integer, Integer>> methodOffsets; - private final Pattern parmsPattern = Pattern.compile("(\\[*)([IJFDBCZS]|L[^;]*;)"); - - public DashGClassAdapter(ClassVisitor visitor, String fileName, String fqn, Map<String, Map<Integer, Integer>> offsets) { + public DashGClassAdapter(ClassVisitor visitor, String fileName) { super(visitor); - fullyQualifiedName = fqn; - methodOffsets = offsets; super.visitSource(fileName, null); } @@ -49,64 +39,7 @@ if (name.equals("<clinit>")) return super.visitMethod(access, name, desc, signature, exceptions); - String nameSig = buildNameParmSig(name, desc); - Map<Integer, Integer> offsets = methodOffsets.get(nameSig); MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); - - if (offsets != null) - return new DashGMethodAdapter(mv, name+desc, offsets); - else - return mv; + return new DashGMethodAdapter(mv, name+desc); } - - private String buildNameParmSig(String name, String parm) { - parm = parm.substring(1); - int lParenPos = parm.lastIndexOf(')'); - parm = parm.substring(0, lParenPos); - - StringBuilder sb = new StringBuilder(name.length() + parm.length()); - if ("<init>".equals(name)) { - name = fullyQualifiedName; - } - sb.append(name); - sb.append("("); - - Matcher m = parmsPattern.matcher(parm); - String comma = ""; - while (m.find()) { - sb.append(comma); - comma = ", "; - - String arraySpec = m.group(1); - String type = m.group(2); - if (type.startsWith("L")) { - type = type.substring(1, type.length() - 1); - type = type.replace('/', '.'); - } else if ("I".equals(type)) { - type = "int"; - } else if ("J".equals(type)) { - type = "long"; - } else if ("F".equals(type)) { - type = "float"; - } else if ("D".equals(type)) { - type = "double"; - } else if ("C".equals(type)) { - type = "char"; - } else if ("B".equals(type)) { - type = "byte"; - } else if ("Z".equals(type)) { - type = "boolean"; - } else if ("S".equals(type)) { - type = "short"; - } - sb.append(type); - for (int i = 0; i < arraySpec.length(); i++) { - sb.append("[]"); - } - } - - sb.append(")"); - return sb.toString(); - } - } Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java 2008-10-28 17:22:58 UTC (rev 24) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java 2008-10-28 17:27:06 UTC (rev 25) @@ -18,20 +18,16 @@ */ package com.mebigfatguy.dashg; -import java.util.Map; - import org.objectweb.asm.Label; import org.objectweb.asm.MethodAdapter; import org.objectweb.asm.MethodVisitor; public class DashGMethodAdapter extends MethodAdapter { - Map<Integer, Integer> lineOffsets; String methodName; - public DashGMethodAdapter(MethodVisitor mv, String name, Map<Integer, Integer> offsets) { + public DashGMethodAdapter(MethodVisitor mv, String name) { super(mv); - lineOffsets = offsets; methodName = name; } @@ -114,7 +110,7 @@ private void addLine() { Label l = new Label(); super.visitLabel(l); - Integer srcLine = lineOffsets.get(Integer.valueOf(l.getOffset())); + Integer srcLine = Integer.valueOf(0); if (srcLine != null) super.visitLineNumber(srcLine.intValue(), l); } Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-28 17:22:58 UTC (rev 24) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-28 17:27:06 UTC (rev 25) @@ -110,13 +110,12 @@ PrintWriter pw = null; try { - String fqn = (packageName != null) ? (packageName + '.' + baseName) : baseName; bis = new BufferedInputStream(new FileInputStream(inputClass)); pw = new PrintWriter(new BufferedWriter(new FileWriter(outputSrc))); ClassReader cr = new ClassReader(bis); ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); - ClassAdapter ca = new DashGClassAdapter(new TraceClassVisitor(cw, new DashGSourceWriter(pw, packageName)), baseName, fqn, methodOffsets); + ClassAdapter ca = new DashGClassAdapter(new TraceClassVisitor(cw, new DashGSourceWriter(pw, packageName)), baseName); cr.accept(ca, 0); byte[] classData = cw.toByteArray(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-28 17:23:03
|
Revision: 24 http://dashg.svn.sourceforge.net/dashg/?rev=24&view=rev Author: dbrosius Date: 2008-10-28 17:22:58 +0000 (Tue, 28 Oct 2008) Log Message: ----------- oi Modified Paths: -------------- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-28 17:22:21 UTC (rev 23) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-28 17:22:58 UTC (rev 24) @@ -20,21 +20,15 @@ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; -import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-28 17:22:27
|
Revision: 23 http://dashg.svn.sourceforge.net/dashg/?rev=23&view=rev Author: dbrosius Date: 2008-10-28 17:22:21 +0000 (Tue, 28 Oct 2008) Log Message: ----------- give valid source code (pc = x) with asm code in comments Modified Paths: -------------- trunk/dashg/src/com/mebigfatguy/dashg/DashGSourceWriter.java Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGSourceWriter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGSourceWriter.java 2008-10-28 17:09:07 UTC (rev 22) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGSourceWriter.java 2008-10-28 17:22:21 UTC (rev 23) @@ -19,6 +19,7 @@ package com.mebigfatguy.dashg; import java.io.PrintWriter; +import java.text.NumberFormat; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -29,16 +30,22 @@ private static final Pattern classPattern = Pattern.compile("(.*)class\\s*([^\\s]*)(.*)"); private static final Pattern methodPattern = Pattern.compile("(.*)\\s+([a-zA-Z0-9<>_]+)\\(([^)]*)\\)([^\\s]+)(\\s+([_a-zA-Z0-9/]*))?"); private static final Pattern fieldPattern = Pattern.compile("([^L]*)\\s+(L[^;]*;)?\\s+(.+)"); + private static final Pattern cruftPattern = Pattern.compile("((L[0-9]+)|(LINENUMBER)|(LOCALVARIABLE)|(MAXSTACK)|(MAXLOCALS)).*"); private final PrintWriter writer; private State state = State.BeforeClass; private String clsName = null; private int lineNumber = 1; + private NumberFormat nf; public DashGSourceWriter(PrintWriter pw, String packageName) { super(pw); writer = pw; + nf = NumberFormat.getIntegerInstance(); + nf.setMinimumIntegerDigits(5); + nf.setGroupingUsed(false); + if ((packageName != null) && (packageName.length() > 0)) { writer.println("import " + packageName + ";"); ++lineNumber; @@ -133,6 +140,15 @@ if (s.length() == 0) { newState = State.InClass; } + if (s.startsWith("//")) + return; + + m = cruftPattern.matcher(s); + if (m.matches()) { + return; + } + + s = "\tPC = " + nf.format(0) + ";\t// " + s; break; } } @@ -147,6 +163,10 @@ if ((state == State.InClass) && (newState == State.InMethod)) { super.print("{\n"); ++lineNumber; + super.print("\tint PC;\n"); + ++lineNumber; + super.print("\n"); + ++lineNumber; } state = newState; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-28 17:09:12
|
Revision: 22 http://dashg.svn.sourceforge.net/dashg/?rev=22&view=rev Author: dbrosius Date: 2008-10-28 17:09:07 +0000 (Tue, 28 Oct 2008) Log Message: ----------- get rid of javap usage, in favor of asm Modified Paths: -------------- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-28 17:07:53 UTC (rev 21) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-28 17:09:07 UTC (rev 22) @@ -17,9 +17,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.mebigfatguy.dashg; + import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -41,6 +43,7 @@ import org.objectweb.asm.ClassAdapter; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.util.TraceClassVisitor; public class DashGTask extends Task { @@ -98,93 +101,28 @@ File destDir = (packagePath == null) ? directory : new File(directory, packagePath); destDir.mkdirs(); - File destSrcFile = new File(destDir, fileBaseName + ".java"); + File dstSrcFile = new File(destDir, fileBaseName + ".java"); File dstClsFile = new File(destDir, fileBaseName + ".class"); - String cmd = "javap -v -private " + ((packageName != null) ? packageName + "." : "") + fileBaseName; - Runtime rt = Runtime.getRuntime(); - Process p = rt.exec(cmd, null, baseDirectory); - parseJavaPFile(p.getInputStream(), destSrcFile, packageName, fileBaseName); - p.waitFor(); - - buildNewClass(new File(baseDirectory, fName), dstClsFile, fileBaseName + ".java", (packageName == null) ? fileBaseName : packageName + "." + fileBaseName); + buildNewClass(new File(baseDirectory, fName), dstSrcFile, dstClsFile, packageName, fileBaseName); } catch (Exception ioe) { throw new BuildException("Failed generating output files for file " + fName, ioe); } } - private void parseJavaPFile(InputStream is, File f, String packageName, String simpleName) throws IOException { - PrintWriter pw = null; - Map<Integer, Integer> offsets = null; - - Pattern methodPattern = Pattern.compile("(public|private|protected)?\\s*(static\\s*)?[a-zA-Z0-9.$<>?]*\\s*[a-zA-Z0-9]*\\([^\\)]*\\)[^;]*;"); - Pattern linePattern = Pattern.compile("\\s*([0-9]*):.*"); - Pattern simpleNameSigPattern = Pattern.compile("\\s([^\\s(]*\\([^)]*\\))"); - - try { - pw = new PrintWriter(new FileWriter(f)); - if (packageName != null) - pw.println("package " + packageName +';'); - else - pw.println(); - pw.println(); - pw.println("class " + simpleName + " {"); - pw.println("/*"); - int lineNumber = 4; - - State state = State.LookForMethod; - - BufferedReader br = new BufferedReader(new InputStreamReader(is)); - - String line = br.readLine(); - while (line != null) { - lineNumber++; - switch (state) { - case LookForMethod: - Matcher m = methodPattern.matcher(line); - if (m.matches()) { - offsets = new LinkedHashMap<Integer, Integer>(); - m = simpleNameSigPattern.matcher(line); - if (m.find()) { - methodOffsets.put(m.group(1), offsets); - } - state = State.ProcessLine; - } - break; - - case ProcessLine: - if (line.length() == 0) - state = State.LookForMethod; - else { - m = linePattern.matcher(line); - if (m.matches()) { - offsets.put(Integer.valueOf(m.group(1)), Integer.valueOf(lineNumber)); - } - } - break; - } - - line = line.replaceAll("/\\*", "-start comment-"); - line = line.replaceAll("\\*/", "-end comment-"); - pw.println(line); - line = br.readLine(); - } - pw.println("*/"); - pw.println("}"); - } finally { - DashGCloser.close(pw); - } - } - - public void buildNewClass(File inputClass, File outputClass, String sourceName, String fqn) throws IOException { + public void buildNewClass(File inputClass, File outputSrc, File outputClass, String packageName, String baseName) throws IOException { BufferedInputStream bis = null; BufferedOutputStream bos = null; + PrintWriter pw = null; try { + String fqn = (packageName != null) ? (packageName + '.' + baseName) : baseName; bis = new BufferedInputStream(new FileInputStream(inputClass)); + pw = new PrintWriter(new BufferedWriter(new FileWriter(outputSrc))); ClassReader cr = new ClassReader(bis); ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); - ClassAdapter ca = new DashGClassAdapter(cw, sourceName, fqn, methodOffsets); + + ClassAdapter ca = new DashGClassAdapter(new TraceClassVisitor(cw, new DashGSourceWriter(pw, packageName)), baseName, fqn, methodOffsets); cr.accept(ca, 0); byte[] classData = cw.toByteArray(); @@ -196,6 +134,7 @@ } finally { DashGCloser.close(bis); DashGCloser.close(bos); + DashGCloser.close(pw); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-28 17:07:58
|
Revision: 21 http://dashg.svn.sourceforge.net/dashg/?rev=21&view=rev Author: dbrosius Date: 2008-10-28 17:07:53 +0000 (Tue, 28 Oct 2008) Log Message: ----------- A writer to generate source files and collect line numbers to replace using javap Added Paths: ----------- trunk/dashg/src/com/mebigfatguy/dashg/DashGSourceWriter.java Added: trunk/dashg/src/com/mebigfatguy/dashg/DashGSourceWriter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGSourceWriter.java (rev 0) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGSourceWriter.java 2008-10-28 17:07:53 UTC (rev 21) @@ -0,0 +1,207 @@ +/* + * dashg - A debug symbols (-g) injector + * Copyright (C) 2008 Dave Brosius + * + * This library 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 library 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 library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package com.mebigfatguy.dashg; + +import java.io.PrintWriter; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class DashGSourceWriter extends PrintWriter { + + enum State {BeforeClass, InClass, InMethod}; + + private static final Pattern classPattern = Pattern.compile("(.*)class\\s*([^\\s]*)(.*)"); + private static final Pattern methodPattern = Pattern.compile("(.*)\\s+([a-zA-Z0-9<>_]+)\\(([^)]*)\\)([^\\s]+)(\\s+([_a-zA-Z0-9/]*))?"); + private static final Pattern fieldPattern = Pattern.compile("([^L]*)\\s+(L[^;]*;)?\\s+(.+)"); + + private final PrintWriter writer; + private State state = State.BeforeClass; + private String clsName = null; + private int lineNumber = 1; + + public DashGSourceWriter(PrintWriter pw, String packageName) { + super(pw); + writer = pw; + + if ((packageName != null) && (packageName.length() > 0)) { + writer.println("import " + packageName + ";"); + ++lineNumber; + } + } + + @Override + public void print(String s) { + String[] lines = s.split("\n"); + for (String l : lines) { + processLine(l); + ++lineNumber; + } + } + + private void processLine(String s) { + State newState = state; + + s = s.trim(); + if (!s.startsWith("//")) { + switch (state) { + case BeforeClass: + if (s.contains(" class ")) { + Matcher m = classPattern.matcher(s); + if (m.matches()) { + String atts = m.group(1); + clsName = m.group(2); + String ext = m.group(3); + + int slashPos = clsName.lastIndexOf('/'); + if (slashPos >= 0) + clsName = clsName.substring(slashPos+1); + + s = atts + "class " + clsName + ext.replace('/', '.'); + newState = State.InClass; + } + } + break; + + case InClass: + Matcher m = methodPattern.matcher(s); + if (m.matches()) { + m = methodPattern.matcher(s); + if (m.matches()) { + String atts = m.group(1); + String name = m.group(2); + String parms = m.group(3); + String ret = m.group(4); + String thr = m.group(6); + + if ("<init>".equals(name)) { + name = clsName; + } + + StringBuilder realParms = new StringBuilder(); + String comma = ""; + int parmNum = atts.contains("static") ? 0 : 1; + while (parms.length() > 0) { + realParms.append(comma); + comma = ", "; + String type = convertType(parms); + realParms.append(type); + realParms.append(' '); + realParms.append(parmName(type, parmNum)); + parmNum += typeSize(type); + parms = skipType(parms); + } + parms = realParms.toString(); + + if (thr == null) + thr = ""; + else + thr = thr.replace('/', '.'); + s = atts + ' ' + convertType(ret) + ' ' + name + '(' + parms + ')' + thr; + } + newState = State.InMethod; + } else { + m = fieldPattern.matcher(s); + if (m.matches()) { + String type = m.group(2); + if (type != null) { + type = convertType(type); + s = m.group(1) + ' ' + type + ' ' + m.group(3); + } + + s += ";"; + } + } + break; + + case InMethod: + if (s.length() == 0) { + newState = State.InClass; + } + break; + } + } + + if ((newState == State.InClass) && (state == State.InMethod)) { + super.print("}\n"); + ++lineNumber; + } + + super.print(s + "\n"); + + if ((state == State.InClass) && (newState == State.InMethod)) { + super.print("{\n"); + ++lineNumber; + } + + state = newState; + } + + private String convertType(String type) { + char c = type.charAt(0); + switch (c) { + case 'L': + return type.substring(1, type.indexOf(';')).replace('/', '.'); + case '[': + return convertType(type.substring(1)) + "[]"; + case 'C': + return "char"; + case 'B': + return "byte"; + case 'S': + return "short"; + case 'I': + return "int"; + case 'J': + return "long"; + case 'F': + return "float"; + case 'D': + return "double"; + case 'Z': + return "boolean"; + case 'V': + return "void"; + } + throw new RuntimeException("Type not processed: " + type); + } + + private int typeSize(String typeName) { + return ("long".equals(typeName) || "double".equals(typeName)) ? 2 : 1; + } + + private String parmName(String type, int parmNum) { + int dotPos = type.lastIndexOf('.'); + if (dotPos >= 0) + type = type.substring(dotPos+1); + return type.toLowerCase() + parmNum; + } + + private String skipType(String type) { + if (type.length() == 0) + return type; + + if (type.charAt(0) == '[') + return skipType(type.substring(1)); + + if (type.charAt(0) == 'L') + return type.substring(type.indexOf(';') + 1); + + return type.substring(1); + } +} Property changes on: trunk/dashg/src/com/mebigfatguy/dashg/DashGSourceWriter.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-28 13:38:53
|
Revision: 20 http://dashg.svn.sourceforge.net/dashg/?rev=20&view=rev Author: dbrosius Date: 2008-10-28 13:38:49 +0000 (Tue, 28 Oct 2008) Log Message: ----------- add asm-util Modified Paths: -------------- trunk/dashg/build.xml Modified: trunk/dashg/build.xml =================================================================== --- trunk/dashg/build.xml 2008-10-28 13:35:15 UTC (rev 19) +++ trunk/dashg/build.xml 2008-10-28 13:38:49 UTC (rev 20) @@ -47,6 +47,7 @@ <mkdir dir="${javadoc.dir}"/> <path id="dashg.classpath"> <pathelement location="${lib.dir}/asm-3.1.jar"/> + <pathelement location="${lib.dir}/asm-util-3.1.jar"/> <pathelement location="${lib.dir}/ant.jar"/> </path> <mkdir dir="${classes.dir}/com"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-28 13:35:20
|
Revision: 19 http://dashg.svn.sourceforge.net/dashg/?rev=19&view=rev Author: dbrosius Date: 2008-10-28 13:35:15 +0000 (Tue, 28 Oct 2008) Log Message: ----------- now using TraceClassVisitor Added Paths: ----------- trunk/dashg/lib/asm-util-3.1.jar Added: trunk/dashg/lib/asm-util-3.1.jar =================================================================== (Binary files differ) Property changes on: trunk/dashg/lib/asm-util-3.1.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-26 00:53:58
|
Revision: 18 http://dashg.svn.sourceforge.net/dashg/?rev=18&view=rev Author: dbrosius Date: 2008-10-26 00:53:53 +0000 (Sun, 26 Oct 2008) Log Message: ----------- just get rid of */ and */ from javap output Modified Paths: -------------- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-26 00:45:37 UTC (rev 17) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-26 00:53:53 UTC (rev 18) @@ -164,8 +164,8 @@ break; } - line = line.replaceAll("/\\*", "'/*'"); - line = line.replaceAll("\\*/", "'*/'"); + line = line.replaceAll("/\\*", "-start comment-"); + line = line.replaceAll("\\*/", "-end comment-"); pw.println(line); line = br.readLine(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-26 00:45:38
|
Revision: 17 http://dashg.svn.sourceforge.net/dashg/?rev=17&view=rev Author: dbrosius Date: 2008-10-26 00:45:37 +0000 (Sun, 26 Oct 2008) Log Message: ----------- fix src generation, and remove trace Modified Paths: -------------- trunk/dashg/.classpath trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/.classpath =================================================================== --- trunk/dashg/.classpath 2008-10-25 21:19:06 UTC (rev 16) +++ trunk/dashg/.classpath 2008-10-26 00:45:37 UTC (rev 17) @@ -3,6 +3,7 @@ <classpathentry kind="src" path="src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="lib" path="lib/ant.jar"/> - <classpathentry kind="lib" path="lib/asm-3.1.jar"/> + <classpathentry kind="lib" path="lib/asm-3.1.jar" sourcepath="C:/asmsrc/asm-3.1/src"/> + <classpathentry kind="lib" path="lib/asm-util-3.1.jar" sourcepath="C:/asmsrc/asm-3.1/src"/> <classpathentry kind="output" path="classes"/> </classpath> Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 21:19:06 UTC (rev 16) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-26 00:45:37 UTC (rev 17) @@ -41,7 +41,6 @@ import org.objectweb.asm.ClassAdapter; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.util.TraceClassVisitor; public class DashGTask extends Task { @@ -125,7 +124,7 @@ try { pw = new PrintWriter(new FileWriter(f)); if (packageName != null) - pw.println("package " + packageName); + pw.println("package " + packageName +';'); else pw.println(); pw.println(); @@ -166,6 +165,7 @@ } line = line.replaceAll("/\\*", "'/*'"); + line = line.replaceAll("\\*/", "'*/'"); pw.println(line); line = br.readLine(); } @@ -184,7 +184,7 @@ bis = new BufferedInputStream(new FileInputStream(inputClass)); ClassReader cr = new ClassReader(bis); ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); - ClassAdapter ca = new DashGClassAdapter(new TraceClassVisitor(cw, new PrintWriter(System.err)), sourceName, fqn, methodOffsets); + ClassAdapter ca = new DashGClassAdapter(cw, sourceName, fqn, methodOffsets); cr.accept(ca, 0); byte[] classData = cw.toByteArray(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 21:19:07
|
Revision: 16 http://dashg.svn.sourceforge.net/dashg/?rev=16&view=rev Author: dbrosius Date: 2008-10-25 21:19:06 +0000 (Sat, 25 Oct 2008) Log Message: ----------- add findbugs file Added Paths: ----------- trunk/dashg/dashg.fb Added: trunk/dashg/dashg.fb =================================================================== --- trunk/dashg/dashg.fb (rev 0) +++ trunk/dashg/dashg.fb 2008-10-25 21:19:06 UTC (rev 16) @@ -0,0 +1,10 @@ +[Jar files] +.\classes +[Source dirs] +.\src +[Aux classpath entries] +.\lib\ant.jar +.\lib\asm-3.1.jar +.\lib\asm-util-3.1.jar +[Options] +relative_paths=true Property changes on: trunk/dashg/dashg.fb ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 21:14:07
|
Revision: 15 http://dashg.svn.sourceforge.net/dashg/?rev=15&view=rev Author: dbrosius Date: 2008-10-25 21:14:02 +0000 (Sat, 25 Oct 2008) Log Message: ----------- remove unused Modified Paths: -------------- trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java 2008-10-25 14:29:48 UTC (rev 14) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java 2008-10-25 21:14:02 UTC (rev 15) @@ -30,14 +30,12 @@ public class DashGClassAdapter extends ClassAdapter { private final String fullyQualifiedName; - private final String className; private final Map<String, Map<Integer, Integer>> methodOffsets; private final Pattern parmsPattern = Pattern.compile("(\\[*)([IJFDBCZS]|L[^;]*;)"); - public DashGClassAdapter(ClassVisitor visitor, String fileName, String fqn, String clsName, Map<String, Map<Integer, Integer>> offsets) { + public DashGClassAdapter(ClassVisitor visitor, String fileName, String fqn, Map<String, Map<Integer, Integer>> offsets) { super(visitor); fullyQualifiedName = fqn; - className = clsName; methodOffsets = offsets; super.visitSource(fileName, null); } Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 14:29:48 UTC (rev 14) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 21:14:02 UTC (rev 15) @@ -41,6 +41,7 @@ import org.objectweb.asm.ClassAdapter; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.util.TraceClassVisitor; public class DashGTask extends Task { @@ -107,7 +108,7 @@ parseJavaPFile(p.getInputStream(), destSrcFile, packageName, fileBaseName); p.waitFor(); - buildNewClass(new File(baseDirectory, fName), dstClsFile, fileBaseName + ".java", (packageName == null) ? fileBaseName : packageName + "." + fileBaseName, fileBaseName); + buildNewClass(new File(baseDirectory, fName), dstClsFile, fileBaseName + ".java", (packageName == null) ? fileBaseName : packageName + "." + fileBaseName); } catch (Exception ioe) { throw new BuildException("Failed generating output files for file " + fName, ioe); } @@ -175,7 +176,7 @@ } } - public void buildNewClass(File inputClass, File outputClass, String sourceName, String fqn, String className) throws IOException { + public void buildNewClass(File inputClass, File outputClass, String sourceName, String fqn) throws IOException { BufferedInputStream bis = null; BufferedOutputStream bos = null; @@ -183,7 +184,7 @@ bis = new BufferedInputStream(new FileInputStream(inputClass)); ClassReader cr = new ClassReader(bis); ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); - ClassAdapter ca = new DashGClassAdapter(cw, sourceName, fqn, className, methodOffsets); + ClassAdapter ca = new DashGClassAdapter(new TraceClassVisitor(cw, new PrintWriter(System.err)), sourceName, fqn, methodOffsets); cr.accept(ca, 0); byte[] classData = cw.toByteArray(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 14:29:52
|
Revision: 14 http://dashg.svn.sourceforge.net/dashg/?rev=14&view=rev Author: dbrosius Date: 2008-10-25 14:29:48 +0000 (Sat, 25 Oct 2008) Log Message: ----------- support parsing inner classes (add $) Modified Paths: -------------- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 14:19:54 UTC (rev 13) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 14:29:48 UTC (rev 14) @@ -117,7 +117,7 @@ PrintWriter pw = null; Map<Integer, Integer> offsets = null; - Pattern methodPattern = Pattern.compile("(public|private|protected)?\\s*(static\\s*)?[a-zA-Z0-9.<>?]*\\s*[a-zA-Z0-9]*\\([^\\)]*\\)[^;]*;"); + Pattern methodPattern = Pattern.compile("(public|private|protected)?\\s*(static\\s*)?[a-zA-Z0-9.$<>?]*\\s*[a-zA-Z0-9]*\\([^\\)]*\\)[^;]*;"); Pattern linePattern = Pattern.compile("\\s*([0-9]*):.*"); Pattern simpleNameSigPattern = Pattern.compile("\\s([^\\s(]*\\([^)]*\\))"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 14:19:57
|
Revision: 13 http://dashg.svn.sourceforge.net/dashg/?rev=13&view=rev Author: dbrosius Date: 2008-10-25 14:19:54 +0000 (Sat, 25 Oct 2008) Log Message: ----------- fix differences in ctors between javap and asm Modified Paths: -------------- trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java 2008-10-25 07:26:30 UTC (rev 12) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java 2008-10-25 14:19:54 UTC (rev 13) @@ -29,12 +29,14 @@ public class DashGClassAdapter extends ClassAdapter { + private final String fullyQualifiedName; private final String className; private final Map<String, Map<Integer, Integer>> methodOffsets; private final Pattern parmsPattern = Pattern.compile("(\\[*)([IJFDBCZS]|L[^;]*;)"); - public DashGClassAdapter(ClassVisitor visitor, String fileName, String clsName, Map<String, Map<Integer, Integer>> offsets) { + public DashGClassAdapter(ClassVisitor visitor, String fileName, String fqn, String clsName, Map<String, Map<Integer, Integer>> offsets) { super(visitor); + fullyQualifiedName = fqn; className = clsName; methodOffsets = offsets; super.visitSource(fileName, null); @@ -46,6 +48,9 @@ @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + if (name.equals("<clinit>")) + return super.visitMethod(access, name, desc, signature, exceptions); + String nameSig = buildNameParmSig(name, desc); Map<Integer, Integer> offsets = methodOffsets.get(nameSig); MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); @@ -63,7 +68,7 @@ StringBuilder sb = new StringBuilder(name.length() + parm.length()); if ("<init>".equals(name)) { - name = className; + name = fullyQualifiedName; } sb.append(name); sb.append("("); Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 07:26:30 UTC (rev 12) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 14:19:54 UTC (rev 13) @@ -72,6 +72,7 @@ DirectoryScanner ds = classSource.getDirectoryScanner(); String[] files = ds.getIncludedFiles(); for (String fName : files) { + methodOffsets.clear(); if (!fName.endsWith(".class")) continue; generateDashGFiles(ds.getBasedir(), fName); @@ -106,7 +107,7 @@ parseJavaPFile(p.getInputStream(), destSrcFile, packageName, fileBaseName); p.waitFor(); - buildNewClass(new File(baseDirectory, fName), dstClsFile, fileBaseName + ".java", packageName + "." + fileBaseName, fileBaseName); + buildNewClass(new File(baseDirectory, fName), dstClsFile, fileBaseName + ".java", (packageName == null) ? fileBaseName : packageName + "." + fileBaseName, fileBaseName); } catch (Exception ioe) { throw new BuildException("Failed generating output files for file " + fName, ioe); } @@ -116,7 +117,7 @@ PrintWriter pw = null; Map<Integer, Integer> offsets = null; - Pattern methodPattern = Pattern.compile("(public|private|protected)?\\s*(static\\s*)?[a-zA-Z0-9<>?]*\\s*[a-zA-Z0-9]*\\([^\\)]*\\)[^;]*;"); + Pattern methodPattern = Pattern.compile("(public|private|protected)?\\s*(static\\s*)?[a-zA-Z0-9.<>?]*\\s*[a-zA-Z0-9]*\\([^\\)]*\\)[^;]*;"); Pattern linePattern = Pattern.compile("\\s*([0-9]*):.*"); Pattern simpleNameSigPattern = Pattern.compile("\\s([^\\s(]*\\([^)]*\\))"); @@ -174,7 +175,7 @@ } } - public void buildNewClass(File inputClass, File outputClass, String sourceName, String packageName, String className) throws IOException { + public void buildNewClass(File inputClass, File outputClass, String sourceName, String fqn, String className) throws IOException { BufferedInputStream bis = null; BufferedOutputStream bos = null; @@ -182,7 +183,7 @@ bis = new BufferedInputStream(new FileInputStream(inputClass)); ClassReader cr = new ClassReader(bis); ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); - ClassAdapter ca = new DashGClassAdapter(cw, sourceName, className, methodOffsets); + ClassAdapter ca = new DashGClassAdapter(cw, sourceName, fqn, className, methodOffsets); cr.accept(ca, 0); byte[] classData = cw.toByteArray(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 07:26:32
|
Revision: 12 http://dashg.svn.sourceforge.net/dashg/?rev=12&view=rev Author: dbrosius Date: 2008-10-25 07:26:30 +0000 (Sat, 25 Oct 2008) Log Message: ----------- better byte offset to line calculations Modified Paths: -------------- trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java 2008-10-25 07:05:27 UTC (rev 11) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java 2008-10-25 07:26:30 UTC (rev 12) @@ -18,10 +18,8 @@ */ package com.mebigfatguy.dashg; -import java.util.Iterator; import java.util.Map; -import org.apache.tools.ant.BuildException; import org.objectweb.asm.Label; import org.objectweb.asm.MethodAdapter; import org.objectweb.asm.MethodVisitor; @@ -29,14 +27,12 @@ public class DashGMethodAdapter extends MethodAdapter { Map<Integer, Integer> lineOffsets; - Iterator<Integer> lineIt; String methodName; public DashGMethodAdapter(MethodVisitor mv, String name, Map<Integer, Integer> offsets) { super(mv); lineOffsets = offsets; methodName = name; - lineIt = lineOffsets.keySet().iterator(); } @Override @@ -116,11 +112,10 @@ } private void addLine() { - if (lineIt.hasNext()) { - Label l = new Label(); - super.visitLabel(l); - super.visitLineNumber(lineIt.next().intValue(), l); - } else - throw new BuildException("Prematurely ran out of line numbers for method " + methodName); + Label l = new Label(); + super.visitLabel(l); + Integer srcLine = lineOffsets.get(Integer.valueOf(l.getOffset())); + if (srcLine != null) + super.visitLineNumber(srcLine.intValue(), l); } } Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 07:05:27 UTC (rev 11) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 07:26:30 UTC (rev 12) @@ -116,7 +116,7 @@ PrintWriter pw = null; Map<Integer, Integer> offsets = null; - Pattern methodPattern = Pattern.compile("(public|private|protected)?\\s*[a-zA-Z0-9<>?]*\\s*[a-zA-Z0-9]*\\([^\\)]*\\)[^;]*;"); + Pattern methodPattern = Pattern.compile("(public|private|protected)?\\s*(static\\s*)?[a-zA-Z0-9<>?]*\\s*[a-zA-Z0-9]*\\([^\\)]*\\)[^;]*;"); Pattern linePattern = Pattern.compile("\\s*([0-9]*):.*"); Pattern simpleNameSigPattern = Pattern.compile("\\s([^\\s(]*\\([^)]*\\))"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 07:05:33
|
Revision: 11 http://dashg.svn.sourceforge.net/dashg/?rev=11&view=rev Author: dbrosius Date: 2008-10-25 07:05:27 +0000 (Sat, 25 Oct 2008) Log Message: ----------- handle arrays and ctors Modified Paths: -------------- trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java 2008-10-25 06:43:53 UTC (rev 10) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java 2008-10-25 07:05:27 UTC (rev 11) @@ -29,13 +29,13 @@ public class DashGClassAdapter extends ClassAdapter { - private final String fullPackageName; + private final String className; private final Map<String, Map<Integer, Integer>> methodOffsets; - private final Pattern parmsPattern = Pattern.compile("([IJFDBCZS]|L[^;]*;)"); + private final Pattern parmsPattern = Pattern.compile("(\\[*)([IJFDBCZS]|L[^;]*;)"); - public DashGClassAdapter(ClassVisitor visitor, String fileName, String packageName, Map<String, Map<Integer, Integer>> offsets) { + public DashGClassAdapter(ClassVisitor visitor, String fileName, String clsName, Map<String, Map<Integer, Integer>> offsets) { super(visitor); - fullPackageName = packageName; + className = clsName; methodOffsets = offsets; super.visitSource(fileName, null); } @@ -63,7 +63,7 @@ StringBuilder sb = new StringBuilder(name.length() + parm.length()); if ("<init>".equals(name)) { - name = fullPackageName; + name = className; } sb.append(name); sb.append("("); @@ -74,7 +74,8 @@ sb.append(comma); comma = ", "; - String type = m.group(1); + String arraySpec = m.group(1); + String type = m.group(2); if (type.startsWith("L")) { type = type.substring(1, type.length() - 1); type = type.replace('/', '.'); @@ -96,6 +97,9 @@ type = "short"; } sb.append(type); + for (int i = 0; i < arraySpec.length(); i++) { + sb.append("[]"); + } } sb.append(")"); Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 06:43:53 UTC (rev 10) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 07:05:27 UTC (rev 11) @@ -106,7 +106,7 @@ parseJavaPFile(p.getInputStream(), destSrcFile, packageName, fileBaseName); p.waitFor(); - buildNewClass(new File(baseDirectory, fName), dstClsFile, fileBaseName + ".java", packageName + "." + fileBaseName); + buildNewClass(new File(baseDirectory, fName), dstClsFile, fileBaseName + ".java", packageName + "." + fileBaseName, fileBaseName); } catch (Exception ioe) { throw new BuildException("Failed generating output files for file " + fName, ioe); } @@ -174,7 +174,7 @@ } } - public void buildNewClass(File inputClass, File outputClass, String sourceName, String packageName) throws IOException { + public void buildNewClass(File inputClass, File outputClass, String sourceName, String packageName, String className) throws IOException { BufferedInputStream bis = null; BufferedOutputStream bos = null; @@ -182,7 +182,7 @@ bis = new BufferedInputStream(new FileInputStream(inputClass)); ClassReader cr = new ClassReader(bis); ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); - ClassAdapter ca = new DashGClassAdapter(cw, sourceName, packageName, methodOffsets); + ClassAdapter ca = new DashGClassAdapter(cw, sourceName, className, methodOffsets); cr.accept(ca, 0); byte[] classData = cw.toByteArray(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 06:43:55
|
Revision: 10 http://dashg.svn.sourceforge.net/dashg/?rev=10&view=rev Author: dbrosius Date: 2008-10-25 06:43:53 +0000 (Sat, 25 Oct 2008) Log Message: ----------- remove asm-util reference Modified Paths: -------------- trunk/dashg/.classpath Modified: trunk/dashg/.classpath =================================================================== --- trunk/dashg/.classpath 2008-10-25 06:12:13 UTC (rev 9) +++ trunk/dashg/.classpath 2008-10-25 06:43:53 UTC (rev 10) @@ -4,6 +4,5 @@ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="lib" path="lib/ant.jar"/> <classpathentry kind="lib" path="lib/asm-3.1.jar"/> - <classpathentry kind="lib" path="lib/asm-util-3.1.jar"/> <classpathentry kind="output" path="classes"/> </classpath> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 06:12:16
|
Revision: 9 http://dashg.svn.sourceforge.net/dashg/?rev=9&view=rev Author: dbrosius Date: 2008-10-25 06:12:13 +0000 (Sat, 25 Oct 2008) Log Message: ----------- add test target that runs against itself Modified Paths: -------------- trunk/dashg/build.xml trunk/dashg/src/Drvr.java trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/build.xml =================================================================== --- trunk/dashg/build.xml 2008-10-25 05:46:10 UTC (rev 8) +++ trunk/dashg/build.xml 2008-10-25 06:12:13 UTC (rev 9) @@ -116,4 +116,13 @@ <target name="release" depends="build, srczip, javadoc" description="prepares everything for a release"/> + <target name="test" depends="build"> + <taskdef name="dashg" classname="com.mebigfatguy.dashg.DashGTask" classpath="${basedir}/dashg-${dashg.version}.jar;${lib.dir}/asm-3.1.jar"/> + <delete dir="${basedir}/test_output"/> + <dashg outputdirectory="${basedir}/test_output"> + <fileset dir="${classes.dir}"> + <include name="**/*.class"/> + </fileset> + </dashg> + </target> </project> \ No newline at end of file Modified: trunk/dashg/src/Drvr.java =================================================================== --- trunk/dashg/src/Drvr.java 2008-10-25 05:46:10 UTC (rev 8) +++ trunk/dashg/src/Drvr.java 2008-10-25 06:12:13 UTC (rev 9) @@ -35,7 +35,7 @@ DashGTask task = new DashGTask(); task.setProject(p); - task.setFileset(fs); + task.addConfiguredFileset(fs); task.setOutputdirectory(outputDir); task.execute(); Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 05:46:10 UTC (rev 8) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 06:12:13 UTC (rev 9) @@ -52,7 +52,7 @@ File directory; Map<String, Map<Integer, Integer>> methodOffsets = new HashMap<String, Map<Integer, Integer>>(); - public void setFileset(FileSet source) { + public void addConfiguredFileset(FileSet source) { classSource = source; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 05:46:13
|
Revision: 8 http://dashg.svn.sourceforge.net/dashg/?rev=8&view=rev Author: dbrosius Date: 2008-10-25 05:46:10 +0000 (Sat, 25 Oct 2008) Log Message: ----------- Initial Checkin Added Paths: ----------- trunk/dashg/build.xml Added: trunk/dashg/build.xml =================================================================== --- trunk/dashg/build.xml (rev 0) +++ trunk/dashg/build.xml 2008-10-25 05:46:10 UTC (rev 8) @@ -0,0 +1,119 @@ +<!-- +/* + * dashg - A debug symbols (-g) injector + * Copyright (C) 2008 Dave Brosius + * + * This library 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 library 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 library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +--> + +<project name="dashg" default="build"> + + <property file="build.properties"/> + + <property name="src.dir" value="${basedir}/src"/> + <property name="classes.dir" value="${basedir}/classes"/> + <property name="lib.dir" value="${basedir}/lib"/> + <property name="javadoc.dir" value="${basedir}/javadoc"/> + <property name="htdocs.dir" value="${basedir}/htdocs"/> + <property name="javac.source" value="1.5"/> + <property name="javac.target" value="1.5"/> + <property name="javac.deprecation" value="on"/> + <property name="javac.debug" value="on"/> + + <property name="dashg.version" value="0.1.0"/> + + <target name="clean" description="removes all generated collateral"> + <delete dir="${classes.dir}"/> + <delete dir="${javadoc.dir}"/> + <delete file="${basedir}/dashg-${dashg.version}.jar"/> + <delete file="${basedir}/dashg-src-${dashg.version}.zip"/> + </target> + + <target name="-init" description="prepares repository for a build"> + <mkdir dir="${classes.dir}"/> + <mkdir dir="${javadoc.dir}"/> + <path id="dashg.classpath"> + <pathelement location="${lib.dir}/asm-3.1.jar"/> + <pathelement location="${lib.dir}/ant.jar"/> + </path> + <mkdir dir="${classes.dir}/com"/> + <mkdir dir="${classes.dir}/com/mebigfatguy"/> + <mkdir dir="${classes.dir}/com/mebigfatguy/dashg"/> + <mkdir dir="${classes.dir}/com/mebigfatguy/dashg"/> + <echo message="*.class" file="${classes.dir}/com/mebigfatguy/dashg/.cvsignore"/> + </target> + + <target name="compile" depends="-init" description="compiles java files"> + <javac srcdir="${src.dir}" + destdir="${classes.dir}" + source="${javac.source}" + target="${javac.target}" + deprecation="${javac.deprecation}" + debug="${javac.debug}"> + <classpath refid="dashg.classpath"/> + </javac> + </target> + + <target name="jar" depends="compile" description="produces the dashg jar file"> + <jar destfile="${basedir}/dashg-${dashg.version}.jar"> + <fileset dir="${classes.dir}"> + <include name="**/*.class"/> + </fileset> + <fileset dir="${basedir}"> + <include name="license.txt"/> + </fileset> + <manifest> + <attribute name="dashg-version" value="${dashg.version}"/> + <attribute name="Main-Class" value="com.mebigfatguy.dashg.Drvr"/> + <attribute name="Bundle-ManifestVersion" value="2"/> + <attribute name="Bundle-Name" value="dashg plugin"/> + <attribute name="Bundle-SymbolicName" value="com.mebigfatguy.dashg"/> + <attribute name="Bundle-Version" value="${dashg.version}"/> + <attribute name="Import-Package" value="org.apache.tools.ant,org.apache.tools.ant.types,org.objectweb.asm"/> + <attribute name="Export-Package" value="com.mebigfatguy.dashg"/> + </manifest> + </jar> + </target> + + <target name="srczip" description="builds the source distribution zip file"> + <zip destfile="${basedir}/dashg-src-${dashg.version}.zip" basedir="${basedir}"> + <fileset dir="${src.dir}"> + <include name="**/*.java"/> + <include name="**/*.license"/> + <include name="**/*.txt"/> + <include name="lib/*.jar"/> + </fileset> + </zip> + </target> + + <target name="javadoc" depends="-init" description="build the javadoc for the project"> + <javadoc packagenames="com.mebigfatguy.*" + sourcepath="${src.dir}" + classpathref="dashg.classpath" + destdir="${javadoc.dir}" + windowtitle="dashg api"> + <doctitle><![CDATA[<h1>dashg javadoc</h1>]]></doctitle> + <bottom><![CDATA[<i>Copyright © 2008 MeBigFatGuy.com. All Rights Reserved.</i>]]></bottom> + </javadoc> + </target> + + + <target name="build" depends="clean, -init, compile, jar" description="builds the ant task jar"> + </target> + + <target name="release" depends="build, srczip, javadoc" description="prepares everything for a release"/> + +</project> \ No newline at end of file Property changes on: trunk/dashg/build.xml ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 05:34:25
|
Revision: 7 http://dashg.svn.sourceforge.net/dashg/?rev=7&view=rev Author: dbrosius Date: 2008-10-25 05:34:22 +0000 (Sat, 25 Oct 2008) Log Message: ----------- add LGPL license Added Paths: ----------- trunk/dashg/license.txt Added: trunk/dashg/license.txt =================================================================== --- trunk/dashg/license.txt (rev 0) +++ trunk/dashg/license.txt 2008-10-25 05:34:22 UTC (rev 7) @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library 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 library 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 library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + Property changes on: trunk/dashg/license.txt ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 05:31:43
|
Revision: 6 http://dashg.svn.sourceforge.net/dashg/?rev=6&view=rev Author: dbrosius Date: 2008-10-25 05:31:41 +0000 (Sat, 25 Oct 2008) Log Message: ----------- add copyright Modified Paths: -------------- trunk/dashg/src/Drvr.java trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java trunk/dashg/src/com/mebigfatguy/dashg/DashGCloser.java trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Modified: trunk/dashg/src/Drvr.java =================================================================== --- trunk/dashg/src/Drvr.java 2008-10-25 05:24:20 UTC (rev 5) +++ trunk/dashg/src/Drvr.java 2008-10-25 05:31:41 UTC (rev 6) @@ -1,3 +1,21 @@ +/* + * dashg - A debug symbols (-g) injector + * Copyright (C) 2008 Dave Brosius + * + * This library 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 library 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 library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ import java.io.File; import org.apache.tools.ant.Project; Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java 2008-10-25 05:24:20 UTC (rev 5) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java 2008-10-25 05:31:41 UTC (rev 6) @@ -1,3 +1,21 @@ +/* + * dashg - A debug symbols (-g) injector + * Copyright (C) 2008 Dave Brosius + * + * This library 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 library 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 library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ package com.mebigfatguy.dashg; import java.util.Map; Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGCloser.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGCloser.java 2008-10-25 05:24:20 UTC (rev 5) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGCloser.java 2008-10-25 05:31:41 UTC (rev 6) @@ -1,3 +1,21 @@ +/* + * dashg - A debug symbols (-g) injector + * Copyright (C) 2008 Dave Brosius + * + * This library 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 library 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 library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ package com.mebigfatguy.dashg; import java.io.Closeable; Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java 2008-10-25 05:24:20 UTC (rev 5) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java 2008-10-25 05:31:41 UTC (rev 6) @@ -1,3 +1,21 @@ +/* + * dashg - A debug symbols (-g) injector + * Copyright (C) 2008 Dave Brosius + * + * This library 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 library 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 library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ package com.mebigfatguy.dashg; import java.util.Iterator; Modified: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 05:24:20 UTC (rev 5) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 05:31:41 UTC (rev 6) @@ -1,3 +1,21 @@ +/* + * dashg - A debug symbols (-g) injector + * Copyright (C) 2008 Dave Brosius + * + * This library 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 library 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 library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ package com.mebigfatguy.dashg; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 05:24:23
|
Revision: 5 http://dashg.svn.sourceforge.net/dashg/?rev=5&view=rev Author: dbrosius Date: 2008-10-25 05:24:20 +0000 (Sat, 25 Oct 2008) Log Message: ----------- Initial Checkin Added Paths: ----------- trunk/dashg/.classpath trunk/dashg/.project Added: trunk/dashg/.classpath =================================================================== --- trunk/dashg/.classpath (rev 0) +++ trunk/dashg/.classpath 2008-10-25 05:24:20 UTC (rev 5) @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="lib" path="lib/ant.jar"/> + <classpathentry kind="lib" path="lib/asm-3.1.jar"/> + <classpathentry kind="lib" path="lib/asm-util-3.1.jar"/> + <classpathentry kind="output" path="classes"/> +</classpath> Property changes on: trunk/dashg/.classpath ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Added: trunk/dashg/.project =================================================================== --- trunk/dashg/.project (rev 0) +++ trunk/dashg/.project 2008-10-25 05:24:20 UTC (rev 5) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>dashg</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> Property changes on: trunk/dashg/.project ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 05:23:26
|
Revision: 4 http://dashg.svn.sourceforge.net/dashg/?rev=4&view=rev Author: dbrosius Date: 2008-10-25 05:23:20 +0000 (Sat, 25 Oct 2008) Log Message: ----------- Initial Checkin Added Paths: ----------- trunk/dashg/lib/ trunk/dashg/lib/ant.jar trunk/dashg/lib/asm-3.1.jar Added: trunk/dashg/lib/ant.jar =================================================================== (Binary files differ) Property changes on: trunk/dashg/lib/ant.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/dashg/lib/asm-3.1.jar =================================================================== (Binary files differ) Property changes on: trunk/dashg/lib/asm-3.1.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 05:22:02
|
Revision: 3 http://dashg.svn.sourceforge.net/dashg/?rev=3&view=rev Author: dbrosius Date: 2008-10-25 05:21:59 +0000 (Sat, 25 Oct 2008) Log Message: ----------- Initial Checkin Added Paths: ----------- trunk/dashg/src/ trunk/dashg/src/Drvr.java trunk/dashg/src/com/ trunk/dashg/src/com/mebigfatguy/ trunk/dashg/src/com/mebigfatguy/dashg/ trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java trunk/dashg/src/com/mebigfatguy/dashg/DashGCloser.java trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java Added: trunk/dashg/src/Drvr.java =================================================================== --- trunk/dashg/src/Drvr.java (rev 0) +++ trunk/dashg/src/Drvr.java 2008-10-25 05:21:59 UTC (rev 3) @@ -0,0 +1,26 @@ +import java.io.File; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.FileSet; + +import com.mebigfatguy.dashg.DashGTask; + + +public class Drvr { + public static void main(String[] args) { + Project p = new Project(); + FileSet fs = new FileSet(); + fs.setProject(p); + fs.setDir(new File(args[0])); + fs.setIncludes("**/*.class"); + File outputDir = new File(args[1]); + + DashGTask task = new DashGTask(); + task.setProject(p); + task.setFileset(fs); + task.setOutputdirectory(outputDir); + + task.execute(); + + } +} Property changes on: trunk/dashg/src/Drvr.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Added: trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java (rev 0) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java 2008-10-25 05:21:59 UTC (rev 3) @@ -0,0 +1,87 @@ +package com.mebigfatguy.dashg; + +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.objectweb.asm.ClassAdapter; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.MethodVisitor; + + +public class DashGClassAdapter extends ClassAdapter { + + private final String fullPackageName; + private final Map<String, Map<Integer, Integer>> methodOffsets; + private final Pattern parmsPattern = Pattern.compile("([IJFDBCZS]|L[^;]*;)"); + + public DashGClassAdapter(ClassVisitor visitor, String fileName, String packageName, Map<String, Map<Integer, Integer>> offsets) { + super(visitor); + fullPackageName = packageName; + methodOffsets = offsets; + super.visitSource(fileName, null); + } + + @Override + public void visitSource(String source, String debug) { + } + + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + String nameSig = buildNameParmSig(name, desc); + Map<Integer, Integer> offsets = methodOffsets.get(nameSig); + MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); + + if (offsets != null) + return new DashGMethodAdapter(mv, name+desc, offsets); + else + return mv; + } + + private String buildNameParmSig(String name, String parm) { + parm = parm.substring(1); + int lParenPos = parm.lastIndexOf(')'); + parm = parm.substring(0, lParenPos); + + StringBuilder sb = new StringBuilder(name.length() + parm.length()); + if ("<init>".equals(name)) { + name = fullPackageName; + } + sb.append(name); + sb.append("("); + + Matcher m = parmsPattern.matcher(parm); + String comma = ""; + while (m.find()) { + sb.append(comma); + comma = ", "; + + String type = m.group(1); + if (type.startsWith("L")) { + type = type.substring(1, type.length() - 1); + type = type.replace('/', '.'); + } else if ("I".equals(type)) { + type = "int"; + } else if ("J".equals(type)) { + type = "long"; + } else if ("F".equals(type)) { + type = "float"; + } else if ("D".equals(type)) { + type = "double"; + } else if ("C".equals(type)) { + type = "char"; + } else if ("B".equals(type)) { + type = "byte"; + } else if ("Z".equals(type)) { + type = "boolean"; + } else if ("S".equals(type)) { + type = "short"; + } + sb.append(type); + } + + sb.append(")"); + return sb.toString(); + } + +} Property changes on: trunk/dashg/src/com/mebigfatguy/dashg/DashGClassAdapter.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Added: trunk/dashg/src/com/mebigfatguy/dashg/DashGCloser.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGCloser.java (rev 0) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGCloser.java 2008-10-25 05:21:59 UTC (rev 3) @@ -0,0 +1,17 @@ +package com.mebigfatguy.dashg; + +import java.io.Closeable; +import java.io.IOException; + +public class DashGCloser { + private DashGCloser() { + } + + public static void close(Closeable c) { + try { + if (c != null) + c.close(); + } catch (IOException ioe) { + } + } +} Property changes on: trunk/dashg/src/com/mebigfatguy/dashg/DashGCloser.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Added: trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java (rev 0) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java 2008-10-25 05:21:59 UTC (rev 3) @@ -0,0 +1,108 @@ +package com.mebigfatguy.dashg; + +import java.util.Iterator; +import java.util.Map; + +import org.apache.tools.ant.BuildException; +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodAdapter; +import org.objectweb.asm.MethodVisitor; + +public class DashGMethodAdapter extends MethodAdapter { + + Map<Integer, Integer> lineOffsets; + Iterator<Integer> lineIt; + String methodName; + + public DashGMethodAdapter(MethodVisitor mv, String name, Map<Integer, Integer> offsets) { + super(mv); + lineOffsets = offsets; + methodName = name; + lineIt = lineOffsets.keySet().iterator(); + } + + @Override + public void visitFieldInsn(int opcode, String owner, String name, String desc) { + addLine(); + super.visitFieldInsn(opcode, owner, name, desc); + } + + @Override + public void visitIincInsn(int var, int increment) { + addLine(); + super.visitIincInsn(var, increment); + } + + @Override + public void visitInsn(int opcode) { + addLine(); + super.visitInsn(opcode); + } + + @Override + public void visitIntInsn(int opcode, int operand) { + addLine(); + super.visitIntInsn(opcode, operand); + } + + @Override + public void visitJumpInsn(int opcode, Label label) { + addLine(); + super.visitJumpInsn(opcode, label); + } + + @Override + public void visitLdcInsn(Object cst) { + addLine(); + super.visitLdcInsn(cst); + } + + @Override + public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) { + addLine(); + super.visitLookupSwitchInsn(dflt, keys, labels); + } + + @Override + public void visitMethodInsn(int opcode, String owner, String name, String desc) { + addLine(); + super.visitMethodInsn(opcode, owner, name, desc); + } + + @Override + public void visitMultiANewArrayInsn(String desc, int dims) { + addLine(); + super.visitMultiANewArrayInsn(desc, dims); + } + + @Override + public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels) { + addLine(); + super.visitTableSwitchInsn(min, max, dflt, labels); + } + + @Override + public void visitTypeInsn(int opcode, String type) { + addLine(); + super.visitTypeInsn(opcode, type); + } + + @Override + public void visitVarInsn(int opcode, int var) { + addLine(); + super.visitVarInsn(opcode, var); + } + + @Override + public void visitLineNumber(int line, Label start) { + } + + private void addLine() { + if (lineIt.hasNext()) { + Label l = new Label(); + super.visitLabel(l); + super.visitLineNumber(lineIt.next().intValue(), l); + } else + throw new BuildException("Prematurely ran out of line numbers for method " + methodName); + } +} Property changes on: trunk/dashg/src/com/mebigfatguy/dashg/DashGMethodAdapter.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Added: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java =================================================================== --- trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java (rev 0) +++ trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java 2008-10-25 05:21:59 UTC (rev 3) @@ -0,0 +1,181 @@ +package com.mebigfatguy.dashg; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.DirectoryScanner; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.types.FileSet; +import org.objectweb.asm.ClassAdapter; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; + + +public class DashGTask extends Task { + + static final int BUFFER_SIZE = 5120; + enum State {LookForMethod, ProcessLine}; + + FileSet classSource; + File directory; + Map<String, Map<Integer, Integer>> methodOffsets = new HashMap<String, Map<Integer, Integer>>(); + + public void setFileset(FileSet source) { + classSource = source; + } + + public void setOutputdirectory(File outputDir) { + directory = outputDir; + } + + @Override + public void execute() throws BuildException { + if (classSource == null) + throw new BuildException("Class Fileset not specified"); + if (directory == null) + throw new BuildException("Class Output Directory not specified"); + + directory.mkdirs(); + + DirectoryScanner ds = classSource.getDirectoryScanner(); + String[] files = ds.getIncludedFiles(); + for (String fName : files) { + if (!fName.endsWith(".class")) + continue; + generateDashGFiles(ds.getBasedir(), fName); + } + } + + private void generateDashGFiles(File baseDirectory, String fName) { + String packagePath; + String packageName; + + try { + int sepPos = fName.lastIndexOf(File.separator); + if (sepPos >= 0) { + packagePath = fName.substring(0, sepPos); + packageName = packagePath.replaceAll("\\" + File.separator, "."); + } else { + packagePath = null; + packageName = null; + } + + String fileBaseName = fName.substring(sepPos+1, fName.length() - ".class".length()); + + File destDir = (packagePath == null) ? directory : new File(directory, packagePath); + destDir.mkdirs(); + + File destSrcFile = new File(destDir, fileBaseName + ".java"); + File dstClsFile = new File(destDir, fileBaseName + ".class"); + + String cmd = "javap -v -private " + ((packageName != null) ? packageName + "." : "") + fileBaseName; + Runtime rt = Runtime.getRuntime(); + Process p = rt.exec(cmd, null, baseDirectory); + parseJavaPFile(p.getInputStream(), destSrcFile, packageName, fileBaseName); + p.waitFor(); + + buildNewClass(new File(baseDirectory, fName), dstClsFile, fileBaseName + ".java", packageName + "." + fileBaseName); + } catch (Exception ioe) { + throw new BuildException("Failed generating output files for file " + fName, ioe); + } + } + + private void parseJavaPFile(InputStream is, File f, String packageName, String simpleName) throws IOException { + PrintWriter pw = null; + Map<Integer, Integer> offsets = null; + + Pattern methodPattern = Pattern.compile("(public|private|protected)?\\s*[a-zA-Z0-9<>?]*\\s*[a-zA-Z0-9]*\\([^\\)]*\\)[^;]*;"); + Pattern linePattern = Pattern.compile("\\s*([0-9]*):.*"); + Pattern simpleNameSigPattern = Pattern.compile("\\s([^\\s(]*\\([^)]*\\))"); + + try { + pw = new PrintWriter(new FileWriter(f)); + if (packageName != null) + pw.println("package " + packageName); + else + pw.println(); + pw.println(); + pw.println("class " + simpleName + " {"); + pw.println("/*"); + int lineNumber = 4; + + State state = State.LookForMethod; + + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + + String line = br.readLine(); + while (line != null) { + lineNumber++; + switch (state) { + case LookForMethod: + Matcher m = methodPattern.matcher(line); + if (m.matches()) { + offsets = new LinkedHashMap<Integer, Integer>(); + m = simpleNameSigPattern.matcher(line); + if (m.find()) { + methodOffsets.put(m.group(1), offsets); + } + state = State.ProcessLine; + } + break; + + case ProcessLine: + if (line.length() == 0) + state = State.LookForMethod; + else { + m = linePattern.matcher(line); + if (m.matches()) { + offsets.put(Integer.valueOf(m.group(1)), Integer.valueOf(lineNumber)); + } + } + break; + } + + line = line.replaceAll("/\\*", "'/*'"); + pw.println(line); + line = br.readLine(); + } + pw.println("*/"); + pw.println("}"); + } finally { + DashGCloser.close(pw); + } + } + + public void buildNewClass(File inputClass, File outputClass, String sourceName, String packageName) throws IOException { + BufferedInputStream bis = null; + BufferedOutputStream bos = null; + + try { + bis = new BufferedInputStream(new FileInputStream(inputClass)); + ClassReader cr = new ClassReader(bis); + ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); + ClassAdapter ca = new DashGClassAdapter(cw, sourceName, packageName, methodOffsets); + cr.accept(ca, 0); + + byte[] classData = cw.toByteArray(); + + outputClass.getParentFile().mkdirs(); + bos = new BufferedOutputStream(new FileOutputStream(outputClass)); + bos.write(classData); + + } finally { + DashGCloser.close(bis); + DashGCloser.close(bos); + } + } +} Property changes on: trunk/dashg/src/com/mebigfatguy/dashg/DashGTask.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 05:13:13
|
Revision: 2 http://dashg.svn.sourceforge.net/dashg/?rev=2&view=rev Author: dbrosius Date: 2008-10-25 05:13:10 +0000 (Sat, 25 Oct 2008) Log Message: ----------- Main development directory Added Paths: ----------- trunk/dashg/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dbr...@us...> - 2008-10-25 05:12:45
|
Revision: 1 http://dashg.svn.sourceforge.net/dashg/?rev=1&view=rev Author: dbrosius Date: 2008-10-25 05:12:42 +0000 (Sat, 25 Oct 2008) Log Message: ----------- Main development branch Added Paths: ----------- trunk/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |