Bug 36110 - IllegalAccessError while accessing introduced variable / 1.1rc1
Summary: IllegalAccessError while accessing introduced variable / 1.1rc1
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: unspecified   Edit
Hardware: PC Linux
: P2 normal (vote)
Target Milestone: ---   Edit
Assignee: Jim Hugunin CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2003-04-06 07:23 EDT by arno schumacher CLA
Modified: 2003-04-11 20:53 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description arno schumacher CLA 2003-04-06 07:23:04 EDT
In aspectj 1.1rc / jdk1.4.1 / linux the following aspect causes an illegal
access error:

aspect RequestDispatcherAspect
{
   public ServletContext ActionServlet.servletContext = null;
   public ServletContext ActionServlet.getServletContext()
   {
      if ( this.servletContext == null )
      {
          this.servletContext =
            (ServletContext) Proxy.newProxyInstance(
               getClass().getClassLoader(),
               new Class[] { ServletContext.class },
               new RequestDispatcherInvocator(super.getServletContext()));
      }
      return this.servletContext;
   }
}




java.lang.IllegalAccessError: tried to access field
org.apache.struts.action.ActionServlet.class$0 from class
com.syngenio.struts.performance.measurement.RequestDispatcherAspect
        at
com.syngenio.struts.performance.measurement.RequestDispatcherAspect.ajc$interMethod$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$getServletContext(RequestDispatcherAspect.java:42)
        at
org.apache.struts.action.ActionServlet.getServletContext(ActionServlet.java)
        at javax.servlet.GenericServlet.log(GenericServlet.java:300)
        at javax.servlet.GenericServlet.init(GenericServlet.java:257)
        at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:918)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:810)
        at
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3279)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:3421)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:785)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:478)
        at org.apache.catalina.core.StandardHost.install(StandardHost.java:738)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:324)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:389)
        at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:232)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:155)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1131)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:638)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1123)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:343)
        at org.apache.catalina.core.StandardService.start(StandardService.java:388)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:506)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:781)
        at org.apache.catalina.startup.Catalina.execute(Catalina.java:681)
        at org.apache.catalina.startup.Catalina.process(Catalina.java:179)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:243)


Jad:
import java.lang.reflect.Proxy;
import javax.servlet.ServletContext;
import org.apache.struts.action.ActionServlet;
import org.aspectj.lang.NoAspectBoundException;

// Referenced classes of package com.syngenio.struts.performance.measurement:
//            RequestDispatcherInvocator

public class RequestDispatcherAspect
{

    RequestDispatcherAspect()
    {
    }

    public static void
ajc$interFieldInit$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext(ActionServlet
arg0)
    {
       
arg0.ajc$interField$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$servletContext
= null;
    }

    public static ServletContext
ajc$interFieldGetDispatch$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext(ActionServlet
arg0)
    {
        return
arg0.ajc$interField$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$servletContext;
    }

    public static void
ajc$interFieldSetDispatch$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext(ActionServlet
arg0, ServletContext arg1)
    {
       
arg0.ajc$interField$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$servletContext
= arg1;
    }

    public static ServletContext
ajc$interMethod$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$getServletContext(ActionServlet
arg0)
    {
       
if(ajc$interFieldGetDispatch$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext(arg0)
!= null) goto _L2; else goto _L1
_L1:
        arg0;
        arg0.getClass().getClassLoader();
        Class aclass[] = new Class[1];
        aclass;
        aclass;
        0;
        ActionServlet.class$0;
        if(ActionServlet.class$0 != null) goto _L4; else goto _L3
_L3:
        JVM INSTR pop ;
        ActionServlet.class$0 = Class.forName("javax.servlet.ServletContext");
          goto _L4
        JVM INSTR new #60  <Class NoClassDefFoundError>;
        getMessage();
        NoClassDefFoundError();
        throw ;
_L4:
        JVM INSTR aastore ;
        new
RequestDispatcherInvocator(arg0.ajc$superDispatch$org_apache_struts_action_ActionServlet$getServletContext());
        Proxy.newProxyInstance();
        (ServletContext);
       
ajc$interFieldSetDispatch$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext();
_L2:
        return
ajc$interFieldGetDispatch$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext(arg0);
    }

    public static ServletContext
ajc$interMethodDispatch1$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$getServletContext(ActionServlet
arg0)
    {
        return arg0.getServletContext();
    }

    public static RequestDispatcherAspect aspectOf()
    {
        ajc$perSingletonInstance;
        if(ajc$perSingletonInstance == null) goto _L2; else goto _L1
_L1:
        return;
_L2:
        throw new NoAspectBoundException();
    }

    public static boolean hasAspect()
    {
        return ajc$perSingletonInstance != null;
    }

    private static void ajc$postClinit()
    {
        ajc$perSingletonInstance = new RequestDispatcherAspect();
    }

    public static final RequestDispatcherAspect ajc$perSingletonInstance;

    static
    {
        ajc$postClinit();
    }
}
Comment 1 Jim Hugunin CLA 2003-04-10 14:46:53 EDT
Raising priority to make sure this is fixed.

It would help a lot if you could provide a small self-contained test case with 
1-2 source files that would reproduce this bug.
Comment 2 Jim Hugunin CLA 2003-04-11 20:53:20 EDT
This has been isolated to be a result of use .class in an introduction that 
affects a type in a different package from the aspect.  This is now fixed in 
the current tree with a test in bugs/interSpecials.