This is an annotated trace of an ajc compilation of HelloWorld (no aspects involved).

 

ajdtcore::Entering execution(void org.aspectj.tools.ajc.Main.main(String[]))

                   arguments ([Ljava.lang.String;@1ac1fe4)

 

  // ---------------------------------------------------------------------------

  // create an ajc.Main instance...

  // ---------------------------------------------------------------------------

  ajdtcore::Entering execution(org.aspectj.tools.ajc.Main()) arguments ()

 

    // command controller is used for repeated compilations in incremental mode

   

    ajdtcore::Entering execution(org.aspectj.tools.ajc.Main.CommandController()) arguments ()

    ajdtcore::Exiting execution(org.aspectj.tools.ajc.Main.CommandController())

   

    // message handler is used to accumulate messages resulting from the compilation

 

    bridge::Entering execution(org.aspectj.bridge.MessageHandler(boolean)) arguments (true)

      bridge::Entering execution(void org.aspectj.bridge.MessageHandler.init(boolean)) arguments (true)

      bridge::Exiting execution(void org.aspectj.bridge.MessageHandler.init(boolean)) return: null

    bridge::Exiting execution(org.aspectj.bridge.MessageHandler(boolean))\

  ajdtcore::Exiting execution(org.aspectj.tools.ajc.Main())

 

  // ----------------------------------------------------------------------------

  // run it!

  // ----------------------------------------------------------------------------

  ajdtcore::Entering execution(void org.aspectj.tools.ajc.Main.runMain(String[], boolean))

                     arguments ([Ljava.lang.String;@1ac1fe4,true)

 

    // set message verboseness according to presence of -verbose arg

 

    // run

    // -------------

    ajdtcore::Entering execution(void org.aspectj.tools.ajc.Main.run(String[], IMessageHolder))

                       arguments ([Ljava.lang.String;@1ac1fe4,MessageHandler: no messages)

 

      // initialise the command controller - strips out any incremental compilation options, leaving rest intact

      ajdtcore::Entering execution(String[] org.aspectj.tools.ajc.Main.CommandController.init(String[], IMessageHandler))   

                         arguments ([Ljava.lang.String;@1ac1fe4,MessageHandler: no messages)

 

      // create a command object for compilation (an ICommand)

      bridge::Entering execution(ICommand org.aspectj.bridge.ReflectionFactory.makeCommand(String, IMessageHandler))

                       arguments (org.aspectj.ajdt.ajc.AjdtCommand,MessageHandler: no messages)

        ajdtcore::Entering execution(org.aspectj.ajdt.ajc.AjdtCommand()) arguments ()

        ajdtcore::Exiting execution(org.aspectj.ajdt.ajc.AjdtCommand())

        ...

      bridge::Exiting execution(ICommand org.aspectj.bridge.ReflectionFactory.makeCommand(String, IMessageHandler))

                      return: org.aspectj.ajdt.ajc.AjdtCommand@11c8a71

 

      // ----------------------------------------------------------------------------------------------------

      // run the command... all the command-line args except verbosity and incremental options are passed in

      // ----------------------------------------------------------------------------------------------------

      ajdtcore::Entering execution(boolean org.aspectj.ajdt.ajc.AjdtCommand.runCommand(String[], IMessageHandler))

                         arguments ([Ljava.lang.String;@1ac1fe4,MessageHandler: no messages)

     

 

      // create a build manager that sends messages to the given message holder

      ajdtcore::Entering execution(org.aspectj.ajdt.internal.core.builder.AjBuildManager(IMessageHandler))

                         arguments (MessageHandler: no messages)

      ajdtcore::Exiting execution(org.aspectj.ajdt.internal.core.builder.AjBuildManager(IMessageHandler))

 

 

      // call do-command - this handles both one-off and incremental (repeat) compiles

      ajdtcore::Entering execution(boolean org.aspectj.ajdt.ajc.AjdtCommand.doCommand(IMessageHandler, boolean))

                         arguments (MessageHandler: no messages,false)

 

          // create build configuration object for this build by parsing command-line arguments

          ajdtcore::Entering execution(AjBuildConfig org.aspectj.ajdt.ajc.AjdtCommand.genBuildConfig(String[],

                                         CountingMessageHandler))

                             arguments ([Ljava.lang.String;@76cbf7,MessageHandler: no messages)

 

            // create a build arg parser, this is actually a subclass of the eclipse batch compiler

            // which is org.eclipse.jdt.internal.compiler.batch.Main

            ajdtcore::Entering execution(org.aspectj.ajdt.ajc.BuildArgParser()) arguments ()

            ajdtcore::Exiting execution(org.aspectj.ajdt.ajc.BuildArgParser())

 

            // ask the parser to create the build configuration object

            ajdtcore::Entering execution(AjBuildConfig org.aspectj.ajdt.ajc.BuildArgParser.genBuildConfig(

                                          String[], IMessageHandler))

                               arguments ([Ljava.lang.String;@76cbf7,MessageHandler: no messages)

 

              ajdtcore::Entering execution(org.aspectj.ajdt.internal.core.builder.AjBuildConfig()) arguments ()

              ajdtcore::Exiting execution(org.aspectj.ajdt.internal.core.builder.AjBuildConfig())

              ajdtcore::Entering execution(org.aspectj.ajdt.ajc.BuildArgParser.AjcConfigParser(

                                    BuildArgParser, AjBuildConfig, IMessageHandler))

                                 arguments (org.aspectj.ajdt.ajc.BuildArgParser@126804e,

                                            org.aspectj.ajdt.internal.core.builder.AjBuildConfig@b1b4c3,

                                            MessageHandler: no messages)

              ajdtcore::Exiting execution(org.aspectj.ajdt.ajc.BuildArgParser.AjcConfigParser(

                                            BuildArgParser, AjBuildConfig, IMessageHandler))

              util::Entering execution(void org.aspectj.util.ConfigParser.parseCommandLine(String[]))

                             arguments ([Ljava.lang.String;@76cbf7)

                // build a linked list of arguments and then...

                util::Entering execution(void org.aspectj.util.ConfigParser.parseArgs(LinkedList))

                               arguments ([org.aspectj.util.ConfigParser$Arg@72ffb])

                // ajc options are handled by BuildArgParser.AjcConfigParser.parseOption

                // all other args (source files, lst files, imported argfiles) are handled in ConfigParser superclass

                util::Exiting execution(void org.aspectj.util.ConfigParser.parseArgs(LinkedList)) return: null

              util::Exiting execution(void org.aspectj.util.ConfigParser.parseCommandLine(String[])) return: null

 

              // get the list of files to be compiled

              util::Entering execution(List org.aspectj.util.ConfigParser.getFiles()) arguments ()

              util::Exiting execution(List org.aspectj.util.ConfigParser.getFiles()) return:

                   [C:\Documents and Settings\colyer\Hello.java]

 

              // get any remaining arguments... these will be passed up to the eclipse batch compiler

              ajdtcore::Entering execution(List org.aspectj.ajdt.ajc.BuildArgParser.AjcConfigParser.getUnparsedArgs())

                                 arguments ()

              ajdtcore::Exiting execution(List org.aspectj.ajdt.ajc.BuildArgParser.AjcConfigParser.getUnparsedArgs())

                                return: []

 

              // configure the batch compiler (superclass) with any as yet unparsed args

              jdtcore::Entering execution(void org.eclipse.jdt.internal.compiler.batch.Main.configure(String[]))

                                arguments ([Ljava.lang.String;@1df38fd)

              jdtcore::Exiting execution(void org.eclipse.jdt.internal.compiler.batch.Main.configure(String[]))

                               return: null

 

              // tell the AjBuildConfig what it has to build

              ajdtcore::Entering execution(void org.aspectj.ajdt.internal.core.builder.AjBuildConfig.setFiles(List))

                                 arguments ([C:\Documents and Settings\colyer\Hello.java])

              ajdtcore::Exiting execution(void org.aspectj.ajdt.internal.core.builder.AjBuildConfig.setFiles(List))

                                return: null

 

              // calculate the classpath for compilation

              ajdtcore::Entering execution(List org.aspectj.ajdt.ajc.BuildArgParser.getClasspath(

                                                   BuildArgParser.AjcConfigParser))

                                 arguments (org.aspectj.ajdt.ajc.BuildArgParser$AjcConfigParser@126e85f)

              ...

              ajdtcore::Exiting execution(List org.aspectj.ajdt.ajc.BuildArgParser.getClasspath(

                                            BuildArgParser.AjcConfigParser))

                                return:

                       [C:\ColyerRoot\Programs\SunJDK141\jre\lib\rt.jar,

                        C:\ColyerRoot\Programs\SunJDK141\jre\lib\i18n.jar,

                        C:\ColyerRoot\Programs\SunJDK141\jre\lib\sunrsasign.jar,

                        C:\ColyerRoot\Programs\SunJDK141\jre\lib\jsse.jar,

                        C:\ColyerRoot\Programs\SunJDK141\jre\lib\jce.jar,

                        C:\ColyerRoot\Programs\SunJDK141\jre\lib\charsets.jar,

                        C:\ColyerRoot\Programs\SunJDK141\jre\classes,

                        C:\ColyerRoot\Programs\SunJDK141\jre\lib\ext\aspectjrt.jar,

                        C:\ColyerRoot\Programs\SunJDK141\jre\lib\ext\dnsns.jar,

                        C:\ColyerRoot\Programs\SunJDK141\jre\lib\ext\ldapsec.jar,

                        C:\ColyerRoot\Programs\SunJDK141\jre\lib\ext\localedata.jar,

                        C:\ColyerRoot\Programs\SunJDK141\jre\lib\ext\sunjce_provider.jar,

                        c:\ColyerRoot\Programs\aspectj1.1\lib\aspectjtools_g.jar,

                        c:\ColyerRoot\Programs\aspectj1.1\lib\aspectjtools.jar,

                        c:\ColyerRoot\Programs\aspectj1.1\lib\log4j-1.2.7.jar,

                        c:\ColyerRoot\Programs\aspectj1.1\lib,

                        .,

                        C:\ColyerRoot\Programs\aspectj1.1b4\lib\aspectjrt.jar]

 

              // tell the build config what we learnt...

              ajdtcore::Entering execution(void org.aspectj.ajdt.internal.core.builder.AjBuildConfig.setClasspath(List))

                                 arguments (...)

              ajdtcore::Exiting execution(void org.aspectj.ajdt.internal.core.builder.AjBuildConfig.setClasspath(List))

                                return: null

 

              // ensure we always generate debug info at this phase

              ajdtcore::Entering execution(void org.aspectj.ajdt.ajc.BuildArgParser.setDebugOptions()) arguments ()

              ajdtcore::Exiting execution(void org.aspectj.ajdt.ajc.BuildArgParser.setDebugOptions()) return: null

 

              // give the build config the java options that were parsed by the eclipse batch compiler

              ajdtcore::Entering execution(void org.aspectj.ajdt.internal.core.builder.AjBuildConfig.setJavaOptions(Map))

                       arguments ( {org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=ignore,

                                    org.eclipse.jdt.core.compiler.compliance=1.3,

                                    org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled,

                                    org.eclipse.jdt.core.compiler.codegen.unusedLocal=optimize out,

                                    org.eclipse.jdt.core.compiler.problem.deprecation=ignore,                                                

                                    org.eclipse.jdt.core.compiler.problem.

                                               unusedParameterWhenImplementingAbstract=disabled,

                                    org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore,

                                    org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore,

                                    org.eclipse.jdt.core.compiler.problem.unusedImport=ignore,

                                    org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=ignore,

                                    org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore,

                                    org.eclipse.jdt.core.compiler.debug.localVariable=generate,

                                    org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=ignore,

                                    org.eclipse.jdt.core.compiler.debug.sourceFile=generate,

                                    org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore,

                                    org.eclipse.jdt.core.compiler.debug.lineNumber=generate,

                                    org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore,

                                    org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=ignore,

                                    org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore,

                                    org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=ignore,

                                    org.eclipse.jdt.core.compiler.problem.invalidImport=error,

                                    org.eclipse.jdt.core.compiler.problem.unreachableCode=error,

                                    org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.1,

                                    org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=ignore,

                                    org.eclipse.jdt.core.compiler.source=1.3})

              ajdtcore::Exiting execution(void org.aspectj.ajdt.internal.core.builder.AjBuildConfig.setJavaOptions(Map))

                                return: null

 

            ajdtcore::Exiting execution(AjBuildConfig org.aspectj.ajdt.ajc.BuildArgParser.genBuildConfig(

                                                         String[], IMessageHandler))

                              return: org.aspectj.ajdt.internal.core.builder.AjBuildConfig@b1b4c3

 

         ajdtcore::Exiting execution(AjBuildConfig org.aspectj.ajdt.ajc.AjdtCommand.genBuildConfig(

                                       String[], CountingMessageHandler))

                           return: org.aspectj.ajdt.internal.core.builder.AjBuildConfig@b1b4c3

 

 

         // ------------------------------------------------------------------------------------------

         // here we go... kick off a batch build, if we were in incremental mode this would be a call

         // to AjBuildManager.incrementalBuild() instead

         // ------------------------------------------------------------------------------------------

         ajdtcore::Entering execution(boolean org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(

                                        AjBuildConfig, IMessageHandler))

                            arguments (org.aspectj.ajdt.internal.core.builder.AjBuildConfig@b1b4c3,

                                       MessageHandler: no messages)

 

            // *********************************************

            // what happens here is captured separately!!

            // see ajc_batchBuild_annotated.htm

            // *********************************************

 

         ajdtcore::Exiting execution(boolean org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(

                                                AjBuildConfig, IMessageHandler))

                           return: true

 

       ajdtcore::Exiting execution(boolean org.aspectj.ajdt.ajc.AjdtCommand.doCommand(IMessageHandler, boolean))

                         return: true

     ajdtcore::Exiting execution(boolean org.aspectj.ajdt.ajc.AjdtCommand.runCommand(String[], IMessageHandler))

                       return: true

 

     // and we're back in Main.run()...

     // report the results of the compilation

     ajdtcore::Entering execution(boolean org.aspectj.tools.ajc.Main.report(boolean, IMessageHolder))

               arguments (true,MessageHandler: no messages)

     ajdtcore::Exiting execution(boolean org.aspectj.tools.ajc.Main.report(boolean, IMessageHolder))

               return: true

 

   ajdtcore::Exiting execution(void org.aspectj.tools.ajc.Main.run(String[], IMessageHolder)) return: null

 

ajdtcore::Entering execution(void org.aspectj.tools.ajc.Main.systemExit(IMessageHolder))

                   arguments (MessageHandler: no messages)

 

// its all over!