langtools/src/share/opensource/javac/doc/javac_lifecycle/Context.html
changeset 451 59439733e87a
parent 450 be95c1c0efcf
parent 408 cc1aa0299d0d
child 452 deabc19e963e
child 634 34d4a2d5b8cb
--- a/langtools/src/share/opensource/javac/doc/javac_lifecycle/Context.html	Wed Apr 23 14:35:26 2008 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!--
-Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
-DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
-This code is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License version 2 only, as
-published by the Free Software Foundation.  Sun designates this
-particular file as subject to the "Classpath" exception as provided
-by Sun in the LICENSE file that accompanied this code.
-
-This code is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-version 2 for more details (a copy is included in the LICENSE file that
-accompanied this code).
-
-You should have received a copy of the GNU General Public License version
-2 along with this work; if not, write to the Free Software Foundation,
-Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-CA 95054 USA or visit www.sun.com if you need additional information or
-have any questions.
--->
-
-<html>
-    <head>
-        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
-        <meta name="author" content="Jonathan Gibbons">
-        <link type="text/css" rel=stylesheet href="style.css">
-        <title>com.sun.tools.javac.comp.Enter</title>
-    </head>
-    <body>
-
-        <h3>com.sun.tools.javac.util.Context</h3>
-
-        <p>Contexts provides a way to share data between the different parts of 
-        the compiler.</p>
-
-        <p>They provide support for an abstract context, modelled loosely after 
-        ThreadLocal but using a user-provided context instead of the current 
-        thread.</p>
- 
-        <p>Within the compiler, a single Context is used for each
-        invocation of the compiler.  The context is then used to ensure a
-        single copy of each compiler phase exists per compiler invocation.</p>
- 
-        <p>The context can be used to assist in extending the compiler by
-        extending its components.  To do that, the extended component must
-        be registered before the base component.  We break initialization
-        cycles by (1) registering a factory for the component rather than
-        the component itself, and (2) a convention for a pattern of usage
-        in which each base component registers itself by calling an
-        instance method that is overridden in extended components.  A base
-        phase supporting extension would look something like this:</p>
- 
-        <pre>
-   public class Phase {
-       protected static final Context.Key&lt;Phase&gt; phaseKey =
- 	   new Context.Key&lt;Phase&gt;();
- 
-       public static Phase instance(Context context) {
- 	   Phase instance = context.get(phaseKey);
- 	   if (instance == null)
- 	       // the phase has not been overridden
- 	       instance = new Phase(context);
- 	   return instance;
-       }
- 
-       protected Phase(Context context) {
- 	   context.put(phaseKey, this);
- 	   // other intitialization follows...
-       }
-   }
-        </pre>
- 
-        <p>In the compiler, we simply use Phase.instance(context) to get
-        the reference to the phase.  But in extensions of the compiler, we
-        must register extensions of the phases to replace the base phase,
-        and this must be done before any reference to the phase is accessed
-        using Phase.instance().  An extended phase might be declared thus:</p>
- 
-        <pre>
-   public class NewPhase extends Phase {
-       protected NewPhase(Context context) {
- 	   super(context);
-       }
-       public static void preRegister(final Context context) {
-           context.put(phaseKey, new Context.Factory&lt;Phase&gt;() {
- 	       public Phase make() {
- 		   return new NewPhase(context);
- 	       }
-           });
-       }
-   }
-        </pre>
- 
-        <p>And is registered early in the extended compiler like this:</p>
- 
-        <pre>
-       NewPhase.preRegister(context);
-        </pre>
- 
-
-    </body>
-</html>