protected String getPlainPrettySignature() { StringBuffer result= new StringBuffer(getJavaElementType().getFullyQualifiedName('.')); result.append("<"); //$NON-NLS-1$ result.append(fTypeParameters[0].getPrettySignature()); for (int i= 1; i < fTypeParameters.length; i++) { result.append(", "); //$NON-NLS-1$ result.append(fTypeParameters[i].getPrettySignature()); } result.append(">"); //$NON-NLS-1$ return result.toString(); } }
private TypeVariable createTypeVariable(ITypeBinding binding) { IJavaElement javaElement= binding.getJavaElement(); TypeVariable result= (TypeVariable)fTypeVariables.get(javaElement); if (result != null) return result; result= new TypeVariable(this); fTypeVariables.put(javaElement, result); result.initialize(binding, (ITypeParameter)javaElement); return result; }
public CollectionElementVariable2 getElementVariable(ConstraintVariable2 constraintVariable, TypeVariable typeVariable) { Assert.isTrue(typeVariable.isTypeVariable()); // includes null check HashMap typeVarToElementVars= (HashMap) constraintVariable.getData(INDEXED_COLLECTION_ELEMENTS); if (typeVarToElementVars == null) return null; return (CollectionElementVariable2) typeVarToElementVars.get(typeVariable.getBindingKey()); }
protected boolean doCanAssignTo(TType lhs) { switch (lhs.getKind()) { case NULL_TYPE: case VOID_TYPE: return false; case PRIMITIVE_TYPE: case ARRAY_TYPE: return false; 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 doExtends((TypeVariable)lhs); case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this); } return false; }
public CollectionElementVariable2(ConstraintVariable2 parentCv, TypeVariable typeVariable, int declarationTypeVariableIndex) { super(null); fParentCv= parentCv; fTypeVariableKey= typeVariable.getBindingKey(); fDeclarationTypeVariableIndex= declarationTypeVariableIndex; }
public void makeElementVariables(ConstraintVariable2 expressionCv, TType type) { if (isAGenericType(type)) { GenericType genericType= (GenericType) type.getTypeDeclaration(); TType[] typeParameters= genericType.getTypeParameters(); for (int i= 0; i < typeParameters.length; i++) { TypeVariable typeVariable= (TypeVariable) typeParameters[i]; makeElementVariable(expressionCv, typeVariable, i); if (typeVariable.getBounds().length != 0) { //TODO: create subtype constraints for bounds } } } makeElementVariablesFromSupertypes(expressionCv, type.getTypeDeclaration()); }
private void makeSupertypeElementVariables(ConstraintVariable2 expressionCv, TType supertype) { if (supertype.isParameterizedType() || supertype.isRawType()) { TType[] typeArguments= null; if (supertype.isParameterizedType()) { typeArguments= ((ParameterizedType) supertype).getTypeArguments(); } TypeVariable[] typeParameters= ((GenericType) supertype.getTypeDeclaration()).getTypeParameters(); for (int i= 0; i < typeParameters.length; i++) { TypeVariable typeParameter= typeParameters[i]; TType referenceTypeArgument; if (typeArguments == null) { // raw type referenceTypeArgument= typeParameter.getErasure(); } else { referenceTypeArgument= typeArguments[i]; } if (referenceTypeArgument.isTypeVariable()) { CollectionElementVariable2 referenceTypeArgumentCv= getElementVariable(expressionCv, (TypeVariable) referenceTypeArgument); setElementVariable(expressionCv, referenceTypeArgumentCv, typeParameter); } else { makeElementVariable(expressionCv, typeParameter, CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX); } } } makeElementVariablesFromSupertypes(expressionCv, supertype); }
protected boolean doCanAssignTo(TType lhs) { switch (lhs.getKind()) { case ARRAY_TYPE: case STANDARD_TYPE: case PARAMETERIZED_TYPE: case RAW_TYPE: return getBound().canAssignTo(lhs); case UNBOUND_WILDCARD_TYPE: return true; case SUPER_WILDCARD_TYPE: case EXTENDS_WILDCARD_TYPE: return ((WildcardType)lhs).checkAssignmentBound(getBound()); case TYPE_VARIABLE: return ((TypeVariable)lhs).checkAssignmentBound(getBound()); case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this); default: return false; } }
public CollectionElementVariable2 getElementVariable(ConstraintVariable2 constraintVariable, TypeVariable typeVariable) { Assert.isTrue(typeVariable.isTypeVariable()); // includes null check HashMap<String, CollectionElementVariable2> typeVarToElementVars= getIndexedCollectionElements(constraintVariable); if (typeVarToElementVars == null) return null; return typeVarToElementVars.get(typeVariable.getBindingKey()); }
@Override protected boolean doCanAssignTo(TType lhs) { switch (lhs.getKind()) { case NULL_TYPE: case VOID_TYPE: return false; case PRIMITIVE_TYPE: case ARRAY_TYPE: return false; 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 doExtends((TypeVariable)lhs); case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this); } return false; }
public CollectionElementVariable2(ConstraintVariable2 parentCv, TypeVariable typeVariable, int declarationTypeVariableIndex) { super(null); fParentCv= parentCv; fTypeVariableKey= typeVariable.getBindingKey(); fDeclarationTypeVariableIndex= declarationTypeVariableIndex; }
public void makeElementVariables(ConstraintVariable2 expressionCv, TType type) { if (isAGenericType(type)) { GenericType genericType= (GenericType) type.getTypeDeclaration(); TType[] typeParameters= genericType.getTypeParameters(); for (int i= 0; i < typeParameters.length; i++) { TypeVariable typeVariable= (TypeVariable) typeParameters[i]; makeElementVariable(expressionCv, typeVariable, i); if (typeVariable.getBounds().length != 0) { //TODO: create subtype constraints for bounds } } } makeElementVariablesFromSupertypes(expressionCv, type.getTypeDeclaration()); }
private void makeSupertypeElementVariables(ConstraintVariable2 expressionCv, TType supertype) { if (supertype.isParameterizedType() || supertype.isRawType()) { TType[] typeArguments= null; if (supertype.isParameterizedType()) { typeArguments= ((ParameterizedType) supertype).getTypeArguments(); } TypeVariable[] typeParameters= ((GenericType) supertype.getTypeDeclaration()).getTypeParameters(); for (int i= 0; i < typeParameters.length; i++) { TypeVariable typeParameter= typeParameters[i]; TType referenceTypeArgument; if (typeArguments == null) { // raw type referenceTypeArgument= typeParameter.getErasure(); } else { referenceTypeArgument= typeArguments[i]; } if (referenceTypeArgument.isTypeVariable()) { CollectionElementVariable2 referenceTypeArgumentCv= getElementVariable(expressionCv, (TypeVariable) referenceTypeArgument); if (referenceTypeArgumentCv != null) { setElementVariable(expressionCv, referenceTypeArgumentCv, typeParameter); continue; } } makeElementVariable(expressionCv, typeParameter, CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX); } } makeElementVariablesFromSupertypes(expressionCv, supertype); }
@Override protected boolean doCanAssignTo(TType lhs) { switch (lhs.getKind()) { case ARRAY_TYPE: case STANDARD_TYPE: case PARAMETERIZED_TYPE: case RAW_TYPE: return getBound().canAssignTo(lhs); case UNBOUND_WILDCARD_TYPE: return true; case SUPER_WILDCARD_TYPE: case EXTENDS_WILDCARD_TYPE: return ((WildcardType)lhs).checkAssignmentBound(getBound()); case TYPE_VARIABLE: return ((TypeVariable)lhs).checkAssignmentBound(getBound()); case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this); default: return false; } }
private TypeVariable createTypeVariable(ITypeBinding binding) { IJavaElement javaElement= binding.getJavaElement(); TypeVariable result= fTypeVariables.get(javaElement); if (result != null) return result; result= new TypeVariable(this); fTypeVariables.put(javaElement, result); result.initialize(binding, (ITypeParameter)javaElement); return result; }
public CollectionElementVariable2 getElementVariable(ConstraintVariable2 constraintVariable, TypeVariable typeVariable) { Assert.isTrue(typeVariable.isTypeVariable()); // includes null check HashMap<String, CollectionElementVariable2> typeVarToElementVars= getIndexedCollectionElements(constraintVariable); if (typeVarToElementVars == null) return null; return typeVarToElementVars.get(typeVariable.getBindingKey()); }
@Override protected boolean doCanAssignTo(TType lhs) { switch (lhs.getKind()) { case NULL_TYPE: case VOID_TYPE: return false; case PRIMITIVE_TYPE: case ARRAY_TYPE: return false; 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 doExtends((TypeVariable)lhs); case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this); } return false; }
@Override protected String getPlainPrettySignature() { StringBuffer result= new StringBuffer(getJavaElementType().getFullyQualifiedName('.')); result.append("<"); //$NON-NLS-1$ result.append(fTypeParameters[0].getPrettySignature()); for (int i= 1; i < fTypeParameters.length; i++) { result.append(", "); //$NON-NLS-1$ result.append(fTypeParameters[i].getPrettySignature()); } result.append(">"); //$NON-NLS-1$ return result.toString(); } }