|
|
@@ -0,0 +1,124 @@ |
|
|
|
/* ******************************************************************* |
|
|
|
* Copyright (c) 2007 Contributors |
|
|
|
* All rights reserved. |
|
|
|
* This program and the accompanying materials are made available |
|
|
|
* under the terms of the Eclipse Public License v1.0 |
|
|
|
* which accompanies this distribution and is available at |
|
|
|
* http://www.eclipse.org/legal/epl-v10.html |
|
|
|
* |
|
|
|
* Contributors: |
|
|
|
* Linton Ye https://bugs.eclipse.org/bugs/show_bug.cgi?id=193065 |
|
|
|
* ******************************************************************/ |
|
|
|
|
|
|
|
package org.aspectj.systemtest.ajc154; |
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Collection; |
|
|
|
import java.util.Iterator; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
import org.aspectj.ajde.core.AjCompiler; |
|
|
|
import org.aspectj.bridge.ISourceLocation; |
|
|
|
import org.aspectj.systemtest.incremental.tools.AjdeInteractionTestbed; |
|
|
|
import org.aspectj.weaver.Advice; |
|
|
|
import org.aspectj.weaver.Checker; |
|
|
|
import org.aspectj.weaver.ConcreteTypeMunger; |
|
|
|
import org.aspectj.weaver.CustomMungerFactory; |
|
|
|
import org.aspectj.weaver.Member; |
|
|
|
import org.aspectj.weaver.ResolvedType; |
|
|
|
import org.aspectj.weaver.ResolvedTypeMunger; |
|
|
|
import org.aspectj.weaver.Shadow; |
|
|
|
import org.aspectj.weaver.ShadowMunger; |
|
|
|
import org.aspectj.weaver.World; |
|
|
|
import org.aspectj.weaver.AjAttribute.AdviceAttribute; |
|
|
|
import org.aspectj.weaver.patterns.DeclareErrorOrWarning; |
|
|
|
import org.aspectj.weaver.patterns.IfPointcut; |
|
|
|
import org.aspectj.weaver.patterns.Pointcut; |
|
|
|
|
|
|
|
public class CustomMungerExtensionTest extends AjdeInteractionTestbed { |
|
|
|
|
|
|
|
protected void setUp() throws Exception { |
|
|
|
super.setUp(); |
|
|
|
sandboxDir = new File("."); |
|
|
|
} |
|
|
|
|
|
|
|
public void testExtension() { |
|
|
|
String testFileDir = "bugs/pointcutdoctor-bug193065"; |
|
|
|
AjCompiler compiler = getCompilerForProjectWithName(testFileDir); |
|
|
|
compiler.setCustomMungerFactory(new DumbCustomMungerFactory()); |
|
|
|
|
|
|
|
doBuild(testFileDir); |
|
|
|
|
|
|
|
CustomMungerFactory factory = (CustomMungerFactory)compiler.getCustomMungerFactory(); |
|
|
|
assertTrue(factory.getAllCreatedCustomShadowMungers().size()>0); |
|
|
|
for (Iterator i = factory.getAllCreatedCustomShadowMungers().iterator(); i.hasNext();) |
|
|
|
assertTrue(((DumbShadowMunger)i.next()).called); |
|
|
|
|
|
|
|
assertTrue(factory.getAllCreatedCustomTypeMungers().size()>0); |
|
|
|
for (Iterator i = factory.getAllCreatedCustomTypeMungers().iterator(); i.hasNext();) |
|
|
|
assertTrue(((DumbTypeMunger)i.next()).called); |
|
|
|
} |
|
|
|
|
|
|
|
class DumbCustomMungerFactory implements CustomMungerFactory { |
|
|
|
Collection allShadowMungers = new ArrayList(); |
|
|
|
Collection allTypeMungers = new ArrayList(); |
|
|
|
public Collection createCustomShadowMungers(ResolvedType aspectType) { |
|
|
|
List/* ShadowMunger */ mungers = new ArrayList/*ShadowMunger*/(); |
|
|
|
Pointcut pointcut = new IfPointcut("abc"); |
|
|
|
mungers.add(new DumbShadowMunger(new DeclareErrorOrWarning(false, pointcut, ""))); |
|
|
|
allShadowMungers.addAll(mungers); |
|
|
|
return mungers; |
|
|
|
} |
|
|
|
|
|
|
|
public Collection createCustomTypeMungers(ResolvedType aspectType) { |
|
|
|
List/*ConcreteTypeMunger*/ mungers = new ArrayList/*ShadowMunger*/(); |
|
|
|
mungers.add(new DumbTypeMunger(null, aspectType)); |
|
|
|
allTypeMungers.addAll(mungers); |
|
|
|
return mungers; |
|
|
|
} |
|
|
|
|
|
|
|
public Collection getAllCreatedCustomShadowMungers() { |
|
|
|
return allShadowMungers; |
|
|
|
} |
|
|
|
|
|
|
|
public Collection getAllCreatedCustomTypeMungers() { |
|
|
|
return allTypeMungers; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
class DumbShadowMunger extends Checker { |
|
|
|
public DumbShadowMunger(DeclareErrorOrWarning deow) { |
|
|
|
super(deow); |
|
|
|
} |
|
|
|
|
|
|
|
public ISourceLocation getSourceLocation() { |
|
|
|
return ISourceLocation.EMPTY; |
|
|
|
} |
|
|
|
|
|
|
|
boolean called; |
|
|
|
|
|
|
|
public boolean match(Shadow shadow, World world) { |
|
|
|
called = true; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
class DumbTypeMunger extends ConcreteTypeMunger { |
|
|
|
boolean called; |
|
|
|
|
|
|
|
public DumbTypeMunger(ResolvedTypeMunger munger, ResolvedType aspectType) { |
|
|
|
super(munger, aspectType); |
|
|
|
} |
|
|
|
|
|
|
|
public ConcreteTypeMunger parameterizedFor(ResolvedType targetType) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
public boolean matches(ResolvedType onType) { |
|
|
|
called = true; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |