diff options
Diffstat (limited to 'docs/pdguide/messages.adoc')
-rw-r--r-- | docs/pdguide/messages.adoc | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/docs/pdguide/messages.adoc b/docs/pdguide/messages.adoc new file mode 100644 index 000000000..b9b1779d5 --- /dev/null +++ b/docs/pdguide/messages.adoc @@ -0,0 +1,205 @@ +[[messages]] +== Messages + +[[messages-introduction]] +=== Introduction + +Messages point out potential problems in the input program; some are +clearly problems (errors), but many more may depend on what the +programmer intends. To keep the noise down the latter are treated as +warnings which can be ignored by the programmer or information which are +hidden. However, when investigating unexpected behavior it's helpful to +show them. This section describes how to configure messages, presents +some problem scenarios when compiling or doing load-time weaving, and +summarizes some of the more relevant messages. + +[[messages-introduction-config]] +==== Configuring Messages + +The compiler offers `-verbose`, `-warning`, and `-XLint` options when +invoked using the command-line, Ant, or embedded in an IDE. All options +are listed in the AspectJ Development Environment Guide sections for +xref:../devguide/ajc.adoc#ajc[Ajc] and +xref:../devguide/antsupport.adoc#antTasks[Ant Tasks]. The +xref:../devguide/ltw.adoc#ltw[Load-time Weaving] section describes how to +use XML configuration files and system properties to pass options to the +weaver. (You can also pass options to the weaver using system properties +in build- time weaving.) The `-verbose` option has the effect of +including messages level "info", which are normally ignored. Both +`warning` and `XLint` enable you to identify specific messages to emit, +but warning messages tend to be the same provided by the underlying +Eclipse JDT (Java) compiler, while XLint messages are emitted by the +AspectJ compiler or weaver. Obviously, during load-time weaving only +weaver messages will be emitted. Similarly, if aspects are compiled but +not woven, then only compiler messages will be emitted. However, the +usual case for the compiler/weaver working at build time is to emit both +compiler and weaver messages. + +The tables below list some options, System Properties (for LTW only) and +Java 5 annotations used to control AspectJ messages. The method of +configuration depends on your environment so please refer to the +relevant documentation for xref:../devguide/ajc.adoc[ajc], +xref:../devguide/antsupport.adoc#antTasks[Ant] or +xref:../devguide/ltw.adoc#weaver-options[LTW]. + +[cols=",",options="header",] +|=== +|Option |Description +|`-verbose` |Show informational messages including AspectJ version and +build date. + +|`-debug` |(Load-time weaving only). Show debugging messages such as +which classes are being woven or those that are excluded. (This is not +related to the compiler -g option to include debug information in the +output .class files.) + +|`-showWeaveInfo` |Show weaving messages. + +|`-Xlint` |Control level of lint messages. + +|`messageHolderClass`/ `-XmessageHolderClass:` |In Ant tasks and LTW +respectively specify the class to receive all messages. See +xref:../devguide/antsupport.adoc#antTasks-iajc-options[iajc task +options] or +xref:../devguide/ltw.adoc#weaver-options[Weaver Options]. +|=== + +[cols=",",options="header",] +|=== +|System Property |Description +|`aj.weaving.verbose` |Show informational messages including AspectJ +version and build date (same as `-verbose` option). + +|`org.aspectj.weaver.showWeaveInfo` |Show weaving messages (same as +`-showWeaveInfo` option). + +|`org.aspectj.weaving.messages` |Set this system property to enable +tracing of all compiler messages. See xref:trace.adoc#trace-configuration[Configuring Tracing]. +|=== + +[cols=",",options="header",] +|=== +|Annotation |Description +|`@SuppressAjWarnings` |Include this is Java 5 code to suppress AspectJ +warnings associated with the next line of code. +|=== + +[[messages-scenarios]] +=== Message scenarios + +[[messages-scenarios-ct]] +==== Compile-time weaving scenarios + +[[messages-scenarios-ct-adviceNotWoven]] +===== Advice not woven + +This means that the pointcut for the advice did not match, and it should +be debugged as described in xref:pointcuts.adoc#pointcuts[Debugging Pointcuts]. + +[[messages-scenarios-ltw]] +==== Load-time weaving scenarios + +You can use `META-INF/aop.xml` to control which messages are produced +during LTW. The following example will produce basic informational +messages about the lifecyle of the weaver in addition to any warning or +error messages. + +[source, xml] +.... +<aspectj> + <weaver options="-verbose"> + </weaver> +</aspectj> +.... + +The messages indicate which `META-INF/aop.xml` configurations file(s) +are being used. Each message is also preceeded by the name of the +defining class loader associated with weaver. You can use this +information in a large system to distinguish between different +applications each of which will typically have its own class loader. + +[source, text] +.... +[AppClassLoader@92e78c] info AspectJ Weaver Version 1.5.3 built on Thursday Oct 26, 2006 at 17:22:31 GMT +[AppClassLoader@92e78c] info register classloader sun.misc.Launcher$AppClassLoader@92e78c +[AppClassLoader@92e78c] info using configuration /C:/temp/META-INF/aop.xml +[AppClassLoader@92e78c] info using configuration /C:/temp/META-INF/aop-ajc.xml +[AppClassLoader@92e78c] info register aspect ExceptionHandler +[AppClassLoader@92e78c] info processing reweavable type ExceptionHandler: ExceptionHandler.aj +.... + +[[messages-scenarios-ltw-adviceNotWoven]] +===== Advice not woven + +It is often difficult to determine, especially when using load-time +weaving (LTW), why advice has not been woven. Here is a quick guide to +the messages to look for. Firstly if you use the `-verbose` option you +should see the following message when your aspect is registered: + +[source, text] +.... +info register aspect MyAspect +.... + +Secondly if you use the `-debug` option you should see a message +indicating that you class is being woven: + +[source, text] +.... +debug weaving 'HelloWorld' +.... + +However this does not mean that advice has actually been woven into your +class; it says that the class has been passed to the weaver. To +determine whether your pointcuts match you can use the `-showWeaveInfo` +option which will cause a message to be issued each time a join point is +woven: + +[source, text] +.... +weaveinfo Join point 'method-execution(void HelloWorld.main(java.lang.String[]))' ... +.... + +If advice is woven at this join point you should get the corresponding +message. + +[[messages-xlint]] +=== Lint messages + +The table below lists some useful `-Xlint` messages. + +[cols=",,",options="header",] +|=== +|Message |Default |Description +|`aspectExcludedByConfiguration` |`ignore` |If an aspect is not being +woven, despite being registered, it could be that it has been excluded +by either an `include` or `exclude` element in the `aspects` section of +`META-INF/aop.xml`. Enable this message to determine whether an aspect +has been excluded. + +|`adviceDidNotMatch` |`warning` |Issued when advice did not potentially +affect any join points. This means the corresponding pointcut did not +match any join points in the program. This may be valid e.g., in library +aspects or code picking up error conditions, but often the programmer +simply made a mistake in the pointcut. The best approach is to debug the +pointcut. + +|`invalidAbsoluteTypeName` |`warning` |Issued when an exact type in a +pointcut does not match any type in the system. Note that this can +interact with the rules for resolving simple types, which permit +unqualified names if they are imported. + +|`typeNotExposedToWeaver` |`warning` |This means that a type which could +be affected by an aspect is not available for weaving. This happens when +a class on the classpath should be woven. + +|`runtimeExceptionNotSoftened` |`warning` |Before AspectJ 5, declare +soft used to soften runtime exceptions (unnecessarily). Since then, it +does not but does issue this warning in case the programmer did intend +for the exception to be wrapped. + +|`unmatchedSuperTypeInCall` |`warning` |Issued when a call pointcut +specifies a defining type which is not matched at the call site (where +the declared type of the reference is used, not the actual runtime +type). Most people should use 'target(Foo) && call(void foo())' instead. +|=== |