test/tools/javac/6402516/CheckLocalElements.java

Tue, 28 Dec 2010 15:54:52 -0800

author
ohair
date
Tue, 28 Dec 2010 15:54:52 -0800
changeset 798
4868a36f6fd8
parent 575
9a7c998bf2fc
child 1054
111bbf1ad913
permissions
-rw-r--r--

6962318: Update copyright year
Reviewed-by: xdono

duke@1 1 /*
ohair@798 2 * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
duke@1 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@1 4 *
duke@1 5 * This code is free software; you can redistribute it and/or modify it
duke@1 6 * under the terms of the GNU General Public License version 2 only, as
duke@1 7 * published by the Free Software Foundation.
duke@1 8 *
duke@1 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@1 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@1 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@1 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@1 13 * accompanied this code).
duke@1 14 *
duke@1 15 * You should have received a copy of the GNU General Public License version
duke@1 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@1 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@1 18 *
ohair@554 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ohair@554 20 * or visit www.oracle.com if you need additional information or have any
ohair@554 21 * questions.
duke@1 22 */
duke@1 23
duke@1 24 /*
duke@1 25 * @test
duke@1 26 * @bug 6402516
duke@1 27 * @summary need Trees.getScope(TreePath)
duke@1 28 * @build Checker CheckLocalElements
duke@1 29 * @run main CheckLocalElements
duke@1 30 */
duke@1 31
duke@1 32 import java.util.*;
duke@1 33 import com.sun.source.tree.*;
duke@1 34 import javax.lang.model.element.*;
duke@1 35 import javax.lang.model.util.*;
duke@1 36
duke@1 37 /*
duke@1 38 * Check the local elements of a scope against the contents of string literals.
duke@1 39 */
duke@1 40 public class CheckLocalElements extends Checker {
duke@1 41 public static void main(String... args) throws Exception {
duke@1 42 Checker chk = new CheckLocalElements();
duke@1 43 chk.check("TestLocalElements.java");
duke@1 44 }
duke@1 45
duke@1 46 @Override
duke@1 47 protected boolean checkLocal(Scope s, String ref) {
duke@1 48 Iterator<? extends Element> elemIter = s.getLocalElements().iterator();
duke@1 49 ref = ref.trim();
duke@1 50 String[] refs = ref.length() == 0 ? new String[0] : ref.split("[ ]*,[ ]*", -1);
duke@1 51 Iterator<String> refIter = Arrays.asList(refs).iterator();
duke@1 52 String r = null;
duke@1 53
duke@1 54 nextElem:
duke@1 55 while (elemIter.hasNext()) {
duke@1 56 Element e = elemIter.next();
duke@1 57 try {
duke@1 58 if (r == null)
duke@1 59 r = refIter.next();
duke@1 60
duke@1 61 while (r.endsWith(".*")) {
duke@1 62 String encl = getEnclosingName(e);
duke@1 63 String rBase = r.substring(0, r.length() - 2);
duke@1 64 if (encl.equals(rBase) || encl.startsWith(rBase + "."))
duke@1 65 continue nextElem;
duke@1 66 r = refIter.next();
duke@1 67 }
duke@1 68
duke@1 69 if (r.equals("-") && (e.getSimpleName().length() == 0)
duke@1 70 || e.getSimpleName().toString().equals(r)) {
duke@1 71 r = null;
duke@1 72 continue nextElem;
duke@1 73 }
duke@1 74
duke@1 75 error(s, ref, "mismatch: " + e.getSimpleName() + " " + r);
duke@1 76 return false;
duke@1 77
duke@1 78 } catch (NoSuchElementException ex) { // from refIter.next()
duke@1 79 error(s, null, "scope has unexpected entry: " + e.getSimpleName());
duke@1 80 return false;
duke@1 81 }
duke@1 82
duke@1 83 }
duke@1 84
duke@1 85 if (refIter.hasNext()) {
duke@1 86 error(s, ref, "scope is missing entry: " + refIter.next());
duke@1 87 return false;
duke@1 88 }
duke@1 89
duke@1 90 return true;
duke@1 91 }
duke@1 92
duke@1 93 private String getEnclosingName(Element e) {
duke@1 94 Element encl = e.getEnclosingElement();
duke@1 95 return encl == null ? "" : encl.accept(qualNameVisitor, null);
duke@1 96 }
duke@1 97
darcy@575 98 private ElementVisitor<String,Void> qualNameVisitor = new SimpleElementVisitor7<String,Void>() {
duke@1 99 protected String defaultAction(Element e, Void ignore) {
duke@1 100 return "";
duke@1 101 }
duke@1 102
duke@1 103 public String visitPackage(PackageElement e, Void ignore) {
duke@1 104 return e.getQualifiedName().toString();
duke@1 105 }
duke@1 106
duke@1 107 public String visitType(TypeElement e, Void ignore) {
duke@1 108 return e.getQualifiedName().toString();
duke@1 109 }
duke@1 110 };
duke@1 111 }

mercurial