test/tools/javac/processing/model/element/TestNames.java

Print this page


   1 /*
   2  * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @bug 6380016
  27  * @summary Test that the constraints guaranteed by the Filer and maintained
  28  * @author  Joseph D. Darcy
  29  * @build TestNames

  30  * @compile -processor TestNames -proc:only TestNames.java
  31  */
  32 
  33 import java.util.Set;
  34 import javax.annotation.processing.*;
  35 import javax.lang.model.SourceVersion;
  36 import static javax.lang.model.SourceVersion.*;
  37 import javax.lang.model.element.*;
  38 import javax.lang.model.util.*;
  39 import static javax.lang.model.util.ElementFilter.*;
  40 import static javax.tools.Diagnostic.Kind.*;
  41 import static javax.tools.StandardLocation.*;
  42 
  43 import java.io.*;
  44 
  45 /**
  46  * Basic tests of semantics of javax.lang.model.element.Name
  47  */
  48 @SupportedAnnotationTypes("*")
  49 public class TestNames extends AbstractProcessor {
  50     private int round = 0;
  51     private Filer filer;
  52     private Elements eltUtils;
  53 
  54     String stringStringName = "java.lang.String";
  55     Name stringName = null;
  56 
  57     public boolean process(Set<? extends TypeElement> annotations,
  58                            RoundEnvironment roundEnv) {
  59         round++;
  60         if (!roundEnv.processingOver()) {
  61             boolean failed = false;
  62 
  63             switch(round) {
  64             case 1:
  65 
  66             TypeElement stringMirror = eltUtils.getTypeElement(stringStringName);
  67             stringName = stringMirror.getQualifiedName();
  68             Name stringPseudoName = Pseudonym.getName(stringName.toString());
  69 
  70 
  71             if (stringName.equals(stringPseudoName))
  72                 failed = true;


  89             case 2:
  90                 Name stringStringAsName = eltUtils.getName(stringStringName);
  91                 TypeElement stringMirror2 = eltUtils.getTypeElement(stringStringName);
  92                 Name stringName2 = stringMirror2.getQualifiedName();
  93 
  94                 if (stringStringAsName != stringName ||
  95                     stringName != stringName2)
  96                     failed = true;
  97                 break;
  98 
  99             default:
 100                 throw new RuntimeException("Unexpected round " + round);
 101             }
 102 
 103             if (failed)
 104                 throw new RuntimeException("Invalid name equality checks.");
 105         }
 106         return true;
 107     }
 108 
 109     public SourceVersion getSupportedSourceVersion() {
 110         return SourceVersion.latest();
 111     }
 112 
 113     public void init(ProcessingEnvironment processingEnv) {
 114         super.init(processingEnv);
 115         filer    = processingEnv.getFiler();
 116         eltUtils = processingEnv.getElementUtils();
 117     }
 118 
 119     private static class Pseudonym implements Name {
 120         private String name;
 121 
 122         private Pseudonym(String name) {
 123             this.name = name;
 124         }
 125 
 126         public static Pseudonym getName(String name) {
 127             return new Pseudonym(name);
 128         }
 129 
 130         public boolean contentEquals(CharSequence cs) {
 131             return name.contentEquals(cs);
 132         }
 133 
 134         public char charAt(int index) {
 135             return name.charAt(index);
 136         }
 137 
 138         public int length() {
   1 /*
   2  * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @bug 6380016
  27  * @summary Test that the constraints guaranteed by the Filer and maintained
  28  * @author  Joseph D. Darcy
  29  * @library ../../../lib
  30  * @build   JavacTestingAbstractProcessor TestNames
  31  * @compile -processor TestNames -proc:only TestNames.java
  32  */
  33 
  34 import java.util.Set;
  35 import javax.annotation.processing.*;
  36 import javax.lang.model.SourceVersion;
  37 import static javax.lang.model.SourceVersion.*;
  38 import javax.lang.model.element.*;
  39 import javax.lang.model.util.*;
  40 import static javax.lang.model.util.ElementFilter.*;
  41 import static javax.tools.Diagnostic.Kind.*;
  42 import static javax.tools.StandardLocation.*;
  43 
  44 import java.io.*;
  45 
  46 /**
  47  * Basic tests of semantics of javax.lang.model.element.Name
  48  */
  49 public class TestNames extends JavacTestingAbstractProcessor {

  50     private int round = 0;


  51 
  52     String stringStringName = "java.lang.String";
  53     Name stringName = null;
  54 
  55     public boolean process(Set<? extends TypeElement> annotations,
  56                            RoundEnvironment roundEnv) {
  57         round++;
  58         if (!roundEnv.processingOver()) {
  59             boolean failed = false;
  60 
  61             switch(round) {
  62             case 1:
  63 
  64             TypeElement stringMirror = eltUtils.getTypeElement(stringStringName);
  65             stringName = stringMirror.getQualifiedName();
  66             Name stringPseudoName = Pseudonym.getName(stringName.toString());
  67 
  68 
  69             if (stringName.equals(stringPseudoName))
  70                 failed = true;


  87             case 2:
  88                 Name stringStringAsName = eltUtils.getName(stringStringName);
  89                 TypeElement stringMirror2 = eltUtils.getTypeElement(stringStringName);
  90                 Name stringName2 = stringMirror2.getQualifiedName();
  91 
  92                 if (stringStringAsName != stringName ||
  93                     stringName != stringName2)
  94                     failed = true;
  95                 break;
  96 
  97             default:
  98                 throw new RuntimeException("Unexpected round " + round);
  99             }
 100 
 101             if (failed)
 102                 throw new RuntimeException("Invalid name equality checks.");
 103         }
 104         return true;
 105     }
 106 










 107     private static class Pseudonym implements Name {
 108         private String name;
 109 
 110         private Pseudonym(String name) {
 111             this.name = name;
 112         }
 113 
 114         public static Pseudonym getName(String name) {
 115             return new Pseudonym(name);
 116         }
 117 
 118         public boolean contentEquals(CharSequence cs) {
 119             return name.contentEquals(cs);
 120         }
 121 
 122         public char charAt(int index) {
 123             return name.charAt(index);
 124         }
 125 
 126         public int length() {