I think might -1 unless a good argument is made to start duplicating Java
EE classes. Is it that hard to depend on
http://search.maven.org/remotecontent?filepath=javax/enterprise/cdi-api/1.0-SP4/cdi-api-1.0-SP4.jar(or
a jar like it) for 50K?

Gary


On Mon, Sep 23, 2013 at 6:13 PM, <[email protected]> wrote:

> Author: mbenson
> Date: Mon Sep 23 22:13:57 2013
> New Revision: 1525711
>
> URL: http://svn.apache.org/r1525711
> Log:
> [LANG-919] Provide TypeLiteral class similar to
> javax.enterprise.util.TypeLiteral
>
> Added:
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeLiteral.java
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java
>   (with props)
>
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/reflect/TypeLiteralTest.java
>
> Added:
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeLiteral.java
> URL:
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeLiteral.java?rev=1525711&view=auto
>
> ==============================================================================
> ---
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeLiteral.java
> (added)
> +++
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeLiteral.java
> Mon Sep 23 22:13:57 2013
> @@ -0,0 +1,79 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You 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.apache.commons.lang3.reflect;
> +
> +import java.lang.reflect.Type;
> +import java.lang.reflect.TypeVariable;
> +
> +import org.apache.commons.lang3.Validate;
> +
> +/**
> + * Type literal comparable to {@code javax.enterprise.util.TypeLiteral},
> + * made generally available outside the JEE context. Allows the passing
> around of
> + * a "token" that represents a type in a typesafe manner, as opposed to
> + * passing the (non-parameterized) {@link Type} object itself.
> + * Additionally {@link TypeLiteral} implements the {@link Typed}
> interface which
> + * is a generalization of this concept. It is suggested that APIs be
> defined in
> + * terms of the interface, which others might implemented in custom
> classes.
> + */
> +public abstract class TypeLiteral<T> implements Typed<T> {
> +
> +    @SuppressWarnings("rawtypes")
> +    private static final TypeVariable<Class<TypeLiteral>> T =
> TypeLiteral.class.getTypeParameters()[0];
> +
> +    /**
> +     * Represented type.
> +     */
> +    public final Type value;
> +
> +    private final String toString;
> +
> +    protected TypeLiteral() {
> +        this.value =
> +            Validate.notNull(TypeUtils.getTypeArguments(getClass(),
> TypeLiteral.class).get(T),
> +                "%s does not assign type parameter %s", getClass(),
> TypeUtils.toLongString(T));
> +
> +        this.toString = String.format("%s<%s>",
> TypeLiteral.class.getSimpleName(), TypeUtils.toString(value));
> +    }
> +
> +    @Override
> +    public final boolean equals(Object obj) {
> +        if (obj == this) {
> +            return true;
> +        }
> +        if (obj instanceof TypeLiteral == false) {
> +            return false;
> +        }
> +        final TypeLiteral<?> other = (TypeLiteral<?>) obj;
> +        return TypeUtils.equals(value, other.value);
> +    }
> +
> +    @Override
> +    public int hashCode() {
> +        return 37 << 4 | value.hashCode();
> +    }
> +
> +    @Override
> +    public String toString() {
> +        return toString;
> +    }
> +
> +    @Override
> +    public Type getType() {
> +        return value;
> +    }
> +}
>
> Added:
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java
> URL:
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java?rev=1525711&view=auto
>
> ==============================================================================
> ---
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java
> (added)
> +++
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java
> Mon Sep 23 22:13:57 2013
> @@ -0,0 +1,32 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You 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.apache.commons.lang3.reflect;
> +
> +import java.lang.reflect.Type;
> +
> +/**
> + * Generalization of "has a type."
> + */
> +public interface Typed<T> {
> +
> +    /**
> +     * Get the {@link Type} represented by this entity.
> +     *
> +     * @return Type
> +     */
> +    Type getType();
> +}
>
> Propchange:
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java
>
> ------------------------------------------------------------------------------
>     svn:executable = *
>
> Added:
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/reflect/TypeLiteralTest.java
> URL:
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/reflect/TypeLiteralTest.java?rev=1525711&view=auto
>
> ==============================================================================
> ---
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/reflect/TypeLiteralTest.java
> (added)
> +++
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/reflect/TypeLiteralTest.java
> Mon Sep 23 22:13:57 2013
> @@ -0,0 +1,56 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You 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.apache.commons.lang3.reflect;
> +
> +import static org.junit.Assert.assertEquals;
> +import static org.junit.Assert.assertNotEquals;
> +import static org.junit.Assert.assertTrue;
> +
> +import java.util.List;
> +
> +import org.junit.Test;
> +
> +public class TypeLiteralTest {
> +
> +    @Test
> +    public void testBasic() {
> +        assertTrue(TypeUtils.equals(String.class, new
> TypeLiteral<String>() {}.value));
> +        assertTrue(TypeUtils.equals(TypeUtils.parameterize(List.class,
> String.class),
> +            new TypeLiteral<List<String>>() {}.value));
> +    }
> +
> +    @Test
> +    public void testTyped() {
> +        final Typed<String> stringType = new TypeLiteral<String>() {};
> +        assertTrue(TypeUtils.equals(String.class, stringType.getType()));
> +        final Typed<List<String>> listOfStringType = new
> TypeLiteral<List<String>>() {};
> +        assertTrue(TypeUtils.equals(TypeUtils.parameterize(List.class,
> String.class), listOfStringType.getType()));
> +    }
> +
> +    @Test
> +    public void testEquals() {
> +        assertEquals(new TypeLiteral<String>() {}, new
> TypeLiteral<String>() {});
> +        assertEquals(new TypeLiteral<List<String>>() {}, new
> TypeLiteral<List<String>>() {});
> +        assertNotEquals(new TypeLiteral<String>() {}, new
> TypeLiteral<List<String>>() {});
> +    }
> +
> +    @SuppressWarnings("rawtypes")
> +    @Test(expected = NullPointerException.class)
> +    public void testRaw() {
> +        new TypeLiteral() {};
> +    }
> +}
>
>
>


-- 
E-Mail: [email protected] | [email protected]
Java Persistence with Hibernate, Second Edition<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to