All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.msgpack.template.ScalaTemplateRegistry.scala Maven / Gradle / Ivy

The newest version!
//
// MessagePack for Scala
//
// Copyright (C) 2009-2011 FURUHASHI Sadayuki
//
//    Licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
//
//        http://www.apache.org/licenses/LICENSE-2.0
//
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.
//
package org.msgpack.template

import builder._
import collection.mutable._
import java.math.BigInteger
import java.nio.ByteBuffer
import org.msgpack.`type`.Value
import org.msgpack.template.TemplateRegistry._
import java.lang.reflect.Type
import org.msgpack.scalautil.ScalaSigUtil
import org.msgpack.MessageTypeException

/**
 * 
 * User: takeshita
 * Create: 11/10/12 21:21
 */

class ScalaTemplateRegistry extends TemplateRegistry(null){



  {
    //def anyTemplate[T] = AnyTemplate.getInstance(this).asInstanceOf[Template[T]]

    val at = new AnyTemplate[Any](this)
    def anyTemplate[T] = at.asInstanceOf[Template[T]]
    register(new ImmutableListTemplate[Any](anyTemplate))
    register(new ImmutableSetTemplate[Any](anyTemplate))
    register(new ImmutableMapTemplate(anyTemplate,anyTemplate))
    register(new DoubleLinkedListTemplate(anyTemplate))
    register(new LinkedListTemplate(anyTemplate))
    register(new ListBufferTemplate(anyTemplate))
    register(new MutableListCTemplate(anyTemplate))
    register(new MutableSetCTemplate(anyTemplate))
    register(new HashSetTemplate(anyTemplate))
    register(new LinkedHashSetTemplate(anyTemplate))
    register(new MutableHashMapTemplate(anyTemplate,anyTemplate))
    register(new MutableListMapTemplate(anyTemplate,anyTemplate))
    register(new MutableLinkedHashMapTemplate(anyTemplate,anyTemplate))
    register(classOf[scala.collection.mutable.Map[_,_]],
    new MutableHashMapTemplate(anyTemplate,anyTemplate))
    register(classOf[scala.collection.mutable.Seq[_]],
      new LinkedListTemplate(anyTemplate))
    register(classOf[scala.collection.mutable.Set[_]],
      new LinkedHashSetTemplate(anyTemplate))
    register(classOf[scala.collection.mutable.Set[_]],
      new HashSetTemplate(anyTemplate))
    register(classOf[Seq[_]],new ImmutableListTemplate(anyTemplate))
    register(classOf[Set[_]],new ImmutableSetTemplate(anyTemplate))
    register(classOf[scala.collection.immutable.List[_]],new ImmutableListTemplate[Any](anyTemplate))
    register(classOf[java.util.Calendar],new CalendarTemplate)
    register(None.getClass,new OptionTemplate[Any](anyTemplate))
    register(classOf[Some[_]],new OptionTemplate[Any](anyTemplate))
    register(classOf[Option[_]],new OptionTemplate[Any](anyTemplate))
    register(classOf[Either[Any,Any]],new EitherTemplate[Any,Any](anyTemplate,anyTemplate))
    register(classOf[Left[Any,Any]],new EitherTemplate[Any,Any](anyTemplate,anyTemplate))
    register(classOf[Right[Any,Any]],new EitherTemplate[Any,Any](anyTemplate,anyTemplate))
    //tuples
    register(classOf[Tuple1[_]], new Tuple1Template[Any](anyTemplate))
    register(classOf[Tuple2[_,_]], new Tuple2Template[Any,Any](anyTemplate,anyTemplate))
    register(classOf[Tuple3[_,_,_]], new Tuple3Template[Any,Any,Any](anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple4[_,_,_,_]], new Tuple4Template[Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple5[_,_,_,_,_]], new Tuple5Template[Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple6[_,_,_,_,_,_]], new Tuple6Template[Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple7[_,_,_,_,_,_,_]], new Tuple7Template[Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple8[_,_,_,_,_,_,_,_]], new Tuple8Template[Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple9[_,_,_,_,_,_,_,_,_]], new Tuple9Template[Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple10[_,_,_,_,_,_,_,_,_,_]], new Tuple10Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple11[_,_,_,_,_,_,_,_,_,_,_]], new Tuple11Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple12[_,_,_,_,_,_,_,_,_,_,_,_]], new Tuple12Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple13[_,_,_,_,_,_,_,_,_,_,_,_,_]], new Tuple13Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple14[_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new Tuple14Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple15[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new Tuple15Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple16[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new Tuple16Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple17[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new Tuple17Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple18[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new Tuple18Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple19[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new Tuple19Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple20[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new Tuple20Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple21[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new Tuple21Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    register(classOf[Tuple22[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new Tuple22Template[Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any](anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate,anyTemplate))
    // generics
    registerGeneric(classOf[scala.collection.immutable.List[_]],new GenericImmutableListTemplate())
    registerGeneric(classOf[scala.collection.immutable.Map[_,_]],new GenericImmutableMapTemplate())
    registerGeneric(classOf[scala.collection.immutable.Seq[_]],new GenericImmutableListTemplate())
    registerGeneric(classOf[scala.collection.immutable.Set[_]],new GenericImmutableSetTemplate())
    registerGeneric(classOf[scala.collection.Seq[_]],new GenericImmutableListTemplate())
    registerGeneric(classOf[Seq[_]],new GenericImmutableListTemplate())

    registerGeneric(classOf[DoubleLinkedList[_]],
      new GenericMutableListTemplate[DoubleLinkedListTemplate[_]]())
    registerGeneric(classOf[ListBuffer[_]],
      new GenericMutableListTemplate[ListBufferTemplate[_]]())
    registerGeneric(classOf[MutableList[_]],
      new GenericMutableListTemplate[MutableListCTemplate[_]]())
    registerGeneric(classOf[LinkedList[_]],
      new GenericMutableListTemplate[LinkedListTemplate[_]]())
    registerGeneric(classOf[scala.collection.mutable.Seq[_]],
      new GenericMutableListTemplate[LinkedListTemplate[_]]())
    registerGeneric(classOf[scala.collection.mutable.Set[_]],
      new GenericMutableSetTemplate[MutableSetCTemplate[_]]())
    registerGeneric(classOf[HashSet[_]],
      new GenericMutableSetTemplate[HashSetTemplate[_]]())
    registerGeneric(classOf[LinkedHashSet[_]],
      new GenericMutableSetTemplate[LinkedHashSetTemplate[_]]())

    registerGeneric(classOf[LinkedHashMap[_,_]],
      new GenericMutableMapTemplate[MutableLinkedHashMapTemplate[_,_]])
    registerGeneric(classOf[HashMap[_,_]],
      new GenericMutableMapTemplate[MutableHashMapTemplate[_,_]])
    registerGeneric(classOf[ListMap[_,_]],
      new GenericMutableMapTemplate[MutableListMapTemplate[_,_]])
    registerGeneric(classOf[scala.collection.mutable.Map[_,_]],
      new GenericMutableMapTemplate[MutableHashMapTemplate[_,_]])
    registerGeneric(classOf[Option[_]],new GenericOptionTemplate)
    registerGeneric(classOf[Some[_]],new GenericOptionTemplate)
    registerGeneric(classOf[Either[_,_]],new GenericEitherTemplate)
    registerGeneric(classOf[Left[_,_]],new GenericEitherTemplate)
    registerGeneric(classOf[Right[_,_]],new GenericEitherTemplate)


    //tuples
    registerGeneric(classOf[Tuple1[_]], new GenericTuple1Template())
    registerGeneric(classOf[Tuple2[_,_]], new GenericTuple2Template())
    registerGeneric(classOf[Tuple3[_,_,_]], new GenericTuple3Template())
    registerGeneric(classOf[Tuple4[_,_,_,_]], new GenericTuple4Template())
    registerGeneric(classOf[Tuple5[_,_,_,_,_]], new GenericTuple5Template())
    registerGeneric(classOf[Tuple6[_,_,_,_,_,_]], new GenericTuple6Template())
    registerGeneric(classOf[Tuple7[_,_,_,_,_,_,_]], new GenericTuple7Template())
    registerGeneric(classOf[Tuple8[_,_,_,_,_,_,_,_]], new GenericTuple8Template())
    registerGeneric(classOf[Tuple9[_,_,_,_,_,_,_,_,_]], new GenericTuple9Template())
    registerGeneric(classOf[Tuple10[_,_,_,_,_,_,_,_,_,_]], new GenericTuple10Template())
    registerGeneric(classOf[Tuple11[_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple11Template())
    registerGeneric(classOf[Tuple12[_,_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple12Template())
    registerGeneric(classOf[Tuple13[_,_,_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple13Template())
    registerGeneric(classOf[Tuple14[_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple14Template())
    registerGeneric(classOf[Tuple15[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple15Template())
    registerGeneric(classOf[Tuple16[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple16Template())
    registerGeneric(classOf[Tuple17[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple17Template())
    registerGeneric(classOf[Tuple18[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple18Template())
    registerGeneric(classOf[Tuple19[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple19Template())
    registerGeneric(classOf[Tuple20[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple20Template())
    registerGeneric(classOf[Tuple21[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple21Template())
    registerGeneric(classOf[Tuple22[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_]], new GenericTuple22Template())

    //register(classOf[AnyRef],new DynamicTemplate(this))
  }

  def register[T]( template : Template[T])(implicit manifest : Manifest[T]) : Unit = {
    this.register(manifest.erasure,template)
  }


  override def createTemplateBuilderChain() = {
    new ScalaTemplateBuilderChain(this)
  }

}

class ScalaTemplateBuilderChain(registry : TemplateRegistry,forceReflectionMode : Boolean) extends TemplateBuilderChain(registry){

  def this(_registry : TemplateRegistry) = this(_registry,false)

  private def enableDynamicCodeGeneration: Boolean = {
    try {
      return !forceReflectionMode && !System.getProperty("java.vm.name").equals("Dalvik")
    }
    catch {
      case e: Exception => {
        return true
      }
    }
  }

  override def reset(registry: TemplateRegistry, cl: ClassLoader) = {
    if (registry == null) {
      throw new NullPointerException("registry is null")
    }


    templateBuilders.add(new ArrayTemplateBuilder(registry))
    templateBuilders.add(new OrdinalEnumTemplateBuilder(registry))
    templateBuilders.add(new ScalaEnumTemplateBuilder(registry))
    if (enableDynamicCodeGeneration) {

      forceBuilder = if (cl != null) {
        new JavassistScalaTemplateBuilder(registry,cl)
      }else{
        new JavassistScalaTemplateBuilder(registry)

      }

      val b = forceBuilder
      templateBuilders.add(b)
      val builder = if(cl != null ) {
        new JavassistTemplateBuilder(registry,cl)
      }else{
        new JavassistTemplateBuilder(registry)
      }
      forceBuilder = builder
      templateBuilders.add(builder)
      templateBuilders.add(new JavassistBeansTemplateBuilder(registry))
    }
    else {
      forceBuilder = new ReflectionScalaTemplateBuilder(registry)

      templateBuilders.add(forceBuilder)
      val builder = new ReflectionTemplateBuilder(registry)
      templateBuilders.add(builder)
      templateBuilders.add(new OrdinalEnumTemplateBuilder(registry))
      templateBuilders.add(new ReflectionBeansTemplateBuilder(registry))
    }

  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy