Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Getting IllegalAccessError when using anonymous class

Hi,


> My questions are:
> - Are anonyomous classes allowed within AspectJ aspects at all?
Yep

> - Is there any way to get a workaround for such a problem?
Use AspectJ 1.6.12.M1 which fixes
https://bugs.eclipse.org/bugs/show_bug.cgi?id=343051 - which is what
you have hit.

cheers
Andy

On 13 June 2011 02:54, Claas Wilke <claas.wilke@xxxxxxxxxxxxx> wrote:
> Hi,
>
> I'm trying to convert OCL constraints into executable AspectJ code. A
> special problem is caused when transforming the iterator sort(exp) into Java
> code that sorts a collection according to a given expression. I transform
> the expression into a java.util.Comparator which is initialized by using an
> anonymous class (see code below):
>
> package testpackage.constraints;
>
> /**
>  * <p>Generated Aspect to enforce OCL constraint.</p>
>  *
>  * @author OCL22Java of Dresden OCL2 for Eclipse
>  * @Generated
>  */
> public privileged aspect Class1_DefAspect_testSortedByIteratorExp01 {
>
>    /**
>     * <p>Defines the method testSortedByIteratorExp01() defined by the
> constraint
>     * <code>context Class1
>     *       def: testSortedByIteratorExp01() : OrderedSet(Integer) =
> OrderedSet{3, 2, 1}->sortedBy(i: Integer | i)</code></p>
>     */
>    public java.util.List<Integer>
> testpackage.Class1.testSortedByIteratorExp01( ) {
>        java.util.ArrayList<Integer> collection1;
>        collection1 = new java.util.ArrayList<Integer>();
>
>        collection1.add(new Integer(3));
>        collection1.add(new Integer(2));
>        collection1.add(new Integer(1));
>        java.util.ArrayList<Integer> result1;
>        java.util.Comparator<Integer> comparator1;
>
>        result1 = collection1;
>
>        comparator1 = new java.util.Comparator<Integer>() {
>
>            /** Method which compares two elements of the collection. */
>            public int compare(Integer anElement1, Integer anElement2) {
>                int result2;
>
>                result2 = 0;
>
>                if (anElement1 < anElement2) {
>                    result2 = -1;
>                } else if (anElement1 > anElement2) {
>                    result2 = 1;
>                }
>
>                return result2;
>            }
>        };
>
>        java.util.Collections.sort(result1, comparator1);
>
>        return result1;
>    }
> }
>
> Althoug AJDT parses and compiles the code correctly, the initialization of
> the anonymous classes causes a runtime exception:
>
> java.lang.IllegalAccessError: tried to access class testpackage.Class1$1
> from class
> testpackage.constraints.Class1_DefAspect_testSortedByIteratorExp01
>    at
> testpackage.constraints.Class1_DefAspect_testSortedByIteratorExp01.ajc$interMethod$testpackage_constraints_Class1_DefAspect_testSortedByIteratorExp01$testpackage_Class1$testSortedByIteratorExp01(Class1_DefAspect_testSortedByIteratorExp01.aj:28)
>    at testpackage.Class1.testSortedByIteratorExp01(Class1.java:1)
>    at
> testpackage.constraints.Class1_DefAspect_testSortedByIteratorExp01.ajc$interMethodDispatch1$testpackage_constraints_Class1_DefAspect_testSortedByIteratorExp01$testpackage_Class1$testSortedByIteratorExp01(Class1_DefAspect_testSortedByIteratorExp01.aj)
>    ...
>
> My questions are:
> - Are anonyomous classes allowed within AspectJ aspects at all?
> - Is there any way to get a workaround for such a problem?
>
> Cheers and thanks,
> Claas Wilke
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>


Back to the top