Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoopur Gupta2014-04-03 09:34:12 +0000
committerNoopur Gupta2014-04-03 09:34:12 +0000
commit2f356671aec51199c146f230451f6f99cd357d11 (patch)
treebc81a94100f0ee03f4f4b43126e333c2028ec4e3
parent42f8ee398a55c72dbc68d19c23a33f4f5b1672d9 (diff)
downloadeclipse.jdt.ui-2f356671aec51199c146f230451f6f99cd357d11.tar.gz
eclipse.jdt.ui-2f356671aec51199c146f230451f6f99cd357d11.tar.xz
eclipse.jdt.ui-2f356671aec51199c146f230451f6f99cd357d11.zip
Fixed bug 414100: [1.8][quick fix] Change modifier to static for default
and abstract methods
-rw-r--r--org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest18.java121
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java3
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ModifierChangeCorrectionProposal.java28
3 files changed, 151 insertions, 1 deletions
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest18.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest18.java
index bc8d8dd110..44694a615d 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest18.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest18.java
@@ -482,4 +482,125 @@ public class QuickFixTest18 extends QuickFixTest {
buf.append("}\n");
assertEqualStringsIgnoreOrder(new String[] { getPreviewContent(proposal) }, new String[] { buf.toString() });
}
+
+ public void testChangeModifierToStatic1() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("interface A {\n");
+ buf.append(" int i = foo();\n");
+ buf.append(" default int foo() {\n");
+ buf.append(" }\n");
+ buf.append(" \n");
+ buf.append(" int j = bar1();\n");
+ buf.append(" abstract int bar1();\n");
+ buf.append(" static void temp() {\n");
+ buf.append(" bar2();\n");
+ buf.append(" }\n");
+ buf.append(" abstract void bar2();\n");
+ buf.append(" \n");
+ buf.append(" int k = fun1();\n");
+ buf.append(" int fun1();\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("A.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+
+ ArrayList proposals= collectCorrections(cu, astRoot, 4, 0);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+ CUCorrectionProposal proposal= (CUCorrectionProposal)proposals.get(0);
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("interface A {\n");
+ buf.append(" int i = foo();\n");
+ buf.append(" static int foo() {\n");
+ buf.append(" }\n");
+ buf.append(" \n");
+ buf.append(" int j = bar1();\n");
+ buf.append(" abstract int bar1();\n");
+ buf.append(" static void temp() {\n");
+ buf.append(" bar2();\n");
+ buf.append(" }\n");
+ buf.append(" abstract void bar2();\n");
+ buf.append(" \n");
+ buf.append(" int k = fun1();\n");
+ buf.append(" int fun1();\n");
+ buf.append("}\n");
+ assertEqualStringsIgnoreOrder(new String[] { getPreviewContent(proposal) }, new String[] { buf.toString() });
+
+ proposals= collectCorrections(cu, astRoot, 4, 1);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+ proposal= (CUCorrectionProposal)proposals.get(0);
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("interface A {\n");
+ buf.append(" int i = foo();\n");
+ buf.append(" default int foo() {\n");
+ buf.append(" }\n");
+ buf.append(" \n");
+ buf.append(" int j = bar1();\n");
+ buf.append(" static int bar1() {\n");
+ buf.append(" return 0;\n");
+ buf.append(" }\n");
+ buf.append(" static void temp() {\n");
+ buf.append(" bar2();\n");
+ buf.append(" }\n");
+ buf.append(" abstract void bar2();\n");
+ buf.append(" \n");
+ buf.append(" int k = fun1();\n");
+ buf.append(" int fun1();\n");
+ buf.append("}\n");
+ assertEqualStringsIgnoreOrder(new String[] { getPreviewContent(proposal) }, new String[] { buf.toString() });
+
+ proposals= collectCorrections(cu, astRoot, 4, 2);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+ proposal= (CUCorrectionProposal)proposals.get(0);
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("interface A {\n");
+ buf.append(" int i = foo();\n");
+ buf.append(" default int foo() {\n");
+ buf.append(" }\n");
+ buf.append(" \n");
+ buf.append(" int j = bar1();\n");
+ buf.append(" abstract int bar1();\n");
+ buf.append(" static void temp() {\n");
+ buf.append(" bar2();\n");
+ buf.append(" }\n");
+ buf.append(" static void bar2() {\n");
+ buf.append(" }\n");
+ buf.append(" \n");
+ buf.append(" int k = fun1();\n");
+ buf.append(" int fun1();\n");
+ buf.append("}\n");
+ assertEqualStringsIgnoreOrder(new String[] { getPreviewContent(proposal) }, new String[] { buf.toString() });
+
+ proposals= collectCorrections(cu, astRoot, 4, 3);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+ proposal= (CUCorrectionProposal)proposals.get(0);
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("interface A {\n");
+ buf.append(" int i = foo();\n");
+ buf.append(" default int foo() {\n");
+ buf.append(" }\n");
+ buf.append(" \n");
+ buf.append(" int j = bar1();\n");
+ buf.append(" abstract int bar1();\n");
+ buf.append(" static void temp() {\n");
+ buf.append(" bar2();\n");
+ buf.append(" }\n");
+ buf.append(" abstract void bar2();\n");
+ buf.append(" \n");
+ buf.append(" int k = fun1();\n");
+ buf.append(" static int fun1() {\n");
+ buf.append(" return 0;\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ assertEqualStringsIgnoreOrder(new String[] { getPreviewContent(proposal) }, new String[] { buf.toString() });
+ }
}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java
index dc8dc90c15..d4a4465d37 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java
@@ -197,6 +197,9 @@ public class ModifierCorrectionSubProcessor {
case TO_STATIC:
label= Messages.format(CorrectionMessages.ModifierCorrectionSubProcessor_changemodifiertostatic_description, name);
includedModifiers= Modifier.STATIC;
+ if (bindingDecl.getKind() == IBinding.METHOD) {
+ excludedModifiers= Modifier.DEFAULT | Modifier.ABSTRACT;
+ }
break;
case TO_NON_STATIC:
if (typeBinding != null && typeBinding.isInterface())
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ModifierChangeCorrectionProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ModifierChangeCorrectionProposal.java
index bcef4e72fb..c23a502dbb 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ModifierChangeCorrectionProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ModifierChangeCorrectionProposal.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * 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
@@ -18,13 +18,20 @@ import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
import org.eclipse.jdt.core.dom.Block;
import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.FieldDeclaration;
import org.eclipse.jdt.core.dom.IBinding;
+import org.eclipse.jdt.core.dom.IMethodBinding;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.Modifier;
+import org.eclipse.jdt.core.dom.ReturnStatement;
+import org.eclipse.jdt.core.dom.Type;
import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
+import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
import org.eclipse.jdt.internal.corext.dom.ModifierRewrite;
import org.eclipse.jdt.internal.corext.dom.VariableDeclarationRewrite;
import org.eclipse.jdt.internal.corext.fix.LinkedProposalPositionGroup;
@@ -83,6 +90,25 @@ public class ModifierChangeCorrectionProposal extends LinkedCorrectionProposal {
// can't separate
}
declNode= parent;
+ } else if (declNode.getNodeType() == ASTNode.METHOD_DECLARATION) {
+ MethodDeclaration methodDecl= (MethodDeclaration) declNode;
+ if (!methodDecl.isConstructor()) {
+ IMethodBinding methodBinding= methodDecl.resolveBinding();
+ if (methodBinding != null && Modifier.isAbstract(methodBinding.getModifiers()) && Modifier.isStatic(fIncludedModifiers)) {
+ // add body
+ Block body= ast.newBlock();
+ rewrite.set(methodDecl, MethodDeclaration.BODY_PROPERTY, body, null);
+ Type returnType= methodDecl.getReturnType2();
+ if (returnType != null) {
+ Expression expression= ASTNodeFactory.newDefaultExpression(ast, returnType, methodDecl.getExtraDimensions());
+ if (expression != null) {
+ ReturnStatement returnStatement= ast.newReturnStatement();
+ returnStatement.setExpression(expression);
+ body.statements().add(returnStatement);
+ }
+ }
+ }
+ }
}
ModifierRewrite listRewrite= ModifierRewrite.create(rewrite, declNode);
PositionInformation trackedDeclNode= listRewrite.setModifiers(fIncludedModifiers, fExcludedModifiers, null);

Back to the top