1 /*******************************************************************************
2  * Copyright (c) 2000, 2016 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  *******************************************************************************/
14 package org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types;
15 
16 public final class UnboundWildcardType extends WildcardType {
17 
UnboundWildcardType(TypeEnvironment environment)18 	protected UnboundWildcardType(TypeEnvironment environment) {
19 		super(environment);
20 	}
21 
22 	@Override
getKind()23 	public int getKind() {
24 		return UNBOUND_WILDCARD_TYPE;
25 	}
26 
27 	@Override
getErasure()28 	public TType getErasure() {
29 		return getEnvironment().getJavaLangObject();
30 	}
31 
32 	@Override
doCanAssignTo(TType lhs)33 	protected boolean doCanAssignTo(TType lhs) {
34 		switch(lhs.getKind()) {
35 			case STANDARD_TYPE:
36 				return ((StandardType)lhs).isJavaLangObject();
37 			case UNBOUND_WILDCARD_TYPE:
38 				return true;
39 			case SUPER_WILDCARD_TYPE:
40 			case EXTENDS_WILDCARD_TYPE:
41 				return ((WildcardType)lhs).getBound().isJavaLangObject();
42 			case CAPTURE_TYPE:
43 				return ((CaptureType)lhs).checkLowerBound(this);
44 			default:
45 				return false;
46 		}
47 	}
48 
49 	@Override
checkTypeArgument(TType rhs)50 	protected boolean checkTypeArgument(TType rhs) {
51 		switch(rhs.getKind()) {
52 			case ARRAY_TYPE:
53 			case STANDARD_TYPE:
54 			case PARAMETERIZED_TYPE:
55 			case RAW_TYPE:
56 			case UNBOUND_WILDCARD_TYPE:
57 			case EXTENDS_WILDCARD_TYPE:
58 			case SUPER_WILDCARD_TYPE:
59 			case TYPE_VARIABLE:
60 			case CAPTURE_TYPE:
61 				return true;
62 			default:
63 				return false;
64 		}
65 	}
66 
67 	@Override
checkAssignmentBound(TType rhs)68 	protected boolean checkAssignmentBound(TType rhs) {
69 		// unbound equals ? extends Object.
70 		return rhs.isNullType();
71 	}
72 
73 	@Override
getName()74 	public String getName() {
75 		return "?"; //$NON-NLS-1$
76 	}
77 
78 	@Override
getPlainPrettySignature()79 	protected String getPlainPrettySignature() {
80 		return getName();
81 	}
82 }
83