alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Scala example source code file (elidable.scala)

This example Scala source code file (elidable.scala) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Scala tags/keywords

all, all, assertion, config, fine, finer, finest, info, info, log, logging, maximum, minimum, off, off, warning

The Scala elidable.scala source code

/*                     __                                               *\
**     ________ ___   / /  ___     Scala API                            **
**    / __/ __// _ | / /  / _ |    (c) 2002-2011, LAMP/EPFL             **
**  __\ \/ /__/ __ |/ /__/ __ |    http://scala-lang.org/               **
** /____/\___/_/ |_/____/_/ | |                                         **
**                          |/                                          **
\*                                                                      */

package scala.annotation

import java.util.logging.Level
 
/** An annotation for methods for which invocations might
 *  be removed in the generated code.
 * 
 *  Behavior is influenced by passing -Xelide-below <arg>
 *  to scalac.  Methods marked elidable will be omitted from
 *  generated code if the priority given the annotation is lower
 *  than to the command line argument.  Examples:
 *  {{{
 *  import annotation.elidable._
 * 
 *    @elidable(WARNING) def foo = log("foo")
 *    @elidable(FINE) def bar = log("bar")
 *
 *  scalac -Xelide-below=1000
 *  }}}
 *  @since 2.8
 */
final class elidable(final val level: Int) extends annotation.StaticAnnotation {}

/** This useless appearing code was necessary to allow people to use
 *  named constants for the elidable annotation.  This is what it takes
 *  to convince the compiler to fold the constants: otherwise when it's
 *  time to check an elision level it's staring at a tree like
 *    (Select(Level, Select(FINEST, Apply(intValue, Nil))))
 *  instead of the number 300.
 *
 *  @since 2.8
 */
object elidable {
  /** The levels ALLĀ and OFF are confusing in this context because the
   *  sentiment being expressed when using the annotation is at cross purposes
   *  with the one being expressed via -Xelide-below.  This confusion reaches
   *  its zenith at level OFF, where the annotation means "never elide this method"
   *  but -Xelide-below OFF is how you would say "elide everything possible."
   *
   *  With no simple remedy at hand, the issue is now at least documented,
   *  and aliases MAXIMUM and MINIMUM are offered.
   */  
  final val ALL     = Int.MinValue  // Level.ALL.intValue()
  final val FINEST  = 300           // Level.FINEST.intValue()
  final val FINER   = 400           // Level.FINER.intValue()
  final val FINE    = 500           // Level.FINE.intValue()
  final val CONFIG  = 700           // Level.CONFIG.intValue()
  final val INFO    = 800           // Level.INFO.intValue()
  final val WARNING = 900           // Level.WARNING.intValue()
  final val SEVERE  = 1000          // Level.SEVERE.intValue()
  final val OFF     = Int.MaxValue  // Level.OFF.intValue()

  // a couple aliases for the confusing ALL and OFF
  final val MAXIMUM = OFF
  final val MINIMUM = ALL
  
  // and we can add a few of our own
  final val ASSERTION = 2000    // we should make this more granular
  
  // for command line parsing so we can use names or ints
  val byName: Map[String, Int] = Map(
    "FINEST" -> FINEST,
    "FINER" -> FINER,
    "FINE" -> FINE,
    "CONFIG" -> CONFIG,
    "INFO" -> INFO,
    "WARNING" -> WARNING,
    "SEVERE" -> SEVERE,
    "ASSERTION" -> ASSERTION,
    "ALL" -> ALL,
    "OFF" -> OFF,
    "MAXIMUM" -> MAXIMUM,
    "MINIMUM" -> MINIMUM
  )
}

Other Scala examples (source code examples)

Here is a short list of links related to this Scala elidable.scala source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.