Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Problem with static intertype declaration and interface



Hello Wolvers,

This is a Java error rather than Aspect error.

AspectJ allows add intertype declaration but the declaration must be a
valid java declaration in case it is added locally to the java class.
In your sample you tried to add a PRIVATE method with IMPLEMENTATION into
an interface. This is not valid in terms of Java. The java error message
indicated private is not a valid modifier to an interface method.

Best,

Bo
----------------------------------------------------------
  Dr. Bo Yi
  WAS L3 Support
  IBM Toronto Lab
  A2-713/Q2Z/8200/MKM
  8200 Warden Ave. Markham ONT. L6G 1C7
  Phone: 905-413-4819
  Tie Line: 969-4819
  E-Mail: boyi@xxxxxxxxxx



|---------+------------------------------->
|         |           "Wolvers, B. (Bas)" |
|         |           <Bas.Wolvers@AkzoNob|
|         |           el.com>             |
|         |           Sent by:            |
|         |           aspectj-users-admin@|
|         |           eclipse.org         |
|         |                               |
|         |                               |
|         |           03/24/2004 04:12 AM |
|         |           Please respond to   |
|         |           aspectj-users       |
|---------+------------------------------->
  >-----------------------------------------------------------------------------------------------------------------------|
  |                                                                                                                       |
  |       To:       "'aspectj-users@xxxxxxxxxxx'" <aspectj-users@xxxxxxxxxxx>                                             |
  |       cc:                                                                                                             |
  |       Subject:  [aspectj-users] Problem with static intertype declaration and interface                               |
  |                                                                                                                       |
  |                                                                                                                       |
  >-----------------------------------------------------------------------------------------------------------------------|



Please have a look at the following code:

package untitled4;
public interface Interface1{}

package untitled4;
class Untitled1
{
    public static void main(String args[])
    {
    }
}

package untitled4;
aspect aAspect
{
  declare parents : Untitled1 implements Interface1;

  private static String Untitled1.aString = getString();

  private static final String Interface1.getString()
  {
      return "AString";
  }
}

When I run this code the following exception occurs:
java.lang.ClassFormatError: untitled4/Interface1 (Illegal method modifiers:
0x409)
             at java.lang.ClassLoader.defineClass0(Native Method)
             at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
             at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
             at
java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
             at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
             at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
             at java.security.AccessController.doPrivileged(Native Method)
             at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
             at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
             at
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
             at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
             at
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
             at java.lang.ClassLoader.defineClass0(Native Method)
             at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
             at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
             at
java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
             at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
             at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
             at java.security.AccessController.doPrivileged(Native Method)
             at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
             at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
             at
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
             at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
             at
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
Exception in thread "main"

Questions:
- Why does the error occur? (The ajc compiler doesn't give an error or
warning) Is this a aspectJ bug?

- Why is it not possible to intertype a static field to an interface.
(I want to add a static field to more then one class, the classes
implements
the same interface)

Greetings,

Bas
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/aspectj-users




Back to the top