A bit terser, now: public aspect Extend {
public static class Nothing {} declare parents : !Enum+ && !Annotation+ && whatever..* // classes to restrict extends Nothing; } :) On Fri, Aug 17, 2012 at 3:33 PM, Matthew Adams <matt...@matthewadams.me> wrote: > ...and here you go: > > public aspect DontExtend { > > public static class Anything {} > > declare parents : > !Enum+ && > !Annotation+ && > whatever..* // classes to restrict > extends Anything; > } > > This yields the following compilation error for me: > > [ERROR] Failed to execute goal > org.codehaus.mojo:aspectj-maven-plugin:1.4:compile (default) on > project app-domain: Compiler errors: > [ERROR] error at declare parents : > [ERROR] !Enum+ && > [ERROR] !Annotation+ && > [ERROR] app.domain.model..* > [ERROR] extends Anything; > [ERROR] > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > [ERROR] > /Users/matthew/Documents/test/production/app/domain/src/main/aspect/app/domain/aspect/horizontal/DontExtend.aj:12:0::0 > can only insert a class into hierarchy, but > app.domain.aspect.horizontal.DontExtend$Anything is not a subtype of > app.domain.model.Test > > Works! > > I was thinking also about how to force all model classes to be final. > I thought about some form of either 'declare error : !final > app.domain.model..* : "model classes must be final"' or an ITD to > introduce the final modifier. Is that possible? > > -matthew > > On Fri, Aug 17, 2012 at 12:45 PM, Matthew Adams <matt...@matthewadams.me> > wrote: >> >> Interesting. I like all of the suggestions. I entered an issue to track >> this: >> https://bugs.eclipse.org/bugs/show_bug.cgi?id=387499 >> >> Thanks! >> >> >> On Thu, Aug 16, 2012 at 3:05 PM, Andy Clement <andrew.clem...@gmail.com> >> wrote: >>> >>> I haven't spent toooo long thinking about it, but I don't think you >>> can at the moment. We don't really have the capabilities to introspect >>> the class hierarchy to that level of detail. >>> >>> Some made up syntaxes: >>> >>> If 'Object+' indicates subtypes, let's add a numeric to indicate distance: >>> declare error: within(Object+2): "Type does not directly extend >>> object"; // maybe add the type category type pattern too: >>> within(is(ClassType) && Object+2) >>> declare error: within(Object+>2): "Type does not directly extend object"; >>> >>> More direct: >>> declare error within(!extends(Object)): "Type does not directly extend >>> object"; // if 'extends' is strictly looking at the declared type and >>> not the inheritance chain. >>> >>> You could probably cause an error if you tried to use declare parents >>> extends with a simple type because extends will report an error if the >>> new type doesn't have the same parent as the existing type: >>> >>> class Foo1 {} >>> class Foo2 extends ArrayList {} >>> >>> class Marker {} >>> >>> aspect X { >>> declare parents: Foo* extends Marker; >>> } >>> >>> will give an error ... but it isn't as simple as a nice message saying >>> 'type Foo2 doesn't directly extend Object.' >>> >>> cheers, >>> Andy >>> >>> On 16 August 2012 08:40, Matthew Adams <matt...@matthewadams.me> wrote: >>> > Just for fun, I was trying to think of how to use declare error to prevent >>> > the use of class inheritance in user code, but I can't think of how to do >>> > that. >>> > >>> > Basically, if you wanted to disallow the declaration of classes that >>> > extend >>> > anything other than Object, is there a "declare error" form that would >>> > work? >>> > >>> > -matthew >>> > >>> > -- >>> > mailto:matt...@matthewadams.me >>> > skype:matthewadams12 >>> > googletalk:matt...@matthewadams.me >>> > http://matthewadams.me >>> > http://www.linkedin.com/in/matthewadams >>> > >>> > >>> > _______________________________________________ >>> > aspectj-users mailing list >>> > aspectj-users@eclipse.org >>> > https://dev.eclipse.org/mailman/listinfo/aspectj-users >>> > >>> _______________________________________________ >>> aspectj-users mailing list >>> aspectj-users@eclipse.org >>> https://dev.eclipse.org/mailman/listinfo/aspectj-users >> >> >> >> >> -- >> mailto:matt...@matthewadams.me >> skype:matthewadams12 >> googletalk:matt...@matthewadams.me >> http://matthewadams.me >> http://www.linkedin.com/in/matthewadams >> > > > > -- > mailto:matt...@matthewadams.me > skype:matthewadams12 > googletalk:matt...@matthewadams.me > http://matthewadams.me > http://www.linkedin.com/in/matthewadams -- mailto:matt...@matthewadams.me skype:matthewadams12 googletalk:matt...@matthewadams.me http://matthewadams.me http://www.linkedin.com/in/matthewadams _______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org https://dev.eclipse.org/mailman/listinfo/aspectj-users