Skip to content

Commit

Permalink
undo the mess I made with the previous merge, still a couple of test …
Browse files Browse the repository at this point in the history
…failures to work through
  • Loading branch information
paul-hammant committed Aug 17, 2014
1 parent d77b23a commit fc5959c
Show file tree
Hide file tree
Showing 11 changed files with 352 additions and 214 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,18 @@
*/
package com.thoughtworks.paranamer.ant;

import java.util.Arrays;
import java.util.Vector;
import java.util.Collection;

import com.thoughtworks.paranamer.generator.QdoxParanamerGenerator;
import com.thoughtworks.qdox.JavaProjectBuilder;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.DirectoryScanner;

import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.FileSet;

import com.thoughtworks.qdox.JavaDocBuilder;

import com.thoughtworks.paranamer.generator.QdoxParanamerGenerator;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Vector;

/**
* Ant Task to process parameter names. This ant task facilitates the
Expand Down Expand Up @@ -178,7 +174,7 @@ public void execute() throws BuildException {
+ ds.getBasedir());
for (Object o : Arrays.asList(includedFiles)) {
String file = (String) o;
JavaDocBuilder builder = new JavaDocBuilder();
JavaProjectBuilder builder = new JavaProjectBuilder();
try {
builder.addSource(new File(ds.getBasedir(), file));
// if the classdir is set then we source the classes
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
package com.thoughtworks.paranamer.ant;

import com.thoughtworks.paranamer.generator.Enhancer;
import com.thoughtworks.paranamer.generator.QdoxParanamerGenerator;
import com.thoughtworks.qdox.model.JavaClass;
import junit.framework.TestCase;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import org.junit.Assert;
import org.junit.Test;

import package1.A;
import package1.B;
import package2.C;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import com.thoughtworks.paranamer.generator.Enhancer;
import com.thoughtworks.paranamer.generator.QdoxParanamerGenerator;
import com.thoughtworks.qdox.model.JavaClass;

public class ParanamerGeneratorTaskTest {
private static final File BASE = new File(ParanamerGeneratorTaskTest.class.getProtectionDomain().getCodeSource().getLocation().getFile()).getParentFile().getParentFile();
Expand All @@ -30,7 +32,8 @@ public void log(java.lang.String msg, int msgLevel) {

protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public void processClasses(JavaClass[] classes, String outputPath) throws IOException {
@Override
public void processClasses(Collection<JavaClass> classes, String outputPath) throws IOException {
for (JavaClass aClass : classes) {
result.add(aClass.getFullyQualifiedName());
}
Expand Down Expand Up @@ -62,13 +65,14 @@ protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public Enhancer makeEnhancer() {
return new Enhancer() {
public void enhance(File classFile, String parameterNameData) throws IOException {
@Override
public void enhance(File classFile, CharSequence parameterNameData) throws IOException {
didIt[0] = true;
super.enhance(classFile, parameterNameData);
Assert.assertTrue(classFile.getAbsolutePath().endsWith("C.class"));
Assert.assertEquals(
"method1OfC int,int arg1,arg2 \n" +
"method2OfC int arg \n", parameterNameData);
"method2OfC int arg \n", parameterNameData.toString());
}
};
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,25 @@
package com.thoughtworks.paranamer.ant;

import com.thoughtworks.paranamer.generator.Enhancer;
import com.thoughtworks.paranamer.generator.QdoxParanamerGenerator;

import com.thoughtworks.qdox.model.JavaClass;

import org.junit.Assert;
import org.junit.Test;
import package1.A;
import package1.B;
import package2.C;

import java.io.File;
import java.io.IOException;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;

import org.apache.tools.ant.types.FileSet;
import org.junit.Assert;
import org.junit.Test;

import package1.A;
import package1.B;
import package2.C;

import com.thoughtworks.paranamer.generator.Enhancer;
import com.thoughtworks.paranamer.generator.QdoxParanamerGenerator;
import com.thoughtworks.qdox.model.JavaClass;

public class ParanamerTaskTest {
private static final File BASE = new File(ParanamerTaskTest.class
Expand Down Expand Up @@ -65,7 +63,8 @@ public void log(java.lang.String msg, int msgLevel) {

protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public void processClasses(JavaClass[] classes, String outputPath)
@Override
public void processClasses(Collection<JavaClass> classes, String outputPath)
throws IOException {
for (JavaClass aClass : classes) {
result.add(aClass.getFullyQualifiedName());
Expand Down Expand Up @@ -113,7 +112,8 @@ public void log(java.lang.String msg, int msgLevel) {

protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public void processClasses(JavaClass[] classes, String outputPath)
@Override
public void processClasses(Collection<JavaClass> classes, String outputPath)
throws IOException {
for (JavaClass aClass : classes) {
result.add(aClass.getFullyQualifiedName());
Expand Down Expand Up @@ -164,7 +164,8 @@ public void log(java.lang.String msg, int msgLevel) {

protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public void processClasses(JavaClass[] classes, String outputPath)
@Override
public void processClasses(Collection<JavaClass> classes, String outputPath)
throws IOException {
for (JavaClass aClass : classes) {
result.add(aClass.getFullyQualifiedName());
Expand Down Expand Up @@ -214,7 +215,8 @@ public void log(java.lang.String msg, int msgLevel) {

protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public void processClasses(JavaClass[] classes, String outputPath)
@Override
public void processClasses(Collection<JavaClass> classes, String outputPath)
throws IOException {
for (JavaClass aClass : classes) {
result.add(aClass.getFullyQualifiedName());
Expand Down Expand Up @@ -258,7 +260,8 @@ public void log(java.lang.String msg, int msgLevel) {

protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public void processClasses(JavaClass[] classes, String outputPath)
@Override
public void processClasses(Collection<JavaClass> classes, String outputPath)
throws IOException {
for (JavaClass aClass : classes) {
result.add(aClass.getFullyQualifiedName());
Expand Down Expand Up @@ -304,7 +307,8 @@ public void log(java.lang.String msg, int msgLevel) {

protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public void processClasses(JavaClass[] classes, String outputPath)
@Override
public void processClasses(Collection<JavaClass> classes, String outputPath)
throws IOException {
for (JavaClass aClass : classes) {
result.add(aClass.getFullyQualifiedName());
Expand Down Expand Up @@ -350,7 +354,8 @@ public void log(java.lang.String msg, int msgLevel) {

protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public void processClasses(JavaClass[] classes, String outputPath)
@Override
public void processClasses(Collection<JavaClass> classes, String outputPath)
throws IOException {
for (JavaClass aClass : classes) {
result.add(aClass.getFullyQualifiedName());
Expand Down Expand Up @@ -400,7 +405,8 @@ public void log(java.lang.String msg, int msgLevel) {

protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public void processClasses(JavaClass[] classes, String outputPath)
@Override
public void processClasses(Collection<JavaClass> classes, String outputPath)
throws IOException {
for (JavaClass aClass : classes) {
result.add(aClass.getFullyQualifiedName());
Expand Down Expand Up @@ -447,7 +453,8 @@ public void log(java.lang.String msg, int msgLevel) {

protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public void processClasses(JavaClass[] classes, String outputPath)
@Override
public void processClasses(Collection<JavaClass> classes, String outputPath)
throws IOException {
for (JavaClass aClass : classes) {
result.add(aClass.getFullyQualifiedName());
Expand Down Expand Up @@ -495,14 +502,15 @@ protected QdoxParanamerGenerator makeQdoxParanamerGenerator() {
return new QdoxParanamerGenerator() {
public Enhancer makeEnhancer() {
return new Enhancer() {
public void enhance(File classFile, String parameterNameData)
@Override
public void enhance(File classFile, CharSequence parameterNameData)
throws IOException {
enhanced[0] = true;
super.enhance(classFile, parameterNameData);
Assert.assertTrue(classFile.getAbsolutePath().endsWith("C.class"));
Assert.assertEquals(
"method1OfC int,int arg1,arg2 \n" +
"method2OfC int arg \n", parameterNameData);
"method2OfC int arg \n", parameterNameData.toString());
}
};
}
Expand Down
2 changes: 1 addition & 1 deletion paranamer-generator/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<dependency>
<groupId>com.thoughtworks.qdox</groupId>
<artifactId>qdox</artifactId>
<version>1.12.1</version>
<version>2.0-M2</version>
<scope>compile</scope>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,13 @@ public AddFieldAdapter(ClassVisitor cv, int fAcc, String fName, String fDesc, Ob
this.fValue= fValue;
}

@Override
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
if (name.equals(fName)) {
isFieldPresent = true;
}
return cv.visitField(access, name, desc, signature, value);
}

@Override
public void visitEnd() {
if (!isFieldPresent) {
FieldVisitor fv = cv.visitField(fAcc, fName, fDesc, null, fValue);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,43 +29,51 @@
*/
package com.thoughtworks.paranamer.generator;

import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Opcodes;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Opcodes;

/**
* A bytecode enhancer which adds a new static variable to some specific class.
*
* @author Guilherme Silveira
*/
public class Enhancer implements Opcodes {

public void enhance(File classFile, String parameterNameData) throws IOException {
byte[] classBytecode = addExtraStaticField(classFile, parameterNameData);
FileOutputStream os = new FileOutputStream(classFile);
os.write(classBytecode);
os.close();
}
public void enhance(File classFile, CharSequence parameterNameData)
throws IOException {

byte[] classBytecode = addExtraStaticField(classFile, parameterNameData);
FileOutputStream os = new FileOutputStream(classFile);
os.write(classBytecode);
os.close();
}

private byte[] addExtraStaticField(File classFile,
final CharSequence parameterNameData) throws IOException {

InputStream inputStream = new FileInputStream(classFile);
ClassReader reader = new ClassReader(inputStream);

private byte[] addExtraStaticField(File classFile, String parameterNameData) throws IOException {
InputStream inputStream = new FileInputStream(classFile);
ClassReader reader = new ClassReader(inputStream);
ClassWriter writer = new ClassWriter(reader, 0);
// TODO fix problem with inner classes, two classes in one classFile and
// so on...
// TODO doc typo on page 21: recommended

ClassWriter writer = new ClassWriter(reader, 0);
// TODO doc typo on page 21: recommended
AddFieldAdapter adapter = new AddFieldAdapter(writer, ACC_PUBLIC + ACC_FINAL + ACC_STATIC,
"__PARANAMER_DATA", "Ljava/lang/String;", parameterNameData);
AddFieldAdapter adapter = new AddFieldAdapter(writer, ACC_PUBLIC
+ ACC_FINAL + ACC_STATIC, "__PARANAMER_DATA",
"Ljava/lang/String;", parameterNameData.toString());

reader.accept(adapter, 0);
reader.accept(adapter, 0);

inputStream.close();
return writer.toByteArray();
}
inputStream.close();
return writer.toByteArray();
}

}
Loading

0 comments on commit fc5959c

Please sign in to comment.