| /* |
| * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // Oracle - initial API and implementation from Oracle TopLink |
| package org.eclipse.persistence.jaxb.javamodel.reflection; |
| |
| import java.lang.reflect.GenericArrayType; |
| import java.lang.reflect.ParameterizedType; |
| import java.lang.reflect.Type; |
| |
| import org.eclipse.persistence.jaxb.TypeMappingInfo; |
| import org.eclipse.persistence.jaxb.javamodel.JavaClass; |
| import org.eclipse.persistence.jaxb.javamodel.JavaModel; |
| import org.eclipse.persistence.jaxb.javamodel.JavaModelInput; |
| |
| /** |
| * INTERNAL: |
| * <p><b>Purpose:</b>Provide access to an array of JavaClass instances |
| * and their associated JavaModel. This class will transform an array |
| * of Class objects to an array of JavaClasses. |
| * |
| * <p><b>Responsibilities:</b> |
| * <ul> |
| * <li>Create an array of JavaClass instances from an array of Classes</li> |
| * <li>Return an array of JavaClass objects to be used by the generator</li> |
| * <li>Return the JavaModel to be used during generation</li> |
| * </ul> |
| * |
| * @since Oracle TopLink 11.1.1.0.0 |
| * @see org.eclipse.persistence.jaxb.javamodel.JavaClass |
| * @see org.eclipse.persistence.jaxb.javamodel.JavaModel |
| * @see org.eclipse.persistence.jaxb.javamodel.JavaModelInput |
| */ |
| public class JavaModelInputImpl implements JavaModelInput { |
| |
| private JavaClass[] jClasses; |
| private JavaModel jModel; |
| private boolean facets; |
| |
| /** |
| * This constructor builds an array of JavaClass objects from an array |
| * of Types. The JavaModel instance to be used is also set here. |
| * |
| * This constructor assumes that the a given type in the list will |
| * either be a Class or ParameterizedType. |
| * |
| * @param types |
| * @param javaModel |
| */ |
| public JavaModelInputImpl(Type[] types, JavaModel javaModel) { |
| jModel = javaModel; |
| jClasses = new JavaClass[types.length]; |
| for (int i=0; i<types.length; i++) { |
| TypeMappingInfo typeMappingInfo = new TypeMappingInfo(); |
| Type type = types[i]; |
| typeMappingInfo.setType(type); |
| |
| jClasses[i] = buildJavaClassImpl(type); |
| } |
| } |
| |
| public JavaModelInputImpl(TypeMappingInfo[] types, JavaModel javaModel) { |
| jModel = javaModel; |
| jClasses = new JavaClass[types.length]; |
| for (int i=0; i<types.length; i++) { |
| TypeMappingInfo typeMappingInfo = types[i]; |
| Type type = typeMappingInfo.getType(); |
| |
| jClasses[i] = buildJavaClassImpl(type); |
| } |
| } |
| |
| public JavaModelInputImpl(Class[] classes, JavaModel javaModel) { |
| jModel = javaModel; |
| jClasses = new JavaClass[classes.length]; |
| for (int i=0; i<classes.length; i++) { |
| jClasses[i] = javaModel.getClass(classes[i]); |
| } |
| } |
| |
| private JavaClassImpl buildJavaClassImpl(Type type){ |
| // type should be a Class or ParameterizedType |
| if (type instanceof Class) { |
| return (JavaClassImpl) jModel.getClass((Class) type); |
| } else if (type instanceof GenericArrayType) { |
| Class genericTypeClass = (Class) ((GenericArrayType) type).getGenericComponentType(); |
| genericTypeClass = java.lang.reflect.Array.newInstance(genericTypeClass, 0).getClass(); |
| return new JavaClassImpl(genericTypeClass, (JavaModelImpl) jModel); |
| } else { |
| // assume parameterized type |
| ParameterizedType pType = (ParameterizedType) type; |
| return new JavaClassImpl(pType, (Class) pType.getRawType(), (JavaModelImpl) jModel); |
| } |
| } |
| |
| @Override |
| public JavaClass[] getJavaClasses() { |
| return jClasses; |
| } |
| |
| @Override |
| public JavaModel getJavaModel() { |
| return jModel; |
| } |
| |
| public boolean isFacets() { |
| return facets; |
| } |
| |
| public void setFacets(boolean facets) { |
| this.facets = facets; |
| } |
| } |