Browse Source

fix for Bugzilla Bug 55134

 	Incremental compilation does not delete weaver-generated class files
tags/Root_ajdt_support
acolyer 20 years ago
parent
commit
7d6b500be3

+ 14
- 0
tests/ajcTests.xml View File

@@ -7489,4 +7489,18 @@
<compile files="WeaveLocal.java" aspectpath="notAJar.jar" outjar="notAJar.jar" >
</compile>
</ajc-test>
<ajc-test dir="incremental/initialTests/classWAroundClosureRemoved"
title="make sure additional classes generated during weave are deleted with src class file"
keywords="incremental-test">
<compile staging="true"
options="-incremental"
sourceroots="."/>
<inc-compile tag="20" >
<dir-changes removed="AdviceOnIntroduced$AjcClosure1"/>
</inc-compile>
</ajc-test>

</suite>

+ 26
- 0
tests/incremental/initialTests/classWAroundClosureRemoved/AdviceOnIntroduced.delete.20.java View File

@@ -0,0 +1,26 @@
import org.aspectj.testing.Tester;

public aspect AdviceOnIntroduced {
public static void main(String[] args) { test(); }

public static void test() {
Tester.checkEqual(new Foo(10).foo(5), 6, "foo");
}
int Foo.foo(int n) { return n; }
Foo.new(int w) {}
int around(int n):
within(AdviceOnIntroduced) &&
(args(n) && execution(int foo(int))) {
int result = proceed(n);
return result+1;
}
before(): within(Foo) && execution(new(..)) {
//System.out.println("before new");
}
}

class Foo {
}

+ 26
- 0
tests/incremental/initialTests/classWAroundClosureRemoved/AdviceOnIntroduced.java View File

@@ -0,0 +1,26 @@
import org.aspectj.testing.Tester;

public aspect AdviceOnIntroduced {
public static void main(String[] args) { test(); }

public static void test() {
Tester.checkEqual(new Foo(10).foo(5), 6, "foo");
}
int Foo.foo(int n) { return n; }
Foo.new(int w) {}
int around(int n):
within(AdviceOnIntroduced) &&
(args(n) && execution(int foo(int))) {
int result = proceed(n);
return result+1;
}
before(): within(Foo) && execution(new(..)) {
//System.out.println("before new");
}
}

class Foo {
}

+ 9
- 0
tests/incremental/initialTests/classWAroundClosureRemoved/Main.java View File

@@ -0,0 +1,9 @@
import org.aspectj.testing.Tester;

public class Main {
public static void main(String[] args) {
Tester.checkFailed("Incremental compilation did not appear to (re)weave Main");
}
}

+ 21
- 5
weaver/src/org/aspectj/weaver/bcel/UnwovenClassFile.java View File

@@ -15,6 +15,7 @@ package org.aspectj.weaver.bcel;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
@@ -150,14 +151,29 @@ public class UnwovenClassFile {
public String toString() {
return "UnwovenClassFile(" + filename + ", " + getClassName() + ")";
}

/**
* delete not just this file, but any files in the same directory that
* were generated as a result of weaving it (e.g. for an around closure).
*/
public void deleteRealFile() throws IOException {
new File(filename).delete();
File victim = new File(filename);
String namePrefix = victim.getName();
namePrefix = namePrefix.substring(0,namePrefix.lastIndexOf('.'));
final String targetPrefix = namePrefix + "$Ajc";
File dir = victim.getParentFile();
if (dir != null) {
File[] weaverGenerated = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.startsWith(targetPrefix);
}});
for (int i = 0; i < weaverGenerated.length; i++) {
weaverGenerated[i].delete();
}
}
victim.delete();
}




// record
public static class ChildClass {
public final String name;

Loading…
Cancel
Save