<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://pleiad.cl/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://pleiad.cl/feed.php">
        <title>PLEIAD research:mao</title>
        <description></description>
        <link>http://pleiad.cl/</link>
        <image rdf:resource="http://pleiad.cl/lib/tpl/pleiad2/images/favicon.ico" />
       <dc:date>2026-04-15T21:05:18+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://pleiad.cl/research/mao/advice-dispatch"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/mao/extended-signatures"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/mao/generic-advice"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/mao/iiia-examples-fixed"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/mao/iiia-examples"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/mao/invariant-pcd"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/mao/new-things"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/mao/overloading"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/mao/parametric-polymorphism"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/mao/subtyping"/>
                <rdf:li rdf:resource="http://pleiad.cl/research/mao/two-signatures"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://pleiad.cl/lib/tpl/pleiad2/images/favicon.ico">
        <title>PLEIAD</title>
        <link>http://pleiad.cl/</link>
        <url>http://pleiad.cl/lib/tpl/pleiad2/images/favicon.ico</url>
    </image>
    <item rdf:about="http://pleiad.cl/research/mao/advice-dispatch">
        <dc:format>text/html</dc:format>
        <dc:date>2011-06-17T13:40:18+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:mao:advice-dispatch</title>
        <link>http://pleiad.cl/research/mao/advice-dispatch</link>
        <description>In the FSE/NI paper we had the following example


jpi void buying(Item item, float price, 
                int amount, Customer cus)
	extends checkingOut;
	
aspect Discount {	
	void around checkingOut(Item item, float price, int amt, Customer cus) {
		int factor = cus.hasBirthday()? 0.95 : 1;
		proceed(item, price*factor, amt, cus);
	}
	void around buying(Item item, float price, 
                     int amt, Customer cus) {
		int factor = (amt &gt; 10) ? 0.85 : 1; 
		nextadvice(item, price*factor…</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/mao/extended-signatures">
        <dc:format>text/html</dc:format>
        <dc:date>2012-06-03T12:40:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:mao:extended-signatures</title>
        <link>http://pleiad.cl/research/mao/extended-signatures</link>
        <description>jpi Number JPBase(Object o);

jpi Integer JPAdvice(Object o);

around Integer JPBase(Object o): JPAdvice {

}

base:

Integer foo(Object o);

exhibit JPBase(Object o): call(* foo()) &amp;&amp; args(o);

Number n = foo(new LinkedList()); shadow</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/mao/generic-advice">
        <dc:format>text/html</dc:format>
        <dc:date>2011-12-14T12:29:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:mao:generic-advice</title>
        <link>http://pleiad.cl/research/mao/generic-advice</link>
        <description>Aspect-Oriented Programming (AOP) is successful to modularize crosscutting concerns such as Logging, Profiling, Security, among others.  The Pointcut/Advice mechanism is the most emblematic in AOP.  Pointcuts are predicates that represent join points where an advice is executed.  An advice is a function that can be classified as Generic or Non-Generic.  For example:</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/mao/iiia-examples-fixed">
        <dc:format>text/html</dc:format>
        <dc:date>2010-11-24T19:59:59+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:mao:iiia-examples-fixed</title>
        <link>http://pleiad.cl/research/mao/iiia-examples-fixed</link>
        <description>Fixed versions

The following example shows the “double-match problem”. Here, we only see syntactic changes. The semantic change is hidden: the advice should only execute once, not twice. When changing the pointcut for JPB to ...

call(* foo(..)) &amp;&amp; args(*,i)</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/mao/iiia-examples">
        <dc:format>text/html</dc:format>
        <dc:date>2010-11-24T13:51:22+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:mao:iiia-examples</title>
        <link>http://pleiad.cl/research/mao/iiia-examples</link>
        <description>The following example exposes the problem that IIIA generates double matches in some cases:


joinpointtype JP allows around {
	int i;
}

joinpointtype JPA extends JP {}
joinpointtype JPB extends JP {}

class C exhibits JPA, JPB {
	pointcut JPA: call(* foo(..)) &amp;&amp; args(i,*);
	pointcut JPB: call(* foo(..)) &amp;&amp; args(i,*);
	
	static void foo(int a, int b) {
		System.out.println(&quot;foo: &quot;+a+&quot;,&quot;+b);
	}

	public static void main(String args[]) {
		foo(1,2);
	}
}

aspect DoubleAspect advises JP {
	void ar…</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/mao/invariant-pcd">
        <dc:format>text/html</dc:format>
        <dc:date>2012-01-21T15:27:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:mao:invariant-pcd</title>
        <link>http://pleiad.cl/research/mao/invariant-pcd</link>
        <description>Join point interfaces (JPIs) are contracts between aspects and advised code.  Pieces of advice do not refer explicitly to the advised code anymore because of they are pointcut free.  From now on, a piece of advice contains a bound JPI instead of a pointcut expression.  Pointcut expressions are now defined as part of</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/mao/new-things">
        <dc:format>text/html</dc:format>
        <dc:date>2010-11-24T21:32:01+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:mao:new-things</title>
        <link>http://pleiad.cl/research/mao/new-things</link>
        <description>New things!

shared library (potential exhibit) + “wide” quantification (dynamic-analysis-like)


xpi Jps {
  joinpointtype Object Creations(Class c);
  
  // pointcut library of &quot;meaningful pointcuts for the JPT&quot;
  pointcut creations(Class c) : call(* *.new(..)) &amp;&amp; target(c);
  
  // other alternative
   joinpointtype Object Creations(Class c) defaults: call(* *.new(..)) &amp;&amp; target(c);
}

module Collections  {
  contains java.util.*;
  potentially-exhibits Object Jps.Creations(Class c) : creatio…</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/mao/overloading">
        <dc:format>text/html</dc:format>
        <dc:date>2011-12-14T12:22:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:mao:overloading</title>
        <link>http://pleiad.cl/research/mao/overloading</link>
        <description>Join point interfaces (JPIs) are contracts between aspects and advised code.  JPIs support a programming methodology where aspects only specify the types of join points they advise based on a JPI, not on concrete pointcuts.  JPI definition looks like a method signature (except for the extends clause, used for join point subtyping). It has return type, name, arguments and checked exceptions.</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/mao/parametric-polymorphism">
        <dc:format>text/html</dc:format>
        <dc:date>2012-08-22T00:30:28+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:mao:parametric-polymorphism</title>
        <link>http://pleiad.cl/research/mao/parametric-polymorphism</link>
        <description>Parametric Polymorphism

FIXME

	*  Introduction
	*  StrongAspectJ in action
	*  How StrongAspectJ fails with ranges types and interfaces.
	*  How parametric return and arguments types can ensure generic advice definition.
	*  Examples

Introduction</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/mao/subtyping">
        <dc:format>text/html</dc:format>
        <dc:date>2011-06-17T13:36:27+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:mao:subtyping</title>
        <link>http://pleiad.cl/research/mao/subtyping</link>
        <description>Here we propose a syntax and semantics for subtyping...

Consider the following JPIs with the stated subtyping relationship:
jpi void A(Object o);
jpi void B(Object a, Object b) extends A(b); //extend A, equating b with o above

The semantics is here that B is a special kind of A that exposes more context: the additional parameter</description>
    </item>
    <item rdf:about="http://pleiad.cl/research/mao/two-signatures">
        <dc:format>text/html</dc:format>
        <dc:date>2011-06-17T17:51:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>research:mao:two-signatures</title>
        <link>http://pleiad.cl/research/mao/two-signatures</link>
        <description>In the StrongAspectJ paper, the authors consider this example as a case for separate “proceed signatures”:
Integer around(): //(1)
  call((Integer || Number) *()):
  Number proceed() { //(2)
  return new Integer(proceed().intValue()); //(3)
}

In this example, the advice declares an</description>
    </item>
</rdf:RDF>
