Thu, 31 Aug 2017 15:18:52 +0800
merge
1 /*
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
26 package com.sun.xml.internal.bind.v2.model.core;
28 import javax.xml.bind.annotation.XmlList;
29 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
31 import com.sun.xml.internal.bind.v2.model.annotation.AnnotationReader;
32 import com.sun.xml.internal.bind.v2.model.impl.ModelBuilderI;
33 import com.sun.xml.internal.bind.v2.model.nav.Navigator;
35 /**
36 * Reference to a type in a model.
37 *
38 * TODO: isn't there a similarity between this and TypeUse in XJC?
39 *
40 * @author Kohsuke Kawaguchi
41 */
42 public final class Ref<T,C> {
43 /**
44 * The type being referenced.
45 * <p>
46 * If the type is adapted, this field is the same as the adapter's default type.
47 */
48 public final T type;
49 /**
50 * If the reference has an adapter, non-null.
51 */
52 public final Adapter<T,C> adapter;
53 /**
54 * If the {@link #type} is an array and it is a value list,
55 * true.
56 */
57 public final boolean valueList;
59 public Ref(T type) {
60 this(type,null,false);
61 }
63 public Ref(T type, Adapter<T, C> adapter, boolean valueList) {
64 this.adapter = adapter;
65 if(adapter!=null)
66 type=adapter.defaultType;
67 this.type = type;
68 this.valueList = valueList;
69 }
71 public Ref(ModelBuilderI<T,C,?,?> builder, T type, XmlJavaTypeAdapter xjta, XmlList xl ) {
72 this(builder.getReader(),builder.getNavigator(),type,xjta,xl);
73 }
75 public Ref(AnnotationReader<T,C,?,?> reader,
76 Navigator<T,C,?,?> nav,
77 T type, XmlJavaTypeAdapter xjta, XmlList xl ) {
78 Adapter<T,C> adapter=null;
79 if(xjta!=null) {
80 adapter = new Adapter<T,C>(xjta,reader,nav);
81 type = adapter.defaultType;
82 }
84 this.type = type;
85 this.adapter = adapter;
86 this.valueList = xl!=null;
87 }
88 }