KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > aspectj > compiler > crosscuts > ast > Pcd


1 /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  *
3  * This file is part of the compiler and core tools for the AspectJ(tm)
4  * programming language; see http://aspectj.org
5  *
6  * The contents of this file are subject to the Mozilla Public License
7  * Version 1.1 (the "License"); you may not use this file except in
8  * compliance with the License. You may obtain a copy of the License at
9  * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
10  *
11  * Software distributed under the License is distributed on an "AS IS" basis,
12  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13  * for the specific language governing rights and limitations under the
14  * License.
15  *
16  * The Original Code is AspectJ.
17  *
18  * The Initial Developer of the Original Code is Xerox Corporation. Portions
19  * created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation.
20  * All Rights Reserved.
21  *
22  * Contributor(s):
23  */

24
25 package org.aspectj.compiler.crosscuts.ast;
26 import org.aspectj.compiler.base.ast.*;
27 import org.aspectj.compiler.crosscuts.joinpoints.*;
28
29
30 import java.util.*;
31
32 import org.aspectj.compiler.base.JavaCompiler;
33
34 /**
35  * A Pcd is a filter that matches JoinPoints. For JoinPoints that it matches
36  * it will produce a plan of how to apply relevant advice to that JoinPoint.
37  */

38 //XXX This extends Expr so I can use the ExprParser to parse them
39
//XXX This is a flaw in the design of my JavaParser class
40
abstract public class Pcd extends Expr {
41
42     public Pcd(SourceLocation source) {
43         super(source);
44     }
45
46     //XXX see comment above for why this is messed up
47
protected Type discoverType() { return null; }
48
49     abstract public String JavaDoc toShortString();
50
51     /**
52      * Build a partial plan for this pointcut on the given joinPoint in the
53      * context of the planData.
54      *
55      * @returns null if there is no plan
56      */

57     abstract public JpPlanner makePlanner(PlanData planData);
58
59     /**
60      * In AspectJ 1.0 only target, this, and args allow name binding.
61      */

62     public boolean allowsNameBinding() { return false; }
63     
64     /**
65      * This should call "showNonStaticError()" for any Pcd that can not be used
66      * for purely static matching. This is used by 'declare error/warning' and
67      * 'declare soft'.
68      */

69     public abstract void checkStatic();
70     
71     protected void showNonStaticError() {
72         showError("dynamic matching PCD not allowed in this context");
73     }
74     
75     // this is here to give Crista better warnings
76
// public boolean isAbstract(PlanData planData) {
77
// return false;
78
// }
79
}
80
Popular Tags