Bug 550726: Convert to enhanced for loop results in NPE

Change-Id: Id1e5e3af25cc31b23f159da89f3664bbe35a131e
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ConvertForLoopOperation.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ConvertForLoopOperation.java
index 4b4b076..2256b01 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ConvertForLoopOperation.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ConvertForLoopOperation.java
@@ -868,7 +868,7 @@
 			@Override
 			public boolean visit(MethodInvocation node) {
 				IBinding binding= node.resolveMethodBinding();
-				if (binding != null && getBinding.equals(binding)) {
+				if (binding != null && binding.equals(getBinding)) {
 					List<Expression> args = node.arguments();
 					if (args.size() == 1 && args.get(0) instanceof SimpleName
 							&& indexBinding.equals(((SimpleName)args.get(0)).resolveBinding())) {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
index 3fcf087..8557ebf 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
@@ -4267,6 +4267,43 @@
 		assertRefactoringResultAsExpected(new ICompilationUnit[] {cu1}, new String[] {expected1});
 	}
 
+	public void testBug550726() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		StringBuilder buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("import java.io.File;\n");
+		buf.append("import java.util.ArrayList;\n");
+		buf.append("import java.util.List;\n");
+		buf.append("public class A {\n");
+		buf.append("    public static void main(String[] args) {\n");
+		buf.append("        List<File> a = new ArrayList<>();\n");
+		buf.append("        for (int i = 0; i < a.size(); i++) {\n");
+		buf.append("            System.out.print(a);\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		ICompilationUnit cu1= pack1.createCompilationUnit("A.java", buf.toString(), false, null);
+
+		enable(CleanUpConstants.CONTROL_STATMENTS_CONVERT_FOR_LOOP_TO_ENHANCED);
+
+		buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("import java.io.File;\n");
+		buf.append("import java.util.ArrayList;\n");
+		buf.append("import java.util.List;\n");
+		buf.append("public class A {\n");
+		buf.append("    public static void main(String[] args) {\n");
+		buf.append("        List<File> a = new ArrayList<>();\n");
+		buf.append("        for (File element : a) {\n");
+		buf.append("            System.out.print(a);\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		String expected1= buf.toString();
+		
+		assertRefactoringResultAsExpected(new ICompilationUnit[] {cu1}, new String[] {expected1});
+	}
+
 	public void testJava50ForLoopBug154939() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuilder buf= new StringBuilder();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertForLoopQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertForLoopQuickFixTest.java
index a37a20d..ba07592 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertForLoopQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertForLoopQuickFixTest.java
@@ -1104,6 +1104,48 @@
 		assertCorrectLabels(proposals);
 	}
 
+	public void testBug550726() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		StringBuilder buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("import java.io.File;\n");
+		buf.append("import java.util.ArrayList;\n");
+		buf.append("import java.util.List;\n");
+		buf.append("public class A {\n");
+		buf.append("    public static void main(String[] args) {\n");
+		buf.append("        List<File> a = new ArrayList<>();\n");
+		buf.append("        for (int i = 0; i < a.size(); i++) {\n");
+		buf.append("            System.out.print(a);\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		ICompilationUnit cu= pack1.createCompilationUnit("A.java", buf.toString(), false, null);
+
+		List<IJavaCompletionProposal> proposals= fetchConvertingProposal(buf, cu);
+
+		assertNotNull(fConvertLoopProposal);
+
+		String preview1= getPreviewContent(fConvertLoopProposal);
+
+		buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("import java.io.File;\n");
+		buf.append("import java.util.ArrayList;\n");
+		buf.append("import java.util.List;\n");
+		buf.append("public class A {\n");
+		buf.append("    public static void main(String[] args) {\n");
+		buf.append("        List<File> a = new ArrayList<>();\n");
+		buf.append("        for (File element : a) {\n");
+		buf.append("            System.out.print(a);\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		String expected= buf.toString();
+		assertEqualString(preview1, expected);
+
+		assertCorrectLabels(proposals);
+	}
+
 	public void testArrayAccessWithCollections() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuilder buf= new StringBuilder();