diff options
author | Noopur Gupta | 2014-01-06 13:27:25 +0000 |
---|---|---|
committer | Noopur Gupta | 2014-01-06 13:27:25 +0000 |
commit | 0dd37821ded6cabd80be1e485c81e88c1a17a94f (patch) | |
tree | aeb07b2ad5c331315594697d579e54aa2968f0a5 | |
parent | 262e59c07ad895ff0657dd9c9a42c9b541c1a5ac (diff) | |
download | eclipse.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
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; |