123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /* *******************************************************************
- * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved.
- * This program and the accompanying materials are made available
- * under the terms of the Common Public License v1.0
- * which accompanies this distribution and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * PARC initial implementation
- * ******************************************************************/
-
-
- package org.aspectj.weaver.bcel;
-
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
-
- import org.aspectj.apache.bcel.Constants;
- import org.aspectj.apache.bcel.generic.InstructionFactory;
- import org.aspectj.apache.bcel.generic.InstructionHandle;
- import org.aspectj.apache.bcel.generic.InstructionList;
- import org.aspectj.apache.bcel.generic.Type;
- import org.aspectj.weaver.AdviceKind;
- import org.aspectj.weaver.Member;
- import org.aspectj.weaver.ResolvedTypeX;
- import org.aspectj.weaver.Shadow;
- import org.aspectj.weaver.TypeX;
-
- /**.
- */
- public class ArgsWeaveTestCase extends WeaveTestCase {
- {
- regenerate = false;
- }
-
- public ArgsWeaveTestCase(String name) {
- super(name);
- }
-
-
- public void testAfterReturningArgs() throws IOException {
- weaveTest("HelloWorld", "ArgsAfterReturningHelloWorld", makeArgsMunger("afterReturning"));
- }
-
-
- public void testFancyAfterReturningArgs() throws IOException {
- weaveTest("FancyHelloWorld", "ArgsAfterReturningFancyHelloWorld", makeArgsMunger("afterReturning"));
- }
-
- public void testThrowing() throws IOException {
- weaveTest("HelloWorld", "ArgsAfterThrowingHelloWorld", makeArgsMunger("afterThrowing"));
- }
-
- public void testLots() throws IOException {
- List l = new ArrayList();
-
-
- BcelAdvice p1 =
- makeArgsMunger("before");
-
- BcelAdvice p2 =
- makeArgsMunger("afterThrowing");
-
- BcelAdvice p3 =
- makeArgsMunger("afterReturning");
-
- l.add(p1);
- l.add(p2);
- l.add(p3);
-
-
- weaveTest("HelloWorld", "ArgsBeforeAfterHelloWorld", addLexicalOrder(l));
- }
-
- /* private */ InstructionList getArgsAdviceTag(BcelShadow shadow, String where) {
- String methodName =
- "ajc_" + where + "_" + shadow.getKind().toLegalJavaIdentifier();
- InstructionFactory fact = shadow.getFactory();
- InstructionList il = new InstructionList();
-
-
- il.append(
- BcelRenderer.renderExpr(
- fact,
- new BcelWorld(),
- shadow.getArgVar(0),
- Type.OBJECT));
-
- il.append(
- fact.createInvoke(
- "Aspect",
- methodName,
- Type.VOID,
- new Type[] { Type.OBJECT },
- Constants.INVOKESTATIC));
-
- return il;
- }
-
- private BcelAdvice makeArgsMunger(final String kindx) {
- ResolvedTypeX rtx = world.resolve(TypeX.forName("Aspect"),true);
- assertTrue("Cant find required type Aspect",rtx!=ResolvedTypeX.MISSING);
- return new BcelAdvice(AdviceKind.stringToKind(kindx), makePointcutNoZeroArg(),
- Member.method(TypeX.forName("Aspect"), 0, "foo", "()V"), 0, -1, -1, null,
- rtx) {
- public void specializeOn(Shadow shadow) {
- super.specializeOn(shadow);
- shadow.getArgVar(0);
- }
- public InstructionList getAdviceInstructions(BcelShadow shadow, BcelVar extraVar, InstructionHandle fk) {
- return getArgsAdviceTag(shadow, kindx);
- }
- };
- }
-
- }
|