Bug 98344 smart completion for anonymous inner type of abstract inner class missing methods
I'm using Eclipse 3.1 RC1. First I input the following class into Eclipse: public class Test { abstract class Foo { abstract void doSomething(); } void bar() { Foo f = new Foo(); } } The class does not compile because Foo is abstract. If I put the cursor between the parens of the Foo() constructor call and hit CTRL+SPACE, it brings up an "Override/Implement Methods" dialog box, but in that dialog box I only see the methods for java.lang.Object, not the expected Foo.doSomething() method. If Foo is a separate top-level class and not an inner class, the Foo.doSomething() method shows up in the dialog as expected. It also works if I add an open and close curly brace before the semicolon, and then go to the Source menu and choose Override/Implement Methods.
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeCompletionProposal.java
dialog.setElementPositionEnabled(false);
						if (dialog.open() == Window.OK) {
							Object[] selection= dialog.getResult();
							if (selection != null) {
								ArrayList result= new ArrayList(selection.length);
								for (int index= 0; index < selection.length; index++) {
									if (selection[index] instanceof IMethodBinding)
										result.add(((IBinding) selection[index]).getKey());
								}
								keys= (String[]) result.toArray(new String[result.size()]);
								settings.createComments= dialog.getGenerateComment();
							}
						}
					} else {
						settings.createComments= false;
						List list= new ArrayList();
						for (int index= 0; index < bindings.length; index++) {
							if (Modifier.isAbstract(bindings[index].getModifiers()))
								list.add(bindings[index].getKey());
						}
						keys= (String[]) list.toArray(new String[list.size()]);
					}
					if (keys == null) {
						setReplacementString(""); 
						setReplacementLength(0);
						return false;
					}
					ASTRewrite rewrite= ASTRewrite.create(unit.getAST());
					ListRewrite rewriter= rewrite.getListRewrite(declaration, declaration.getBodyDeclarationsProperty());
					String key= null;