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
case ASTNode.TAG_ELEMENT:
        	TagElement tagElement= (TagElement) parent;
        	if ("@throws".equals(tagElement.getTagName()) || "@exception".equals(tagElement.getTagName())) {  
        		ASTNode methNode= tagElement.getParent().getParent();
        		if (methNode instanceof MethodDeclaration) {
        			List thrownExcpetions= ((MethodDeclaration) methNode).thrownExceptions();
        			if (thrownExcpetions.size() == 1) {
        				return ((Name) thrownExcpetions.get(0)).resolveTypeBinding();
        			}
        		}
        	}
        	break;
     	}
    	return null;
    }
   	private static ITypeBinding guessVariableType(List fragments) {
		for (Iterator iter= fragments.iterator(); iter.hasNext();) {
			VariableDeclarationFragment frag= (VariableDeclarationFragment) iter.next();
			if (frag.getInitializer() != null) {
				return frag.getInitializer().resolveTypeBinding();
			}
		}
		return null;
	}
   	/**
   	 *@return  Returns all types known in the AST that have a method with a given name
   	 */
	public static ITypeBinding[] getQualifierGuess(ASTNode searchRoot, final String selector, List arguments, final IBinding context) {
		final int nArgs= arguments.size();
		final ArrayList result= new ArrayList();