langtools/test/tools/javac/util/context/T7021650.java
author darcy
Fri, 21 Dec 2012 08:45:43 -0800
changeset 14963 974d4423c999
parent 10638 c8e9604cf151
child 23810 b92eb80925f0
permissions -rw-r--r--
8005282: Use @library tag with non-relative path for javac tests Reviewed-by: jjg
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8614
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
     1
/*
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
     2
 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
     4
 *
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
     7
 * published by the Free Software Foundation.
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
     8
 *
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    13
 * accompanied this code).
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    14
 *
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    18
 *
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    21
 * questions.
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    22
 */
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    23
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    24
/**
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    25
 * @test
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    26
 * @bug 7021650
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    27
 * @summary Fix Context issues
14963
974d4423c999 8005282: Use @library tag with non-relative path for javac tests
darcy
parents: 10638
diff changeset
    28
 * @library /tools/javac/lib
8614
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    29
 * @build JavacTestingAbstractProcessor T7021650
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    30
 * @run main T7021650
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    31
 */
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    32
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    33
import java.io.*;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    34
import java.net.*;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    35
import java.util.*;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    36
import javax.annotation.processing.*;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    37
import javax.lang.model.element.*;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    38
import javax.tools.*;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    39
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    40
import com.sun.tools.javac.comp.Attr;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    41
import com.sun.tools.javac.file.JavacFileManager;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    42
import com.sun.tools.javac.main.Main;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    43
import com.sun.tools.javac.processing.JavacProcessingEnvironment;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    44
import com.sun.tools.javac.util.Context;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    45
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    46
public class T7021650 extends JavacTestingAbstractProcessor {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    47
    public static void main(String... args) throws Exception {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    48
        new T7021650().run();
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    49
    }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    50
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    51
    static File testSrc = new File(System.getProperty("test.src"));
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    52
    static final int MAX_ROUNDS = 3;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    53
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    54
    /**
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    55
     * Perform a compilation with custom factories registered in the context,
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    56
     * and verify that corresponding objects are created in each round.
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    57
     */
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    58
    void run() throws Exception {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    59
        Counter demoCounter = new Counter();
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    60
        Counter myAttrCounter = new Counter();
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    61
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    62
        Context context = new Context();
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    63
        // Use a custom file manager which creates classloaders for annotation
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    64
        // processors with a sensible delegation parent, so that all instances
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    65
        // of test classes come from the same class loader. This is important
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    66
        // because the test performs class checks on the instances of classes
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    67
        // found in the context for each round or processing.
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    68
        context.put(JavaFileManager.class, new Context.Factory<JavaFileManager>() {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    69
            public JavaFileManager make(Context c) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    70
                return new JavacFileManager(c, true, null) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    71
                    @Override
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    72
                    protected ClassLoader getClassLoader(URL[] urls) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    73
                        return new URLClassLoader(urls, T7021650.class.getClassLoader());
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    74
                    }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    75
                };
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    76
            }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    77
        });
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    78
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    79
        Demo.preRegister(context, demoCounter);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    80
        MyAttr.preRegister(context, myAttrCounter);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    81
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    82
        String[] args = {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    83
            "-d", ".",
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    84
            "-processor", T7021650.class.getName(),
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    85
            "-XprintRounds",
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    86
            new File(testSrc, T7021650.class.getName() + ".java").getPath()
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    87
        };
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    88
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    89
        compile(context, args);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    90
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    91
        // Expect to create Demo for initial round, then MAX_ROUNDS in which
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    92
        // GenX files are generated, then standard final round of processing.
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    93
        checkEqual("demoCounter", demoCounter.count, MAX_ROUNDS + 2);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    94
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    95
        // Expect to create MyAttr for same processing rounds as for Demo,
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    96
        // plus additional context for final compilation.
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    97
        checkEqual("myAttrCounter", myAttrCounter.count, MAX_ROUNDS + 3);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    98
    }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
    99
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   100
    void compile(Context context, String... args) throws Exception {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   101
        StringWriter sw = new StringWriter();
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   102
        PrintWriter pw = new PrintWriter(sw);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   103
        Main m = new Main("javac", pw);
10638
c8e9604cf151 7075721: javac should have public enum for exit codes
jjg
parents: 8614
diff changeset
   104
        Main.Result res = m.compile(args, context);
8614
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   105
        pw.close();
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   106
        String out = sw.toString();
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   107
        if (!out.isEmpty())
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   108
            System.err.println(out);
10638
c8e9604cf151 7075721: javac should have public enum for exit codes
jjg
parents: 8614
diff changeset
   109
        if (!res.isOK())
c8e9604cf151 7075721: javac should have public enum for exit codes
jjg
parents: 8614
diff changeset
   110
            throw new Exception("compilation failed unexpectedly: result=" + res);
8614
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   111
    }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   112
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   113
    void checkEqual(String label, int found, int expect) throws Exception {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   114
        if (found != expect)
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   115
            throw new Exception("unexpected value for " + label
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   116
                    + ": expected " + expect
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   117
                    + ": found " + found);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   118
    }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   119
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   120
    //---------------
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   121
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   122
    /*
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   123
     * A custom class unknown to javac but nonetheless registered in the context.
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   124
     */
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   125
    static class Demo {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   126
        static void preRegister(Context context, final Counter counter) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   127
            context.put(Demo.class, new Context.Factory<Demo>() {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   128
                public Demo make(Context c) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   129
                    counter.count++;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   130
                    return new Demo(c);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   131
                }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   132
            });
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   133
        }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   134
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   135
        Demo(Context c) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   136
            c.put(Demo.class, this);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   137
        }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   138
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   139
        static Demo instance(Context context) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   140
            return context.get(Demo.class);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   141
        }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   142
    }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   143
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   144
    /**
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   145
     * A custom version of a standard javac component.
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   146
     */
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   147
    static class MyAttr extends Attr {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   148
        static void preRegister(Context context, final Counter counter) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   149
            context.put(attrKey, new Context.Factory<Attr>() {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   150
                public Attr make(Context c) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   151
                    counter.count++;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   152
                    return new MyAttr(c);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   153
                }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   154
            });
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   155
        }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   156
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   157
        MyAttr(Context c) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   158
            super(c);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   159
        }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   160
    }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   161
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   162
    static class Counter {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   163
        int count;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   164
    }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   165
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   166
    //---------------
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   167
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   168
    int round = 0;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   169
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   170
    @Override
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   171
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   172
        round++;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   173
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   174
        Context context = ((JavacProcessingEnvironment) processingEnv).getContext();
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   175
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   176
        // verify items in context as expected
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   177
        check("Demo", Demo.instance(context), Demo.class);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   178
        check("Attr", Attr.instance(context), MyAttr.class);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   179
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   180
        // For a few rounds, generate new source files, so that we can check whether
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   181
        // values in the context are correctly handled in subsequent processing rounds
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   182
        if (round <= MAX_ROUNDS) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   183
            String pkg = "p";
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   184
            String currClass = "Gen" + round;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   185
            String curr = pkg + "." + currClass;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   186
            String next = (pkg + ".Gen" + (round + 1));
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   187
            StringBuilder text = new StringBuilder();
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   188
            text.append("package ").append(pkg).append(";\n");
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   189
            text.append("public class ").append(currClass).append(" {\n");
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   190
            if (round < MAX_ROUNDS)
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   191
                text.append("    ").append(next).append(" x;\n");
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   192
            text.append("}\n");
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   193
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   194
            try {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   195
                JavaFileObject fo = filer.createSourceFile(curr);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   196
                Writer out = fo.openWriter();
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   197
                try {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   198
                    out.write(text.toString());
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   199
                } finally {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   200
                    out.close();
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   201
                }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   202
            } catch (IOException e) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   203
                throw new Error(e);
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   204
            }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   205
        }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   206
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   207
        return true;
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   208
    }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   209
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   210
    void check(String label, Object o, Class<?> clazz) {
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   211
        if (o == null)
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   212
            throw new IllegalStateException(label + ": no item found");
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   213
        if (!clazz.isAssignableFrom(o.getClass()))
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   214
            throw new IllegalStateException(label + ": unexpected class: " + o.getClass());
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   215
    }
06e42328ddab 7021650: fix Context issues
jjg
parents:
diff changeset
   216
}