Bug 82940 [quick fix] Missing sensible conversion suggestion
For this code > % cat Test.java import java.util.Collections; import java.util.List; public class Test { interface Wrapper { int doit(); } private static final List<Wrapper> STD_WRAPPERS = Collections.singletonList ((Wrapper)new Wrapper() { public int doit() { return 0; } }); private static final List<Wrapper> STD_WRAPPERS2 = Collections.singletonList (new Wrapper() { public int doit() { return 0; } }); } The value passed Collections.singletonList is actually of the right type so a sensible conversion would be to put in the cast (see the difference between the 2 statics). The current quick fixes offered assume the type being assigned to is wrong (when infact it is right). A useful quick fix would be to cast the parameter to the right type to give the left type (this would help with any 1 arg method of the form X<T> method(T)
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ASTResolving.java
public static ITypeBinding guessBindingForTypeReference(ASTNode node) {
    	return Bindings.normalizeTypeBinding(getPossibleTypeBinding(node));
    }
    private static ITypeBinding getPossibleTypeBinding(ASTNode node) {
    	ASTNode parent= node.getParent();
    	while (parent instanceof Type) {
    		parent= parent.getParent();
    	}
    	switch (parent.getNodeType()) {
    	case ASTNode.VARIABLE_DECLARATION_STATEMENT:
    		return guessVariableType(((VariableDeclarationStatement) parent).fragments());
		case ASTNode.FIELD_DECLARATION:
			return guessVariableType(((FieldDeclaration) parent).fragments());
		case ASTNode.VARIABLE_DECLARATION_EXPRESSION:
			return guessVariableType(((VariableDeclarationExpression) parent).fragments());
		case ASTNode.SINGLE_VARIABLE_DECLARATION:
			SingleVariableDeclaration varDecl= (SingleVariableDeclaration) parent;
			if (varDecl.getInitializer() != null) {
				return varDecl.getInitializer().resolveTypeBinding();
			}
			break;
		case ASTNode.ARRAY_CREATION:
			ArrayCreation creation= (ArrayCreation) parent;
			if (creation.getInitializer() != null) {
				return creation.getInitializer().resolveTypeBinding();
			}
			return getPossibleReferenceBinding(parent);
        case ASTNode.TYPE_LITERAL:
        case ASTNode.CLASS_INSTANCE_CREATION:
        	return getPossibleReferenceBinding(parent);