Added
Link Here
|
1 |
/* ******************************************************************* |
2 |
* Copyright (c) 2007 Contributors |
3 |
* All rights reserved. |
4 |
* This program and the accompanying materials are made available |
5 |
* under the terms of the Eclipse Public License v1.0 |
6 |
* which accompanies this distribution and is available at |
7 |
* http://www.eclipse.org/legal/epl-v10.html |
8 |
* |
9 |
* Contributors: |
10 |
* Linton Ye https://bugs.eclipse.org/bugs/show_bug.cgi?id=193065 |
11 |
* ******************************************************************/ |
12 |
|
13 |
package org.aspectj.systemtest.ajc154; |
14 |
|
15 |
import java.io.File; |
16 |
import java.util.ArrayList; |
17 |
import java.util.Collection; |
18 |
import java.util.Iterator; |
19 |
import java.util.List; |
20 |
import java.util.Map; |
21 |
|
22 |
import org.aspectj.ajde.core.AjCompiler; |
23 |
import org.aspectj.bridge.ISourceLocation; |
24 |
import org.aspectj.systemtest.incremental.tools.AjdeInteractionTestbed; |
25 |
import org.aspectj.weaver.Advice; |
26 |
import org.aspectj.weaver.Checker; |
27 |
import org.aspectj.weaver.ConcreteTypeMunger; |
28 |
import org.aspectj.weaver.CustomMungerFactory; |
29 |
import org.aspectj.weaver.Member; |
30 |
import org.aspectj.weaver.ResolvedType; |
31 |
import org.aspectj.weaver.ResolvedTypeMunger; |
32 |
import org.aspectj.weaver.Shadow; |
33 |
import org.aspectj.weaver.ShadowMunger; |
34 |
import org.aspectj.weaver.World; |
35 |
import org.aspectj.weaver.AjAttribute.AdviceAttribute; |
36 |
import org.aspectj.weaver.patterns.DeclareErrorOrWarning; |
37 |
import org.aspectj.weaver.patterns.IfPointcut; |
38 |
import org.aspectj.weaver.patterns.Pointcut; |
39 |
|
40 |
public class CustomMungerExtensionTest extends AjdeInteractionTestbed { |
41 |
|
42 |
@Override |
43 |
protected void setUp() throws Exception { |
44 |
super.setUp(); |
45 |
sandboxDir = new File("."); |
46 |
} |
47 |
|
48 |
public void testExtension() { |
49 |
String testFileDir = "bugs/pointcutdoctor-bug193065"; |
50 |
AjCompiler compiler = getCompilerForProjectWithName(testFileDir); |
51 |
compiler.setCustomMungerFactory(new DumbCustomMungerFactory()); |
52 |
|
53 |
doBuild(testFileDir); |
54 |
|
55 |
CustomMungerFactory factory = (CustomMungerFactory)compiler.getCustomMungerFactory(); |
56 |
assertTrue(factory.getAllCreatedCustomShadowMungers().size()>0); |
57 |
for (Iterator i = factory.getAllCreatedCustomShadowMungers().iterator(); i.hasNext();) |
58 |
assertTrue(((DumbShadowMunger)i.next()).called); |
59 |
|
60 |
assertTrue(factory.getAllCreatedCustomTypeMungers().size()>0); |
61 |
for (Iterator i = factory.getAllCreatedCustomTypeMungers().iterator(); i.hasNext();) |
62 |
assertTrue(((DumbTypeMunger)i.next()).called); |
63 |
} |
64 |
|
65 |
class DumbCustomMungerFactory implements CustomMungerFactory { |
66 |
Collection allShadowMungers = new ArrayList(); |
67 |
Collection allTypeMungers = new ArrayList(); |
68 |
public Collection createCustomShadowMungers(ResolvedType aspectType) { |
69 |
List/* ShadowMunger */ mungers = new ArrayList/*ShadowMunger*/(); |
70 |
Pointcut pointcut = new IfPointcut("abc"); |
71 |
mungers.add(new DumbShadowMunger(new DeclareErrorOrWarning(false, pointcut, ""))); |
72 |
allShadowMungers.addAll(mungers); |
73 |
return mungers; |
74 |
} |
75 |
|
76 |
public Collection createCustomTypeMungers(ResolvedType aspectType) { |
77 |
List/*ConcreteTypeMunger*/ mungers = new ArrayList/*ShadowMunger*/(); |
78 |
mungers.add(new DumbTypeMunger(null, aspectType)); |
79 |
allTypeMungers.addAll(mungers); |
80 |
return mungers; |
81 |
} |
82 |
|
83 |
public Collection getAllCreatedCustomShadowMungers() { |
84 |
return allShadowMungers; |
85 |
} |
86 |
|
87 |
public Collection getAllCreatedCustomTypeMungers() { |
88 |
return allTypeMungers; |
89 |
} |
90 |
} |
91 |
|
92 |
class DumbShadowMunger extends Checker { |
93 |
public DumbShadowMunger(DeclareErrorOrWarning deow) { |
94 |
super(deow); |
95 |
} |
96 |
@Override |
97 |
public ISourceLocation getSourceLocation() { |
98 |
return ISourceLocation.EMPTY; |
99 |
} |
100 |
|
101 |
boolean called; |
102 |
@Override |
103 |
public boolean match(Shadow shadow, World world) { |
104 |
called = true; |
105 |
return false; |
106 |
} |
107 |
} |
108 |
|
109 |
class DumbTypeMunger extends ConcreteTypeMunger { |
110 |
boolean called; |
111 |
|
112 |
public DumbTypeMunger(ResolvedTypeMunger munger, ResolvedType aspectType) { |
113 |
super(munger, aspectType); |
114 |
} |
115 |
|
116 |
@Override |
117 |
public ConcreteTypeMunger parameterizedFor(ResolvedType targetType) { |
118 |
return null; |
119 |
} |
120 |
|
121 |
@Override |
122 |
public boolean matches(ResolvedType onType) { |
123 |
called = true; |
124 |
return false; |
125 |
} |
126 |
} |
127 |
} |