private CaptureType createCaptureType(ITypeBinding binding) { IJavaProject javaProject= binding.getDeclaringClass().getJavaElement().getJavaProject(); String bindingKey= binding.getKey(); ProjectKeyPair pair= new ProjectKeyPair(javaProject, bindingKey); CaptureType result= (CaptureType)fCaptureTypes.get(pair); if (result != null) return result; result= new CaptureType(this); fCaptureTypes.put(pair, result); result.initialize(binding, javaProject); return result; } }
@Override protected boolean doCanAssignTo(TType lhs) { switch (lhs.getKind()) { case NULL_TYPE: case VOID_TYPE: case PRIMITIVE_TYPE: return false; case ARRAY_TYPE: return canAssignFirstBoundTo(lhs); case GENERIC_TYPE: return false; case STANDARD_TYPE: case PARAMETERIZED_TYPE: case RAW_TYPE: return canAssignOneBoundTo(lhs); case UNBOUND_WILDCARD_TYPE: case EXTENDS_WILDCARD_TYPE: case SUPER_WILDCARD_TYPE: return ((WildcardType)lhs).checkAssignmentBound(this); case TYPE_VARIABLE: return false; //fWildcard.doCanAssignTo(lhs); case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this.getWildcard()); } return false; }
@Override public boolean doEquals(TType type) { return getBindingKey().equals(((CaptureType)type).getBindingKey()) && fJavaProject.equals(((CaptureType)type).fJavaProject); }
@Override protected boolean doCanAssignTo(TType lhs) { switch(lhs.getKind()) { case STANDARD_TYPE: return ((StandardType)lhs).isJavaLangObject(); case UNBOUND_WILDCARD_TYPE: return true; case SUPER_WILDCARD_TYPE: case EXTENDS_WILDCARD_TYPE: return ((WildcardType)lhs).getBound().isJavaLangObject(); case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this); default: return false; } }
protected boolean checkLowerBound(TType rhs) { if (! getWildcard().isSuperWildcardType()) return false; return rhs.canAssignTo(getWildcard().getBound()); }
protected void initialize(ITypeBinding binding, IJavaProject javaProject) { Assert.isTrue(binding.isCapture()); super.initialize(binding); fWildcard= (WildcardType) getEnvironment().create(binding.getWildcard()); fJavaProject= javaProject; }
protected boolean doCanAssignTo(TType lhs) { switch(lhs.getKind()) { case STANDARD_TYPE: return ((StandardType)lhs).isJavaLangObject(); case UNBOUND_WILDCARD_TYPE: return true; case SUPER_WILDCARD_TYPE: case EXTENDS_WILDCARD_TYPE: return ((WildcardType)lhs).getBound().isJavaLangObject(); case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this); default: return false; } }
protected boolean checkLowerBound(TType rhs) { if (! getWildcard().isSuperWildcardType()) return false; return rhs.canAssignTo(getWildcard().getBound()); }
protected void initialize(ITypeBinding binding, IJavaProject javaProject) { Assert.isTrue(binding.isCapture()); super.initialize(binding); fWildcard= (WildcardType) getEnvironment().create(binding.getWildcard()); fJavaProject= javaProject; }
return canAssignFirstBoundTo(lhs); case PARAMETERIZED_TYPE: case RAW_TYPE: return canAssignOneBoundTo(lhs); return ((CaptureType)lhs).checkLowerBound(this.getWildcard());
@Override protected boolean doCanAssignTo(TType lhs) { switch(lhs.getKind()) { case STANDARD_TYPE: return ((StandardType)lhs).isJavaLangObject(); case UNBOUND_WILDCARD_TYPE: return true; case SUPER_WILDCARD_TYPE: case EXTENDS_WILDCARD_TYPE: return ((WildcardType)lhs).getBound().isJavaLangObject(); case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this); default: return false; } }
private CaptureType createCaptureType(ITypeBinding binding) { IJavaProject javaProject= binding.getDeclaringClass().getJavaElement().getJavaProject(); String bindingKey= binding.getKey(); ProjectKeyPair pair= new ProjectKeyPair(javaProject, bindingKey); CaptureType result= fCaptureTypes.get(pair); if (result != null) return result; result= new CaptureType(this); fCaptureTypes.put(pair, result); result.initialize(binding, javaProject); return result; } }
protected boolean checkLowerBound(TType rhs) { if (! getWildcard().isSuperWildcardType()) return false; return rhs.canAssignTo(getWildcard().getBound()); }
public boolean doEquals(TType type) { return getBindingKey().equals(((CaptureType)type).getBindingKey()) && fJavaProject.equals(((CaptureType)type).fJavaProject); }
protected void initialize(ITypeBinding binding, IJavaProject javaProject) { Assert.isTrue(binding.isCapture()); super.initialize(binding); fWildcard= (WildcardType) getEnvironment().create(binding.getWildcard()); fJavaProject= javaProject; }
@Override protected boolean doCanAssignTo(TType lhs) { switch (lhs.getKind()) { case NULL_TYPE: case VOID_TYPE: case PRIMITIVE_TYPE: return false; case ARRAY_TYPE: return canAssignFirstBoundTo(lhs); case GENERIC_TYPE: return false; case STANDARD_TYPE: case PARAMETERIZED_TYPE: case RAW_TYPE: return canAssignOneBoundTo(lhs); case UNBOUND_WILDCARD_TYPE: case EXTENDS_WILDCARD_TYPE: case SUPER_WILDCARD_TYPE: return ((WildcardType)lhs).checkAssignmentBound(this); case TYPE_VARIABLE: return false; //fWildcard.doCanAssignTo(lhs); case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this.getWildcard()); } return false; }
protected boolean doCanAssignTo(TType lhs) { switch (lhs.getKind()) { case NULL_TYPE: return false; case VOID_TYPE: return false; case PRIMITIVE_TYPE: return false; case ARRAY_TYPE: return canAssignToArrayType((ArrayType)lhs); case GENERIC_TYPE: return false; case STANDARD_TYPE: return isArrayLhsCompatible(lhs); case PARAMETERIZED_TYPE: return false; case RAW_TYPE: return false; case UNBOUND_WILDCARD_TYPE: case EXTENDS_WILDCARD_TYPE: case SUPER_WILDCARD_TYPE: return ((WildcardType)lhs).checkAssignmentBound(this); case TYPE_VARIABLE: return false; case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(lhs); } return false; }
private CaptureType createCaptureType(ITypeBinding binding) { IJavaProject javaProject= binding.getDeclaringClass().getJavaElement().getJavaProject(); String bindingKey= binding.getKey(); ProjectKeyPair pair= new ProjectKeyPair(javaProject, bindingKey); CaptureType result= fCaptureTypes.get(pair); if (result != null) return result; result= new CaptureType(this); fCaptureTypes.put(pair, result); result.initialize(binding, javaProject); return result; } }
@Override protected boolean checkTypeArgument(TType rhs) { switch(rhs.getKind()) { case ARRAY_TYPE: case STANDARD_TYPE: case PARAMETERIZED_TYPE: case RAW_TYPE: return getBound().canAssignTo(rhs); case UNBOUND_WILDCARD_TYPE: return false; case EXTENDS_WILDCARD_TYPE: return false; case SUPER_WILDCARD_TYPE: return getBound().canAssignTo(((SuperWildcardType)rhs).getBound()); case TYPE_VARIABLE: return getBound().canAssignTo(rhs); case CAPTURE_TYPE: return checkTypeArgument(((CaptureType)rhs).getWildcard()); default: return false; } }
@Override public int hashCode() { return getBindingKey().hashCode(); }