diff options
author | Noopur Gupta | 2014-04-03 09:34:12 +0000 |
---|---|---|
committer | Noopur Gupta | 2014-04-03 09:34:12 +0000 |
commit | 2f356671aec51199c146f230451f6f99cd357d11 (patch) | |
tree | bc81a94100f0ee03f4f4b43126e333c2028ec4e3 | |
parent | 42f8ee398a55c72dbc68d19c23a33f4f5b1672d9 (diff) | |
download | eclipse.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
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); |