View | Details | Raw Unified | Return to bug 271526 | Differences between
and this patch

Collapse All | Expand All

(-)a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest18.java (-18 / +18 lines)
Lines 1046-1052 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1046
		assertNoErrors(context);
1046
		assertNoErrors(context);
1047
		List proposals= collectAssists(context, false);
1047
		List proposals= collectAssists(context, false);
1048
1048
1049
		assertNumberOfProposals(proposals, 3);
1049
		assertNumberOfProposals(proposals, 4);
1050
		assertCorrectLabels(proposals);
1050
		assertCorrectLabels(proposals);
1051
1051
1052
		buf= new StringBuffer();
1052
		buf= new StringBuffer();
Lines 1193-1199 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1193
		assertNoErrors(context);
1193
		assertNoErrors(context);
1194
		List proposals= collectAssists(context, false);
1194
		List proposals= collectAssists(context, false);
1195
1195
1196
		assertNumberOfProposals(proposals, 2);
1196
		assertNumberOfProposals(proposals, 3);
1197
		assertCorrectLabels(proposals);
1197
		assertCorrectLabels(proposals);
1198
1198
1199
		buf= new StringBuffer();
1199
		buf= new StringBuffer();
Lines 1242-1248 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1242
		assertNoErrors(context);
1242
		assertNoErrors(context);
1243
		List proposals= collectAssists(context, false);
1243
		List proposals= collectAssists(context, false);
1244
1244
1245
		assertNumberOfProposals(proposals, 2);
1245
		assertNumberOfProposals(proposals, 3);
1246
		assertCorrectLabels(proposals);
1246
		assertCorrectLabels(proposals);
1247
1247
1248
		buf= new StringBuffer();
1248
		buf= new StringBuffer();
Lines 1338-1344 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1338
		assertNoErrors(context);
1338
		assertNoErrors(context);
1339
		List proposals= collectAssists(context, false);
1339
		List proposals= collectAssists(context, false);
1340
1340
1341
		assertNumberOfProposals(proposals, 3);
1341
		assertNumberOfProposals(proposals, 4);
1342
		assertCorrectLabels(proposals);
1342
		assertCorrectLabels(proposals);
1343
1343
1344
		buf= new StringBuffer();
1344
		buf= new StringBuffer();
Lines 1415-1421 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1415
		assertNoErrors(context);
1415
		assertNoErrors(context);
1416
		List proposals= collectAssists(context, false);
1416
		List proposals= collectAssists(context, false);
1417
1417
1418
		assertNumberOfProposals(proposals, 3);
1418
		assertNumberOfProposals(proposals, 4);
1419
		assertCorrectLabels(proposals);
1419
		assertCorrectLabels(proposals);
1420
1420
1421
		buf= new StringBuffer();
1421
		buf= new StringBuffer();
Lines 1476-1482 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1476
		assertNoErrors(context);
1476
		assertNoErrors(context);
1477
		List proposals= collectAssists(context, false);
1477
		List proposals= collectAssists(context, false);
1478
	
1478
	
1479
		assertNumberOfProposals(proposals, 2);
1479
		assertNumberOfProposals(proposals, 3);
1480
		assertCorrectLabels(proposals);
1480
		assertCorrectLabels(proposals);
1481
	
1481
	
1482
		buf= new StringBuffer();
1482
		buf= new StringBuffer();
Lines 1514-1520 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1514
		assertNoErrors(context);
1514
		assertNoErrors(context);
1515
		List proposals= collectAssists(context, false);
1515
		List proposals= collectAssists(context, false);
1516
1516
1517
		assertNumberOfProposals(proposals, 2);
1517
		assertNumberOfProposals(proposals, 3);
1518
		assertCorrectLabels(proposals);
1518
		assertCorrectLabels(proposals);
1519
1519
1520
		buf= new StringBuffer();
1520
		buf= new StringBuffer();
Lines 1554-1560 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1554
		assertNoErrors(context);
1554
		assertNoErrors(context);
1555
		List proposals= collectAssists(context, false);
1555
		List proposals= collectAssists(context, false);
1556
1556
1557
		assertNumberOfProposals(proposals, 2);
1557
		assertNumberOfProposals(proposals, 3);
1558
		assertCorrectLabels(proposals);
1558
		assertCorrectLabels(proposals);
1559
1559
1560
		buf= new StringBuffer();
1560
		buf= new StringBuffer();
Lines 1595-1601 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1595
		assertNoErrors(context);
1595
		assertNoErrors(context);
1596
		List proposals= collectAssists(context, false);
1596
		List proposals= collectAssists(context, false);
1597
1597
1598
		assertNumberOfProposals(proposals, 2);
1598
		assertNumberOfProposals(proposals, 3);
1599
		assertCorrectLabels(proposals);
1599
		assertCorrectLabels(proposals);
1600
1600
1601
		buf= new StringBuffer();
1601
		buf= new StringBuffer();
Lines 1635-1641 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1635
		assertNoErrors(context);
1635
		assertNoErrors(context);
1636
		List proposals= collectAssists(context, false);
1636
		List proposals= collectAssists(context, false);
1637
1637
1638
		assertNumberOfProposals(proposals, 2);
1638
		assertNumberOfProposals(proposals, 3);
1639
		assertCorrectLabels(proposals);
1639
		assertCorrectLabels(proposals);
1640
1640
1641
		buf= new StringBuffer();
1641
		buf= new StringBuffer();
Lines 1676-1682 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1676
		assertNoErrors(context);
1676
		assertNoErrors(context);
1677
		List proposals= collectAssists(context, false);
1677
		List proposals= collectAssists(context, false);
1678
1678
1679
		assertNumberOfProposals(proposals, 2);
1679
		assertNumberOfProposals(proposals, 3);
1680
		assertCorrectLabels(proposals);
1680
		assertCorrectLabels(proposals);
1681
1681
1682
		buf= new StringBuffer();
1682
		buf= new StringBuffer();
Lines 1718-1724 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1718
		assertNoErrors(context);
1718
		assertNoErrors(context);
1719
		List proposals= collectAssists(context, false);
1719
		List proposals= collectAssists(context, false);
1720
1720
1721
		assertNumberOfProposals(proposals, 2);
1721
		assertNumberOfProposals(proposals, 3);
1722
		assertCorrectLabels(proposals);
1722
		assertCorrectLabels(proposals);
1723
1723
1724
		buf= new StringBuffer();
1724
		buf= new StringBuffer();
Lines 1759-1765 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1759
		assertNoErrors(context);
1759
		assertNoErrors(context);
1760
		List proposals= collectAssists(context, false);
1760
		List proposals= collectAssists(context, false);
1761
1761
1762
		assertNumberOfProposals(proposals, 2);
1762
		assertNumberOfProposals(proposals, 3);
1763
		assertCorrectLabels(proposals);
1763
		assertCorrectLabels(proposals);
1764
1764
1765
		buf= new StringBuffer();
1765
		buf= new StringBuffer();
Lines 1808-1814 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1808
		buf.append("interface FI2 {\n");
1808
		buf.append("interface FI2 {\n");
1809
		buf.append("    void foo(int x);\n");
1809
		buf.append("    void foo(int x);\n");
1810
		buf.append("}\n");
1810
		buf.append("}\n");
1811
		assertNumberOfProposals(proposals, 2);
1811
		assertNumberOfProposals(proposals, 3);
1812
		assertCorrectLabels(proposals);
1812
		assertCorrectLabels(proposals);
1813
1813
1814
		String expected1= buf.toString();
1814
		String expected1= buf.toString();
Lines 1846-1852 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1846
		buf.append("interface FI2 {\n");
1846
		buf.append("interface FI2 {\n");
1847
		buf.append("    void foo(int x);\n");
1847
		buf.append("    void foo(int x);\n");
1848
		buf.append("}\n");
1848
		buf.append("}\n");
1849
		assertNumberOfProposals(proposals, 2);
1849
		assertNumberOfProposals(proposals, 3);
1850
		assertCorrectLabels(proposals);
1850
		assertCorrectLabels(proposals);
1851
1851
1852
		String expected1= buf.toString();
1852
		String expected1= buf.toString();
Lines 1872-1878 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1872
		AssistContext context= getCorrectionContext(cu, offset, 0);
1872
		AssistContext context= getCorrectionContext(cu, offset, 0);
1873
		assertNoErrors(context);
1873
		assertNoErrors(context);
1874
		List proposals= collectAssists(context, false);
1874
		List proposals= collectAssists(context, false);
1875
		assertNumberOfProposals(proposals, 1);
1875
		assertNumberOfProposals(proposals, 2);
1876
		assertCorrectLabels(proposals);
1876
		assertCorrectLabels(proposals);
1877
		assertProposalDoesNotExist(proposals, CorrectionMessages.QuickAssistProcessor_change_lambda_body_to_expression);
1877
		assertProposalDoesNotExist(proposals, CorrectionMessages.QuickAssistProcessor_change_lambda_body_to_expression);
1878
	}
1878
	}
Lines 1897-1903 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1897
		AssistContext context= getCorrectionContext(cu, offset, 0);
1897
		AssistContext context= getCorrectionContext(cu, offset, 0);
1898
		assertNoErrors(context);
1898
		assertNoErrors(context);
1899
		List proposals= collectAssists(context, false);
1899
		List proposals= collectAssists(context, false);
1900
		assertNumberOfProposals(proposals, 1);
1900
		assertNumberOfProposals(proposals, 2);
1901
		assertCorrectLabels(proposals);
1901
		assertCorrectLabels(proposals);
1902
		assertProposalDoesNotExist(proposals, CorrectionMessages.QuickAssistProcessor_change_lambda_body_to_expression);
1902
		assertProposalDoesNotExist(proposals, CorrectionMessages.QuickAssistProcessor_change_lambda_body_to_expression);
1903
	}
1903
	}
Lines 1922-1928 public class AssistQuickFixTest18 extends QuickFixTest { Link Here
1922
		AssistContext context= getCorrectionContext(cu, offset, 0);
1922
		AssistContext context= getCorrectionContext(cu, offset, 0);
1923
		assertNoErrors(context);
1923
		assertNoErrors(context);
1924
		List proposals= collectAssists(context, false);
1924
		List proposals= collectAssists(context, false);
1925
		assertNumberOfProposals(proposals, 1);
1925
		assertNumberOfProposals(proposals, 2);
1926
		assertCorrectLabels(proposals);
1926
		assertCorrectLabels(proposals);
1927
		assertProposalDoesNotExist(proposals, CorrectionMessages.QuickAssistProcessor_change_lambda_body_to_expression);
1927
		assertProposalDoesNotExist(proposals, CorrectionMessages.QuickAssistProcessor_change_lambda_body_to_expression);
1928
	}
1928
	}
(-)a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConstantChecks.java (-3 / +15 lines)
Lines 7-23 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 *     Jerome Cambon <jerome.cambon@oracle.com> - [extract constant] blocked for anonymous and lambdas that declare variables - https://bugs.eclipse.org/271526
10
 *******************************************************************************/
11
 *******************************************************************************/
11
package org.eclipse.jdt.internal.corext.refactoring.code;
12
package org.eclipse.jdt.internal.corext.refactoring.code;
12
13
13
import org.eclipse.core.runtime.Assert;
14
import org.eclipse.core.runtime.Assert;
14
15
15
import org.eclipse.jdt.core.dom.ASTVisitor;
16
import org.eclipse.jdt.core.dom.ASTVisitor;
17
import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
16
import org.eclipse.jdt.core.dom.FieldAccess;
18
import org.eclipse.jdt.core.dom.FieldAccess;
17
import org.eclipse.jdt.core.dom.IBinding;
19
import org.eclipse.jdt.core.dom.IBinding;
18
import org.eclipse.jdt.core.dom.IMethodBinding;
20
import org.eclipse.jdt.core.dom.IMethodBinding;
19
import org.eclipse.jdt.core.dom.ITypeBinding;
21
import org.eclipse.jdt.core.dom.ITypeBinding;
20
import org.eclipse.jdt.core.dom.IVariableBinding;
22
import org.eclipse.jdt.core.dom.IVariableBinding;
23
import org.eclipse.jdt.core.dom.LambdaExpression;
21
import org.eclipse.jdt.core.dom.MethodInvocation;
24
import org.eclipse.jdt.core.dom.MethodInvocation;
22
import org.eclipse.jdt.core.dom.Modifier;
25
import org.eclipse.jdt.core.dom.Modifier;
23
import org.eclipse.jdt.core.dom.Name;
26
import org.eclipse.jdt.core.dom.Name;
Lines 35-41 class ConstantChecks { Link Here
35
38
36
		private final IExpressionFragment fExpression;
39
		private final IExpressionFragment fExpression;
37
		protected boolean fResult= true;
40
		protected boolean fResult= true;
38
39
		public ExpressionChecker(IExpressionFragment ex) {
41
		public ExpressionChecker(IExpressionFragment ex) {
40
			fExpression= ex;
42
			fExpression= ex;
41
		}
43
		}
Lines 73-79 class ConstantChecks { Link Here
73
		}
75
		}
74
		@Override
76
		@Override
75
		public boolean visit(MethodInvocation node) {
77
		public boolean visit(MethodInvocation node) {
76
			if(node.getExpression() == null) {
78
			if (node.getExpression() == null) {
77
				visitName(node.getName());
79
				visitName(node.getName());
78
			} else {
80
			} else {
79
				fResult&= new LoadTimeConstantChecker((IExpressionFragment) ASTFragmentFactory.createFragmentForFullSubtree(node.getExpression())).check();
81
				fResult&= new LoadTimeConstantChecker((IExpressionFragment) ASTFragmentFactory.createFragmentForFullSubtree(node.getExpression())).check();
Lines 90-95 class ConstantChecks { Link Here
90
			return visitName(node);
92
			return visitName(node);
91
		}
93
		}
92
94
95
		@Override
96
		public boolean visit(AnonymousClassDeclaration node) {
97
			return false;
98
		}
99
100
		@Override
101
		public boolean visit(LambdaExpression node) {
102
			return false;
103
		}
104
93
		private boolean visitName(Name name) {
105
		private boolean visitName(Name name) {
94
			fResult&= checkName(name);
106
			fResult&= checkName(name);
95
			return false; //Do not descend further
107
			return false; //Do not descend further
Lines 106-112 class ConstantChecks { Link Here
106
			if (binding instanceof IVariableBinding || binding instanceof IMethodBinding)
118
			if (binding instanceof IVariableBinding || binding instanceof IMethodBinding)
107
				return isMemberReferenceValidInClassInitialization(name);
119
				return isMemberReferenceValidInClassInitialization(name);
108
			else if (binding instanceof ITypeBinding)
120
			else if (binding instanceof ITypeBinding)
109
				return ! ((ITypeBinding) binding).isTypeVariable();
121
				return !((ITypeBinding) binding).isTypeVariable();
110
			else {
122
			else {
111
				return true; // e.g. a NameQualifiedType's qualifier, which can be a package binding
123
				return true; // e.g. a NameQualifiedType's qualifier, which can be a package binding
112
			}
124
			}

Return to bug 271526