src/jdk/internal/dynalink/beans/StaticClass.java

Print this page
rev 1199 : 8072595: nashorn should not use obj.getClass() for null checks
Reviewed-by: hannesw, attila


  67        * Neither the name of the copyright holder nor the names of
  68          contributors may be used to endorse or promote products derived from
  69          this software without specific prior written permission.
  70 
  71        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  72        IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
  73        TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  74        PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER
  75        BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  76        CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  77        SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  78        BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  79        WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  80        OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  81        ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  82 */
  83 
  84 package jdk.internal.dynalink.beans;
  85 
  86 import java.io.Serializable;

  87 
  88 /**
  89  * Object that represents the static facet of a class (its static methods, properties, and fields, as well as
  90  * construction of instances using "dyn:new"). Objects of this class are recognized by the {@link BeansLinker} as being
  91  * special, and operations on them will be linked against the represented class' static facet. The "class" synthetic
  92  * property is additionally recognized and returns the Java {@link Class} object, as per {@link #getRepresentedClass()}
  93  * method. Conversely, {@link Class} objects exposed through {@link BeansLinker} expose the "static" synthetic property
  94  * which returns an instance of this class.
  95  */
  96 public class StaticClass implements Serializable {
  97     private static final ClassValue<StaticClass> staticClasses = new ClassValue<StaticClass>() {
  98         @Override
  99         protected StaticClass computeValue(final Class<?> type) {
 100             return new StaticClass(type);
 101         }
 102     };
 103 
 104     private static final long serialVersionUID = 1L;
 105 
 106     private final Class<?> clazz;
 107 
 108     /*private*/ StaticClass(final Class<?> clazz) {
 109         clazz.getClass(); // NPE check
 110         this.clazz = clazz;
 111     }
 112 
 113     /**
 114      * Retrieves the {@link StaticClass} instance for the specified class.
 115      * @param clazz the class for which the static facet is requested.
 116      * @return the {@link StaticClass} instance representing the specified class.
 117      */
 118     public static StaticClass forClass(final Class<?> clazz) {
 119         return staticClasses.get(clazz);
 120     }
 121 
 122     /**
 123      * Returns the represented Java class.
 124      * @return the represented Java class.
 125      */
 126     public Class<?> getRepresentedClass() {
 127         return clazz;
 128     }
 129 
 130     @Override


  67        * Neither the name of the copyright holder nor the names of
  68          contributors may be used to endorse or promote products derived from
  69          this software without specific prior written permission.
  70 
  71        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  72        IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
  73        TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  74        PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER
  75        BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  76        CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  77        SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  78        BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  79        WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  80        OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  81        ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  82 */
  83 
  84 package jdk.internal.dynalink.beans;
  85 
  86 import java.io.Serializable;
  87 import java.util.Objects;
  88 
  89 /**
  90  * Object that represents the static facet of a class (its static methods, properties, and fields, as well as
  91  * construction of instances using "dyn:new"). Objects of this class are recognized by the {@link BeansLinker} as being
  92  * special, and operations on them will be linked against the represented class' static facet. The "class" synthetic
  93  * property is additionally recognized and returns the Java {@link Class} object, as per {@link #getRepresentedClass()}
  94  * method. Conversely, {@link Class} objects exposed through {@link BeansLinker} expose the "static" synthetic property
  95  * which returns an instance of this class.
  96  */
  97 public class StaticClass implements Serializable {
  98     private static final ClassValue<StaticClass> staticClasses = new ClassValue<StaticClass>() {
  99         @Override
 100         protected StaticClass computeValue(final Class<?> type) {
 101             return new StaticClass(type);
 102         }
 103     };
 104 
 105     private static final long serialVersionUID = 1L;
 106 
 107     private final Class<?> clazz;
 108 
 109     /*private*/ StaticClass(final Class<?> clazz) {
 110         this.clazz = Objects.requireNonNull(clazz);

 111     }
 112 
 113     /**
 114      * Retrieves the {@link StaticClass} instance for the specified class.
 115      * @param clazz the class for which the static facet is requested.
 116      * @return the {@link StaticClass} instance representing the specified class.
 117      */
 118     public static StaticClass forClass(final Class<?> clazz) {
 119         return staticClasses.get(clazz);
 120     }
 121 
 122     /**
 123      * Returns the represented Java class.
 124      * @return the represented Java class.
 125      */
 126     public Class<?> getRepresentedClass() {
 127         return clazz;
 128     }
 129 
 130     @Override