Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] policy enforcement for parameterless constructor and certain field declaration

Hi,

On 26 May 2011 01:36, Kristof Jozsa <kristof.jozsa@xxxxxxxxx> wrote:
> Hmm I wasn't yet aware of this hasmember feature. I tried to google
> around and also checked my copy of Aspectj in Action but could not
> find much examples.

I can't recall if it was covered, but if it was it would be in the
second edition (not the first) of AspectJ in action.  Given that it is
still an 'optional' feature, I'm not sure if Ramnivas did cover it or
not.

> Are there any usage details on hasfield/hasmethod somewhere? Also, is
> there a unit test suite which I could check for examples? The AspectJ
> source download doesn't seem to include any tests..

There are numerous tests in AspectJ for this.  The source for the
tests is not available in zip form though, it is only in the
repository. The source zips downloadable alongside the distribution
are only for what is in the distribution.  Searching the source I see
about 30/40 tests.

The feature is actually described in this bug:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=86818 - which you'll
actually see is still open.  It is still open because you have to
switch on this feature with -XhasMember, it still hasn't been made
'default'.  It isn't default because it still doesn't play nicely with
all the other language features (basically ITDs) - until it does it
will still be something to opt into.

But it was only in 1.6.9 that I added the ability to use type patterns
with declare warning/error:
http://www.eclipse.org/aspectj/doc/released/README-169.html

---
It is now possible to use a type pattern with declare warning and
declare error. For example:
declare warning: I+ && !hasfield(int i): "Implementations of I are
expected to have a int field called i";
---
I do acknowledge (and apologise that) the main docs don't cover it
properly.  We last had the resource to do a good docs update for 1.5.0
and that was all focussed on generics/annotations/etc when AspectJ was
upgraded for Java5.  Since then it is basically the sequence of
READMEs that detail what has happened with AspectJ.

Here is one of our testcases for it:
===
public aspect HasMethod {
	
	declare parents : hasmethod(* print(..)) implements Printable;

	public static void main(String[] args) {
		C c = new C();
		if (! (c instanceof Printable)) {
			throw new RuntimeException("declare parents : hasmethod failed");
		}
	}
}

class C {	
	public void print() {}
}

interface Printable {};
===

cheers
Andy

> On Wed, May 25, 2011 at 3:16 PM, Matthew Adams <matthew@xxxxxxxxxxxxxxx> wrote:
>> For the first one, you might try using "declare error" with a type
>> pattern that uses hasmember.  Not sure what you mean by the second,
>> but declare error with hasmember might do the trick there, too.
>>
>> -matthew
>>
>> On Sat, May 21, 2011 at 5:57 PM, Kristof Jozsa <kristof.jozsa@xxxxxxxxx> wrote:
>>> I'd like to ask for help with two policy enforcement rules:
>>> - enforce a class having no constructor with arguments (a default or a
>>> parameterless constructor is fine)
>>> - enforce an annotated field being of a certain type
>>>
>>> For the second one I currently enforce the get() of the field which is not
>>> too bad, but would be nicer to disallow the field declaration.. if possible.
>>>
>>> Can anyone show me an example doing these tricks?
>>>
>>> Thanks a lot,
>>> K
>>>
>>>
>>>
>>> _______________________________________________
>>> aspectj-users mailing list
>>> aspectj-users@xxxxxxxxxxx
>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>>
>>>
>>
>>
>>
>> --
>> @matthewadams12
>> mailto:matthew@xxxxxxxxxxxxxxx
>> skype:matthewadams12
>> yahoo:matthewadams
>> aol:matthewadams12
>> google-talk:matthewadams12@xxxxxxxxx
>> msn:matthew@xxxxxxxxxxxxxxx
>> http://matthewadams.me
>> http://www.linkedin.com/in/matthewadams
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>


Back to the top