aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/fasterxml/jackson/databind/type/PlaceholderForType.java
blob: 54ed40275a7c77ceb6fd793395373e370be52fa3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package com.fasterxml.jackson.databind.type;

import com.fasterxml.jackson.databind.JavaType;

/**
 * Helper type used when introspecting bindings for already resolved types,
 * needed for specialization.
 *
 * @since 2.8.11
 */
public class PlaceholderForType extends TypeBase
{
    private static final long serialVersionUID = 1L;

    protected final int _ordinal;

    /**
     * Type assigned during wildcard resolution (which follows type
     * structure resolution)
     */
    protected JavaType _actualType;
    
    public PlaceholderForType(int ordinal)
    {
        super(Object.class, TypeBindings.emptyBindings(),
                TypeFactory.unknownType(), null, 1, // super-class, super-interfaces, hashCode
                null, null, false); // value/type handler, as-static
        _ordinal = ordinal;
    }

    public JavaType actualType() { return _actualType; }
    public void actualType(JavaType t) { _actualType = t; }

    // Override to get better diagnostics
    @Override
    protected String buildCanonicalName() {
        return toString();
    }

    @Override
    public StringBuilder getGenericSignature(StringBuilder sb) {
        return getErasedSignature(sb);
    }

    @Override
    public StringBuilder getErasedSignature(StringBuilder sb) {
        sb.append('$').append(_ordinal+1);
        return sb;
    }

    @Override
    public JavaType withTypeHandler(Object h) {
        return _unsupported();
    }

    @Override
    public JavaType withContentTypeHandler(Object h) {
        return _unsupported();
    }

    @Override
    public JavaType withValueHandler(Object h) {
        return _unsupported();
    }

    @Override
    public JavaType withContentValueHandler(Object h) {
        return _unsupported();
    }

    @Override
    public JavaType withContentType(JavaType contentType) {
        return _unsupported();
    }

    @Override
    public JavaType withStaticTyping() {
        return _unsupported();
    }

    @Override
    public JavaType refine(Class<?> rawType, TypeBindings bindings, JavaType superClass, JavaType[] superInterfaces) {
        return _unsupported();
    }

    @Override
    protected JavaType _narrow(Class<?> subclass) {
        return _unsupported();
    }

    @Override
    public boolean isContainerType() {
        return false;
    }

    @Override
    public String toString() {
        return getErasedSignature(new StringBuilder()).toString();
    }

    @Override
    public boolean equals(Object o) {
        return (o == this);
    }

    private <T> T _unsupported() {
        throw new UnsupportedOperationException("Operation should not be attempted on "+getClass().getName());
    }
}