private void removeUnboxingForCast( final InvocationExpression e, final MemberReferenceExpression target, final CastExpression parent) { final TypeReference targetType = parent.getType().toTypeReference(); if (targetType == null || !targetType.isPrimitive()) { return; } final Expression boxedValue = target.getTarget(); final ResolveResult boxedValueResult = _resolver.apply(boxedValue); if (boxedValueResult == null || boxedValueResult.getType() == null) { return; } final TypeReference sourceType = boxedValueResult.getType(); final ConversionType conversionType = MetadataHelper.getNumericConversionType(targetType, sourceType); switch (conversionType) { case IMPLICIT: case EXPLICIT: case EXPLICIT_TO_UNBOXED: { boxedValue.remove(); e.replaceWith(boxedValue); return; } default: return; } }
private void removeUnboxingForCast( final InvocationExpression e, final MemberReferenceExpression target, final CastExpression parent) { final TypeReference targetType = parent.getType().toTypeReference(); if (targetType == null || !targetType.isPrimitive()) { return; } final Expression boxedValue = target.getTarget(); final ResolveResult boxedValueResult = _resolver.apply(boxedValue); if (boxedValueResult == null || boxedValueResult.getType() == null) { return; } final TypeReference sourceType = boxedValueResult.getType(); final ConversionType conversionType = MetadataHelper.getNumericConversionType(targetType, sourceType); switch (conversionType) { case IMPLICIT: case EXPLICIT: case EXPLICIT_TO_UNBOXED: { boxedValue.remove(); e.replaceWith(boxedValue); return; } default: return; } }
final TypeReference sourceType = unboxMethod.getDeclaringType(); switch (MetadataHelper.getNumericConversionType(targetType, sourceType)) { case IDENTITY: case IMPLICIT:
public static boolean isConvertible(final TypeReference source, final TypeReference target, final boolean allowUnchecked) { VerifyArgument.notNull(source, "source"); VerifyArgument.notNull(target, "target"); final boolean tPrimitive = target.isPrimitive(); final boolean sPrimitive = source.isPrimitive(); if (source == BuiltinTypes.Null) { return !tPrimitive; } if (target.isWildcardType() && target.isUnbounded()) { return !sPrimitive; } if (tPrimitive == sPrimitive) { return allowUnchecked ? isSubTypeUnchecked(source, target) : isSubType(source, target); } if (tPrimitive) { return getNumericConversionType(target, source).isImplicit(); } return allowUnchecked ? isSubTypeUnchecked(getBoxedTypeOrSelf(source), target) : isSubType(getBoxedTypeOrSelf(source), target); }
final ConversionType unboxedConversion = getNumericConversionType(target, unboxedSourceType); switch (getNumericConversionType(unboxedTargetType, source)) { case IDENTITY: return ConversionType.IMPLICIT;
final ConversionType unboxedConversion = getNumericConversionType(target, unboxedSourceType); switch (getNumericConversionType(unboxedTargetType, source)) { case IDENTITY: return ConversionType.IMPLICIT;
public static boolean isConvertible(final TypeReference source, final TypeReference target, final boolean allowUnchecked) { VerifyArgument.notNull(source, "source"); VerifyArgument.notNull(target, "target"); final boolean tPrimitive = target.isPrimitive(); final boolean sPrimitive = source.isPrimitive(); if (source == BuiltinTypes.Null) { return !tPrimitive; } if (target.isWildcardType() && target.isUnbounded()) { return !sPrimitive; } if (tPrimitive == sPrimitive) { return allowUnchecked ? isSubTypeUnchecked(source, target) : isSubType(source, target); } if (tPrimitive) { switch (getNumericConversionType(target, source)) { case IDENTITY: case IMPLICIT: return true; default: return false; } } return allowUnchecked ? isSubTypeUnchecked(getBoxedTypeOrSelf(source), target) : isSubType(getBoxedTypeOrSelf(source), target); }
public static boolean isConvertible(final TypeReference source, final TypeReference target, final boolean allowUnchecked) { VerifyArgument.notNull(source, "source"); VerifyArgument.notNull(target, "target"); final boolean tPrimitive = target.isPrimitive(); final boolean sPrimitive = source.isPrimitive(); if (source == BuiltinTypes.Null) { return !tPrimitive; } if (target.isWildcardType() && target.isUnbounded()) { return !sPrimitive; } if (tPrimitive == sPrimitive) { return allowUnchecked ? isSubTypeUnchecked(source, target) : isSubType(source, target); } if (tPrimitive) { switch (getNumericConversionType(target, source)) { case IDENTITY: case IMPLICIT: return true; default: return false; } } return allowUnchecked ? isSubTypeUnchecked(getBoxedTypeOrSelf(source), target) : isSubType(getBoxedTypeOrSelf(source), target); }
/** * Determines the numeric conversion type, taking lossiness into consideration. * Returns {@link ConversionType#NONE} if a determination could not be made. */ private ConversionType getNumericConversion( @NotNull final TypeReference target, @NotNull final TypeReference source, @Nullable final Expression value) { final TypeReference unboxedTarget = unbox(target); final TypeReference unboxedSource = unbox(source); final JvmType jvmSource = unboxedSource.getSimpleType(); final JvmType jvmTarget = unboxedTarget.getSimpleType(); if (jvmSource == JvmType.Boolean || !jvmSource.isNumeric() || jvmTarget == JvmType.Boolean || !jvmTarget.isNumeric()) { return ConversionType.NONE; } final ResolveResult resolveResult = value != null ? _resolver.apply(value) : null; final Object constantValue = resolveResult != null ? resolveResult.getConstantValue() : null; if (constantValue != null && isValidPrimitiveLiteralAssignment(unboxedTarget, constantValue) && isValidPrimitiveLiteralAssignment(unboxedSource, constantValue)) { return ConversionType.IDENTITY; } return MetadataHelper.getNumericConversionType(target, source); }
final ConversionType unboxedConversion = getNumericConversionType(target, unboxedSourceType); switch (getNumericConversionType(unboxedTargetType, source)) { case IDENTITY: return ConversionType.IMPLICIT;
final ConversionType conversionType = MetadataHelper.getNumericConversionType(targetType, sourceType);
final TypeReference sourceType = boxedValueResult.getType(); switch (MetadataHelper.getNumericConversionType(targetType, sourceType)) { case IDENTITY: case IMPLICIT: {
final TypeReference sourceType = boxedValueResult.getType(); switch (MetadataHelper.getNumericConversionType(targetType, sourceType)) { case IDENTITY: case IMPLICIT: {
final ConversionType conversionType = MetadataHelper.getNumericConversionType(targetType, sourceType);
final ConversionType conversionType = MetadataHelper.getNumericConversionType(targetType, sourceType);
return getNumericConversionType(target, source);
final ConversionType conversionType = MetadataHelper.getNumericConversionType(castType, opType); final ConversionType conversionType = MetadataHelper.getNumericConversionType(castType, unboxedOpType);
return getNumericConversionType(target, source);
return getNumericConversionType(target, source);
final ConversionType conversionType = MetadataHelper.getNumericConversionType(castType, opType); final ConversionType conversionType = MetadataHelper.getNumericConversionType(castType, unboxedOpType);