private ArrayType createArrayType(ITypeBinding binding) { int index= binding.getDimensions() - 1; TType elementType= create(binding.getElementType()); Map/*<TType, ArrayType>*/ arrayTypes= getArrayTypesMap(index); ArrayType result= (ArrayType)arrayTypes.get(elementType); if (result != null) return result; result= new ArrayType(this); arrayTypes.put(elementType, result); result.initialize(binding, elementType); return result; }
@Override 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(this); } return false; }
public boolean contains(TType t) { if (!(t instanceof ArrayType)) return false; ArrayType at= (ArrayType) t; return fElemTypeSet.contains(at.getComponentType()); }
@Override public EnumeratedTypeSet enumerate() { if (fEnumCache == null) { fEnumCache= new EnumeratedTypeSet(getTypeSetEnvironment()); for(Iterator<TType> iter= fUpperBounds.iterator(); iter.hasNext(); ) { TType ub= iter.next(); if (ub instanceof ArrayType) { ArrayType at= (ArrayType) ub; int numDims= at.getDimensions(); for(Iterator<TType> elemSubIter=TTypes.getAllSubTypesIterator(at.getElementType()); elemSubIter.hasNext(); ) fEnumCache.add(TTypes.createArrayType(elemSubIter.next(), numDims)); } else { for (Iterator<TType> iterator= TTypes.getAllSubTypesIterator(ub); iterator.hasNext();) { fEnumCache.fMembers.add(iterator.next()); } } fEnumCache.add(ub); } // fEnumCache.initComplete(); } return fEnumCache; } }
/** * Returns the component type of this array. * If getDimensions() is 1, the component type is the element type. * If getDimensions() is > 1, the component type is an array type * with element type getElementType() and dimensions getDimensions() - 1. * * @return the component type */ public TType getComponentType() { if (fDimensions > 1) return getEnvironment().createArrayType(fElementType, fDimensions - 1); else return fElementType; }
declaredParameterType= ((org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.ArrayType) declaredParameterType).getComponentType(); TType declaredElementType= ((org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.ArrayType) declaredParameterType).getElementType(); if (declaredElementType.isTypeVariable()) { ConstraintVariable2 methodTypeVariableCv= methodTypeVariables.get(declaredElementType.getBindingKey());
/** * Returns the element type of the given TType, if an array type, or the * given TType itself, otherwise. * * @param t a type * @return the element type */ private TType getElementTypeOf(TType t) { if (t instanceof ArrayType) return ((ArrayType) t).getElementType(); return t; }
private boolean canAssignToArrayType(ArrayType lhs) { if (fDimensions == lhs.fDimensions) { // primitive type don't have any conversion for arrays. if (fElementType.getKind() == PRIMITIVE_TYPE || lhs.fElementType.getKind() == PRIMITIVE_TYPE) return fElementType.isTypeEquivalentTo(lhs.fElementType); return fElementType.canAssignTo(lhs.fElementType); } if (fDimensions < lhs.fDimensions) return false; return isArrayLhsCompatible(lhs.fElementType); }
private ArrayTypeVariable2 makeArrayTypeVariable(ArrayType type) { ArrayTypeVariable2 cv= new ArrayTypeVariable2(type); ArrayTypeVariable2 storedCv= (ArrayTypeVariable2) storedCv(cv); if (cv == storedCv) { fCuScopedConstraintVariables.add(storedCv); makeArrayElementVariable(storedCv); if (JavaPlugin.DEBUG_TYPE_CONSTRAINTS) storedCv.setData(ConstraintVariable2.TO_STRING, "ArrayType(" + type.getPrettySignature() + ")"); //$NON-NLS-1$ //$NON-NLS-2$ } return storedCv; }
private boolean canAssignToVararg(TType rhs, org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.ArrayType lhs) { return TTypes.canAssignTo(rhs.getErasure(), lhs.getErasure()); }
@Override public EnumeratedTypeSet enumerate() { if (fEnumCache == null) { fEnumCache= new EnumeratedTypeSet(getTypeSetEnvironment()); for(Iterator<TType> iter= fUpperBounds.iterator(); iter.hasNext(); ) { TType ub= iter.next(); if (ub instanceof ArrayType) { ArrayType at= (ArrayType) ub; int numDims= at.getDimensions(); for(Iterator<TType> elemSubIter=TTypes.getAllSubTypesIterator(at.getElementType()); elemSubIter.hasNext(); ) fEnumCache.add(TTypes.createArrayType(elemSubIter.next(), numDims)); } else { for (Iterator<TType> iterator= TTypes.getAllSubTypesIterator(ub); iterator.hasNext();) { fEnumCache.fMembers.add(iterator.next()); } } fEnumCache.add(ub); } // fEnumCache.initComplete(); } return fEnumCache; } }
/** * Returns the component type of this array. * If getDimensions() is 1, the component type is the element type. * If getDimensions() is > 1, the component type is an array type * with element type getElementType() and dimensions getDimensions() - 1. * * @return the component type */ public TType getComponentType() { if (fDimensions > 1) return getEnvironment().createArrayType(fElementType, fDimensions - 1); else return fElementType; }
declaredParameterType= ((org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.ArrayType) declaredParameterType).getComponentType(); TType declaredElementType= ((org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.ArrayType) declaredParameterType).getElementType(); if (declaredElementType.isTypeVariable()) { ConstraintVariable2 methodTypeVariableCv= (ConstraintVariable2) methodTypeVariables.get(declaredElementType.getBindingKey());
/** * Returns the element type of the given TType, if an array type, or the * given TType itself, otherwise. * * @param t a type * @return the element type */ private TType getElementTypeOf(TType t) { if (t instanceof ArrayType) return ((ArrayType) t).getElementType(); return t; }
private boolean canAssignToArrayType(ArrayType lhs) { if (fDimensions == lhs.fDimensions) { // primitive type don't have any conversion for arrays. if (fElementType.getKind() == PRIMITIVE_TYPE || lhs.fElementType.getKind() == PRIMITIVE_TYPE) return fElementType.isTypeEquivalentTo(lhs.fElementType); return fElementType.canAssignTo(lhs.fElementType); } if (fDimensions < lhs.fDimensions) return false; return isArrayLhsCompatible(lhs.fElementType); }
private ArrayTypeVariable2 makeArrayTypeVariable(ArrayType type) { ArrayTypeVariable2 cv= new ArrayTypeVariable2(type); ArrayTypeVariable2 storedCv= (ArrayTypeVariable2) storedCv(cv); if (cv == storedCv) { fCuScopedConstraintVariables.add(storedCv); makeArrayElementVariable(storedCv); if (fStoreToString) storedCv.setData(ConstraintVariable2.TO_STRING, "ArrayType(" + type.getPrettySignature() + ")"); //$NON-NLS-1$ //$NON-NLS-2$ } return storedCv; }
private boolean canAssignToVararg(TType rhs, org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.ArrayType lhs) { return TTypes.canAssignTo(rhs.getErasure(), lhs.getErasure()); }
public EnumeratedTypeSet enumerate() { if (fEnumCache == null) { fEnumCache= new EnumeratedTypeSet(getTypeSetEnvironment()); for(Iterator iter= fUpperBounds.iterator(); iter.hasNext(); ) { TType ub= (TType) iter.next(); if (ub instanceof ArrayType) { ArrayType at= (ArrayType) ub; int numDims= at.getDimensions(); for(Iterator elemSubIter=TTypes.getAllSubTypesIterator(at.getElementType()); elemSubIter.hasNext(); ) fEnumCache.add(TTypes.createArrayType((TType) elemSubIter.next(), numDims)); } else { for (Iterator iterator= TTypes.getAllSubTypesIterator(ub); iterator.hasNext();) { fEnumCache.fMembers.add(iterator.next()); } } fEnumCache.add(ub); } // fEnumCache.initComplete(); } return fEnumCache; } }
private ArrayType createArrayType(ITypeBinding binding) { int index= binding.getDimensions() - 1; TType elementType= create(binding.getElementType()); Map<TType, ArrayType> arrayTypes= getArrayTypesMap(index); ArrayType result= arrayTypes.get(elementType); if (result != null) return result; result= new ArrayType(this); arrayTypes.put(elementType, result); result.initialize(binding, elementType); return result; }
public ArrayElementVariable2(ConstraintVariable2 parentCv) { super(((ArrayType) parentCv.getType()).getComponentType()); fParentCv= parentCv; }