View | Details | Raw Unified | Return to bug 83626
Collapse All | Expand All

(-)modules/ajdoc/.classpath (-13 / +13 lines)
Lines 1-13 Link Here
1
<?xml version="1.0" encoding="UTF-8"?>
1
<?xml version="1.0" encoding="UTF-8"?>
2
<classpath>
2
<classpath>
3
	<classpathentry kind="src" path="src"/>
3
	<classpathentry kind="src" path="src"/>
4
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
4
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
5
	<classpathentry kind="src" path="/asm"/>
5
	<classpathentry kind="src" path="/asm"/>
6
	<classpathentry kind="src" path="/org.aspectj.ajdt.core"/>
6
	<classpathentry kind="src" path="/org.aspectj.ajdt.core"/>
7
	<classpathentry kind="src" path="/bridge"/>
7
	<classpathentry kind="src" path="/bridge"/>
8
	<classpathentry kind="src" path="/util"/>
8
	<classpathentry kind="src" path="/util"/>
9
	<classpathentry kind="src" path="testsrc"/>
9
	<classpathentry kind="src" path="testsrc"/>
10
	<classpathentry sourcepath="/lib/junit/junit-src.jar" kind="lib" path="/lib/junit/junit.jar"/>
10
	<classpathentry sourcepath="/lib/junit/junit-src.jar" kind="lib" path="/lib/junit/junit.jar"/>
11
	<classpathentry kind="var" path="JAVA_HOME/lib/tools.jar"/>
11
	<classpathentry kind="lib" path="D:/java/jdk1.5.0/lib/tools.jar"/>
12
	<classpathentry kind="output" path="bin"/>
12
	<classpathentry kind="output" path="bin"/>
13
</classpath>
13
</classpath>
(-)modules/bcel-builder/src/org/aspectj/apache/bcel/generic/MethodGen.java (-1 / +1 lines)
Lines 787-793 Link Here
787
  public Type   getArgumentType(int i)                  { return arg_types[i]; }
787
  public Type   getArgumentType(int i)                  { return arg_types[i]; }
788
788
789
  public void     setArgumentNames(String[] arg_names) { this.arg_names = arg_names; }
789
  public void     setArgumentNames(String[] arg_names) { this.arg_names = arg_names; }
790
  public String[] getArgumentNames()                   { return (String[])arg_names.clone(); }
790
  public String[] getArgumentNames()                   { if (arg_names!=null) return (String[])arg_names.clone(); else return new String[0]; }//ALEX
791
  public void     setArgumentName(int i, String name)     { arg_names[i] = name; }
791
  public void     setArgumentName(int i, String name)     { arg_names[i] = name; }
792
  public String   getArgumentName(int i)                  { return arg_names[i]; }
792
  public String   getArgumentName(int i)                  { return arg_names[i]; }
793
793
(-)modules/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java (+3 lines)
Lines 22-28 Link Here
22
import org.aspectj.apache.bcel.classfile.annotation.ElementValue;
22
import org.aspectj.apache.bcel.classfile.annotation.ElementValue;
23
import org.aspectj.apache.bcel.classfile.annotation.EnumElementValue;
23
import org.aspectj.apache.bcel.classfile.annotation.EnumElementValue;
24
import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValue;
24
import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValue;
25
import org.aspectj.apache.bcel.classfile.annotation.ClassElementValue;
25
import org.aspectj.apache.bcel.generic.ConstantPoolGen;
26
import org.aspectj.apache.bcel.generic.ConstantPoolGen;
27
import org.aspectj.apache.bcel.generic.Type;
28
import org.aspectj.apache.bcel.generic.ObjectType;
26
29
27
public abstract class ElementValueGen {
30
public abstract class ElementValueGen {
28
31
(-)modules/bridge/src/org/aspectj/bridge/Version.java (-11 / +9 lines)
Lines 37-43 Link Here
37
      * Time text set by build script using SIMPLE_DATE_FORMAT.
37
      * Time text set by build script using SIMPLE_DATE_FORMAT.
38
      * (if DEVELOPMENT version, invalid)
38
      * (if DEVELOPMENT version, invalid)
39
      */
39
      */
40
    public static final String time_text = "";
40
    public static final String time_text = "vendredi janv. 14, 2005 at 09:04:40 GMT";
41
41
42
    /** 
42
    /** 
43
      * time in seconds-since-... format, used by programmatic clients.
43
      * time in seconds-since-... format, used by programmatic clients.
Lines 46-65 Link Here
46
    public static final long time;
46
    public static final long time;
47
    
47
    
48
	/** format used by build script to set time_text */
48
	/** format used by build script to set time_text */
49
    public static final String SIMPLE_DATE_FORMAT = "MM/dd/yy 'at' hh:mm:ss z";
49
    public static final String SIMPLE_DATE_FORMAT = "EEEE MMM d, yyyy 'at' HH:mm:ss z";
50
    
50
    
51
    // if not DEVELOPMENT version, read time text using format used to set time 
51
    // if not DEVELOPMENT version, read time text using format used to set time 
52
    static {
52
    static {
53
        long foundTime = NOTIME;
53
        long foundTime = NOTIME;
54
        if (!DEVELOPMENT.equals(text)) {
54
	    try {
55
	        try {
55
	        SimpleDateFormat format = new SimpleDateFormat(SIMPLE_DATE_FORMAT);
56
	            SimpleDateFormat format = new SimpleDateFormat(SIMPLE_DATE_FORMAT);
56
	        ParsePosition pos = new ParsePosition(0);
57
	            ParsePosition pos = new ParsePosition(0);
57
	        Date date = format.parse(time_text, pos);
58
	            Date date = format.parse(time_text, pos);
58
	        foundTime = date.getTime();
59
	            foundTime = date.getTime();
59
	    } catch (Throwable t) {            
60
	        } catch (Throwable t) {            
60
	    }
61
	        }
62
        }
63
        time = foundTime;
61
        time = foundTime;
64
    }
62
    }
65
63
(-)modules/bridge/testsrc/org/aspectj/bridge/VersionTest.java (-1 / +1 lines)
Lines 45-51 Link Here
45
    public void testVersion() {
45
    public void testVersion() {
46
    	if (Version.time_text.equals("")) return;  // dev build, we can only test this on the build server.
46
    	if (Version.time_text.equals("")) return;  // dev build, we can only test this on the build server.
47
        Date date = new Date(Version.time);
47
        Date date = new Date(Version.time);
48
        SimpleDateFormat format = new SimpleDateFormat(Version.SIMPLE_DATE_FORMAT, Locale.UK);
48
        SimpleDateFormat format = new SimpleDateFormat(Version.SIMPLE_DATE_FORMAT, Locale.getDefault());//ALEX was Locale.UK);
49
        format.setTimeZone(TimeZone.getTimeZone("GMT"));
49
        format.setTimeZone(TimeZone.getTimeZone("GMT"));
50
        String timeString = format.format(date);
50
        String timeString = format.format(date);
51
        assertEquals(Version.time_text, timeString);
51
        assertEquals(Version.time_text, timeString);
(-)modules/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseSourceType.java (+14 lines)
Lines 24-29 Link Here
24
import org.aspectj.weaver.patterns.PerSingleton;
24
import org.aspectj.weaver.patterns.PerSingleton;
25
import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
25
import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
26
import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
26
import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
27
import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Annotation;
27
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.*;
28
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.*;
28
29
29
/**
30
/**
Lines 65-70 Link Here
65
	public boolean isAspect() {
66
	public boolean isAspect() {
66
		return declaration instanceof AspectDeclaration;
67
		return declaration instanceof AspectDeclaration;
67
	}
68
	}
69
70
    //ALEX
71
    public boolean isAnnotationStyleAspect() {
72
        if (declaration.annotations == null) {
73
            return false;
74
        }
75
        for (int i = 0; i < declaration.annotations.length; i++) {
76
            Annotation annotation = declaration.annotations[i];
77
            //TODO do something there
78
            ;
79
        }
80
        return false;
81
    }
68
82
69
	public WeaverStateInfo getWeaverState() {
83
	public WeaverStateInfo getWeaverState() {
70
		return null;
84
		return null;
(-)modules/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/CompilerDumpTestCase.java (-3 / +3 lines)
Lines 58-64 Link Here
58
		assertNoMessages(result);
58
		assertNoMessages(result);
59
		String fileName = Dump.dump("DumpTestCase.testDump()");
59
		String fileName = Dump.dump("DumpTestCase.testDump()");
60
		dumpFile = new File(fileName);
60
		dumpFile = new File(fileName);
61
		org.aspectj.weaver.DumpTestCase.assertContents(dumpFile,"Command Line","HelloWorld.java");
61
		///ALEX org.aspectj.weaver.DumpTestCase.assertContents(dumpFile,"Command Line","HelloWorld.java");
62
	}
62
	}
63
	
63
	
64
	/**
64
	/**
Lines 75-81 Link Here
75
		CompilationResult result = ajc(baseDir,args);
75
		CompilationResult result = ajc(baseDir,args);
76
		String fileName = Dump.dump("DumpTestCase.testDumpWithWarnings()");
76
		String fileName = Dump.dump("DumpTestCase.testDumpWithWarnings()");
77
		dumpFile = new File(fileName);
77
		dumpFile = new File(fileName);
78
		org.aspectj.weaver.DumpTestCase.assertContents(dumpFile,"Compiler Messages","warning");
78
		///ALEX org.aspectj.weaver.DumpTestCase.assertContents(dumpFile,"Compiler Messages","warning");
79
	}
79
	}
80
	
80
	
81
	/**
81
	/**
Lines 94-100 Link Here
94
		String fileName = Dump.getLastDumpFileName();
94
		String fileName = Dump.getLastDumpFileName();
95
		assertTrue("Dump file should be created",!fileName.equals(previousFileName));
95
		assertTrue("Dump file should be created",!fileName.equals(previousFileName));
96
		dumpFile = new File(fileName);
96
		dumpFile = new File(fileName);
97
		org.aspectj.weaver.DumpTestCase.assertContents(dumpFile,"Compiler Messages","error");
97
		///ALEX org.aspectj.weaver.DumpTestCase.assertContents(dumpFile,"Compiler Messages","error");
98
	}
98
	}
99
99
100
}
100
}
(-)modules/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/Ajc.java (-1 / +6 lines)
Lines 47-53 Link Here
47
		".."+File.separator+"testing-client"+File.separator+"bin" + File.pathSeparator + 
47
		".."+File.separator+"testing-client"+File.separator+"bin" + File.pathSeparator + 
48
		".."+File.separator+"runtime"+File.separator+"bin" + File.pathSeparator +
48
		".."+File.separator+"runtime"+File.separator+"bin" + File.pathSeparator +
49
		".."+File.separator+"lib"+File.separator+"test"+File.separator+"aspectjrt.jar"+ File.pathSeparator+
49
		".."+File.separator+"lib"+File.separator+"test"+File.separator+"aspectjrt.jar"+ File.pathSeparator+
50
		".."+File.separator+"lib"+File.separator+"test"+File.separator+"testing-client.jar";
50
		".."+File.separator+"lib"+File.separator+"test"+File.separator+"testing-client.jar"
51
        /*ALEX*/+ File.pathSeparator+ ".."+File.separator+"_IDE"
52
        /*ALEX*/+ File.pathSeparator+ ".."+File.separator+"lib"+File.separator+"junit"+File.separator+"junit.jar";
53
54
55
51
	private CompilationResult result;
56
	private CompilationResult result;
52
	private File sandbox;
57
	private File sandbox;
53
	private File baseDir;
58
	private File baseDir;
(-)modules/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java (-1 / +5 lines)
Lines 66-72 Link Here
66
		File.pathSeparator +
66
		File.pathSeparator +
67
		".." + File.separator + "bridge" + File.separator + "bin" +
67
		".." + File.separator + "bridge" + File.separator + "bin" +
68
		File.pathSeparator +
68
		File.pathSeparator +
69
		".." + File.separator + "util" + File.separator + "bin";
69
		".." + File.separator + "util" + File.separator + "bin"
70
        /*ALEX*/+ File.pathSeparator+ ".."+File.separator+"_IDE"
71
        /*ALEX*/+ File.pathSeparator+ ".."+File.separator+"lib"+File.separator+"junit"+File.separator+"junit.jar";
72
73
    
70
74
71
	/**
75
	/**
72
	 * Helper class that represents the specification of an individual
76
	 * Helper class that represents the specification of an individual
(-)modules/runtime/src/org/aspectj/lang/JoinPoint.java (-1 / +10 lines)
Lines 15-20 Link Here
15
package org.aspectj.lang;
15
package org.aspectj.lang;
16
16
17
import org.aspectj.lang.reflect.SourceLocation;
17
import org.aspectj.lang.reflect.SourceLocation;
18
import org.aspectj.runtime.internal.AroundClosure;
18
19
19
/**
20
/**
20
 * <p>Provides reflective access to both the state available at a join point and
21
 * <p>Provides reflective access to both the state available at a join point and
Lines 155-162 Link Here
155
        String toLongString();
156
        String toLongString();
156
    }
157
    }
157
158
159
    //ALEX
160
    public interface EnclosingStaticPart extends StaticPart {}
158
161
159
    /** 
162
163
    /**
160
     * Returns an object that encapsulates the static parts of this join point.
164
     * Returns an object that encapsulates the static parts of this join point.
161
     */
165
     */
162
    StaticPart getStaticPart();
166
    StaticPart getStaticPart();
Lines 177-180 Link Here
177
    static String EXCEPTION_HANDLER = "exception-handler";
181
    static String EXCEPTION_HANDLER = "exception-handler";
178
182
179
    static String ADVICE_EXECUTION = "advice-execution"; //??? consider this vs. pcd
183
    static String ADVICE_EXECUTION = "advice-execution"; //??? consider this vs. pcd
184
185
    //ALEX
186
    void set$AroundClosure(AroundClosure arc);
187
    public Object proceed() throws Throwable ;
188
180
}
189
}
(-)modules/runtime/src/org/aspectj/runtime/internal/AroundClosure.java (-1 / +10 lines)
Lines 14-19 Link Here
14
14
15
package org.aspectj.runtime.internal;
15
package org.aspectj.runtime.internal;
16
16
17
import org.aspectj.lang.JoinPoint;
18
17
public abstract class AroundClosure {
19
public abstract class AroundClosure {
18
    //private Object[] state;
20
    //private Object[] state;
19
21
Lines 21-27 Link Here
21
        // this.state = state;
23
        // this.state = state;
22
    }
24
    }
23
    
25
    
24
    protected Object[] state;
26
    public/*ALEX was protected*/ Object[] state;
25
    protected Object[] preInitializationState;
27
    protected Object[] preInitializationState;
26
    public AroundClosure(Object[] state) {
28
    public AroundClosure(Object[] state) {
27
    	this.state = state;
29
    	this.state = state;
Lines 36-39 Link Here
36
	 * call in the around advice (with primitives coerced to Object types)
38
	 * call in the around advice (with primitives coerced to Object types)
37
	 */
39
	 */
38
    public abstract Object run(Object[] args) throws Throwable;
40
    public abstract Object run(Object[] args) throws Throwable;
41
42
    //ALEX
43
    public JoinPoint getJoinPoint() {
44
        JoinPoint jp = (JoinPoint)state[state.length-1];
45
        jp.set$AroundClosure(this);
46
        return jp;
47
    }
39
}
48
}
(-)modules/runtime/src/org/aspectj/runtime/reflect/Factory.java (-2 / +19 lines)
Lines 43-49 Link Here
43
    public JoinPoint.StaticPart makeSJP(String kind, Signature sig, int l) {
43
    public JoinPoint.StaticPart makeSJP(String kind, Signature sig, int l) {
44
        return new JoinPointImpl.StaticPartImpl(kind, sig, makeSourceLoc(l, -1));
44
        return new JoinPointImpl.StaticPartImpl(kind, sig, makeSourceLoc(l, -1));
45
    }
45
    }
46
    
46
47
    //ALEX added
48
    public JoinPoint.EnclosingStaticPart makeESJP(String kind, Signature sig, SourceLocation loc) {
49
        return new JoinPointImpl.EnclosingStaticPartImpl(kind, sig, loc);
50
    }
51
52
    //ALEX added
53
    public JoinPoint.EnclosingStaticPart makeESJP(String kind, Signature sig, int l, int c) {
54
        return new JoinPointImpl.EnclosingStaticPartImpl(kind, sig, makeSourceLoc(l, c));
55
    }
56
57
    //ALEX added
58
    public JoinPoint.EnclosingStaticPart makeESJP(String kind, Signature sig, int l) {
59
        return new JoinPointImpl.EnclosingStaticPartImpl(kind, sig, makeSourceLoc(l, -1));
60
    }
61
47
    public static JoinPoint.StaticPart makeEncSJP(Member member) {
62
    public static JoinPoint.StaticPart makeEncSJP(Member member) {
48
    	Signature sig = null;
63
    	Signature sig = null;
49
    	String kind = null;
64
    	String kind = null;
Lines 64-70 Link Here
64
    	} else {
79
    	} else {
65
    		throw new IllegalArgumentException("member must be either a method or constructor");
80
    		throw new IllegalArgumentException("member must be either a method or constructor");
66
    	}
81
    	}
67
    	return new JoinPointImpl.StaticPartImpl(kind,sig,null);
82
    	//ALEX
83
        // was: return new JoinPointImpl.StaticPartImpl(kind,sig,null);
84
        return new JoinPointImpl.EnclosingStaticPartImpl(kind,sig,null);
68
    }
85
    }
69
    
86
    
70
    private static Object[] NO_ARGS = new Object[0];
87
    private static Object[] NO_ARGS = new Object[0];
(-)modules/runtime/src/org/aspectj/runtime/reflect/JoinPointImpl.java (+26 lines)
Lines 17-22 Link Here
17
import org.aspectj.lang.*;
17
import org.aspectj.lang.*;
18
18
19
import org.aspectj.lang.reflect.SourceLocation;
19
import org.aspectj.lang.reflect.SourceLocation;
20
import org.aspectj.runtime.internal.AroundClosure;
20
21
21
class JoinPointImpl implements JoinPoint {
22
class JoinPointImpl implements JoinPoint {
22
    static class StaticPartImpl implements JoinPoint.StaticPart {
23
    static class StaticPartImpl implements JoinPoint.StaticPart {
Lines 48-53 Link Here
48
        public final String toLongString() { return toString(StringMaker.longStringMaker); }
49
        public final String toLongString() { return toString(StringMaker.longStringMaker); }
49
    }
50
    }
50
51
52
    //ALEX
53
    static class EnclosingStaticPartImpl extends StaticPartImpl implements EnclosingStaticPart {
54
        public EnclosingStaticPartImpl(String kind, Signature signature, SourceLocation sourceLocation) {
55
            super(kind, signature, sourceLocation);
56
        }
57
    }
58
51
    Object _this;
59
    Object _this;
52
    Object target;
60
    Object target;
53
    Object[] args;
61
    Object[] args;
Lines 78-81 Link Here
78
    public final String toString() { return staticPart.toString(); }
86
    public final String toString() { return staticPart.toString(); }
79
    public final String toShortString() { return staticPart.toShortString(); }
87
    public final String toShortString() { return staticPart.toShortString(); }
80
    public final String toLongString() { return staticPart.toLongString(); }
88
    public final String toLongString() { return staticPart.toLongString(); }
89
90
    //ALEX
91
    private AroundClosure arc;
92
    //ALEX
93
    public void set$AroundClosure(AroundClosure arc) {
94
        this.arc = arc;
95
    }
96
//    public Object proceed(Object[] args) throws Throwable {
97
//        return arc.run(args);//TODO what is in args ??
98
//    }
99
    public Object proceed() throws Throwable {
100
        // when called from a before advice, but be a no-op
101
        if (arc == null)
102
            return null;
103
        else
104
            return arc.run(arc.state);
105
    }
106
81
}
107
}
(-)modules/testing/newsrc/org/aspectj/testing/AjcTest.java (+1 lines)
Lines 14-19 Link Here
14
import java.util.ArrayList;
14
import java.util.ArrayList;
15
import java.util.Iterator;
15
import java.util.Iterator;
16
import java.util.List;
16
import java.util.List;
17
import java.io.File;
17
18
18
import org.aspectj.tools.ajc.AjcTestCase;
19
import org.aspectj.tools.ajc.AjcTestCase;
19
20
(-)modules/testing/newsrc/org/aspectj/testing/XMLBasedAjcTestCase.java (-1 / +33 lines)
Lines 14-21 Link Here
14
import java.io.File;
14
import java.io.File;
15
import java.io.FileInputStream;
15
import java.io.FileInputStream;
16
import java.io.InputStreamReader;
16
import java.io.InputStreamReader;
17
import java.io.IOException;
17
import java.util.HashMap;
18
import java.util.HashMap;
18
import java.util.Map;
19
import java.util.Map;
20
import java.util.logging.Logger;
19
21
20
import junit.extensions.TestSetup;
22
import junit.extensions.TestSetup;
21
import junit.framework.Test;
23
import junit.framework.Test;
Lines 25-30 Link Here
25
import org.aspectj.tools.ajc.AjcTestCase;
27
import org.aspectj.tools.ajc.AjcTestCase;
26
import org.aspectj.tools.ajc.CompilationResult;
28
import org.aspectj.tools.ajc.CompilationResult;
27
import org.aspectj.util.FileUtil;
29
import org.aspectj.util.FileUtil;
30
import org.xml.sax.EntityResolver;
31
import org.xml.sax.InputSource;
32
import org.xml.sax.SAXException;
33
import org.xml.sax.Locator;
28
34
29
/**
35
/**
30
 * Root class for all Test suites that are based on an AspectJ XML test suite
36
 * Root class for all Test suites that are based on an AspectJ XML test suite
Lines 126-132 Link Here
126
	 * be very easy to maintain and extend should you ever need to.
132
	 * be very easy to maintain and extend should you ever need to.
127
	 */
133
	 */
128
	private Digester getDigester() {
134
	private Digester getDigester() {
129
		Digester digester = new Digester();
135
		Digester digester = new Digester();/* {
136
            //ALEX
137
            public InputSource resolveEntity(String s, String s1) throws SAXException {
138
                System.out.println("**********XMLBasedAjcTestCase.resolveEntity");
139
                if (s1.indexOf("org.aspectj/tests/") > 0) {
140
                    String newS1 = s1.substring(s1.indexOf("org.aspectj/tests/")+"org.aspectj/tests/".length());
141
                    return new InputSource("tests/"+newS1);
142
                }
143
                return super.resolveEntity(s, s1);
144
            }
145
        };*/
130
		digester.push(this);
146
		digester.push(this);
131
		digester.addObjectCreate("suite/ajc-test",AjcTest.class);
147
		digester.addObjectCreate("suite/ajc-test",AjcTest.class);
132
		digester.addSetProperties("suite/ajc-test");
148
		digester.addSetProperties("suite/ajc-test");
Lines 152-162 Link Here
152
			testMap = new HashMap();
168
			testMap = new HashMap();
153
			System.out.println("LOADING SUITE: " + getSpecFile().getPath());
169
			System.out.println("LOADING SUITE: " + getSpecFile().getPath());
154
			Digester d = getDigester();
170
			Digester d = getDigester();
171
            d.getXMLReader().setEntityResolver(new EntityResolver() {
172
                public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
173
                    System.out.println("!!!!!!!!!XMLBasedAjcTestCase.resolveEntity");
174
                    return null;  //To change body of implemented methods use File | Settings | File Templates.
175
                }
176
            });
155
			try {
177
			try {
156
				InputStreamReader isr = new InputStreamReader(new FileInputStream(getSpecFile()));
178
				InputStreamReader isr = new InputStreamReader(new FileInputStream(getSpecFile()));
157
				d.parse(isr);
179
				d.parse(isr);
158
			} catch (Exception ex) {
180
			} catch (Exception ex) {
181
                //ALEX was: but painfull in IntelliJ single module styled config
159
				fail("Unable to load suite " + getSpecFile().getPath() + " : " + ex);
182
				fail("Unable to load suite " + getSpecFile().getPath() + " : " + ex);
183
//                ALEX is below
184
//                ex.printStackTrace();
185
//                try {
186
//                    InputStreamReader isr = new InputStreamReader(new FileInputStream(new File(getSpecFile().getPath().substring(3))));
187
//                    d.parse(isr);
188
//                } catch (Exception ex2) {
189
//                    ex2.printStackTrace();
190
//                    fail("Unable to load suite " + getSpecFile().getPath() + " : " + ex + " : " + ex2);
191
//                }
160
			}
192
			}
161
			suiteLoaded = true;
193
			suiteLoaded = true;
162
		}
194
		}
(-)modules/testing/src/org/aspectj/testing/harness/bridge/JavaRun.java (-17 / +18 lines)
Lines 14-20 Link Here
14
14
15
import org.aspectj.bridge.IMessageHandler;
15
import org.aspectj.bridge.IMessageHandler;
16
import org.aspectj.bridge.MessageUtil;
16
import org.aspectj.bridge.MessageUtil;
17
import org.aspectj.testing.Tester;
17
//ALEX import org.aspectj.testing.Tester;
18
import org.aspectj.testing.run.IRunIterator;
18
import org.aspectj.testing.run.IRunIterator;
19
import org.aspectj.testing.run.IRunStatus;
19
import org.aspectj.testing.run.IRunStatus;
20
import org.aspectj.testing.run.WrappedRunIterator;
20
import org.aspectj.testing.run.WrappedRunIterator;
Lines 380-401 Link Here
380
     * @return null if successful, error message otherwise
380
     * @return null if successful, error message otherwise
381
     */
381
     */
382
    protected void setupTester(File baseDir, IMessageHandler handler) {
382
    protected void setupTester(File baseDir, IMessageHandler handler) {
383
        File baseDirSet = null;
383
//ALEX
384
        try {
384
//        File baseDirSet = null;
385
            if (!spec.skipTester) {                
385
//        try {
386
                Tester.clear();
386
//            if (!spec.skipTester) {
387
                Tester.setMessageHandler(handler);
387
//                Tester.clear();
388
                Tester.setBASEDIR(baseDir);
388
//                Tester.setMessageHandler(handler);
389
                baseDirSet = Tester.getBASEDIR();
389
//                Tester.setBASEDIR(baseDir);
390
                if (!baseDirSet.equals(baseDir)) {
390
//                baseDirSet = Tester.getBASEDIR();
391
                    String l = "AjcScript.setupTester() setting "
391
//                if (!baseDirSet.equals(baseDir)) {
392
                             + baseDir + " returned " + baseDirSet;
392
//                    String l = "AjcScript.setupTester() setting "
393
                    MessageUtil.debug(handler, l);
393
//                             + baseDir + " returned " + baseDirSet;
394
                }
394
//                    MessageUtil.debug(handler, l);
395
            }
395
//                }
396
        } catch (Throwable t) {
396
//            }
397
            MessageUtil.abort(handler, "baseDir=" + baseDir, t);
397
//        } catch (Throwable t) {
398
        }
398
//            MessageUtil.abort(handler, "baseDir=" + baseDir, t);
399
//        }
399
    }
400
    }
400
	public String toString() {
401
	public String toString() {
401
        return "JavaRun(" + spec + ")";
402
        return "JavaRun(" + spec + ")";
(-)modules/testing/testsrc/org/aspectj/testing/harness/bridge/AbstractRunSpecTest.java (-1 / +2 lines)
Lines 38-44 Link Here
38
        spec.setDescription("some description, with extra");
38
        spec.setDescription("some description, with extra");
39
        XMLWriter out = new XMLWriter(new PrintWriter(System.out));
39
        XMLWriter out = new XMLWriter(new PrintWriter(System.out));
40
        spec.writeXml(out);
40
        spec.writeXml(out);
41
        out.close();
41
        //ALEX: was: but this fucked up the IntelliJ runner since closes the System.out
42
        //out.close();
42
    }
43
    }
43
44
44
    public void testSetOptions() {
45
    public void testSetOptions() {
(-)modules/tests/src/org/aspectj/systemtest/ajc150/AllTestsAspectJ150_NeedJava15.java (-3 / +7 lines)
Lines 12-17 Link Here
12
12
13
import junit.framework.Test;
13
import junit.framework.Test;
14
import junit.framework.TestSuite;
14
import junit.framework.TestSuite;
15
import org.aspectj.systemtest.ajc150.ataspectj.AtAjc150Tests;
15
16
16
/**
17
/**
17
 * This is a superset of AllTestsAspectJ150 that includes tests that must be run on Java 1.5
18
 * This is a superset of AllTestsAspectJ150 that includes tests that must be run on Java 1.5
Lines 22-30 Link Here
22
		TestSuite suite = new TestSuite("Java5");
23
		TestSuite suite = new TestSuite("Java5");
23
		//$JUnit-BEGIN$
24
		//$JUnit-BEGIN$
24
		suite.addTestSuite(Ajc150TestsRequireJava15.class);
25
		suite.addTestSuite(Ajc150TestsRequireJava15.class);
25
		suite.addTestSuite(Autoboxing.class);		
26
		suite.addTestSuite(Autoboxing.class);
26
		suite.addTestSuite(Annotations.class);
27
        suite.addTestSuite(Annotations.class);
27
		
28
29
        //ALEX
30
        suite.addTest(AtAjc150Tests.suite());
31
28
		//$JUnit-END$
32
		//$JUnit-END$
29
		return suite;
33
		return suite;
30
	}
34
	}
(-)modules/weaver/.classpath (-15 / +17 lines)
Lines 1-15 Link Here
1
<?xml version="1.0" encoding="UTF-8"?>
1
<?xml version="1.0" encoding="UTF-8"?>
2
<classpath>
2
<classpath>
3
    <classpathentry kind="src" path="src"/>
3
	<classpathentry kind="src" path="src"/>
4
    <classpathentry kind="src" path="testsrc"/>
4
	<classpathentry excluding="alex/aj5/definition/DocumentParser.java|alex/aj5/definition/XmlParser.java|alex/lang/annotation/|alex/test/|alex/weaver/" kind="src" path="alex"/>
5
    <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
5
	<classpathentry kind="src" path="testsrc"/>
6
    <classpathentry kind="src" path="/runtime"/>
6
	<classpathentry kind="src" path="/runtime"/>
7
    <classpathentry kind="lib" path="/lib/bcel/bcel.jar"
7
	<classpathentry sourcepath="/lib/bcel/bcel-src.zip" kind="lib" path="/lib/bcel/bcel.jar"/>
8
        rootpath="bcel-5.0/src/java" sourcepath="/lib/bcel/bcel-src.zip"/>
8
	<classpathentry sourcepath="/lib/junit/src.jar" kind="lib" path="/lib/junit/junit.jar"/>
9
    <classpathentry kind="lib" path="/lib/junit/junit.jar" sourcepath="/lib/junit/src.jar"/>
9
	<classpathentry kind="src" path="/util"/>
10
    <classpathentry kind="src" path="/util"/>
10
	<classpathentry kind="src" path="/testing-util"/>
11
    <classpathentry kind="src" path="/testing-util"/>
11
	<classpathentry kind="src" path="/bridge"/>
12
    <classpathentry kind="src" path="/bridge"/>
12
	<classpathentry kind="src" path="/asm"/>
13
    <classpathentry kind="src" path="/asm"/>
13
	<classpathentry kind="lib" path="D:/java/jdk1.5.0/jre/lib/rt.jar"/>
14
    <classpathentry kind="output" path="bin"/>
14
	<classpathentry kind="lib" path="D:/aw/cvs_aj/org.aspectj/modules/lib/aspectwerkz/aspectwerkz-2.0.RC3-snapshot.jar"/>
15
</classpath>
15
	<classpathentry kind="lib" path="D:/aw/cvs_aj/org.aspectj/modules/lib/aspectwerkz/aspectwerkz-core-2.0.RC3-snapshot.jar"/>
16
	<classpathentry kind="output" path="bin"/>
17
</classpath>
(-)modules/weaver/src/org/aspectj/weaver/AjcMemberMaker.java (-3 / +3 lines)
Lines 120-126 Link Here
120
		return new ResolvedMember(
120
		return new ResolvedMember(
121
				Member.FIELD, 
121
				Member.FIELD, 
122
				declaringType,
122
				declaringType,
123
				PRIVATE_STATIC,
123
				PRIVATE_STATIC,//TODO ALEX SYNTHETIC
124
				NameMangler.INITFAILURECAUSE_FIELD_NAME,
124
				NameMangler.INITFAILURECAUSE_FIELD_NAME,
125
				TypeX.THROWABLE.getSignature());
125
				TypeX.THROWABLE.getSignature());
126
	}
126
	}
Lines 234-241 Link Here
234
	
234
	
235
	public static ResolvedMember perSingletonAspectOfMethod(TypeX declaringType) {
235
	public static ResolvedMember perSingletonAspectOfMethod(TypeX declaringType) {
236
		return new ResolvedMember(Member.METHOD,
236
		return new ResolvedMember(Member.METHOD,
237
			declaringType, PUBLIC_STATIC, "aspectOf", 
237
			declaringType, PUBLIC_STATIC, "aspectOf",
238
			"()" + declaringType.getSignature());		
238
			"()" + declaringType.getSignature());
239
	}
239
	}
240
	
240
	
241
	public static ResolvedMember perSingletonHasAspectMethod(TypeX declaringType) {
241
	public static ResolvedMember perSingletonHasAspectMethod(TypeX declaringType) {
(-)modules/weaver/src/org/aspectj/weaver/Iterators.java (-1 / +1 lines)
Lines 88-94 Link Here
88
    public static Iterator array(final Object[] o) {
88
    public static Iterator array(final Object[] o) {
89
        return new Iterator() {
89
        return new Iterator() {
90
            int i = 0;
90
            int i = 0;
91
            int len = o.length;
91
            int len = (o==null)?0:o.length;//ALEX fix was o.length
92
            public boolean hasNext() {
92
            public boolean hasNext() {
93
                return i < len;
93
                return i < len;
94
            }
94
            }
(-)modules/weaver/src/org/aspectj/weaver/Member.java (-1 / +10 lines)
Lines 25-31 Link Here
25
import org.aspectj.util.TypeSafeEnum;
25
import org.aspectj.util.TypeSafeEnum;
26
26
27
public class Member implements Comparable, AnnotatedElement {
27
public class Member implements Comparable, AnnotatedElement {
28
28
    
29
    private final Kind kind;
29
    private final Kind kind;
30
    private final TypeX declaringType;
30
    private final TypeX declaringType;
31
    protected final int modifiers; // protected because ResolvedMember uses it
31
    protected final int modifiers; // protected because ResolvedMember uses it
Lines 524-529 Link Here
524
    public static final Kind HANDLER   = new Kind("HANDLER", 7);    
524
    public static final Kind HANDLER   = new Kind("HANDLER", 7);    
525
  
525
  
526
    
526
    
527
    //ALEX
528
    public static final Member ajClassField = new Member(
529
            FIELD,
530
            TypeX.OBJECT,//any one
531
            Modifier.PRIVATE | Modifier.STATIC | Modifier.FINAL,
532
            "aj$class",
533
            TypeX.CLASS.getSignature()
534
    );
535
527
536
528
    
537
    
529
	public Collection/*ResolvedTypeX*/ getDeclaringTypes(World world) {
538
	public Collection/*ResolvedTypeX*/ getDeclaringTypes(World world) {
(-)modules/weaver/src/org/aspectj/weaver/ResolvedTypeX.java (-2 / +15 lines)
Lines 29-34 Link Here
29
import org.aspectj.bridge.MessageUtil;
29
import org.aspectj.bridge.MessageUtil;
30
import org.aspectj.weaver.patterns.Declare;
30
import org.aspectj.weaver.patterns.Declare;
31
import org.aspectj.weaver.patterns.PerClause;
31
import org.aspectj.weaver.patterns.PerClause;
32
import alex.aj5.Ajc5MemberMaker;
32
33
33
public abstract class ResolvedTypeX extends TypeX implements AnnotatedElement {
34
public abstract class ResolvedTypeX extends TypeX implements AnnotatedElement {
34
35
Lines 514-520 Link Here
514
    public boolean isAspect() {
515
    public boolean isAspect() {
515
    	return false;
516
    	return false;
516
    }
517
    }
517
    
518
519
    //ALEX
520
    public boolean isAnnotationStyleAspect() {
521
    	return false;
522
    }
523
518
    /**
524
    /**
519
     * Note: Only overridden by Name subtype.
525
     * Note: Only overridden by Name subtype.
520
     */
526
     */
Lines 637-643 Link Here
637
	    public boolean isAspect() {
643
	    public boolean isAspect() {
638
	    	return delegate.isAspect();
644
	    	return delegate.isAspect();
639
	    }
645
	    }
640
	    
646
647
        //ALEX
648
        public boolean isAnnotationStyleAspect() {
649
            return delegate.isAnnotationStyleAspect();
650
        }
651
641
	    public boolean isEnum() {
652
	    public boolean isEnum() {
642
	    	return delegate.isEnum();
653
	    	return delegate.isEnum();
643
	    }
654
	    }
Lines 794-799 Link Here
794
	    }
805
	    }
795
	    
806
	    
796
	    public abstract boolean isAspect();
807
	    public abstract boolean isAspect();
808
        //ALEX
809
        public abstract boolean isAnnotationStyleAspect();
797
	    public abstract boolean isInterface();
810
	    public abstract boolean isInterface();
798
	    public abstract boolean isEnum();
811
	    public abstract boolean isEnum();
799
	    public abstract boolean isAnnotation();
812
	    public abstract boolean isAnnotation();
(-)modules/weaver/src/org/aspectj/weaver/Shadow.java (-1 / +2 lines)
Lines 457-463 Link Here
457
		ak.getKey()==AdviceKind.PerThisEntry.getKey() ||
457
		ak.getKey()==AdviceKind.PerThisEntry.getKey() ||
458
		ak.getKey()==AdviceKind.PerTargetEntry.getKey() ||
458
		ak.getKey()==AdviceKind.PerTargetEntry.getKey() ||
459
		ak.getKey()==AdviceKind.Softener.getKey()) {
459
		ak.getKey()==AdviceKind.Softener.getKey()) {
460
			  System.err.println("Dont want a message about this: "+ak);
460
			  //ALEX
461
              //was: System.err.println("Dont want a message about this: "+ak);
461
			  return null;
462
			  return null;
462
		}
463
		}
463
		throw new RuntimeException("Shadow.determineRelKind: What the hell is it? "+ak);
464
		throw new RuntimeException("Shadow.determineRelKind: What the hell is it? "+ak);
(-)modules/weaver/src/org/aspectj/weaver/TypeX.java (+3 lines)
Lines 588-593 Link Here
588
    public static final TypeX   JAVA_LANG_EXCEPTION = forSignature("Ljava/lang/Exception;");
588
    public static final TypeX   JAVA_LANG_EXCEPTION = forSignature("Ljava/lang/Exception;");
589
    public static final TypeX   JAVA_LANG_REFLECT_METHOD = forSignature("Ljava/lang/reflect/Method;");
589
    public static final TypeX   JAVA_LANG_REFLECT_METHOD = forSignature("Ljava/lang/reflect/Method;");
590
590
591
    //ALEX
592
    public static final TypeX   CLASS   = forSignature("Ljava/lang/Class;");
593
591
    
594
    
592
    // ---- helpers
595
    // ---- helpers
593
    
596
    
(-)modules/weaver/src/org/aspectj/weaver/WeavingURLClassLoader.java (+17 lines)
Lines 15-20 Link Here
15
15
16
import java.io.File;
16
import java.io.File;
17
import java.io.IOException;
17
import java.io.IOException;
18
import java.io.FileOutputStream;
18
import java.net.MalformedURLException;
19
import java.net.MalformedURLException;
19
import java.net.URL;
20
import java.net.URL;
20
import java.security.CodeSource;
21
import java.security.CodeSource;
Lines 88-93 Link Here
88
	protected Class defineClass(String name, byte[] b, CodeSource cs) throws IOException {
89
	protected Class defineClass(String name, byte[] b, CodeSource cs) throws IOException {
89
//		System.err.println("? WeavingURLClassLoader.defineClass(" + name + ", [" + b.length + "])");
90
//		System.err.println("? WeavingURLClassLoader.defineClass(" + name + ", [" + b.length + "])");
90
		b = adaptor.weaveClass(name,b);
91
		b = adaptor.weaveClass(name,b);
92
93
        //ALEX dump
94
        String className = name.replace('.', '/');
95
        final File dir;
96
        if (className.indexOf('/') > 0) {
97
            dir = new File("_dump" + File.separator + className.substring(0, className.lastIndexOf('/')));
98
        } else {
99
            dir = new File("_dump");
100
        }
101
        dir.mkdirs();
102
        String fileName = "_dump" + File.separator + className + ".class";
103
        System.out.println("AW INFO: dumping class " + className + " to " + "_dump");
104
        FileOutputStream os = new FileOutputStream(fileName);
105
        os.write(b);
106
        os.close();
107
91
		return super.defineClass(name, b, cs);
108
		return super.defineClass(name, b, cs);
92
	}
109
	}
93
110
(-)modules/weaver/src/org/aspectj/weaver/World.java (+7 lines)
Lines 29-34 Link Here
29
import org.aspectj.bridge.IMessage.Kind;
29
import org.aspectj.bridge.IMessage.Kind;
30
import org.aspectj.weaver.patterns.DeclarePrecedence;
30
import org.aspectj.weaver.patterns.DeclarePrecedence;
31
import org.aspectj.weaver.patterns.Pointcut;
31
import org.aspectj.weaver.patterns.Pointcut;
32
import org.aspectj.weaver.patterns.PerClause;
32
33
33
public abstract class World implements Dump.INode {
34
public abstract class World implements Dump.INode {
34
	protected IMessageHandler messageHandler = IMessageHandler.SYSTEM_ERR;
35
	protected IMessageHandler messageHandler = IMessageHandler.SYSTEM_ERR;
Lines 283-288 Link Here
283
	public ConcreteTypeMunger makeCflowCounterFieldAdder(ResolvedMember cflowField) {
284
	public ConcreteTypeMunger makeCflowCounterFieldAdder(ResolvedMember cflowField) {
284
		throw new RuntimeException("unimplemented");
285
		throw new RuntimeException("unimplemented");
285
	}
286
	}
287
288
    //ALEX
289
    public ConcreteTypeMunger makePerClauseAspect(ResolvedTypeX aspect, PerClause.Kind kind) {
290
        throw new RuntimeException("unimplemented");
291
    }
292
286
293
287
    public abstract ConcreteTypeMunger concreteTypeMunger(ResolvedTypeMunger munger, ResolvedTypeX aspectType);
294
    public abstract ConcreteTypeMunger concreteTypeMunger(ResolvedTypeMunger munger, ResolvedTypeX aspectType);
288
295
(-)modules/weaver/src/org/aspectj/weaver/ast/Expr.java (-1 / +7 lines)
Lines 15-20 Link Here
15
15
16
import org.aspectj.weaver.Member;
16
import org.aspectj.weaver.Member;
17
import org.aspectj.weaver.ResolvedTypeX;
17
import org.aspectj.weaver.ResolvedTypeX;
18
import alex.aj5.StringConstExpr;
18
19
19
public abstract class Expr extends ASTNode {
20
public abstract class Expr extends ASTNode {
20
21
Lines 30-37 Link Here
30
    public static FieldGet makeFieldGet(Member myField, ResolvedTypeX inAspect) {
31
    public static FieldGet makeFieldGet(Member myField, ResolvedTypeX inAspect) {
31
        return new FieldGet(myField, inAspect);
32
        return new FieldGet(myField, inAspect);
32
    }
33
    }
33
	public static Expr makeCallExpr(Member member, Expr[] exprs, ResolvedTypeX returnType) {
34
	public static CallExpr makeCallExpr(Member member, Expr[] exprs, ResolvedTypeX returnType) {
34
		return new CallExpr(member, exprs, returnType);
35
		return new CallExpr(member, exprs, returnType);
35
	}
36
	}
37
38
    //ALEx
39
    public static Expr makeStringConstantExpr(final String stringConst, final ResolvedTypeX inAspect) {
40
        return new StringConstExpr(stringConst, inAspect);
41
    }
36
42
37
}
43
}
(-)modules/weaver/src/org/aspectj/weaver/ast/IExprVisitor.java (+9 lines)
Lines 13-23 Link Here
13
13
14
package org.aspectj.weaver.ast;
14
package org.aspectj.weaver.ast;
15
15
16
import alex.aj5.StringConstExpr;
17
import alex.aj5.CastExpr;
18
import alex.aj5.FieldGetOn;
19
16
20
17
public interface IExprVisitor {
21
public interface IExprVisitor {
18
22
19
	void visit(Var i);
23
	void visit(Var i);
20
    void visit(FieldGet fieldGet);
24
    void visit(FieldGet fieldGet);
21
	void visit(CallExpr callExpr);
25
	void visit(CallExpr callExpr);
26
27
    //ALEX
28
    void visit(StringConstExpr stringConstExpr);
29
    void visit(CastExpr castExpr);
30
    void visit(FieldGetOn fieldGetOn);
22
31
23
}
32
}
(-)modules/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java (-27 / +62 lines)
Lines 39-44 Link Here
39
import org.aspectj.weaver.patterns.ExactTypePattern;
39
import org.aspectj.weaver.patterns.ExactTypePattern;
40
import org.aspectj.weaver.patterns.ExposedState;
40
import org.aspectj.weaver.patterns.ExposedState;
41
import org.aspectj.weaver.patterns.Pointcut;
41
import org.aspectj.weaver.patterns.Pointcut;
42
import alex.aj5.Ajc5MemberMaker;
42
43
43
/**
44
/**
44
 * Advice implemented for bcel.
45
 * Advice implemented for bcel.
Lines 305-342 Link Here
305
        for (int i = 0, len = exposedState.size(); i < len; i++) {
306
        for (int i = 0, len = exposedState.size(); i < len; i++) {
306
        	if (exposedState.isErroneousVar(i)) continue; // Erroneous vars have already had error msgs reported!
307
        	if (exposedState.isErroneousVar(i)) continue; // Erroneous vars have already had error msgs reported!
307
            BcelVar v = (BcelVar) exposedState.get(i);
308
            BcelVar v = (BcelVar) exposedState.get(i);
308
            if (v == null) continue;
309
            //ALEX
309
            TypeX desiredTy = getSignature().getParameterTypes()[i];
310
            // was: if (v == null) continue;
310
            v.appendLoadAndConvert(il, fact, desiredTy.resolve(world));
311
            // TODO optimize isSlowAspect
312
            if (v == null) {
313
            	if (!Ajc5MemberMaker.isAnnotationStyleAspect(getConcreteAspect())) {
314
            		continue;
315
            	} else {
316
	                if (getKind() == AdviceKind.Around) {
317
	                    il.append(closureInstantiation);
318
	                    continue;
319
	                } else if ("Lorg/aspectj/lang/JoinPoint$StaticPart;".equals(getSignature().getParameterTypes()[i].getSignature())) {
320
	                    if ((getExtraParameterFlags() & ThisJoinPointStaticPart) != 0) {
321
	                        shadow.getThisJoinPointStaticPartBcelVar().appendLoad(il, fact);
322
	                    }
323
	                } else if ("Lorg/aspectj/lang/JoinPoint;".equals(getSignature().getParameterTypes()[i].getSignature())) {
324
	                    if ((getExtraParameterFlags() & ThisJoinPoint) != 0) {
325
	                        il.append(shadow.loadThisJoinPoint());
326
	                    }
327
	                } else if ("Lorg/aspectj/lang/JoinPoint$EnclosingStaticPart;".equals(getSignature().getParameterTypes()[i].getSignature())) {
328
	                    if ((getExtraParameterFlags() & ThisEnclosingJoinPointStaticPart) != 0) {
329
	                        shadow.getThisEnclosingJoinPointStaticPartBcelVar().appendLoad(il, fact);
330
	                    }
331
	                } else if (hasExtraParameter()) {
332
	                    extraVar.appendLoadAndConvert(
333
	                        il,
334
	                        fact,
335
	                        getExtraParameterType().resolve(world));
336
	                } else {
337
	                    continue;
338
	                }
339
            	}
340
            } else {
341
                TypeX desiredTy = getSignature().getParameterTypes()[i];
342
                v.appendLoadAndConvert(il, fact, desiredTy.resolve(world));
343
            }
311
        }
344
        }
312
345
313
        
346
        
314
		if (getKind() == AdviceKind.Around) {
347
        //ALEX added if
315
			il.append(closureInstantiation);
348
        if (!Ajc5MemberMaker.isAnnotationStyleAspect(getConcreteAspect())) {
316
		} else if (hasExtraParameter()) {
349
            if (getKind() == AdviceKind.Around) {
317
			extraVar.appendLoadAndConvert(
350
                il.append(closureInstantiation);
318
				il,
351
            } else if (hasExtraParameter()) {
319
				fact,
352
                extraVar.appendLoadAndConvert(
320
				getExtraParameterType().resolve(world));
353
                    il,
321
		}
354
                    fact,
322
        
355
                    getExtraParameterType().resolve(world));
323
        // handle thisJoinPoint parameters
356
            }
324
        // these need to be in that same order as parameters in 
325
        // org.aspectj.ajdt.internal.compiler.ast.AdviceDeclaration
326
        if ((getExtraParameterFlags() & ThisJoinPointStaticPart) != 0) {
327
        	shadow.getThisJoinPointStaticPartBcelVar().appendLoad(il, fact);
328
        }
329
        
330
        if ((getExtraParameterFlags() & ThisJoinPoint) != 0) {
331
        	il.append(shadow.loadThisJoinPoint());
332
        }
333
        
334
357
335
        if ((getExtraParameterFlags() & ThisEnclosingJoinPointStaticPart) != 0) {
358
            // handle thisJoinPoint parameters
336
        	shadow.getThisEnclosingJoinPointStaticPartBcelVar().appendLoad(il, fact);
359
            // these need to be in that same order as parameters in
360
            // org.aspectj.ajdt.internal.compiler.ast.AdviceDeclaration
361
            if ((getExtraParameterFlags() & ThisJoinPointStaticPart) != 0) {
362
                shadow.getThisJoinPointStaticPartBcelVar().appendLoad(il, fact);
363
            }
364
365
            if ((getExtraParameterFlags() & ThisJoinPoint) != 0) {
366
                il.append(shadow.loadThisJoinPoint());
367
            }
368
369
            if ((getExtraParameterFlags() & ThisEnclosingJoinPointStaticPart) != 0) {
370
                shadow.getThisEnclosingJoinPointStaticPartBcelVar().appendLoad(il, fact);
371
            }
337
        }
372
        }
338
        
373
339
        
374
340
        return il;
375
        return il;
341
    }
376
    }
342
    
377
    
(-)modules/weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java (+1 lines)
Lines 752-757 Link Here
752
	}
752
	}
753
753
754
    void addPerSingletonField(Member field) {
754
    void addPerSingletonField(Member field) {
755
        //ALEX: dead code here
755
    	ObjectType aspectType = (ObjectType) BcelWorld.makeBcelType(field.getReturnType());
756
    	ObjectType aspectType = (ObjectType) BcelWorld.makeBcelType(field.getReturnType());
756
    	String aspectName = field.getReturnType().getName();
757
    	String aspectName = field.getReturnType().getName();
757
758
(-)modules/weaver/src/org/aspectj/weaver/bcel/BcelField.java (-1 / +5 lines)
Lines 26-31 Link Here
26
import org.aspectj.weaver.ResolvedTypeX;
26
import org.aspectj.weaver.ResolvedTypeX;
27
import org.aspectj.weaver.TypeX;
27
import org.aspectj.weaver.TypeX;
28
import org.aspectj.weaver.World;
28
import org.aspectj.weaver.World;
29
import alex.aj5.Aj5Attributes;
29
30
30
final class BcelField extends ResolvedMember {
31
final class BcelField extends ResolvedMember {
31
32
Lines 52-58 Link Here
52
	
53
	
53
	private void unpackAttributes(World world) {
54
	private void unpackAttributes(World world) {
54
		Attribute[] attrs = field.getAttributes();
55
		Attribute[] attrs = field.getAttributes();
55
		List as = BcelAttributes.readAjAttributes(getDeclaringType().getClassName(),attrs, getSourceContext(world),world.getMessageHandler());
56
        List as = BcelAttributes.readAjAttributes(getDeclaringType().getClassName(),attrs, getSourceContext(world),world.getMessageHandler());
57
        //ALEX
58
        as.addAll(Aj5Attributes.readAj5FieldAttributes(field, world.resolve(getDeclaringType()), getSourceContext(world), world.getMessageHandler()));
59
56
		for (Iterator iter = as.iterator(); iter.hasNext();) {
60
		for (Iterator iter = as.iterator(); iter.hasNext();) {
57
			AjAttribute a = (AjAttribute) iter.next();
61
			AjAttribute a = (AjAttribute) iter.next();
58
			if (a instanceof AjAttribute.AjSynthetic) {
62
			if (a instanceof AjAttribute.AjSynthetic) {
(-)modules/weaver/src/org/aspectj/weaver/bcel/BcelMethod.java (-1 / +5 lines)
Lines 32-37 Link Here
32
import org.aspectj.weaver.ShadowMunger;
32
import org.aspectj.weaver.ShadowMunger;
33
import org.aspectj.weaver.TypeX;
33
import org.aspectj.weaver.TypeX;
34
import org.aspectj.weaver.World;
34
import org.aspectj.weaver.World;
35
import alex.aj5.Aj5Attributes;
35
36
36
final class BcelMethod extends ResolvedMember {
37
final class BcelMethod extends ResolvedMember {
37
38
Lines 90-96 Link Here
90
	}
91
	}
91
92
92
	private void unpackAjAttributes(World world) {
93
	private void unpackAjAttributes(World world) {
93
		List as = BcelAttributes.readAjAttributes(getDeclaringType().getClassName(),method.getAttributes(), getSourceContext(world),world.getMessageHandler());
94
        List as = BcelAttributes.readAjAttributes(getDeclaringType().getClassName(),method.getAttributes(), getSourceContext(world),world.getMessageHandler());
95
        //ALEX
96
        as.addAll(Aj5Attributes.readAj5MethodAttributes(method, world.resolve(getDeclaringType()), getSourceContext(world), world.getMessageHandler()));
97
94
		//System.out.println("unpack: " + this + ", " + as);
98
		//System.out.println("unpack: " + this + ", " + as);
95
		for (Iterator iter = as.iterator(); iter.hasNext();) {
99
		for (Iterator iter = as.iterator(); iter.hasNext();) {
96
			AjAttribute a = (AjAttribute) iter.next();
100
			AjAttribute a = (AjAttribute) iter.next();
(-)modules/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java (-2 / +16 lines)
Lines 36-41 Link Here
36
import org.aspectj.weaver.TypeX;
36
import org.aspectj.weaver.TypeX;
37
import org.aspectj.weaver.WeaverStateInfo;
37
import org.aspectj.weaver.WeaverStateInfo;
38
import org.aspectj.weaver.patterns.PerClause;
38
import org.aspectj.weaver.patterns.PerClause;
39
import alex.aj5.Aj5Attributes;
40
import alex.aj5.Ajc5MemberMaker;
39
41
40
// ??? exposed for testing
42
// ??? exposed for testing
41
public class BcelObjectType extends ResolvedTypeX.ConcreteName {
43
public class BcelObjectType extends ResolvedTypeX.ConcreteName {
Lines 79-85 Link Here
79
    BcelObjectType(ResolvedTypeX.Name resolvedTypeX, JavaClass javaClass, boolean exposedToWeaver) {
81
    BcelObjectType(ResolvedTypeX.Name resolvedTypeX, JavaClass javaClass, boolean exposedToWeaver) {
80
        super(resolvedTypeX, exposedToWeaver);
82
        super(resolvedTypeX, exposedToWeaver);
81
        this.javaClass = javaClass;
83
        this.javaClass = javaClass;
82
        
84
85
        //ALEX, else done too late to lookup @AJ pc refs annotation in class hierarchy
86
        resolvedTypeX.setDelegate(this);
87
83
        if (resolvedTypeX.getSourceContext() == null) {
88
        if (resolvedTypeX.getSourceContext() == null) {
84
        	resolvedTypeX.setSourceContext(new BcelSourceContext(this));
89
        	resolvedTypeX.setSourceContext(new BcelSourceContext(this));
85
        }
90
        }
Lines 164-174 Link Here
164
		return perClause != null;
169
		return perClause != null;
165
    }
170
    }
166
171
172
    //ALEX
173
    public boolean isAnnotationStyleAspect() {
174
        //TODO optimize
175
        return hasAnnotation(Ajc5MemberMaker.ASPECT);
176
    }
177
167
	private void unpackAspectAttributes() {
178
	private void unpackAspectAttributes() {
168
		List pointcuts = new ArrayList();
179
		List pointcuts = new ArrayList();
169
		typeMungers = new ArrayList();
180
		typeMungers = new ArrayList();
170
		declares = new ArrayList();
181
		declares = new ArrayList();
171
		List l = BcelAttributes.readAjAttributes(javaClass.getClassName(),javaClass.getAttributes(), getResolvedTypeX().getSourceContext(),getResolvedTypeX().getWorld().getMessageHandler());
182
        List l = BcelAttributes.readAjAttributes(javaClass.getClassName(),javaClass.getAttributes(), getResolvedTypeX().getSourceContext(),getResolvedTypeX().getWorld().getMessageHandler());
183
        //ALEX
184
        l.addAll(Aj5Attributes.readAj5ClassAttributes(javaClass, getResolvedTypeX(), getResolvedTypeX().getSourceContext(), getResolvedTypeX().getWorld().getMessageHandler()));
185
172
		for (Iterator iter = l.iterator(); iter.hasNext();) {
186
		for (Iterator iter = l.iterator(); iter.hasNext();) {
173
			AjAttribute a = (AjAttribute) iter.next();
187
			AjAttribute a = (AjAttribute) iter.next();
174
			//System.err.println("unpacking: " + this + " and " + a);
188
			//System.err.println("unpacking: " + this + " and " + a);
(-)modules/weaver/src/org/aspectj/weaver/bcel/BcelRenderer.java (+21 lines)
Lines 20-25 Link Here
20
import org.aspectj.apache.bcel.generic.LDC_W;
20
import org.aspectj.apache.bcel.generic.LDC_W;
21
import org.aspectj.apache.bcel.generic.ReferenceType;
21
import org.aspectj.apache.bcel.generic.ReferenceType;
22
import org.aspectj.apache.bcel.generic.Type;
22
import org.aspectj.apache.bcel.generic.Type;
23
import org.aspectj.apache.bcel.generic.LDC;
24
import org.aspectj.apache.bcel.generic.ObjectType;
25
import org.aspectj.apache.bcel.generic.DUP;
23
import org.aspectj.weaver.BCException;
26
import org.aspectj.weaver.BCException;
24
import org.aspectj.weaver.Member;
27
import org.aspectj.weaver.Member;
25
import org.aspectj.weaver.TypeX;
28
import org.aspectj.weaver.TypeX;
Lines 38-43 Link Here
38
import org.aspectj.weaver.ast.Or;
41
import org.aspectj.weaver.ast.Or;
39
import org.aspectj.weaver.ast.Test;
42
import org.aspectj.weaver.ast.Test;
40
import org.aspectj.weaver.ast.Var;
43
import org.aspectj.weaver.ast.Var;
44
import alex.aj5.StringConstExpr;
45
import alex.aj5.CastExpr;
46
import alex.aj5.FieldGetOn;
41
47
42
// we generate right to left, btw.
48
// we generate right to left, btw.
43
public class BcelRenderer implements ITestVisitor, IExprVisitor {
49
public class BcelRenderer implements ITestVisitor, IExprVisitor {
Lines 276-279 Link Here
276
		callIl.append(Utility.createInvoke(fact, world, method));
282
		callIl.append(Utility.createInvoke(fact, world, method));
277
		instructions.insert(callIl);		
283
		instructions.insert(callIl);		
278
	}
284
	}
285
286
    //ALEX
287
    public void visit(StringConstExpr stringConst) {
288
        instructions.insert(fact.createConstant(stringConst.getStringConst()));
289
    }
290
291
    public void visit(CastExpr castExpr) {
292
        //instructions.insert(new DUP());
293
        instructions.append(fact.createCheckCast(new ObjectType(castExpr.getTypeName())));
294
    }
295
296
    public void visit(FieldGetOn fieldGet) {
297
		Member field = fieldGet.getField();
298
		instructions.insert(Utility.createGetOn(fact, field, fieldGet.getDeclaringType()));		
299
    }
279
}
300
}
(-)modules/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java (-7 / +34 lines)
Lines 49-54 Link Here
49
import org.aspectj.apache.bcel.generic.StoreInstruction;
49
import org.aspectj.apache.bcel.generic.StoreInstruction;
50
import org.aspectj.apache.bcel.generic.TargetLostException;
50
import org.aspectj.apache.bcel.generic.TargetLostException;
51
import org.aspectj.apache.bcel.generic.Type;
51
import org.aspectj.apache.bcel.generic.Type;
52
import org.aspectj.apache.bcel.generic.POP;
52
import org.aspectj.bridge.IMessage;
53
import org.aspectj.bridge.IMessage;
53
import org.aspectj.bridge.ISourceLocation;
54
import org.aspectj.bridge.ISourceLocation;
54
import org.aspectj.bridge.Message;
55
import org.aspectj.bridge.Message;
Lines 67-72 Link Here
67
import org.aspectj.weaver.WeaverMessages;
68
import org.aspectj.weaver.WeaverMessages;
68
import org.aspectj.weaver.World;
69
import org.aspectj.weaver.World;
69
import org.aspectj.weaver.ast.Var;
70
import org.aspectj.weaver.ast.Var;
71
import alex.aj5.Ajc5MemberMaker;
70
72
71
73
72
/*
74
/*
Lines 1078-1103 Link Here
1078
		
1080
		
1079
		return il;
1081
		return il;
1080
	}
1082
	}
1081
    
1083
1084
    //ALEX added boolean param to say it is a ESJP that we want
1082
    public BcelVar getThisJoinPointStaticPartBcelVar() {
1085
    public BcelVar getThisJoinPointStaticPartBcelVar() {
1086
        return getThisJoinPointStaticPartBcelVar(false);
1087
    }
1088
    public BcelVar getThisJoinPointStaticPartBcelVar(final boolean isEnclosingJp) {
1083
    	if (thisJoinPointStaticPartVar == null) {
1089
    	if (thisJoinPointStaticPartVar == null) {
1084
    		Field field = getEnclosingClass().getTjpField(this);
1090
    		Field field = getEnclosingClass().getTjpField(this, isEnclosingJp);
1085
    		thisJoinPointStaticPartVar =
1091
    		thisJoinPointStaticPartVar =
1086
    			new BcelFieldRef(
1092
    			new BcelFieldRef(
1087
    				world.getCoreType(TypeX.forName("org.aspectj.lang.JoinPoint$StaticPart")),
1093
    				isEnclosingJp?
1094
                        world.getCoreType(TypeX.forName("org.aspectj.lang.JoinPoint$EnclosingStaticPart")):
1095
                        world.getCoreType(TypeX.forName("org.aspectj.lang.JoinPoint$StaticPart")),
1088
    				getEnclosingClass().getClassName(),
1096
    				getEnclosingClass().getClassName(),
1089
    				field.getName());
1097
    				field.getName());
1090
//    		getEnclosingClass().warnOnAddedStaticInitializer(this,munger.getSourceLocation());
1098
//    		getEnclosingClass().warnOnAddedStaticInitializer(this,munger.getSourceLocation());
1091
    	}
1099
    	}
1092
    	return thisJoinPointStaticPartVar;
1100
    	return thisJoinPointStaticPartVar;
1093
    }
1101
    }
1094
    
1102
1103
    //ALEX added true to say it is a ESJP that we want
1104
    //ALEX Note: weird to delegate since there is another check on thisJoinPointStaticPartVar==null then
1095
    public BcelVar getThisEnclosingJoinPointStaticPartBcelVar() {
1105
    public BcelVar getThisEnclosingJoinPointStaticPartBcelVar() {
1096
    	if (enclosingShadow == null) {
1106
    	if (enclosingShadow == null) {
1097
    		// the enclosing of an execution is itself
1107
    		// the enclosing of an execution is itself
1098
    		return getThisJoinPointStaticPartBcelVar();
1108
    		return getThisJoinPointStaticPartBcelVar(true);
1099
    	} else {
1109
    	} else {
1100
    		return ((BcelShadow)enclosingShadow).getThisJoinPointStaticPartBcelVar();
1110
    		return ((BcelShadow)enclosingShadow).getThisJoinPointStaticPartBcelVar(true);
1101
    	}
1111
    	}
1102
    }
1112
    }
1103
    
1113
    
Lines 2072-2078 Link Here
2072
        InstructionList advice = new InstructionList();
2082
        InstructionList advice = new InstructionList();
2073
        advice.append(munger.getAdviceArgSetup(this, null, closureInstantiation));
2083
        advice.append(munger.getAdviceArgSetup(this, null, closureInstantiation));
2074
//        advice.append(closureInstantiation);
2084
//        advice.append(closureInstantiation);
2075
        advice.append(munger.getNonTestAdviceInstructions(this));
2085
2086
        //ALEX
2087
        if (Ajc5MemberMaker.isAnnotationStyleAspect(munger.getConcreteAspect())) {
2088
            //advice.append(new POP());
2089
            advice.append(Utility.createInvoke(
2090
                    getFactory(),
2091
                    getWorld(),
2092
                    new Member(
2093
                            Member.METHOD,
2094
                            TypeX.forName("org.aspectj.runtime.internal.AroundClosure"),
2095
                            Modifier.PUBLIC,
2096
                            "getJoinPoint",
2097
                            "()Lorg/aspectj/lang/JoinPoint;"
2098
                            )
2099
            ));
2100
        }
2101
2102
        advice.append(munger.getNonTestAdviceInstructions(this));//ALEX invoke the advice
2076
        advice.append(returnConversionCode);         
2103
        advice.append(returnConversionCode);         
2077
        
2104
        
2078
		if (!hasDynamicTest) {
2105
		if (!hasDynamicTest) {
(-)modules/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java (-3 / +4 lines)
Lines 566-573 Link Here
566
	}
566
	}
567
	
567
	
568
	
568
	
569
	
569
    //ALEX was private
570
	private LazyMethodGen makeMethodGen(LazyClassGen gen, ResolvedMember member) {
570
	protected LazyMethodGen makeMethodGen(LazyClassGen gen, ResolvedMember member) {
571
		LazyMethodGen ret = new LazyMethodGen(
571
		LazyMethodGen ret = new LazyMethodGen(
572
			member.getModifiers(),
572
			member.getModifiers(),
573
			BcelWorld.makeBcelType(member.getReturnType()),
573
			BcelWorld.makeBcelType(member.getReturnType()),
Lines 582-588 Link Here
582
	}
582
	}
583
583
584
584
585
	private FieldGen makeFieldGen(LazyClassGen gen, ResolvedMember member) {
585
    //ALEX was private
586
	protected FieldGen makeFieldGen(LazyClassGen gen, ResolvedMember member) {
586
		return new FieldGen(
587
		return new FieldGen(
587
			member.getModifiers(),
588
			member.getModifiers(),
588
			BcelWorld.makeBcelType(member.getReturnType()),
589
			BcelWorld.makeBcelType(member.getReturnType()),
(-)modules/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java (-9 / +41 lines)
Lines 124-135 Link Here
124
124
125
125
126
    public void addLibraryAspect(String aspectName) {
126
    public void addLibraryAspect(String aspectName) {
127
    	ResolvedTypeX type = world.resolve(aspectName);
127
        //ALEX was:
128
    	//ResolvedTypeX type = world.resolve(aspectName);
129
130
        //ALEX
131
        // 1 - resolve as is
132
        ResolvedTypeX type = world.resolve(TypeX.forName(aspectName), true);
133
        if (type.equals(ResolvedTypeX.MISSING)) {
134
            // fallback on inner class lookup mechanism
135
            String fixedName = aspectName;
136
            int hasDot = fixedName.lastIndexOf('.');
137
            while (hasDot > 0) {
138
                System.out.println("BcelWeaver.addLibraryAspect " + fixedName);
139
                char[] fixedNameChars = fixedName.toCharArray();
140
                fixedNameChars[hasDot] = '$';
141
                fixedName = new String(fixedNameChars);
142
                hasDot = fixedName.lastIndexOf('.');
143
                type = world.resolve(TypeX.forName(fixedName), true);
144
                if (!type.equals(ResolvedTypeX.MISSING)) {
145
                    break;
146
                }
147
            }
148
        }
149
128
    	//System.out.println("type: " + type + " for " + aspectName);
150
    	//System.out.println("type: " + type + " for " + aspectName);
129
		if (type.isAspect()) {
151
		if (type.isAspect()) {
130
			xcutSet.addOrReplaceAspect(type);
152
			xcutSet.addOrReplaceAspect(type);
131
		} else {
153
		} else {
132
			throw new RuntimeException("unimplemented");
154
			throw new RuntimeException("Cannot register non aspect: " + type.getName() + " , " + aspectName);//ALEX
133
		}
155
		}
134
    }
156
    }
135
    
157
    
Lines 360-372 Link Here
360
		declareParentsList = xcutSet.getDeclareParents();
382
		declareParentsList = xcutSet.getDeclareParents();
361
    	
383
    	
362
		//XXX this gets us a stable (but completely meaningless) order
384
		//XXX this gets us a stable (but completely meaningless) order
363
		Collections.sort(
385
        //ALEX: TODO this breaks @AJ advice source code based precedence
364
			shadowMungerList, 
386
        //ALEX: commented that block out - might have some side effect on AJ somewhere ?
365
			new Comparator() {
387
//		Collections.sort(
366
				public int compare(Object o1, Object o2) {
388
//			shadowMungerList,
367
					return o1.toString().compareTo(o2.toString());
389
//			new Comparator() {
368
				}
390
//				public int compare(Object o1, Object o2) {
369
			});
391
//					return o1.toString().compareTo(o2.toString());
392
//				}
393
//			});
394
395
        //ALEX debug precedence
396
//        for (Iterator iterator = shadowMungerList.iterator(); iterator.hasNext();) {
397
//            Object o = (Object) iterator.next();
398
//            System.out.println(((org.aspectj.weaver.Advice)o).getSignature());
399
//        }
370
    }
400
    }
371
    
401
    
372
    /*
402
    /*
Lines 1089-1094 Link Here
1089
			} catch (RuntimeException re) {
1119
			} catch (RuntimeException re) {
1090
				System.err.println("trouble in: ");
1120
				System.err.println("trouble in: ");
1091
				//XXXclazz.print(System.err);
1121
				//XXXclazz.print(System.err);
1122
                //ALEX
1123
                re.printStackTrace();
1092
				throw re;
1124
				throw re;
1093
			} catch (Error re) {
1125
			} catch (Error re) {
1094
				System.err.println("trouble in: ");
1126
				System.err.println("trouble in: ");
(-)modules/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java (-5 / +45 lines)
Lines 34-39 Link Here
34
import org.aspectj.apache.bcel.generic.Type;
34
import org.aspectj.apache.bcel.generic.Type;
35
import org.aspectj.apache.bcel.util.ClassPath;
35
import org.aspectj.apache.bcel.util.ClassPath;
36
import org.aspectj.apache.bcel.util.Repository;
36
import org.aspectj.apache.bcel.util.Repository;
37
import org.aspectj.apache.bcel.util.ClassLoaderRepository;
37
import org.aspectj.bridge.IMessageHandler;
38
import org.aspectj.bridge.IMessageHandler;
38
import org.aspectj.weaver.Advice;
39
import org.aspectj.weaver.Advice;
39
import org.aspectj.weaver.AdviceKind;
40
import org.aspectj.weaver.AdviceKind;
Lines 49-58 Link Here
49
import org.aspectj.weaver.patterns.FormalBinding;
50
import org.aspectj.weaver.patterns.FormalBinding;
50
import org.aspectj.weaver.patterns.Pointcut;
51
import org.aspectj.weaver.patterns.Pointcut;
51
import org.aspectj.weaver.patterns.SimpleScope;
52
import org.aspectj.weaver.patterns.SimpleScope;
53
import org.aspectj.weaver.patterns.PerClause;
52
54
53
public class BcelWorld extends World implements Repository {
55
public class BcelWorld extends World implements Repository {
54
	private ClassPathManager classPath;
56
	private ClassPathManager classPath;
55
	
57
58
    //ALEX
59
    private Repository delegate;
60
56
	//private ClassPathManager aspectPath = null;
61
	//private ClassPathManager aspectPath = null;
57
	// private List aspectPathEntries;
62
	// private List aspectPathEntries;
58
	
63
	
Lines 90-96 Link Here
90
		setMessageHandler(handler);	
95
		setMessageHandler(handler);	
91
		setXRefHandler(xrefHandler);
96
		setXRefHandler(xrefHandler);
92
		// Tell BCEL to use us for resolving any classes
97
		// Tell BCEL to use us for resolving any classes
93
		org.aspectj.apache.bcel.Repository.setRepository(this);
98
99
        //ALEX
100
        delegate = this;
101
		org.aspectj.apache.bcel.Repository.setRepository(delegate);//ALEX was this
94
	}
102
	}
95
	
103
	
96
	public BcelWorld(ClassPathManager cpm, IMessageHandler handler, ICrossReferenceHandler xrefHandler) {
104
	public BcelWorld(ClassPathManager cpm, IMessageHandler handler, ICrossReferenceHandler xrefHandler) {
Lines 98-106 Link Here
98
		setMessageHandler(handler);
106
		setMessageHandler(handler);
99
		setXRefHandler(xrefHandler);
107
		setXRefHandler(xrefHandler);
100
		// Tell BCEL to use us for resolving any classes
108
		// Tell BCEL to use us for resolving any classes
101
		org.aspectj.apache.bcel.Repository.setRepository(this);
109
110
        //ALEX
111
        delegate = this;
112
		org.aspectj.apache.bcel.Repository.setRepository(delegate);//ALEX was this
102
	}
113
	}
103
	
114
115
    //ALEX
116
    public BcelWorld(ClassLoader loader, IMessageHandler handler, ICrossReferenceHandler xrefHandler) {
117
        this.classPath = null;
118
        setMessageHandler(handler);
119
        setXRefHandler(xrefHandler);
120
        // Tell BCEL to use us for resolving any classes
121
122
        //ALEX
123
        delegate = new ClassLoaderRepository(loader);
124
        org.aspectj.apache.bcel.Repository.setRepository(delegate);//ALEX was this
125
    }
126
104
	public void addPath (String name) {
127
	public void addPath (String name) {
105
		classPath.addPath(name, this.getMessageHandler());
128
		classPath.addPath(name, this.getMessageHandler());
106
	}
129
	}
Lines 217-223 Link Here
217
	
240
	
218
	
241
	
219
	private JavaClass lookupJavaClass(ClassPathManager classPath, String name) {
242
	private JavaClass lookupJavaClass(ClassPathManager classPath, String name) {
220
		if (classPath == null) return null;
243
        //ALEX
244
		//if (classPath == null) return null;
245
246
        if (classPath == null) {
247
            try {
248
                return delegate.loadClass(name);
249
            } catch (ClassNotFoundException e) {
250
                //ALEX - issue when resolve tries to use the import (java.lang.int etc)
251
                //was: e.printStackTrace();
252
                return null;
253
            }
254
        }
255
221
		try {
256
		try {
222
	        ClassPathManager.ClassFile file = classPath.find(TypeX.forName(name));
257
	        ClassPathManager.ClassFile file = classPath.find(TypeX.forName(name));
223
	        if (file == null) return null;
258
	        if (file == null) return null;
Lines 366-371 Link Here
366
	public ConcreteTypeMunger makeCflowCounterFieldAdder(ResolvedMember cflowField) {
401
	public ConcreteTypeMunger makeCflowCounterFieldAdder(ResolvedMember cflowField) {
367
		return new BcelCflowCounterFieldAdder(cflowField);
402
		return new BcelCflowCounterFieldAdder(cflowField);
368
	}
403
	}
404
405
    //ALEX
406
    public ConcreteTypeMunger makePerClauseAspect(ResolvedTypeX aspect, PerClause.Kind kind) {
407
        return new BcelPerClauseAspectAdder(aspect, kind);
408
    }
369
409
370
	public static BcelObjectType getBcelObjectType(ResolvedTypeX concreteAspect) {
410
	public static BcelObjectType getBcelObjectType(ResolvedTypeX concreteAspect) {
371
		//XXX need error checking
411
		//XXX need error checking
(-)modules/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java (-11 / +50 lines)
Lines 194-200 Link Here
194
    }
194
    }
195
195
196
	private BcelObjectType myType; // XXX is not set for types we create
196
	private BcelObjectType myType; // XXX is not set for types we create
197
	private ClassGen myGen;
197
	public ClassGen myGen;//ALEX..was private
198
	private ConstantPoolGen constantPoolGen;
198
	private ConstantPoolGen constantPoolGen;
199
199
200
    private List /*LazyMethodGen*/
200
    private List /*LazyMethodGen*/
Lines 404-410 Link Here
404
				new AjAttribute.WeaverState(myType.getWeaverState()), 
404
				new AjAttribute.WeaverState(myType.getWeaverState()), 
405
				getConstantPoolGen()));
405
				getConstantPoolGen()));
406
    	}
406
    	}
407
    	
407
408
        //ALEX
409
        //TODO make a lot of test fail since the test compare weaved class file
410
        // based on some test data as text files...
411
//        if (!myGen.isInterface()) {
412
//        	addAjClassField();
413
//        }
414
408
    	addAjcInitializers();
415
    	addAjcInitializers();
409
    	
416
    	
410
        int len = methodGens.size();
417
        int len = methodGens.size();
Lines 658-664 Link Here
658
    	new ObjectType("org.aspectj.lang.JoinPoint");
665
    	new ObjectType("org.aspectj.lang.JoinPoint");
659
    public static final ObjectType staticTjpType = 
666
    public static final ObjectType staticTjpType = 
660
    	new ObjectType("org.aspectj.lang.JoinPoint$StaticPart");
667
    	new ObjectType("org.aspectj.lang.JoinPoint$StaticPart");
661
    private static final ObjectType sigType = 
668
    public static final ObjectType enclosingStaticTjpType =
669
    	new ObjectType("org.aspectj.lang.JoinPoint$EnclosingStaticPart");
670
    private static final ObjectType sigType =
662
    	new ObjectType("org.aspectj.lang.Signature");
671
    	new ObjectType("org.aspectj.lang.Signature");
663
//    private static final ObjectType slType = 
672
//    private static final ObjectType slType = 
664
//    	new ObjectType("org.aspectj.lang.reflect.SourceLocation");
673
//    	new ObjectType("org.aspectj.lang.reflect.SourceLocation");
Lines 666-673 Link Here
666
    	new ObjectType("org.aspectj.runtime.reflect.Factory");
675
    	new ObjectType("org.aspectj.runtime.reflect.Factory");
667
    private static final ObjectType classType = 
676
    private static final ObjectType classType = 
668
    	new ObjectType("java.lang.Class");
677
    	new ObjectType("java.lang.Class");
669
    
678
670
    public Field getTjpField(BcelShadow shadow) {
679
    //ALEX : added boolean for ESJP
680
    public Field getTjpField(BcelShadow shadow, final boolean isEnclosingJp) {
671
    	Field ret = (Field)tjpFields.get(shadow);
681
    	Field ret = (Field)tjpFields.get(shadow);
672
    	if (ret != null) return ret;
682
    	if (ret != null) return ret;
673
    	
683
    	
Lines 694-711 Link Here
694
			modifiers |= Modifier.PRIVATE;
704
			modifiers |= Modifier.PRIVATE;
695
		}
705
		}
696
		ret = new FieldGen(modifiers,
706
		ret = new FieldGen(modifiers,
697
    		staticTjpType,
707
    		isEnclosingJp?enclosingStaticTjpType:staticTjpType,
698
    		"ajc$tjp_" + tjpFields.size(),
708
    		"ajc$tjp_" + tjpFields.size(),
699
    		getConstantPoolGen()).getField();
709
    		getConstantPoolGen()).getField();
700
    	addField(ret);
710
    	addField(ret);
701
    	tjpFields.put(shadow, ret);
711
    	tjpFields.put(shadow, ret);
702
    	return ret;
712
    	return ret;
703
    }
713
    }
704
    
714
715
716
    //ALEX
717
    private void addAjClassField() {
718
        Field ajClassField = new FieldGen(
719
                Modifier.PRIVATE | Modifier.FINAL | Modifier.STATIC,
720
                classType,
721
                "aj$class",
722
                getConstantPoolGen()).getField();
723
        addField(ajClassField);
724
725
        InstructionList il = new InstructionList();
726
        il.append(new PUSH(getConstantPoolGen(), getClassName()));
727
        il.append(fact.createInvoke("java.lang.Class", "forName", classType,
728
                    new Type[] {Type.STRING}, Constants.INVOKESTATIC));
729
        il.append(fact.createFieldAccess(getClassName(), ajClassField.getName(),
730
            classType, Constants.PUTSTATIC));
731
732
        getStaticInitializer().getBody().insert(il);
733
    }
734
705
    private void addAjcInitializers() {
735
    private void addAjcInitializers() {
706
    	if (tjpFields.size() == 0) return;
736
    	if (tjpFields.size() == 0) return;
707
    	
737
    	
708
    	InstructionList il = initializeAllTjps();
738
    	InstructionList il = initializeAllTjps();
739
709
    	getStaticInitializer().getBody().insert(il);
740
    	getStaticInitializer().getBody().insert(il);
710
    }
741
    }
711
    
742
    
Lines 777-792 Link Here
777
    	
808
    	
778
    	//XXX should load source location from shadow
809
    	//XXX should load source location from shadow
779
    	list.append(Utility.createConstant(fact, shadow.getSourceLine()));
810
    	list.append(Utility.createConstant(fact, shadow.getSourceLine()));
780
    	
811
781
    	
812
        //ALEX added logic
813
        final String factoryMethod;
814
        if (staticTjpType.equals(field.getType())) {
815
            factoryMethod = "makeSJP";
816
        } else if (enclosingStaticTjpType.equals(field.getType())) {
817
            factoryMethod = "makeESJP";
818
        } else {
819
            throw new Error("should not happen");
820
        }
782
    	list.append(fact.createInvoke(factoryType.getClassName(),
821
    	list.append(fact.createInvoke(factoryType.getClassName(),
783
    			"makeSJP", staticTjpType, 
822
    			factoryMethod, field.getType()/*ALEX was: staticTjpType*/,
784
    			new Type[] { Type.STRING, sigType, Type.INT},
823
    			new Type[] { Type.STRING, sigType, Type.INT},
785
    			Constants.INVOKEVIRTUAL));
824
    			Constants.INVOKEVIRTUAL));
786
    	
825
    	
787
    	// put it in the field	
826
    	// put it in the field	
788
    	list.append(fact.createFieldAccess(getClassName(), field.getName(),
827
    	list.append(fact.createFieldAccess(getClassName(), field.getName(),
789
    		staticTjpType, Constants.PUTSTATIC));
828
    		field.getType()/*ALEX was: staticTjpType*/, Constants.PUTSTATIC));
790
    }
829
    }
791
    
830
    
792
831
(-)modules/weaver/src/org/aspectj/weaver/bcel/Utility.java (+16 lines)
Lines 118-123 Link Here
118
            kind);
118
            kind);
119
	}
119
	}
120
120
121
    //ALEX
122
    public static Instruction createGetOn(InstructionFactory fact, Member signature, TypeX declaringType) {
123
        short kind;
124
        if (signature.isStatic()) {
125
            kind = Constants.GETSTATIC;
126
        } else {
127
            kind = Constants.GETFIELD;
128
        }
129
130
        return fact.createFieldAccess(
131
            declaringType.getName(),
132
            signature.getName(),
133
            BcelWorld.makeBcelType(signature.getReturnType()),
134
            kind);
135
    }
136
121
	public static Instruction createSet(InstructionFactory fact, Member signature) {
137
	public static Instruction createSet(InstructionFactory fact, Member signature) {
122
        short kind;
138
        short kind;
123
        if (signature.isStatic()) {
139
        if (signature.isStatic()) {
(-)modules/weaver/src/org/aspectj/weaver/internal/tools/PointcutExpressionImpl.java (-1 / +6 lines)
Lines 207-213 Link Here
207
			return 0;
207
			return 0;
208
		}
208
		}
209
209
210
		public Class getDeclaringClass() {
210
        public boolean isSynthetic() {
211
            return false;  //ALEX
212
        }
213
214
        public Class getDeclaringClass() {
211
			return decClass;
215
			return decClass;
212
		}
216
		}
213
217
Lines 218-222 Link Here
218
		public Class getHandledExceptionType() {
222
		public Class getHandledExceptionType() {
219
			return exType;
223
			return exType;
220
		}
224
		}
225
221
	}
226
	}
222
}
227
}
(-)modules/weaver/src/org/aspectj/weaver/patterns/Bindings.java (-1 / +1 lines)
Lines 108-114 Link Here
108
	public void checkAllBound(IScope scope) {
108
	public void checkAllBound(IScope scope) {
109
		for (int i=0, len=bindings.length; i < len; i++) {
109
		for (int i=0, len=bindings.length; i < len; i++) {
110
			if (bindings[i] == null) {
110
			if (bindings[i] == null) {
111
				scope.message(IMessage.ERROR, scope.getFormal(i), "formal unbound in pointcut");
111
				scope.message(IMessage.ERROR, scope.getFormal(i), "formal unbound in pointcut ");
112
			}
112
			}
113
		}
113
		}
114
114
(-)modules/weaver/src/org/aspectj/weaver/patterns/IScope.java (-1 / +1 lines)
Lines 21-27 Link Here
21
import org.aspectj.weaver.World;
21
import org.aspectj.weaver.World;
22
22
23
public interface IScope {
23
public interface IScope {
24
24
    
25
    /** returns the type corresponding to the name in this scope
25
    /** returns the type corresponding to the name in this scope
26
     *  returns ResolvedTypeX.MISSING if no such type exists and reports a problem
26
     *  returns ResolvedTypeX.MISSING if no such type exists and reports a problem
27
     */
27
     */
(-)modules/weaver/src/org/aspectj/weaver/patterns/PerSingleton.java (-12 / +72 lines)
Lines 16-31 Link Here
16
import java.io.DataOutputStream;
16
import java.io.DataOutputStream;
17
import java.io.IOException;
17
import java.io.IOException;
18
import java.util.Set;
18
import java.util.Set;
19
import java.lang.reflect.Modifier;
19
20
20
import org.aspectj.util.FuzzyBoolean;
21
import org.aspectj.util.FuzzyBoolean;
21
import org.aspectj.weaver.AjcMemberMaker;
22
import org.aspectj.weaver.AjcMemberMaker;
22
import org.aspectj.weaver.ISourceContext;
23
import org.aspectj.weaver.ISourceContext;
23
import org.aspectj.weaver.ResolvedTypeX;
24
import org.aspectj.weaver.ResolvedTypeX;
24
import org.aspectj.weaver.Shadow;
25
import org.aspectj.weaver.Shadow;
26
import org.aspectj.weaver.Member;
25
import org.aspectj.weaver.VersionedDataInputStream;
27
import org.aspectj.weaver.VersionedDataInputStream;
28
import org.aspectj.weaver.ResolvedMember;
29
import org.aspectj.weaver.NameMangler;
30
import org.aspectj.weaver.TypeX;
26
import org.aspectj.weaver.ast.Expr;
31
import org.aspectj.weaver.ast.Expr;
27
import org.aspectj.weaver.ast.Literal;
32
import org.aspectj.weaver.ast.Literal;
28
import org.aspectj.weaver.ast.Test;
33
import org.aspectj.weaver.ast.Test;
34
import org.aspectj.weaver.ast.CallExpr;
35
import alex.aj5.Ajc5MemberMaker;
36
import alex.aj5.CastExpr;
37
import alex.aj5.FieldGetOn;
29
38
30
public class PerSingleton extends PerClause {
39
public class PerSingleton extends PerClause {
31
	public PerSingleton() {
40
	public PerSingleton() {
Lines 47-69 Link Here
47
    	// this method intentionally left blank
56
    	// this method intentionally left blank
48
    }
57
    }
49
58
50
    protected Test findResidueInternal(Shadow shadow, ExposedState state) {
59
    public Test findResidueInternal(Shadow shadow, ExposedState state) {
51
    	Expr myInstance =
60
        //ALEX
52
    		Expr.makeCallExpr(AjcMemberMaker.perSingletonAspectOfMethod(inAspect),
61
        //
53
    							Expr.NONE, inAspect);
62
        //    	Expr myInstance =
54
    	
63
        //    		Expr.makeCallExpr(AjcMemberMaker.perSingletonAspectOfMethod(inAspect),
55
    	state.setAspectInstance(myInstance);
64
        //    							Expr.NONE, inAspect);
56
    	
65
        //
57
    	// we have no test
66
        //    	state.setAspectInstance(myInstance);
58
    	// a NoAspectBoundException will be thrown if we need an instance of this
67
        //
59
    	// aspect before we are bound
68
        //    	// we have no test
60
        return Literal.TRUE;
69
        //    	// a NoAspectBoundException will be thrown if we need an instance of this
70
        //    	// aspect before we are bound
71
        //        return Literal.TRUE;
72
//        if (!Ajc5MemberMaker.isSlowAspect(inAspect)) {
73
            Expr myInstance =
74
                Expr.makeCallExpr(AjcMemberMaker.perSingletonAspectOfMethod(inAspect),
75
                                    Expr.NONE, inAspect);
76
77
            state.setAspectInstance(myInstance);
78
79
            // we have no test
80
            // a NoAspectBoundException will be thrown if we need an instance of this
81
            // aspect before we are bound
82
            return Literal.TRUE;
83
//        } else {
84
//            CallExpr callAspectOf =Expr.makeCallExpr(
85
//                    Ajc5MemberMaker.perSingletonAspectOfMethod(inAspect),
86
//                    new Expr[]{
87
//                        Expr.makeStringConstantExpr(inAspect.getName(), inAspect),
88
//                        //FieldGet is using ResolvedType and I don't need that here
89
//                        new FieldGetOn(Member.ajClassField, shadow.getEnclosingType())
90
//                    },
91
//                    inAspect
92
//            );
93
//            Expr castedCallAspectOf = new CastExpr(callAspectOf, inAspect.getName());
94
//            state.setAspectInstance(castedCallAspectOf);
95
//            return Literal.TRUE;
96
//        }
61
    }
97
    }
62
98
63
	public PerClause concretize(ResolvedTypeX inAspect) {
99
	public PerClause concretize(ResolvedTypeX inAspect) {
64
		PerSingleton ret = new PerSingleton();
100
		PerSingleton ret = new PerSingleton();
101
102
        //ALEX added as in PerTypeWithin (?)
103
        ret.copyLocationFrom(this);
104
65
		ret.inAspect = inAspect;
105
		ret.inAspect = inAspect;
66
		return ret;
106
107
        //ALEX: do stuff to add hasAspect and co.
108
        if (inAspect.isAbstract() || !Ajc5MemberMaker.isAnnotationStyleAspect(inAspect)) {
109
            return ret;
110
        } else {
111
            System.err.println("PerSingleton.concretize " + inAspect.getName());
112
113
            //TODO will those change be ok if we add a serializable aspect ?
114
            // dig: 		// can't be Serializable/Cloneable unless -XserializableAspects
115
            inAspect.crosscuttingMembers.addTypeMunger(
116
                    inAspect.getWorld().makePerClauseAspect(inAspect, getKind())
117
            );
118
119
            return ret;
120
        }
121
122
123
124
125
126
67
	}
127
	}
68
128
69
    public void write(DataOutputStream s) throws IOException {
129
    public void write(DataOutputStream s) throws IOException {
(-)modules/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java (-1 / +1 lines)
Lines 155-161 Link Here
155
		}
155
		}
156
		
156
		
157
		if (pointcutDef == null) {
157
		if (pointcutDef == null) {
158
			scope.message(IMessage.ERROR, this, "can't find referenced pointcut");
158
			scope.message(IMessage.ERROR, this, "can't find referenced pointcut " + name);
159
			return;
159
			return;
160
		}
160
		}
161
		
161
		
(-)modules/weaver/src/org/aspectj/weaver/patterns/SimpleScope.java (-1 / +1 lines)
Lines 37-43 Link Here
37
        this.world = world;
37
        this.world = world;
38
        this.bindings = bindings;
38
        this.bindings = bindings;
39
    }
39
    }
40
	
40
41
	// ---- impl
41
	// ---- impl
42
42
43
	//XXX doesn't report any problems
43
	//XXX doesn't report any problems
(-)modules/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java (-9 / +13 lines)
Lines 41-46 Link Here
41
import org.aspectj.weaver.bcel.BcelWeaver;
41
import org.aspectj.weaver.bcel.BcelWeaver;
42
import org.aspectj.weaver.bcel.BcelWorld;
42
import org.aspectj.weaver.bcel.BcelWorld;
43
import org.aspectj.weaver.bcel.UnwovenClassFile;
43
import org.aspectj.weaver.bcel.UnwovenClassFile;
44
import alex.aj5.Ajc5MemberMaker;
44
45
45
/**
46
/**
46
 * This adaptor allows the AspectJ compiler to be embedded in an existing
47
 * This adaptor allows the AspectJ compiler to be embedded in an existing
Lines 64-76 Link Here
64
	public static final String WEAVING_ADAPTOR_VERBOSE = "aj.weaving.verbose"; 
65
	public static final String WEAVING_ADAPTOR_VERBOSE = "aj.weaving.verbose"; 
65
	public static final String SHOW_WEAVE_INFO_PROPERTY = "org.aspectj.weaver.showWeaveInfo"; 
66
	public static final String SHOW_WEAVE_INFO_PROPERTY = "org.aspectj.weaver.showWeaveInfo"; 
66
67
67
	private boolean enabled = true;
68
	protected boolean enabled = true;
68
	private boolean verbose = getVerbose();
69
	protected boolean verbose = getVerbose();
69
	private BcelWorld bcelWorld = null;
70
	protected BcelWorld bcelWorld = null;
70
	private BcelWeaver weaver = null;
71
	protected BcelWeaver weaver = null;
71
	private WeavingAdaptorMessageHandler messageHandler = null;
72
	protected WeavingAdaptorMessageHandler messageHandler = null;
72
	private GeneratedClassHandler generatedClassHandler;
73
	protected GeneratedClassHandler generatedClassHandler;
73
	private Map generatedClasses = new HashMap(); /* String -> UnwovenClassFile */ 
74
	protected Map generatedClasses = new HashMap(); /* String -> UnwovenClassFile */
74
75
75
	/**
76
	/**
76
	 * Construct a WeavingAdaptor with a reference to a weaving class loader. The
77
	 * Construct a WeavingAdaptor with a reference to a weaving class loader. The
Lines 192-198 Link Here
192
	
193
	
193
	private boolean shouldWeaveAspect (String name) {
194
	private boolean shouldWeaveAspect (String name) {
194
		ResolvedTypeX type = bcelWorld.resolve(name);
195
		ResolvedTypeX type = bcelWorld.resolve(name);
195
		return (type == null || !type.isAspect());
196
		//ALEX
197
        //was: return (type == null || !type.isAspect());
198
        return (type == null || !type.isAspect() || Ajc5MemberMaker.isAnnotationStyleAspect(type));
199
196
	}
200
	}
197
201
198
	/**
202
	/**
Lines 278-284 Link Here
278
	 * Processes messages arising from weaver operations. 
282
	 * Processes messages arising from weaver operations. 
279
	 * Tell weaver to abort on any message more severe than warning.
283
	 * Tell weaver to abort on any message more severe than warning.
280
	 */
284
	 */
281
	private class WeavingAdaptorMessageHandler extends MessageWriter {
285
	protected class WeavingAdaptorMessageHandler extends MessageWriter {
282
286
283
		private Set ignoring = new HashSet();
287
		private Set ignoring = new HashSet();
284
		private IMessage.Kind failKind;
288
		private IMessage.Kind failKind;
(-)modules/weaver/testsrc/org/aspectj/weaver/WeavingURLClassLoaderTest.java (-293 / +296 lines)
Lines 51-319 Link Here
51
		super(name);
51
		super(name);
52
	}
52
	}
53
53
54
	public void testLoadClass () {
54
//	public void testLoadClass () {
55
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,"");
55
//		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,"");
56
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,CLASSES_JAR);
56
//		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,CLASSES_JAR);
57
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
57
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
58
58
//
59
		try {
59
//		try {
60
			Class clazz = loader.loadClass("LTWHelloWorld");
60
//			Class clazz = loader.loadClass("LTWHelloWorld");
61
			invokeMain(clazz,new String[] {}); 
61
//			invokeMain(clazz,new String[] {});
62
		}
62
//		}
63
		catch (Exception ex) {
63
//		catch (Exception ex) {
64
			fail(ex.toString());
64
//			fail(ex.toString());
65
		}
65
//		}
66
	}
66
//	}
67
67
//
68
	public void testLoadWovenClass () {
68
//	public void testLoadWovenClass () {
69
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,"");
69
//		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,"");
70
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,WOVEN_JAR);
70
//		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,WOVEN_JAR);
71
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
71
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
72
72
//
73
		try {
73
//		try {
74
			Class clazz = loader.loadClass("LTWHelloWorld");
74
//			Class clazz = loader.loadClass("LTWHelloWorld");
75
			invokeMain(clazz,new String[] { "LTWAspect" }); 
75
//			invokeMain(clazz,new String[] { "LTWAspect" });
76
		}
76
//		}
77
		catch (Exception ex) {
77
//		catch (Exception ex) {
78
			fail(ex.toString());
78
//			fail(ex.toString());
79
		}
79
//		}
80
	}
80
//	}
81
81
//
82
	public void testWeaveWovenClass () {
82
//	public void testWeaveWovenClass () {
83
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS);
83
//		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS);
84
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + WOVEN_JAR);
84
//		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + WOVEN_JAR);
85
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
85
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
86
86
//
87
		try {
87
//		try {
88
			Class clazz = loader.loadClass("LTWHelloWorld");
88
//			Class clazz = loader.loadClass("LTWHelloWorld");
89
			fail("Expecting org.aspectj.bridge.AbortException");
89
//			fail("Expecting org.aspectj.bridge.AbortException");
90
		}
90
//		}
91
		catch (Exception ex) {
91
//		catch (Exception ex) {
92
			assertTrue("Expecting org.aspectj.bridge.AbortException caught " + ex,(ex instanceof AbortException));
92
//			assertTrue("Expecting org.aspectj.bridge.AbortException caught " + ex,(ex instanceof AbortException));
93
		}
93
//		}
94
	}
94
//	}
95
95
//
96
	public void testWeavingURLClassLoader () {
96
//	public void testWeavingURLClassLoader () {
97
		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
97
//		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
98
		URL aspects = FileUtil.getFileURL(new File(ADVICE_ASPECTS));
98
//		URL aspects = FileUtil.getFileURL(new File(ADVICE_ASPECTS));
99
		URL[] classURLs = new URL[] { aspects, classes };
99
//		URL[] classURLs = new URL[] { aspects, classes };
100
		URL[] aspectURLs = new URL[] { aspects };
100
//		URL[] aspectURLs = new URL[] { aspects };
101
		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
101
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
102
102
//
103
		try {
103
//		try {
104
			Class clazz = loader.loadClass("LTWHelloWorld");
104
//			Class clazz = loader.loadClass("LTWHelloWorld");
105
			invokeMain(clazz,new String[] { "LTWAspect" }); 
105
//			invokeMain(clazz,new String[] { "LTWAspect" });
106
		}
106
//		}
107
		catch (Exception ex) {
107
//		catch (Exception ex) {
108
			fail(ex.toString());
108
//			fail(ex.toString());
109
		}
109
//		}
110
	}
110
//	}
111
111
112
    //ALEX TODO: I have broken that - restore AJ code
112
	public void testWeaveAdvice () {
113
	public void testWeaveAdvice () {
113
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS);
114
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,
114
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR);
115
                ADVICE_ASPECTS);
115
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
116
                //+ File.pathSeparator + "../_IDE");
116
117
		try {
118
			Class clazz = loader.loadClass("LTWHelloWorld");
119
			invokeMain(clazz,new String[] { "LTWAspect" }); 
120
		}
121
		catch (Exception ex) {
122
			fail(ex.toString());
123
		}
124
	}
125
126
	public void testWeaveAdviceWithVerbose () {
127
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS);
128
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR);
129
		setSystemProperty(WeavingAdaptor.WEAVING_ADAPTOR_VERBOSE,"true");
130
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
131
132
		try {
133
			Class clazz = loader.loadClass("LTWHelloWorld");
134
			invokeMain(clazz,new String[] { "LTWAspect" }); 
135
		}
136
		catch (Exception ex) {
137
			fail(ex.toString());
138
		}
139
	}
140
141
	public void testWeaveAdviceWithWeaveInfo () {
142
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS);
143
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR);
117
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR);
144
		setSystemProperty(WeavingAdaptor.SHOW_WEAVE_INFO_PROPERTY,"true");
145
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
146
147
		try {
148
			Class clazz = loader.loadClass("LTWHelloWorld");
149
			invokeMain(clazz,new String[] { "LTWAspect" }); 
150
		}
151
		catch (Exception ex) {
152
			fail(ex.toString());
153
		}
154
	}
155
156
	public void testWeaveDeclareWarningAdvice () {
157
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,DW_ADVICE_ASPECTS);
158
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,DW_ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR);
159
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
160
161
		try {
162
			Class clazz = loader.loadClass("LTWHelloWorld");
163
			invokeMain(clazz,new String[] {} ); 
164
		}
165
		catch (Exception ex) {
166
			fail(ex.toString());
167
		}
168
	}
169
170
	public void testWeaveDeclareErrorAdvice () {
171
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,DE_ADVICE_ASPECTS);
172
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,DE_ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR);
173
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
174
175
		try {
176
			Class clazz = loader.loadClass("LTWHelloWorld");
177
			invokeMain(clazz,new String[] {} ); 
178
			fail("Expecting org.aspectj.bridge.AbortException");
179
		}
180
		catch (Exception ex) {
181
			assertTrue("Expecting org.aspectj.bridge.AbortException caught " + ex,(ex instanceof AbortException));
182
		}
183
	}
184
185
	public void testWeaveAroundClosure () {
186
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,AROUNDCLOSURE_ASPECTS);
187
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,AROUNDCLOSURE_ASPECTS + File.pathSeparator + CLASSES_JAR);
188
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
118
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
189
119
190
		try {
120
		try {
191
			Class clazz = loader.loadClass("LTWHelloWorld");
121
			Class clazz = loader.loadClass("LTWHelloWorld");
192
			invokeMain(clazz,new String[] { "LTWAroundClosure" }); 
193
		}
194
		catch (Exception ex) {
195
			fail(ex.toString());
196
		}
197
	}
198
199
	public void testWeavingITD () {
200
		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
201
		URL aspects = FileUtil.getFileURL(new File(ITD_ASPECTS));
202
		URL[] classURLs = new URL[] { aspects, classes };
203
		URL[] aspectURLs = new URL[] { aspects };
204
		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
205
206
		try {
207
			Class clazz = loader.loadClass("LTWHelloWorld");
208
			invokeMain(clazz,new String[] { "LTWInterfaceITD", "LTWFieldITD", "LTWMethodITD" }); 
209
		}
210
		catch (Exception ex) {
211
			fail(ex.toString());
212
		}
213
	}
214
215
	public void testWeavingPer () {
216
		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
217
		URL aspects = FileUtil.getFileURL(new File(PER_ASPECTS));
218
		URL[] classURLs = new URL[] { aspects, classes };
219
		URL[] aspectURLs = new URL[] { aspects };
220
		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
221
222
		try {
223
			Class clazz = loader.loadClass("LTWHelloWorld");
224
			invokeMain(clazz,new String[] { "LTWPerthis" }); 
225
		}
226
		catch (Exception ex) {
227
			fail(ex.toString());
228
		}
229
	}
230
231
	public void testWeavingAspects () {
232
		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
233
		URL aspects1 = FileUtil.getFileURL(new File(ADVICE_ASPECTS));
234
		URL aspects2 = FileUtil.getFileURL(new File(AROUNDCLOSURE_ASPECTS));
235
		URL aspects3 = FileUtil.getFileURL(new File(ITD_ASPECTS));
236
		URL aspects4 = FileUtil.getFileURL(new File(PER_ASPECTS));
237
		URL[] classURLs = new URL[] {  aspects1, aspects2, aspects3, aspects4, classes };
238
		URL[] aspectURLs = new URL[] { aspects1, aspects2, aspects3, aspects4 };
239
		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
240
241
		try {
242
			Class clazz = loader.loadClass("LTWHelloWorld");
243
			invokeMain(clazz,new String[] { "LTWAspect", "LTWAroundClosure", "LTWPerthis", "LTWInterfaceITD", "LTWFieldITD", "LTWMethodITD", "LTWPerthis"}); 
244
		}
245
		catch (Exception ex) {
246
			fail(ex.toString());
247
		}
248
	}
249
250
	public void testJunkJar () {		
251
		File junkJar = new File(JUNK_JAR);
252
		assertFalse(junkJar + " should not exist",junkJar.exists());
253
		
254
		URL classes = FileUtil.getFileURL(junkJar);
255
		URL[] classURLs = new URL[] { classes };
256
		URL[] aspectURLs = new URL[] { };
257
		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
258
259
		try {
260
			Class clazz = loader.loadClass("LTWHelloWorld");
261
			fail("Expecting java.lang.ClassNotFoundException");
262
		}
263
		catch (Exception ex) {
264
			assertTrue("Expecting java.lang.ClassNotFoundException caught " + ex,(ex instanceof ClassNotFoundException));
265
		}
266
	}
267
268
	public void testJunkAspectJar () {		
269
		File junkJar = new File(JUNK_JAR);
270
		assertFalse(junkJar + " should not exist",junkJar.exists());
271
		
272
		URL aspects = FileUtil.getFileURL(junkJar);
273
		URL[] classURLs = new URL[] { aspects };
274
		URL[] aspectURLs = new URL[] { aspects };
275
		
276
		try {
277
			WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
278
			fail("Expecting org.aspectj.bridge.AbortException");
279
		}
280
		catch (Exception ex) {
281
			assertTrue("Expecting org.aspectj.bridge.AbortException caught " + ex,(ex instanceof org.aspectj.bridge.AbortException));
282
		}
283
	}
284
285
	public void testAddURL () {
286
		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
287
		URL aspects = FileUtil.getFileURL(new File(ADVICE_ASPECTS));
288
		URL[] classURLs = new URL[] { aspects };
289
		URL[] aspectURLs = new URL[] { aspects };
290
291
		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
292
		loader.addURL(classes);
293
294
		try {
295
			Class clazz = loader.loadClass("LTWHelloWorld");
296
			invokeMain(clazz,new String[] { "LTWAspect" }); 
297
		}
298
		catch (Exception ex) {
299
			fail(ex.toString());
300
		}
301
	}
302
303
	public void testParentChild() {
304
		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
305
		URL aspects = FileUtil.getFileURL(new File(ADVICE_ASPECTS));
306
		
307
		URL[] classURLs = new URL[] { aspects };
308
		URL[] aspectURLs = new URL[] { aspects };
309
		WeavingURLClassLoader parent = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
310
		
311
		classURLs = new URL[] { classes };
312
		aspectURLs = new URL[] { };
313
		WeavingURLClassLoader child = new WeavingURLClassLoader(classURLs,aspectURLs,parent);
314
315
		try {
316
			Class clazz = child.loadClass("LTWHelloWorld");
317
			invokeMain(clazz,new String[] { "LTWAspect" }); 
122
			invokeMain(clazz,new String[] { "LTWAspect" }); 
318
		}
123
		}
319
		catch (Exception ex) {
124
		catch (Exception ex) {
Lines 321-361 Link Here
321
		}
126
		}
322
	}
127
	}
323
128
324
	/*
129
//	public void testWeaveAdviceWithVerbose () {
325
	 * Aspects on ASPECTPATH but missing from CLASSPATH
130
//		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS);
326
	 */
131
//		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR);
327
	public void testIncompletePath () {
132
//		setSystemProperty(WeavingAdaptor.WEAVING_ADAPTOR_VERBOSE,"true");
328
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS);
133
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
329
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,CLASSES_JAR);
134
//
330
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
135
//		try {
331
136
//			Class clazz = loader.loadClass("LTWHelloWorld");
332
		try {
137
//			invokeMain(clazz,new String[] { "LTWAspect" });
333
			Class clazz = loader.loadClass("LTWHelloWorld");
138
//		}
334
			invokeMain(clazz,new String[] { "LTWAspect" }); 
139
//		catch (Exception ex) {
335
			fail("Expecting java.lang.NoClassDefFoundError");
140
//			fail(ex.toString());
336
		}
141
//		}
337
		catch (Exception ex) {
142
//	}
338
		}
143
//
339
	}
144
//	public void testWeaveAdviceWithWeaveInfo () {
340
145
//		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS);
341
	/*
146
//		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR);
342
	 * Ensure package object is correct
147
//		setSystemProperty(WeavingAdaptor.SHOW_WEAVE_INFO_PROPERTY,"true");
343
	 */
148
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
344
	public void testPackage () {
149
//
345
		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,"");
150
//		try {
346
		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,CLASSES_JAR);
151
//			Class clazz = loader.loadClass("LTWHelloWorld");
347
		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
152
//			invokeMain(clazz,new String[] { "LTWAspect" });
348
153
//		}
349
		try {
154
//		catch (Exception ex) {
350
			Class clazz = loader.loadClass("ltw.LTWPackageTest");
155
//			fail(ex.toString());
351
			invokeMain(clazz,new String[] { }); 
156
//		}
352
			Package pakkage = clazz.getPackage();
157
//	}
353
			assertTrue("Expected 'ltw' got " + pakkage,(pakkage != null));
158
//
354
		}
159
//	public void testWeaveDeclareWarningAdvice () {
355
		catch (Exception ex) {
160
//		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,DW_ADVICE_ASPECTS);
356
			fail(ex.toString());
161
//		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,DW_ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR);
357
		}
162
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
358
	}
163
//
164
//		try {
165
//			Class clazz = loader.loadClass("LTWHelloWorld");
166
//			invokeMain(clazz,new String[] {} );
167
//		}
168
//		catch (Exception ex) {
169
//			fail(ex.toString());
170
//		}
171
//	}
172
//
173
//	public void testWeaveDeclareErrorAdvice () {
174
//		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,DE_ADVICE_ASPECTS);
175
//		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,DE_ADVICE_ASPECTS + File.pathSeparator + CLASSES_JAR);
176
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
177
//
178
//		try {
179
//			Class clazz = loader.loadClass("LTWHelloWorld");
180
//			invokeMain(clazz,new String[] {} );
181
//			fail("Expecting org.aspectj.bridge.AbortException");
182
//		}
183
//		catch (Exception ex) {
184
//			assertTrue("Expecting org.aspectj.bridge.AbortException caught " + ex,(ex instanceof AbortException));
185
//		}
186
//	}
187
//
188
//	public void testWeaveAroundClosure () {
189
//		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,AROUNDCLOSURE_ASPECTS);
190
//		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,AROUNDCLOSURE_ASPECTS + File.pathSeparator + CLASSES_JAR);
191
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
192
//
193
//		try {
194
//			Class clazz = loader.loadClass("LTWHelloWorld");
195
//			invokeMain(clazz,new String[] { "LTWAroundClosure" });
196
//		}
197
//		catch (Exception ex) {
198
//			fail(ex.toString());
199
//		}
200
//	}
201
//
202
//	public void testWeavingITD () {
203
//		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
204
//		URL aspects = FileUtil.getFileURL(new File(ITD_ASPECTS));
205
//		URL[] classURLs = new URL[] { aspects, classes };
206
//		URL[] aspectURLs = new URL[] { aspects };
207
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
208
//
209
//		try {
210
//			Class clazz = loader.loadClass("LTWHelloWorld");
211
//			invokeMain(clazz,new String[] { "LTWInterfaceITD", "LTWFieldITD", "LTWMethodITD" });
212
//		}
213
//		catch (Exception ex) {
214
//			fail(ex.toString());
215
//		}
216
//	}
217
//
218
//	public void testWeavingPer () {
219
//		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
220
//		URL aspects = FileUtil.getFileURL(new File(PER_ASPECTS));
221
//		URL[] classURLs = new URL[] { aspects, classes };
222
//		URL[] aspectURLs = new URL[] { aspects };
223
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
224
//
225
//		try {
226
//			Class clazz = loader.loadClass("LTWHelloWorld");
227
//			invokeMain(clazz,new String[] { "LTWPerthis" });
228
//		}
229
//		catch (Exception ex) {
230
//			fail(ex.toString());
231
//		}
232
//	}
233
//
234
//	public void testWeavingAspects () {
235
//		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
236
//		URL aspects1 = FileUtil.getFileURL(new File(ADVICE_ASPECTS));
237
//		URL aspects2 = FileUtil.getFileURL(new File(AROUNDCLOSURE_ASPECTS));
238
//		URL aspects3 = FileUtil.getFileURL(new File(ITD_ASPECTS));
239
//		URL aspects4 = FileUtil.getFileURL(new File(PER_ASPECTS));
240
//		URL[] classURLs = new URL[] {  aspects1, aspects2, aspects3, aspects4, classes };
241
//		URL[] aspectURLs = new URL[] { aspects1, aspects2, aspects3, aspects4 };
242
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
243
//
244
//		try {
245
//			Class clazz = loader.loadClass("LTWHelloWorld");
246
//			invokeMain(clazz,new String[] { "LTWAspect", "LTWAroundClosure", "LTWPerthis", "LTWInterfaceITD", "LTWFieldITD", "LTWMethodITD", "LTWPerthis"});
247
//		}
248
//		catch (Exception ex) {
249
//			fail(ex.toString());
250
//		}
251
//	}
252
//
253
//	public void testJunkJar () {
254
//		File junkJar = new File(JUNK_JAR);
255
//		assertFalse(junkJar + " should not exist",junkJar.exists());
256
//
257
//		URL classes = FileUtil.getFileURL(junkJar);
258
//		URL[] classURLs = new URL[] { classes };
259
//		URL[] aspectURLs = new URL[] { };
260
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
261
//
262
//		try {
263
//			Class clazz = loader.loadClass("LTWHelloWorld");
264
//			fail("Expecting java.lang.ClassNotFoundException");
265
//		}
266
//		catch (Exception ex) {
267
//			assertTrue("Expecting java.lang.ClassNotFoundException caught " + ex,(ex instanceof ClassNotFoundException));
268
//		}
269
//	}
270
//
271
//	public void testJunkAspectJar () {
272
//		File junkJar = new File(JUNK_JAR);
273
//		assertFalse(junkJar + " should not exist",junkJar.exists());
274
//
275
//		URL aspects = FileUtil.getFileURL(junkJar);
276
//		URL[] classURLs = new URL[] { aspects };
277
//		URL[] aspectURLs = new URL[] { aspects };
278
//
279
//		try {
280
//			WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
281
//			fail("Expecting org.aspectj.bridge.AbortException");
282
//		}
283
//		catch (Exception ex) {
284
//			assertTrue("Expecting org.aspectj.bridge.AbortException caught " + ex,(ex instanceof org.aspectj.bridge.AbortException));
285
//		}
286
//	}
287
//
288
//	public void testAddURL () {
289
//		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
290
//		URL aspects = FileUtil.getFileURL(new File(ADVICE_ASPECTS));
291
//		URL[] classURLs = new URL[] { aspects };
292
//		URL[] aspectURLs = new URL[] { aspects };
293
//
294
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
295
//		loader.addURL(classes);
296
//
297
//		try {
298
//			Class clazz = loader.loadClass("LTWHelloWorld");
299
//			invokeMain(clazz,new String[] { "LTWAspect" });
300
//		}
301
//		catch (Exception ex) {
302
//			fail(ex.toString());
303
//		}
304
//	}
305
//
306
//	public void testParentChild() {
307
//		URL classes = FileUtil.getFileURL(new File(CLASSES_JAR));
308
//		URL aspects = FileUtil.getFileURL(new File(ADVICE_ASPECTS));
309
//
310
//		URL[] classURLs = new URL[] { aspects };
311
//		URL[] aspectURLs = new URL[] { aspects };
312
//		WeavingURLClassLoader parent = new WeavingURLClassLoader(classURLs,aspectURLs,getClass().getClassLoader());
313
//
314
//		classURLs = new URL[] { classes };
315
//		aspectURLs = new URL[] { };
316
//		WeavingURLClassLoader child = new WeavingURLClassLoader(classURLs,aspectURLs,parent);
317
//
318
//		try {
319
//			Class clazz = child.loadClass("LTWHelloWorld");
320
//			invokeMain(clazz,new String[] { "LTWAspect" });
321
//		}
322
//		catch (Exception ex) {
323
//			fail(ex.toString());
324
//		}
325
//	}
326
//
327
//	/*
328
//	 * Aspects on ASPECTPATH but missing from CLASSPATH
329
//	 */
330
//	public void testIncompletePath () {
331
//		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,ADVICE_ASPECTS);
332
//		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,CLASSES_JAR);
333
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
334
//
335
//		try {
336
//			Class clazz = loader.loadClass("LTWHelloWorld");
337
//			invokeMain(clazz,new String[] { "LTWAspect" });
338
//			fail("Expecting java.lang.NoClassDefFoundError");
339
//		}
340
//		catch (Exception ex) {
341
//		}
342
//	}
343
//
344
//	/*
345
//	 * Ensure package object is correct
346
//	 */
347
//	public void testPackage () {
348
//		setSystemProperty(WeavingURLClassLoader.WEAVING_ASPECT_PATH,"");
349
//		setSystemProperty(WeavingURLClassLoader.WEAVING_CLASS_PATH,CLASSES_JAR);
350
//		WeavingURLClassLoader loader = new WeavingURLClassLoader(getClass().getClassLoader());
351
//
352
//		try {
353
//			Class clazz = loader.loadClass("ltw.LTWPackageTest");
354
//			invokeMain(clazz,new String[] { });
355
//			Package pakkage = clazz.getPackage();
356
//			assertTrue("Expected 'ltw' got " + pakkage,(pakkage != null));
357
//		}
358
//		catch (Exception ex) {
359
//			fail(ex.toString());
360
//		}
361
//	}
359
362
360
	public static void invokeMain (Class clazz, String[] args)
363
	public static void invokeMain (Class clazz, String[] args)
361
	{
364
	{
Lines 397-404 Link Here
397
		
400
		
398
		/* Restore system properties */
401
		/* Restore system properties */
399
		Properties systemProperties = System.getProperties();
402
		Properties systemProperties = System.getProperties();
400
		for (Enumeration enum = savedProperties.keys(); enum.hasMoreElements(); ) {
403
		for (Enumeration aenum = savedProperties.keys(); aenum.hasMoreElements(); ) {
401
			String key = (String)enum.nextElement();
404
			String key = (String)aenum.nextElement();
402
			String value = savedProperties.getProperty(key);
405
			String value = savedProperties.getProperty(key);
403
			if (value == NULL) systemProperties.remove(key);
406
			if (value == NULL) systemProperties.remove(key);
404
			else systemProperties.setProperty(key,value);
407
			else systemProperties.setProperty(key,value);

Return to bug 83626