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
}
		return null;
	}
	public static Type guessTypeForReference(AST ast, ASTNode node) {
		ASTNode parent= node.getParent();
		while (parent != null) {
			switch (parent.getNodeType()) {
				case ASTNode.VARIABLE_DECLARATION_FRAGMENT:
					if (((VariableDeclarationFragment) parent).getInitializer() == node) {
						return ASTNodeFactory.newType(ast, (VariableDeclaration) parent);
					}
					return null;
				case ASTNode.SINGLE_VARIABLE_DECLARATION:
					if (((VariableDeclarationFragment) parent).getInitializer() == node) {
						return ASTNodeFactory.newType(ast, (VariableDeclaration) parent);
					}
					return null;
				case ASTNode.ARRAY_ACCESS:
					if (!((ArrayAccess) parent).getIndex().equals(node)) {
						Type type= guessTypeForReference(ast, parent);
						if (type != null) {
							return ast.newArrayType(type);
						}
					}
					return null;
				case ASTNode.FIELD_ACCESS:
					if (node.equals(((FieldAccess) parent).getName())) {
						node= parent;
						parent= parent.getParent();
					} else {