NPEGetDirectivesTest.java revision 3640:53ebb47dc802
152419Sjulian/*
252419Sjulian * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
352419Sjulian * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
452419Sjulian *
552419Sjulian * This code is free software; you can redistribute it and/or modify it
652419Sjulian * under the terms of the GNU General Public License version 2 only, as
752419Sjulian * published by the Free Software Foundation.
852419Sjulian *
952419Sjulian * This code is distributed in the hope that it will be useful, but WITHOUT
1052419Sjulian * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1152419Sjulian * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1252419Sjulian * version 2 for more details (a copy is included in the LICENSE file that
1352419Sjulian * accompanied this code).
1452419Sjulian *
1552419Sjulian * You should have received a copy of the GNU General Public License version
1652419Sjulian * 2 along with this work; if not, write to the Free Software Foundation,
1752419Sjulian * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1852419Sjulian *
1952419Sjulian * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2052419Sjulian * or visit www.oracle.com if you need additional information or have any
2152419Sjulian * questions.
2252419Sjulian */
2352419Sjulian
2452419Sjulian/*
2552419Sjulian * @test
2652419Sjulian * @bug 8160454
2752419Sjulian * @summary JSR269 jigsaw update: javax.lang.model.element.ModuleElement.getDirectives() causes NPE on unnamed modules
2852419Sjulian * @modules
2952419Sjulian *      jdk.compiler/com.sun.tools.javac.code
3052419Sjulian *      jdk.compiler/com.sun.tools.javac.util
3152419Sjulian * @compile NPEGetDirectivesTest.java
3252419Sjulian * @compile -processor NPEGetDirectivesTest NPEGetDirectivesTest.java
3352419Sjulian */
3452419Sjulian
3552419Sjulianimport javax.annotation.processing.AbstractProcessor;
3652419Sjulianimport javax.annotation.processing.RoundEnvironment;
3752419Sjulianimport javax.annotation.processing.SupportedAnnotationTypes;
3852419Sjulianimport javax.lang.model.SourceVersion;
3952419Sjulianimport javax.lang.model.element.*;
4052752Sjulian
4152419Sjulianimport java.util.Set;
4252419Sjulian
4352419Sjulianimport com.sun.tools.javac.code.Directive.RequiresDirective;
4452639Sarchieimport com.sun.tools.javac.code.Symbol.ModuleSymbol;
4552419Sjulianimport com.sun.tools.javac.util.Assert;
4652419Sjulian
4752419Sjulianimport static com.sun.tools.javac.code.Directive.RequiresFlag.MANDATED;
4852419Sjulian
4952419Sjulian@SupportedAnnotationTypes("*")
5052419Sjulianpublic class NPEGetDirectivesTest extends AbstractProcessor {
5152419Sjulian    @Override
5252419Sjulian    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
5352419Sjulian        for (Element e: roundEnv.getRootElements()) {
5452419Sjulian            Element m = e.getEnclosingElement();
5552419Sjulian            while (!(m instanceof ModuleElement)) {
5652843Sphk                m = m.getEnclosingElement();
5752419Sjulian            }
5852419Sjulian            ((ModuleSymbol)m).getDirectives();
5952419Sjulian            RequiresDirective requiresDirective = ((ModuleSymbol)m).requires.head;
6052419Sjulian            Assert.check(requiresDirective.getDependency().getQualifiedName().toString().equals("java.base"));
6152639Sarchie            Assert.check(requiresDirective.flags.contains(MANDATED));
6252419Sjulian        }
6352419Sjulian        return false;
6452816Sarchie    }
6552419Sjulian
6652639Sarchie    @Override
6752639Sarchie    public SourceVersion getSupportedSourceVersion() {
6852639Sarchie        return SourceVersion.latest();
6952639Sarchie    }
7052639Sarchie}
7152816Sarchie