Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoopur Gupta2014-01-06 13:27:25 +0000
committerNoopur Gupta2014-01-06 13:27:25 +0000
commit0dd37821ded6cabd80be1e485c81e88c1a17a94f (patch)
treeaeb07b2ad5c331315594697d579e54aa2968f0a5
parent262e59c07ad895ff0657dd9c9a42c9b541c1a5ac (diff)
downloadeclipse.jdt.ui-0dd37821ded6cabd80be1e485c81e88c1a17a94f.tar.gz
eclipse.jdt.ui-0dd37821ded6cabd80be1e485c81e88c1a17a94f.tar.xz
eclipse.jdt.ui-0dd37821ded6cabd80be1e485c81e88c1a17a94f.zip
Fixed bug 424745: [1.8][inline] Error after inlining constant method
reference in enum constant declaration
-rw-r--r--org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1004/in/TestInlineMethodRef_Enum.java23
-rw-r--r--org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1004/out/TestInlineMethodRef_Enum.java22
-rw-r--r--org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1005/in/TestInlineMethodRef_Enum.java20
-rw-r--r--org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1005/out/TestInlineMethodRef_Enum.java19
-rw-r--r--org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineConstantTests18.java10
-rw-r--r--org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java13
6 files changed, 105 insertions, 2 deletions
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1004/in/TestInlineMethodRef_Enum.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1004/in/TestInlineMethodRef_Enum.java
new file mode 100644
index 0000000000..2dfdbc491a
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1004/in/TestInlineMethodRef_Enum.java
@@ -0,0 +1,23 @@
+// 5, 28 -> 5, 30 replaceAll = true, removeDeclaration = true
+package p;
+
+class Test {
+ public static final FI f1 = C::m;
+}
+
+enum E {
+ E_C1(Test.f1); // [1]
+ E(FI fi) {
+ }
+}
+
+class C {
+ static int m(int x) {
+ return x--;
+ }
+}
+
+@FunctionalInterface
+interface FI {
+ int foo(int x);
+} \ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1004/out/TestInlineMethodRef_Enum.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1004/out/TestInlineMethodRef_Enum.java
new file mode 100644
index 0000000000..d19172d646
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1004/out/TestInlineMethodRef_Enum.java
@@ -0,0 +1,22 @@
+// 5, 28 -> 5, 30 replaceAll = true, removeDeclaration = true
+package p;
+
+class Test {
+}
+
+enum E {
+ E_C1(C::m); // [1]
+ E(FI fi) {
+ }
+}
+
+class C {
+ static int m(int x) {
+ return x--;
+ }
+}
+
+@FunctionalInterface
+interface FI {
+ int foo(int x);
+} \ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1005/in/TestInlineMethodRef_Enum.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1005/in/TestInlineMethodRef_Enum.java
new file mode 100644
index 0000000000..0f1b01155d
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1005/in/TestInlineMethodRef_Enum.java
@@ -0,0 +1,20 @@
+// 5, 28 -> 5, 30 replaceAll = true, removeDeclaration = true
+package p;
+
+class Test {
+ public static final FI f1 =Test::m;
+ static int m(int x) {
+ return x++;
+ }
+}
+
+enum E {
+ E_C1(Test.f1); // [1]
+ E(FI fi) {
+ }
+}
+
+@FunctionalInterface
+interface FI {
+ int foo(int x);
+} \ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1005/out/TestInlineMethodRef_Enum.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1005/out/TestInlineMethodRef_Enum.java
new file mode 100644
index 0000000000..13f2ffe3b1
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineConstant/canInline18/test1005/out/TestInlineMethodRef_Enum.java
@@ -0,0 +1,19 @@
+// 5, 28 -> 5, 30 replaceAll = true, removeDeclaration = true
+package p;
+
+class Test {
+ static int m(int x) {
+ return x++;
+ }
+}
+
+enum E {
+ E_C1(Test::m); // [1]
+ E(FI fi) {
+ }
+}
+
+@FunctionalInterface
+interface FI {
+ int foo(int x);
+} \ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineConstantTests18.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineConstantTests18.java
index c845b6ef83..0a646051e6 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineConstantTests18.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineConstantTests18.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2013 IBM Corporation and others.
+ * Copyright (c) 2013, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -79,4 +79,12 @@ public class InlineConstantTests18 extends InlineConstantTests {
public void test1003() throws Exception {
helper1("p.TestInlineMethodRef_Ambiguous", 5, 28, 5, 30, true, true);
}
+
+ public void test1004() throws Exception {
+ helper1("p.TestInlineMethodRef_Enum", 5, 28, 5, 30, true, true);
+ }
+
+ public void test1005() throws Exception {
+ helper1("p.TestInlineMethodRef_Enum", 5, 28, 5, 30, true, true);
+ }
}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java
index 39a8e9709d..961e339271 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java
@@ -1,10 +1,14 @@
/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ *
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
@@ -62,6 +66,7 @@ import org.eclipse.jdt.core.dom.CastExpression;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.EnumConstantDeclaration;
import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.ExpressionMethodReference;
import org.eclipse.jdt.core.dom.FieldAccess;
import org.eclipse.jdt.core.dom.FieldDeclaration;
import org.eclipse.jdt.core.dom.IBinding;
@@ -77,8 +82,10 @@ import org.eclipse.jdt.core.dom.ParenthesizedExpression;
import org.eclipse.jdt.core.dom.QualifiedName;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
+import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
import org.eclipse.jdt.core.dom.Type;
import org.eclipse.jdt.core.dom.TypeDeclarationStatement;
+import org.eclipse.jdt.core.dom.TypeMethodReference;
import org.eclipse.jdt.core.dom.VariableDeclaration;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
@@ -370,6 +377,10 @@ public class InlineConstantRefactoring extends Refactoring {
IBinding memberBinding= memberName.resolveBinding();
if (memberBinding instanceof IVariableBinding || memberBinding instanceof IMethodBinding) {
+ StructuralPropertyDescriptor locationInParent= memberName.getLocationInParent();
+ if (locationInParent == ExpressionMethodReference.NAME_PROPERTY || locationInParent == TypeMethodReference.NAME_PROPERTY) {
+ return;
+ }
if (fStaticImportsInReference.contains(fNewLocation)) { // use static import if reference location used static import
importStatically(memberName, memberBinding);
return;

Back to the top