diff -r 751e1d3a8c65 java.hints/src/org/netbeans/modules/java/hints/errors/AddParameterOrLocalFix.java --- a/java.hints/src/org/netbeans/modules/java/hints/errors/AddParameterOrLocalFix.java Sat Apr 11 01:04:14 2009 +0200 +++ b/java.hints/src/org/netbeans/modules/java/hints/errors/AddParameterOrLocalFix.java Mon Apr 13 13:52:04 2009 +0100 @@ -43,6 +43,7 @@ import com.sun.source.tree.AssignmentTree; import com.sun.source.tree.BlockTree; +import com.sun.source.tree.EnhancedForLoopTree; import com.sun.source.tree.ExpressionStatementTree; import com.sun.source.tree.ExpressionTree; import com.sun.source.tree.IdentifierTree; @@ -298,7 +299,9 @@ Tree statementParent = firstUse.getParentPath().getLeaf(); VariableTree vt = make.Variable(make.Modifiers(EnumSet.noneOf(Modifier.class)), name, make.Type(proposedType), null); - if (statementParent.getKind() == Kind.BLOCK) { + if (statement.getKind() == Kind.ENHANCED_FOR_LOOP && tp.getParentPath().getLeaf().getKind() == Kind.VARIABLE) { + wc.rewrite(((EnhancedForLoopTree) statement).getVariable(), vt); + } else if (statementParent.getKind() == Kind.BLOCK) { BlockTree block = (BlockTree) statementParent; FirstUsage fu = new FirstUsage(); diff -r 751e1d3a8c65 java.hints/src/org/netbeans/modules/java/hints/errors/CreateElementUtilities.java --- a/java.hints/src/org/netbeans/modules/java/hints/errors/CreateElementUtilities.java Sat Apr 11 01:04:14 2009 +0200 +++ b/java.hints/src/org/netbeans/modules/java/hints/errors/CreateElementUtilities.java Mon Apr 13 13:52:04 2009 +0100 @@ -457,12 +457,25 @@ return Collections.singletonList(info.getTrees().getTypeMirror(new TreePath(parent, vt.getType()))); } - if (vt.getType() == error) { - types.add(ElementKind.CLASS); - return Collections.emptyList(); + TreePath context = parent.getParentPath(); + if (vt.getType() != error || context == null) { + return null; } - return null; + switch (context.getLeaf().getKind()) { + case ENHANCED_FOR_LOOP: + ExpressionTree iterable = ((EnhancedForLoopTree) context.getLeaf()).getExpression(); + TypeMirror iterableType = info.getTrees().getTypeMirror(new TreePath(context, iterable)); + if (iterableType == null) { + return null; + } + types.add(ElementKind.LOCAL_VARIABLE); + // hack for testing + return Collections.singletonList(info.getElements().getTypeElement("java.lang.Object").asType()); //NOI18N + default: + types.add(ElementKind.CLASS); + return Collections.emptyList(); + } } private static List computeAssert(Set types, CompilationInfo info, TreePath parent, Tree error, int offset) {