private ParameterizedType findSameDeclaration(GenericType targetDeclaration) { if (fTypeDeclaration.equals(targetDeclaration)) return this; ParameterizedType result= null; TType type= getSuperclass(); if (type != null && type.getKind() == PARAMETERIZED_TYPE) { result= ((ParameterizedType)type).findSameDeclaration(targetDeclaration); if (result != null) return result; } TType[] interfaces= getInterfaces(); for (int i= 0; i < interfaces.length; i++) { type= interfaces[i]; if (type != null && type.getKind() == PARAMETERIZED_TYPE) { result= ((ParameterizedType)type).findSameDeclaration(targetDeclaration); if (result != null) return result; } } return null; }
@Override public boolean doEquals(TType type) { ParameterizedType other= (ParameterizedType)type; if (! getBindingKey().equals(other.getBindingKey())) return false; if (! getJavaElementType().equals(other.getJavaElementType())) return false; return true; }
private ParameterizedType createParameterizedType(ITypeBinding binding) { IJavaProject javaProject= binding.getJavaElement().getJavaProject(); String bindingKey= binding.getKey(); ProjectKeyPair pair= new ProjectKeyPair(javaProject, bindingKey); ParameterizedType result= (ParameterizedType)fParameterizedTypes.get(pair); if (result != null) return result; result= new ParameterizedType(this); fParameterizedTypes.put(pair, result); result.initialize(binding, (IType)binding.getJavaElement()); cacheSubType(result.getSuperclass(), result); cacheSubTypes(result.getInterfaces(), result); return result; }
@Override protected boolean doCanAssignTo(TType lhs) { int targetType= lhs.getKind(); switch (targetType) { case NULL_TYPE: return false; case VOID_TYPE: return false; case PRIMITIVE_TYPE: return false; case ARRAY_TYPE: return false; case STANDARD_TYPE: return canAssignToStandardType((StandardType)lhs); case GENERIC_TYPE: return false; case PARAMETERIZED_TYPE: return canAssignToParameterizedType((ParameterizedType)lhs); case RAW_TYPE: return canAssignToRawType((RawType)lhs); case UNBOUND_WILDCARD_TYPE: case SUPER_WILDCARD_TYPE: case EXTENDS_WILDCARD_TYPE: return ((WildcardType)lhs).checkAssignmentBound(this); case TYPE_VARIABLE: return false; case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this); } return false; }
protected String getPlainPrettySignature() { StringBuffer result= new StringBuffer(getJavaElementType().getFullyQualifiedName('.')); result.append("<"); //$NON-NLS-1$ result.append(fTypeArguments[0].getPlainPrettySignature()); for (int i= 1; i < fTypeArguments.length; i++) { result.append(", "); //$NON-NLS-1$ result.append(fTypeArguments[i].getPlainPrettySignature()); } result.append(">"); //$NON-NLS-1$ return result.toString(); } }
protected void initialize(ITypeBinding binding, IType javaElementType) { Assert.isTrue(binding.isParameterizedType()); super.initialize(binding, javaElementType); TypeEnvironment environment= getEnvironment(); fTypeDeclaration= (GenericType)environment.create(binding.getTypeDeclaration()); ITypeBinding[] typeArguments= binding.getTypeArguments(); fTypeArguments= new TType[typeArguments.length]; for (int i= 0; i < typeArguments.length; i++) { fTypeArguments[i]= environment.create(typeArguments[i]); } }
@Override protected boolean isTypeEquivalentTo(TType other) { int otherElementType= other.getKind(); if (otherElementType == RAW_TYPE || otherElementType == GENERIC_TYPE) return getErasure().isTypeEquivalentTo(other.getErasure()); return super.isTypeEquivalentTo(other); }
public int hashCode() { return getBindingKey().hashCode(); }
private boolean canAssignToParameterizedType(ParameterizedType target) { GenericType targetDeclaration= target.fTypeDeclaration; ParameterizedType sameSourceType= findSameDeclaration(targetDeclaration); if (sameSourceType == null) return false; TType[] targetArguments= target.fTypeArguments; TType[] sourceArguments= sameSourceType.fTypeArguments; if (targetArguments.length != sourceArguments.length) return false; for (int i= 0; i < sourceArguments.length; i++) { if (!targetArguments[i].checkTypeArgument(sourceArguments[i])) return false; } return true; }
private ParameterizedType createParameterizedType(ITypeBinding binding) { IJavaProject javaProject= binding.getJavaElement().getJavaProject(); String bindingKey= binding.getKey(); ProjectKeyPair pair= new ProjectKeyPair(javaProject, bindingKey); ParameterizedType result= fParameterizedTypes.get(pair); if (result != null) return result; result= new ParameterizedType(this); fParameterizedTypes.put(pair, result); result.initialize(binding, (IType)binding.getJavaElement()); cacheSubType(result.getSuperclass(), result); cacheSubTypes(result.getInterfaces(), result); return result; }
@Override protected boolean doCanAssignTo(TType lhs) { int targetType= lhs.getKind(); switch (targetType) { case NULL_TYPE: return false; case VOID_TYPE: return false; case PRIMITIVE_TYPE: return false; case ARRAY_TYPE: return false; case STANDARD_TYPE: return canAssignToStandardType((StandardType)lhs); case GENERIC_TYPE: return false; case PARAMETERIZED_TYPE: return canAssignToParameterizedType((ParameterizedType)lhs); case RAW_TYPE: return canAssignToRawType((RawType)lhs); case UNBOUND_WILDCARD_TYPE: case SUPER_WILDCARD_TYPE: case EXTENDS_WILDCARD_TYPE: return ((WildcardType)lhs).checkAssignmentBound(this); case TYPE_VARIABLE: return false; case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this); } return false; }
@Override public String getName() { StringBuffer result= new StringBuffer(getJavaElementType().getElementName()); result.append("<"); //$NON-NLS-1$ result.append(fTypeArguments[0].getName()); for (int i= 1; i < fTypeArguments.length; i++) { result.append(", "); //$NON-NLS-1$ result.append(fTypeArguments[i].getName()); } result.append(">"); //$NON-NLS-1$ return result.toString(); }
@Override protected void initialize(ITypeBinding binding, IType javaElementType) { Assert.isTrue(binding.isParameterizedType()); super.initialize(binding, javaElementType); TypeEnvironment environment= getEnvironment(); fTypeDeclaration= (GenericType)environment.create(binding.getTypeDeclaration()); ITypeBinding[] typeArguments= binding.getTypeArguments(); fTypeArguments= new TType[typeArguments.length]; for (int i= 0; i < typeArguments.length; i++) { fTypeArguments[i]= environment.create(typeArguments[i]); } }
protected boolean isTypeEquivalentTo(TType other) { int otherElementType= other.getKind(); if (otherElementType == RAW_TYPE || otherElementType == GENERIC_TYPE) return getErasure().isTypeEquivalentTo(other.getErasure()); return super.isTypeEquivalentTo(other); }
@Override public int hashCode() { return getBindingKey().hashCode(); }
private boolean canAssignToParameterizedType(ParameterizedType target) { GenericType targetDeclaration= target.fTypeDeclaration; ParameterizedType sameSourceType= findSameDeclaration(targetDeclaration); if (sameSourceType == null) return false; TType[] targetArguments= target.fTypeArguments; TType[] sourceArguments= sameSourceType.fTypeArguments; if (targetArguments.length != sourceArguments.length) return false; for (int i= 0; i < sourceArguments.length; i++) { if (!targetArguments[i].checkTypeArgument(sourceArguments[i])) return false; } return true; }
private ParameterizedType createParameterizedType(ITypeBinding binding) { IJavaProject javaProject= binding.getJavaElement().getJavaProject(); String bindingKey= binding.getKey(); ProjectKeyPair pair= new ProjectKeyPair(javaProject, bindingKey); ParameterizedType result= fParameterizedTypes.get(pair); if (result != null) return result; result= new ParameterizedType(this); fParameterizedTypes.put(pair, result); result.initialize(binding, (IType)binding.getJavaElement()); cacheSubType(result.getSuperclass(), result); cacheSubTypes(result.getInterfaces(), result); return result; }
private ParameterizedType findSameDeclaration(GenericType targetDeclaration) { if (fTypeDeclaration.equals(targetDeclaration)) return this; ParameterizedType result= null; TType type= getSuperclass(); if (type != null && type.getKind() == PARAMETERIZED_TYPE) { result= ((ParameterizedType)type).findSameDeclaration(targetDeclaration); if (result != null) return result; } TType[] interfaces= getInterfaces(); for (int i= 0; i < interfaces.length; i++) { type= interfaces[i]; if (type != null && type.getKind() == PARAMETERIZED_TYPE) { result= ((ParameterizedType)type).findSameDeclaration(targetDeclaration); if (result != null) return result; } } return null; }
protected boolean doCanAssignTo(TType lhs) { int targetType= lhs.getKind(); switch (targetType) { case NULL_TYPE: return false; case VOID_TYPE: return false; case PRIMITIVE_TYPE: return false; case ARRAY_TYPE: return false; case STANDARD_TYPE: return canAssignToStandardType((StandardType)lhs); case GENERIC_TYPE: return false; case PARAMETERIZED_TYPE: return canAssignToParameterizedType((ParameterizedType)lhs); case RAW_TYPE: return canAssignToRawType((RawType)lhs); case UNBOUND_WILDCARD_TYPE: case SUPER_WILDCARD_TYPE: case EXTENDS_WILDCARD_TYPE: return ((WildcardType)lhs).checkAssignmentBound(this); case TYPE_VARIABLE: return false; case CAPTURE_TYPE: return ((CaptureType)lhs).checkLowerBound(this); } return false; }
@Override public boolean doEquals(TType type) { ParameterizedType other= (ParameterizedType)type; if (! getBindingKey().equals(other.getBindingKey())) return false; if (! getJavaElementType().equals(other.getJavaElementType())) return false; return true; }