/** * Tests if two types are assign compatible. Void types are never compatible. * * @param typeToAssign The binding of the type to assign * @param definedType The type of the object that is assigned * @return <code>true</code> iff definedType = typeToAssign is a valid assignment */ public static boolean canAssign(ITypeBinding typeToAssign, ITypeBinding definedType) { TypeEnvironment typeEnvironment= new TypeEnvironment(false, true); TType defined= typeEnvironment.create(definedType); TType toAssign= typeEnvironment.create(typeToAssign); return toAssign.canAssignTo(defined); }
/** * 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; }
public TType getJavaLangObject() { return fTypeEnvironment.getJavaLangObject(); }
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; }
public TType create(ITypeBinding binding) { if (binding.isPrimitive()) { return createPrimitiveType(binding); } else if (binding.isArray()) { return createArrayType(binding); } else if (binding.isRawType()) { return createRawType(binding); } else if (binding.isGenericType()) { return createGenericType(binding); } else if (binding.isParameterizedType()) { return createParameterizedType(binding); } else if (binding.isTypeVariable()) { return createTypeVariable(binding); } else if (binding.isWildcardType()) { if (binding.getBound() == null) { return createUnboundWildcardType(binding); } else if (binding.isUpperbound()) { return createExtendsWildCardType(binding); } else { return createSuperWildCardType(binding); } } else if (binding.isCapture()) { return createCaptureType(binding); } if ("null".equals(binding.getName())) //$NON-NLS-1$ return NULL; return createStandardType(binding); }
public TType[] create(ITypeBinding[] bindings) { TType[] result= new TType[bindings.length]; for (int i= 0; i < bindings.length; i++) { result[i]= create(bindings[i]); } return result; }
protected void initialize(ITypeBinding binding) { super.initialize(binding); ITypeBinding[] bounds= binding.getTypeBounds(); if (bounds.length == 0) { fBounds= EMPTY_TYPE_ARRAY; if (getEnvironment().getJavaLangObject() == null) { getEnvironment().initializeJavaLangObject(binding.getErasure()); } } else { fBounds= new TType[bounds.length]; for (int i= 0; i < bounds.length; i++) { fBounds[i]= getEnvironment().create(bounds[i]); } } }
private GenericType createGenericType(ITypeBinding binding) { IJavaElement javaElement= binding.getJavaElement(); GenericType result= fGenericTypes.get(javaElement); if (result != null) return result; result= new GenericType(this); fGenericTypes.put(javaElement, result); result.initialize(binding, (IType)javaElement); cacheSubType(result.getSuperclass(), result); cacheSubTypes(result.getInterfaces(), result); return result; }
public InferTypeArgumentsTCModel() { fTypeConstraints= new HashMap<>(); fConstraintVariables= new LinkedHashMap<>(); // make iteration independent of hashCode() implementation fCastVariables= new ArrayList<>(); fCuScopedConstraintVariables= new HashSet<>(); fTypeEnvironment= new TypeEnvironment(true); }
@Override public boolean visit(CompilationUnit node) { fTCModel.newCu(); //TODO: make sure that accumulators are reset after last CU! fCU= (ICompilationUnit) node.getJavaElement(); fTCModel.getTypeEnvironment().initializeJavaLangObject(fCU.getJavaProject()); return super.visit(node); }
private void cacheSubTypes(TType[] interfaces, TType result) { for (int i= 0; i < interfaces.length; i++) { cacheSubType(interfaces[i], result); } }
if (lhs.getKind() == STANDARD_TYPE) { IJavaProject javaProject= ((StandardType)lhs).getJavaElementType().getJavaProject(); return getEnvironment().createBoxed(this, javaProject).canAssignTo(lhs);
public TType create(ITypeBinding binding) { if (binding.isPrimitive()) { return createPrimitiveType(binding); } else if (binding.isArray()) { return createArrayType(binding); } else if (binding.isRawType()) { return createRawType(binding); } else if (binding.isGenericType()) { return createGenericType(binding); } else if (binding.isParameterizedType()) { return createParameterizedType(binding); } else if (binding.isTypeVariable()) { return createTypeVariable(binding); } else if (binding.isWildcardType()) { if (binding.getBound() == null) { return createUnboundWildcardType(binding); } else if (binding.isUpperbound()) { return createExtendsWildCardType(binding); } else { return createSuperWildCardType(binding); return create(binding.getWildcard()); } else { return createCaptureType(binding); return createStandardType(binding);
public TType[] create(ITypeBinding[] bindings) { TType[] result= new TType[bindings.length]; for (int i= 0; i < bindings.length; i++) { result[i]= create(bindings[i]); } return result; }
@Override protected void initialize(ITypeBinding binding) { super.initialize(binding); ITypeBinding[] bounds= binding.getTypeBounds(); if (bounds.length == 0) { fBounds= EMPTY_TYPE_ARRAY; if (getEnvironment().getJavaLangObject() == null) { getEnvironment().initializeJavaLangObject(binding.getErasure()); } } else { fBounds= new TType[bounds.length]; for (int i= 0; i < bounds.length; i++) { fBounds[i]= getEnvironment().create(bounds[i]); } } }
private GenericType createGenericType(ITypeBinding binding) { IJavaElement javaElement= binding.getJavaElement(); GenericType result= fGenericTypes.get(javaElement); if (result != null) return result; result= new GenericType(this); fGenericTypes.put(javaElement, result); result.initialize(binding, (IType)javaElement); cacheSubType(result.getSuperclass(), result); cacheSubTypes(result.getInterfaces(), result); return result; }
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 InferTypeArgumentsTCModel() { fTypeConstraints= new HashMap(); fConstraintVariables= new LinkedHashMap(); // make iteration independent of hashCode() implementation fCastVariables= new ArrayList(); fCuScopedConstraintVariables= new HashSet(); fTypeEnvironment= new TypeEnvironment(true); }
@Override public boolean visit(CompilationUnit node) { fTCModel.newCu(); //TODO: make sure that accumulators are reset after last CU! fCU= (ICompilationUnit) node.getJavaElement(); fTCModel.getTypeEnvironment().initializeJavaLangObject(fCU.getJavaProject()); return super.visit(node); }
private void cacheSubTypes(TType[] interfaces, TType result) { for (int i= 0; i < interfaces.length; i++) { cacheSubType(interfaces[i], result); } }