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 import org.eclipse.jdt.core.BindingKey; 17 18 19 public final class StandardType extends HierarchyType { 20 21 private static final String OBJECT_KEY= BindingKey.createTypeBindingKey("java.lang.Object"); //$NON-NLS-1$ 22 private static final String CLONEABLE_KEY= BindingKey.createTypeBindingKey("java.lang.Cloneable"); //$NON-NLS-1$ 23 private static final String SERIALIZABLE_KEY= BindingKey.createTypeBindingKey("java.io.Serializable"); //$NON-NLS-1$ 24 StandardType(TypeEnvironment environment)25 protected StandardType(TypeEnvironment environment) { 26 super(environment); 27 } 28 29 @Override getKind()30 public int getKind() { 31 return STANDARD_TYPE; 32 } 33 34 @Override isJavaLangObject()35 public boolean isJavaLangObject() { 36 return OBJECT_KEY.equals(getBindingKey()); 37 } 38 39 @Override isJavaLangCloneable()40 public boolean isJavaLangCloneable() { 41 return CLONEABLE_KEY.equals(getBindingKey()); 42 } 43 44 @Override isJavaIoSerializable()45 public boolean isJavaIoSerializable() { 46 return SERIALIZABLE_KEY.equals(getBindingKey()); 47 } 48 49 @Override doEquals(TType type)50 public boolean doEquals(TType type) { 51 return getJavaElementType().equals(((StandardType)type).getJavaElementType()); 52 } 53 54 @Override hashCode()55 public int hashCode() { 56 return getJavaElementType().hashCode(); 57 } 58 59 @Override doCanAssignTo(TType lhs)60 protected boolean doCanAssignTo(TType lhs) { 61 switch (lhs.getKind()) { 62 case NULL_TYPE: return false; 63 case VOID_TYPE: return false; 64 case PRIMITIVE_TYPE: return canAssignToPrimitive((PrimitiveType)lhs); 65 66 case ARRAY_TYPE: return false; 67 68 case STANDARD_TYPE: return canAssignToStandardType((StandardType)lhs); 69 case GENERIC_TYPE: return false; 70 case PARAMETERIZED_TYPE: return isSubType((HierarchyType)lhs); 71 case RAW_TYPE: return isSubType((HierarchyType)lhs); 72 73 case UNBOUND_WILDCARD_TYPE: 74 case SUPER_WILDCARD_TYPE: 75 case EXTENDS_WILDCARD_TYPE: 76 return ((WildcardType)lhs).checkAssignmentBound(this); 77 78 case TYPE_VARIABLE: return false; 79 80 case CAPTURE_TYPE: 81 return ((CaptureType)lhs).checkLowerBound(this); 82 } 83 return false; 84 } 85 canAssignToPrimitive(PrimitiveType type)86 private boolean canAssignToPrimitive(PrimitiveType type) { 87 PrimitiveType source= getEnvironment().createUnBoxed(this); 88 return source != null && source.canAssignTo(type); 89 } 90 91 @Override getName()92 public String getName() { 93 return getJavaElementType().getElementName(); 94 } 95 96 @Override getPlainPrettySignature()97 protected String getPlainPrettySignature() { 98 return getJavaElementType().getFullyQualifiedName('.'); 99 } 100 } 101