com.sun.xml.bind.v2.model.impl.RuntimeElementInfoImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ehcache Show documentation
Show all versions of ehcache Show documentation
Ehcache is an open source, standards-based cache used to boost performance,
offload the database and simplify scalability. Ehcache is robust, proven and full-featured and
this has made it the most widely-used Java-based cache.
The newest version!
/*
* Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package com.sun.xml.bind.v2.model.impl;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import com.sun.xml.bind.v2.model.core.Adapter;
import com.sun.xml.bind.v2.model.runtime.RuntimeClassInfo;
import com.sun.xml.bind.v2.model.runtime.RuntimeElementInfo;
import com.sun.xml.bind.v2.model.runtime.RuntimeElementPropertyInfo;
import com.sun.xml.bind.v2.model.runtime.RuntimeNonElement;
import com.sun.xml.bind.v2.model.runtime.RuntimePropertyInfo;
import com.sun.xml.bind.v2.model.runtime.RuntimeTypeRef;
import com.sun.xml.bind.v2.runtime.IllegalAnnotationException;
import com.sun.xml.bind.v2.runtime.Transducer;
import com.sun.xml.bind.v2.runtime.reflect.Accessor;
/**
* @author Kohsuke Kawaguchi
*/
final class RuntimeElementInfoImpl extends ElementInfoImpl
implements RuntimeElementInfo {
public RuntimeElementInfoImpl(RuntimeModelBuilder modelBuilder, RegistryInfoImpl registry, Method method) throws IllegalAnnotationException {
super(modelBuilder, registry, method);
Adapter a = getProperty().getAdapter();
if(a!=null)
adapterType = a.adapterType;
else
adapterType = null;
}
@Override
protected PropertyImpl createPropertyImpl() {
return new RuntimePropertyImpl();
}
class RuntimePropertyImpl extends PropertyImpl implements RuntimeElementPropertyInfo, RuntimeTypeRef {
public Accessor getAccessor() {
if(adapterType==null)
return Accessor.JAXB_ELEMENT_VALUE;
else
return Accessor.JAXB_ELEMENT_VALUE.adapt(
(Class)getAdapter().defaultType,(Class)adapterType);
}
public Type getRawType() {
return Collection.class;
}
public Type getIndividualType() {
return getContentType().getType();
}
public boolean elementOnlyContent() {
return false; // this method doesn't make sense here
}
public List getTypes() {
return Collections.singletonList(this);
}
public List ref() {
return (List)super.ref();
}
public RuntimeNonElement getTarget() {
return (RuntimeNonElement)super.getTarget();
}
public RuntimePropertyInfo getSource() {
return this;
}
public Transducer getTransducer() {
return RuntimeModelBuilder.createTransducer(this);
}
}
/**
* The adapter specified by getProperty().getAdapter()
.
*/
private final Class adapterType;
public RuntimeElementPropertyInfo getProperty() {
return (RuntimeElementPropertyInfo)super.getProperty();
}
public Class getType() {
//noinspection unchecked
return (Class) Utils.REFLECTION_NAVIGATOR.erasure(super.getType());
}
public RuntimeClassInfo getScope() {
return (RuntimeClassInfo)super.getScope();
}
public RuntimeNonElement getContentType() {
return (RuntimeNonElement)super.getContentType();
}
}