1090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson/*
27dd252788645e940eada959bdde927426e2531c9Paul Duffin * Copyright (C) 2012 The Guava Authors
3090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson *
4090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License");
5090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson * you may not use this file except in compliance with the License.
6090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson * You may obtain a copy of the License at
7090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson *
8090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0
9090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson *
10090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson * Unless required by applicable law or agreed to in writing, software
11090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
12090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson * See the License for the specific language governing permissions and
14090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson * limitations under the License.
15090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson */
16090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
177dd252788645e940eada959bdde927426e2531c9Paul Duffinpackage com.google.common.reflect;
18090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.Preconditions.checkArgument;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
217dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.lang.reflect.ParameterizedType;
227dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.lang.reflect.Type;
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
24090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson/**
257dd252788645e940eada959bdde927426e2531c9Paul Duffin * Captures the actual type of {@code T}.
26090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson *
277dd252788645e940eada959bdde927426e2531c9Paul Duffin * @author Ben Yu
28090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson */
297dd252788645e940eada959bdde927426e2531c9Paul Duffinabstract class TypeCapture<T> {
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
317dd252788645e940eada959bdde927426e2531c9Paul Duffin  /** Returns the captured type. */
327dd252788645e940eada959bdde927426e2531c9Paul Duffin  final Type capture() {
337dd252788645e940eada959bdde927426e2531c9Paul Duffin    Type superclass = getClass().getGenericSuperclass();
340888a09821a98ac0680fad765217302858e70fa4Paul Duffin    checkArgument(superclass instanceof ParameterizedType,
350888a09821a98ac0680fad765217302858e70fa4Paul Duffin        "%s isn't parameterized", superclass);
367dd252788645e940eada959bdde927426e2531c9Paul Duffin    return ((ParameterizedType) superclass).getActualTypeArguments()[0];
37090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson  }
38090f9b4c879985bc747c214f82c62471e60c7742Jesse Wilson}
39