Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 3203638062af5e33543905c279b5e134d5edf35e (plain) (blame)
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
/*******************************************************************************
 * Copyright (c) 2005, 2007 BEA Systems, Inc.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *    tyeung@bea.com - initial API and implementation
 *******************************************************************************/

package org.eclipse.jdt.apt.core.internal.type;

import com.sun.mirror.declaration.AnnotationTypeDeclaration;
import com.sun.mirror.declaration.ClassDeclaration;
import com.sun.mirror.declaration.InterfaceDeclaration;
import com.sun.mirror.declaration.TypeDeclaration;
import com.sun.mirror.type.AnnotationType;
import com.sun.mirror.type.ArrayType;
import com.sun.mirror.type.ClassType;
import com.sun.mirror.type.DeclaredType;
import com.sun.mirror.type.InterfaceType;
import com.sun.mirror.type.ReferenceType;
import com.sun.mirror.type.TypeMirror;
import com.sun.mirror.util.TypeVisitor;

import java.util.Collection;
import java.util.Collections;

import org.eclipse.jdt.apt.core.internal.declaration.EclipseMirrorType;
import org.eclipse.jdt.apt.core.internal.env.BaseProcessorEnv;
import org.eclipse.jdt.core.dom.ITypeBinding;

/**
 * This is the error type marker
 */
public abstract class ErrorType implements DeclaredType, ReferenceType, EclipseMirrorType
{
    final String _name;

    ErrorType(final String name){
        _name = name;
    }

    @Override
	public Collection<TypeMirror> getActualTypeArguments(){ return Collections.emptyList(); }

    @Override
	public DeclaredType getContainingType(){ return null; }

    @Override
	public String toString(){ return _name; }

    @Override
	public void accept(TypeVisitor visitor)
    {
        visitor.visitTypeMirror(this);
    }

    @Override
	public Collection<InterfaceType> getSuperinterfaces(){ return Collections.emptyList(); }

    @Override
	public MirrorKind kind(){ return MirrorKind.TYPE_ERROR; }
	
	@Override
	public BaseProcessorEnv getEnvironment(){ return null; }

    public static final class ErrorClass extends ErrorType implements ClassType
    {
        public ErrorClass(final String name){ super(name); }

        @Override
		public void accept(TypeVisitor visitor)
        {
            visitor.visitClassType(this);
        }

        @Override
		public ClassType getSuperclass()
        {
            return null;
        }

        @Override
		public ClassDeclaration getDeclaration(){ return null; }		
		
    }

    public static class ErrorInterface extends ErrorType implements InterfaceType
    {
        public ErrorInterface(final String name){ super(name); }

        @Override
		public void accept(TypeVisitor visitor)
        {
            visitor.visitInterfaceType(this);
        }

        @Override
		public InterfaceDeclaration getDeclaration(){ return null; }
    }

    public static final class ErrorAnnotation extends ErrorInterface implements AnnotationType
    {
        public ErrorAnnotation(final String name){ super(name); }

        @Override
		public void accept(TypeVisitor visitor)
        {
            visitor.visitAnnotationType(this);
        }

        @Override
		public AnnotationTypeDeclaration getDeclaration(){ return null; }
    }
    
    public static final class ErrorArrayType extends ErrorType implements ArrayType 
    {
    	private final int _dimension;
    	public ErrorArrayType(final String name, final int dimension )
    	{
    		super(name);
    		_dimension = dimension;
    	}
    	
    	@Override
		public void accept(TypeVisitor visitor)
        {
            visitor.visitArrayType(this);
        }
    	
    	@Override
		public TypeDeclaration getDeclaration() { return null; }
    	
    	@Override
		public TypeMirror getComponentType() {
    		return new ErrorClass(_name);
    	}
    	
    	@Override
		public String toString()
    	{
    		final StringBuilder buffer = new StringBuilder();
    		buffer.append(_name);
    		for( int i=0; i<_dimension; i++ )
    			buffer.append("[]"); //$NON-NLS-1$
    		return buffer.toString();
    	}
    }

	@Override
	public ITypeBinding getTypeBinding() {
		return null;
	}

	@Override
	public boolean isAssignmentCompatible(EclipseMirrorType left) {
		return false;
	}

	@Override
	public boolean isSubTypeCompatible(EclipseMirrorType type) {
		return false;
	}
}

Back to the top