1 11 package org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types; 12 13 import org.eclipse.core.runtime.Assert; 14 15 import org.eclipse.jdt.core.IJavaProject; 16 import org.eclipse.jdt.core.dom.ITypeBinding; 17 18 19 20 public final class CaptureType extends AbstractTypeVariable { 21 22 private WildcardType fWildcard; 23 private IJavaProject fJavaProject; 24 25 protected CaptureType(TypeEnvironment environment) { 26 super(environment); 27 } 28 29 protected void initialize(ITypeBinding binding, IJavaProject javaProject) { 30 Assert.isTrue(binding.isCapture()); 31 super.initialize(binding); 32 fWildcard= (WildcardType) getEnvironment().create(binding.getWildcard()); 33 fJavaProject= javaProject; 34 } 35 36 public int getKind() { 37 return CAPTURE_TYPE; 38 } 39 40 public WildcardType getWildcard() { 41 return fWildcard; 42 } 43 44 public boolean doEquals(TType type) { 45 return getBindingKey().equals(((CaptureType)type).getBindingKey()) 46 && fJavaProject.equals(((CaptureType)type).fJavaProject); 47 } 48 49 public int hashCode() { 50 return getBindingKey().hashCode(); 51 } 52 53 protected boolean doCanAssignTo(TType lhs) { 54 switch (lhs.getKind()) { 55 case NULL_TYPE: 56 case VOID_TYPE: 57 case PRIMITIVE_TYPE: 58 return false; 59 60 case ARRAY_TYPE: 61 return canAssignFirstBoundTo(lhs); 62 63 case GENERIC_TYPE: 64 return false; 65 66 case STANDARD_TYPE: 67 case PARAMETERIZED_TYPE: 68 case RAW_TYPE: 69 return canAssignOneBoundTo(lhs); 70 71 case UNBOUND_WILDCARD_TYPE: 72 case EXTENDS_WILDCARD_TYPE: 73 case SUPER_WILDCARD_TYPE: 74 return ((WildcardType)lhs).checkAssignmentBound(this); 75 76 case TYPE_VARIABLE: 77 return false; 79 case CAPTURE_TYPE: 80 return ((CaptureType)lhs).checkLowerBound(this.getWildcard()); 81 82 } 83 return false; 84 } 85 86 protected boolean checkLowerBound(TType rhs) { 87 if (! getWildcard().isSuperWildcardType()) 88 return false; 89 90 return rhs.canAssignTo(getWildcard().getBound()); 91 } 92 93 private boolean canAssignFirstBoundTo(TType lhs) { 94 if (fBounds.length > 0 && fBounds[0].isArrayType()) { 95 return fBounds[0].canAssignTo(lhs); 97 } 98 return false; 99 } 100 101 public String getName() { 102 return ""; } 104 105 protected String getPlainPrettySignature() { 106 return "capture-of " + fWildcard.getPrettySignature(); } 108 } 109 | Popular Tags |