Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java57
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;
}

Back to the top