diff options
Diffstat (limited to 'core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFromImplementationToHeaderOrClassStrategy.java')
-rw-r--r-- | core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFromImplementationToHeaderOrClassStrategy.java | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFromImplementationToHeaderOrClassStrategy.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFromImplementationToHeaderOrClassStrategy.java index cc0e910dd92..a1ea8336546 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFromImplementationToHeaderOrClassStrategy.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleFromImplementationToHeaderOrClassStrategy.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011 Institute for Software, HSR Hochschule fuer Technik + * Copyright (c) 2011, 2012 Institute for Software, HSR Hochschule fuer Technik * Rapperswil, University of applied sciences and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -7,12 +7,15 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Martin Schwab & Thomas Kallenberg - initial API and implementation + * Martin Schwab & Thomas Kallenberg - initial API and implementation + * Sergey Prigogin (Google) ******************************************************************************/ package org.eclipse.cdt.internal.ui.refactoring.togglefunction; import java.util.List; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; import org.eclipse.text.edits.TextEditGroup; import org.eclipse.cdt.core.dom.ast.IASTComment; @@ -37,8 +40,8 @@ import org.eclipse.cdt.internal.ui.refactoring.utils.CPPASTAllVisitor; public class ToggleFromImplementationToHeaderOrClassStrategy implements IToggleRefactoringStrategy { private ToggleRefactoringContext context; private TextEditGroup infoText; - private IASTTranslationUnit other_tu; - private ASTLiteralNode includenode; + private IASTTranslationUnit otherAst; + private ASTLiteralNode includeNode; public ToggleFromImplementationToHeaderOrClassStrategy(ToggleRefactoringContext context) { this.context = context; @@ -50,34 +53,34 @@ public class ToggleFromImplementationToHeaderOrClassStrategy implements IToggleR } @Override - public void run(ModificationCollector modifications) { + public void run(ModificationCollector modifications) throws CoreException { newFileCheck(); - ASTRewrite implast = modifications.rewriterForTranslationUnit(context.getDefinitionUnit()); - List<IASTComment>leadingComments = implast.getComments(context.getDefinition(), CommentPosition.leading); - removeDefinitionFromImplementation(implast); - if (includenode != null) { - implast.insertBefore(context.getDefinitionUnit(), - context.getDefinitionUnit().getChildren()[0], includenode, infoText); + ASTRewrite implAst = modifications.rewriterForTranslationUnit(context.getDefinitionAST()); + List<IASTComment>leadingComments = implAst.getComments(context.getDefinition(), CommentPosition.leading); + removeDefinitionFromImplementation(implAst); + if (includeNode != null) { + implAst.insertBefore(context.getDefinitionAST(), + context.getDefinitionAST().getChildren()[0], includeNode, infoText); } - if (context.getDeclarationUnit() != null) { + if (context.getDeclarationAST() != null) { addDefinitionToClass(modifications, leadingComments); } else { addDefinitionToHeader(modifications, leadingComments); } } - private void newFileCheck() { - if (context.getDeclarationUnit() == null) { + private void newFileCheck() throws CoreException { + if (context.getDeclarationAST() == null) { if (isFreeFunction(context.getDefinition())) { throw new NotSupportedException(Messages.ToggleFromImplementationToHeaderOrClassStrategy_CanNotToggle); } - other_tu = context.getTUForSiblingFile(); - if (other_tu == null) { - ToggleFileCreator filecreator = new ToggleFileCreator(context, ".h"); //$NON-NLS-1$ - if (filecreator.askUserForFileCreation(context)) { - filecreator.createNewFile(); - other_tu = filecreator.loadTranslationUnit(); - includenode = new ASTLiteralNode(filecreator.getIncludeStatement() + "\n\n"); //$NON-NLS-1$ + otherAst = context.getASTForPartnerFile(); + if (otherAst == null) { + ToggleFileCreator fileCreator = new ToggleFileCreator(context, ".h"); //$NON-NLS-1$ + if (fileCreator.askUserForFileCreation(context)) { + IFile file = fileCreator.createNewFile(); + otherAst = context.getAST(file, null); + includeNode = new ASTLiteralNode(fileCreator.getIncludeStatement() + "\n\n"); //$NON-NLS-1$ } else { throw new NotSupportedException(Messages.ToggleFromImplementationToHeaderOrClassStrategy_CanNotCreateNewFile); } @@ -86,13 +89,13 @@ public class ToggleFromImplementationToHeaderOrClassStrategy implements IToggleR } private void addDefinitionToHeader(ModificationCollector modifications, List<IASTComment> leadingComments) { - ASTRewrite headerRewrite = modifications.rewriterForTranslationUnit(other_tu); + ASTRewrite headerRewrite = modifications.rewriterForTranslationUnit(otherAst); IASTFunctionDefinition newDefinition = ToggleNodeHelper.createFunctionSignatureWithEmptyBody( context.getDefinition().getDeclSpecifier().copy(CopyStyle.withLocations), context.getDefinition().getDeclarator().copy(CopyStyle.withLocations), context.getDefinition().copy(CopyStyle.withLocations)); - newDefinition.setParent(other_tu); - headerRewrite.insertBefore(other_tu.getTranslationUnit(), null, newDefinition, infoText); + newDefinition.setParent(otherAst); + headerRewrite.insertBefore(otherAst.getTranslationUnit(), null, newDefinition, infoText); restoreBody(headerRewrite, newDefinition, modifications); for (IASTComment comment : leadingComments) { headerRewrite.addComment(newDefinition, comment, CommentPosition.leading); @@ -101,9 +104,9 @@ public class ToggleFromImplementationToHeaderOrClassStrategy implements IToggleR private void addDefinitionToClass(ModificationCollector modifications, List<IASTComment> leadingComments) { ASTRewrite headerRewrite = modifications.rewriterForTranslationUnit( - context.getDeclarationUnit()); + context.getDeclarationAST()); IASTFunctionDefinition newDefinition = ToggleNodeHelper.createInClassDefinition( - context.getDeclaration(), context.getDefinition(), context.getDeclarationUnit()); + context.getDeclaration(), context.getDefinition(), context.getDeclarationAST()); newDefinition.setParent(getParent()); restoreBody(headerRewrite, newDefinition, modifications); headerRewrite.replace(context.getDeclaration().getParent(), newDefinition, infoText); @@ -119,7 +122,7 @@ public class ToggleFromImplementationToHeaderOrClassStrategy implements IToggleR if (parent != null) { parentnode = parent; } else { - parentnode =context.getDeclarationUnit(); + parentnode =context.getDeclarationAST(); } return parentnode; } |