aoqi@0: /* aoqi@0: * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. aoqi@0: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. aoqi@0: * aoqi@0: * This code is free software; you can redistribute it and/or modify it aoqi@0: * under the terms of the GNU General Public License version 2 only, as aoqi@0: * published by the Free Software Foundation. Oracle designates this aoqi@0: * particular file as subject to the "Classpath" exception as provided aoqi@0: * by Oracle in the LICENSE file that accompanied this code. aoqi@0: * aoqi@0: * This code is distributed in the hope that it will be useful, but WITHOUT aoqi@0: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or aoqi@0: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License aoqi@0: * version 2 for more details (a copy is included in the LICENSE file that aoqi@0: * accompanied this code). aoqi@0: * aoqi@0: * You should have received a copy of the GNU General Public License version aoqi@0: * 2 along with this work; if not, write to the Free Software Foundation, aoqi@0: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. aoqi@0: * aoqi@0: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA aoqi@0: * or visit www.oracle.com if you need additional information or have any aoqi@0: * questions. aoqi@0: */ aoqi@0: aoqi@0: package com.sun.tools.javac.comp; aoqi@0: aoqi@0: import java.util.HashMap; aoqi@0: aoqi@0: import com.sun.tools.javac.util.Context; aoqi@0: aoqi@0: /** Partial map to record which compiler phases have been executed aoqi@0: * for each compilation unit. Used for ATTR and FLOW phases. aoqi@0: * aoqi@0: *

This is NOT part of any supported API. aoqi@0: * If you write code that depends on this, you do so at your own risk. aoqi@0: * This code and its internal interfaces are subject to change or aoqi@0: * deletion without notice. aoqi@0: */ aoqi@0: public class CompileStates extends HashMap, CompileStates.CompileState> { aoqi@0: /** The context key for the compile states. */ aoqi@0: protected static final Context.Key compileStatesKey = aoqi@0: new Context.Key(); aoqi@0: aoqi@0: /** Get the CompileStates instance for this context. */ aoqi@0: public static CompileStates instance(Context context) { aoqi@0: CompileStates instance = context.get(compileStatesKey); aoqi@0: if (instance == null) { aoqi@0: instance = new CompileStates(context); aoqi@0: } aoqi@0: return instance; aoqi@0: } aoqi@0: aoqi@0: /** Ordered list of compiler phases for each compilation unit. */ aoqi@0: public enum CompileState { aoqi@0: INIT(0), aoqi@0: PARSE(1), aoqi@0: ENTER(2), aoqi@0: PROCESS(3), aoqi@0: ATTR(4), aoqi@0: FLOW(5), aoqi@0: TRANSTYPES(6), aoqi@0: UNLAMBDA(7), aoqi@0: LOWER(8), aoqi@0: GENERATE(9); aoqi@0: aoqi@0: CompileState(int value) { aoqi@0: this.value = value; aoqi@0: } aoqi@0: public boolean isAfter(CompileState other) { aoqi@0: return value > other.value; aoqi@0: } aoqi@0: public static CompileState max(CompileState a, CompileState b) { aoqi@0: return a.value > b.value ? a : b; aoqi@0: } aoqi@0: private final int value; aoqi@0: }; aoqi@0: aoqi@0: private static final long serialVersionUID = 1812267524140424433L; aoqi@0: aoqi@0: protected Context context; aoqi@0: aoqi@0: public CompileStates(Context context) { aoqi@0: this.context = context; aoqi@0: context.put(compileStatesKey, this); aoqi@0: } aoqi@0: aoqi@0: public boolean isDone(Env env, CompileState cs) { aoqi@0: CompileState ecs = get(env); aoqi@0: return (ecs != null) && !cs.isAfter(ecs); aoqi@0: } aoqi@0: }