// Path: kawala-common/src/main/java/com/kaching/platform/common/types/ParameterizedTypeImpl.java
// public class ParameterizedTypeImpl implements ParameterizedType {
// 
//   private final Type rawType;
//   private final Type[] actualTypeParameters;
// 
//   public ParameterizedTypeImpl(Type type, Type[] parameters) {
//     this.rawType = type;
//     this.actualTypeParameters = parameters;
//   }
// 
//   public Type[] getActualTypeArguments() {
//     return actualTypeParameters;
//   }
// 
//   public Type getOwnerType() {
//     return null;
//   }
// 
//   public Type getRawType() {
//     return rawType;
//   }
// 
// }


import java.lang.reflect.Type;
import com.google.inject.TypeLiteral;
import com.kaching.platform.common.types.ParameterizedTypeImpl;
/**
 * Copyright 2010 Wealthfront Inc. 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 com.kaching.platform.guice;




/**
 * Factory methods to construct {@link TypeLiteral}s.
 */
public final class TypeLiterals {
  private TypeLiterals() {}
  
  /**
   * Creates a new {@link TypeLiteral} for {@code type} parameterized by
   * {@code parameters}.
   *
   * <p>For example, the type {@code Map<Integer, String>} is constructed with
   * {@code TypeLiterals.get(Map.class, Integer.class, String.class)}.
   */
  @SuppressWarnings("unchecked")
  public static <T> TypeLiteral<T> get(Class<T> type, Type... parameters) {
// Path: kawala-common/src/main/java/com/kaching/platform/common/types/ParameterizedTypeImpl.java
// public class ParameterizedTypeImpl implements ParameterizedType {
// 
//   private final Type rawType;
//   private final Type[] actualTypeParameters;
// 
//   public ParameterizedTypeImpl(Type type, Type[] parameters) {
//     this.rawType = type;
//     this.actualTypeParameters = parameters;
//   }
// 
//   public Type[] getActualTypeArguments() {
//     return actualTypeParameters;
//   }
// 
//   public Type getOwnerType() {
//     return null;
//   }
// 
//   public Type getRawType() {
//     return rawType;
//   }
// 
// }


// Path: kawala-guice/src/main/java/com/kaching/platform/guice/TypeLiterals.java
import java.lang.reflect.Type;
import com.google.inject.TypeLiteral;
import com.kaching.platform.common.types.ParameterizedTypeImpl;

/**
 * Copyright 2010 Wealthfront Inc. 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 com.kaching.platform.guice;




/**
 * Factory methods to construct {@link TypeLiteral}s.
 */
public final class TypeLiterals {
  private TypeLiterals() {}
  
  /**
   * Creates a new {@link TypeLiteral} for {@code type} parameterized by
   * {@code parameters}.
   *
   * <p>For example, the type {@code Map<Integer, String>} is constructed with
   * {@code TypeLiterals.get(Map.class, Integer.class, String.class)}.
   */
  @SuppressWarnings("unchecked")
  public static <T> TypeLiteral<T> get(Class<T> type, Type... parameters) {
    return (TypeLiteral<T>) TypeLiteral.get(new ParameterizedTypeImpl(type, parameters));