Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/corext/refactoring/delegates/DelegateCreator.java')
-rw-r--r--bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/corext/refactoring/delegates/DelegateCreator.java460
1 files changed, 0 insertions, 460 deletions
diff --git a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/corext/refactoring/delegates/DelegateCreator.java b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/corext/refactoring/delegates/DelegateCreator.java
deleted file mode 100644
index a944b5d9..00000000
--- a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/corext/refactoring/delegates/DelegateCreator.java
+++ /dev/null
@@ -1,460 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 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
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.internal.corext.refactoring.delegates;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.ltk.core.refactoring.CategorizedTextEditGroup;
-import org.eclipse.ltk.core.refactoring.GroupCategory;
-import org.eclipse.ltk.core.refactoring.GroupCategorySet;
-import org.eclipse.text.edits.TextEdit;
-import org.eclipse.wst.jsdt.core.JavaScriptModelException;
-import org.eclipse.wst.jsdt.core.dom.AST;
-import org.eclipse.wst.jsdt.core.dom.ASTNode;
-import org.eclipse.wst.jsdt.core.dom.AbstractTypeDeclaration;
-import org.eclipse.wst.jsdt.core.dom.AnonymousClassDeclaration;
-import org.eclipse.wst.jsdt.core.dom.BodyDeclaration;
-import org.eclipse.wst.jsdt.core.dom.ChildListPropertyDescriptor;
-import org.eclipse.wst.jsdt.core.dom.ChildPropertyDescriptor;
-import org.eclipse.wst.jsdt.core.dom.Expression;
-import org.eclipse.wst.jsdt.core.dom.IBinding;
-import org.eclipse.wst.jsdt.core.dom.ITypeBinding;
-import org.eclipse.wst.jsdt.core.dom.JSdoc;
-import org.eclipse.wst.jsdt.core.dom.JavaScriptUnit;
-import org.eclipse.wst.jsdt.core.dom.Name;
-import org.eclipse.wst.jsdt.core.dom.TagElement;
-import org.eclipse.wst.jsdt.core.dom.TextElement;
-import org.eclipse.wst.jsdt.core.dom.Type;
-import org.eclipse.wst.jsdt.core.dom.rewrite.ITrackedNodePosition;
-import org.eclipse.wst.jsdt.core.dom.rewrite.ListRewrite;
-import org.eclipse.wst.jsdt.internal.corext.codemanipulation.CodeGenerationSettings;
-import org.eclipse.wst.jsdt.internal.corext.dom.ASTNodeFactory;
-import org.eclipse.wst.jsdt.internal.corext.dom.ASTNodes;
-import org.eclipse.wst.jsdt.internal.corext.refactoring.RefactoringCoreMessages;
-import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
-import org.eclipse.wst.jsdt.internal.corext.util.Strings;
-import org.eclipse.wst.jsdt.internal.ui.JavaScriptPlugin;
-import org.eclipse.wst.jsdt.internal.ui.preferences.JavaPreferencesSettings;
-
-/**
- * <p>
- * This class implements functionality for creating delegates of renamed or moved
- * members pointing to the original element and containing a
- * deprecation message. The delegate is always created in the source file of the
- * original element and is either added directly after the original element or
- * replaces it. Use this class as follows:
- * </p>
- *
- * <pre>
- * DelegateCreator myCreator= new DelegateMethodCreator();
- * myCreator.setRewrite(... cu-rewrite of modified file...);
- * myCreator.setDeclaration(... declaration of moved/renamed member ...);
- *
- * ... additional initialization methods, see below...
- *
- * myCreator.prepareDelegate();
- *
- * ... do something with the delegate before the edit is created ...
- *
- * myCreator.createEdit();
- * </pre>
- *
- * <p>
- * Before prepareDelegate(), depending on whether the member is moved or
- * renamed, or both, as well as other concerns, the following methods may be
- * called:
- * </p>
- *
- * <pre>
- * myCreator.setNewLocation(... new location where the member was moved ...);
- * myCreator.setNewName(... new name of the member if renamed ...);
- * myCreator.setDeclareDeprecated(... false or true ...);
- * myCreator.setCopy(... false or true...);
- * </pre>
- *
- * <p>
- * Note that removing or adding imports related to delegate creation is
- * generally the responsibility of the caller. As an exception, the import for a
- * target type set via setNewLocation() will be added by this class.
- * </p>
- *
- * <p>
- * This class is intended to be subclassed by specialized creators for concrete
- * element types like methods or fields.
- * </p>
- *
- *
- *
- */
-public abstract class DelegateCreator {
-
- public static final GroupCategorySet CATEGORY_DELEGATE= new GroupCategorySet(new GroupCategory("org.eclipse.wst.jsdt.internal.corext.refactoring.delegates.delegate", RefactoringCoreMessages.DelegateCreator_change_category_title, RefactoringCoreMessages.DelegateCreator_change_category_description)); //$NON-NLS-1$
-
- /*
- * We are dealing with two CURewrites here:
- *
- * 1) The original rewrite which is passed in from the outside. One import may
- * be registered with this CURewrite in case setNewLocation() is called.
- * On createEdit(), the complete delegate code will be added to the CURewrite's
- * ASTRewrite (add or replace).
- *
- * 2) A new CuRewrite from which we'll only use the ASTRewrite to build the new delegate.
- *
- */
- private CompilationUnitRewrite fOriginalRewrite;
- private CompilationUnitRewrite fDelegateRewrite;
-
- private boolean fIsMoveToAnotherFile;
- private boolean fCopy;
- private boolean fDeclareDeprecated;
- private boolean fInsertBefore;
-
- private BodyDeclaration fDeclaration;
- private String fNewElementName;
- private ITypeBinding fDestinationTypeBinding;
- private Type fDestinationType;
- private ITrackedNodePosition fTrackedPosition;
-
- private CodeGenerationSettings fPreferences;
-
- public DelegateCreator() {
- fCopy= true;
- fDeclareDeprecated= true;
- fInsertBefore= false;
- }
-
- /**
- * Sets the compilation unit rewrite of the declaration to create a delegate
- * for. Must always be called prior to prepareDelegate(). Bindings need not
- * be resolved.
- *
- * @param rewrite the CompilationUnitRewrite.
- */
- public void setSourceRewrite(CompilationUnitRewrite rewrite) {
- fOriginalRewrite= rewrite;
- fPreferences= JavaPreferencesSettings.getCodeGenerationSettings(rewrite.getCu().getJavaScriptProject());
-
- fDelegateRewrite= new CompilationUnitRewrite(rewrite.getCu(), rewrite.getRoot());
- fDelegateRewrite.getASTRewrite().setTargetSourceRangeComputer(rewrite.getASTRewrite().getExtendedSourceRangeComputer());
- }
-
- /**
- * Sets the old member declaration. Must always be called prior to
- * prepareDelegate().
- *
- * @param declaration the BodyDeclaration
- */
- public void setDeclaration(BodyDeclaration declaration) {
- fDeclaration= declaration;
- }
-
- /**
- * Set the name of the new element. This is optional, but if set it must be
- * called prior to prepareDelegate().
- *
- * @param newName the String with the new name
- */
- public void setNewElementName(String newName) {
- fNewElementName= newName;
- }
-
- /**
- * Set the location of the new element. This is optional, but if set it must
- * be called prior to prepareDelegate().
- *
- * @param binding the ITypeBinding of the old type
- */
- public void setNewLocation(ITypeBinding binding) {
- fDestinationTypeBinding= binding;
- }
-
- /**
- * Set whether the existing element should be copied and the copy made
- * delegate (true), or the original element should be changed to become the
- * delegate (false). This is optional, but if set it must be called prior to
- * prepareDelegate().
- *
- * The default is true (create a copy).
- *
- * @param isCopy true if a copy should be created
- */
- public void setCopy(boolean isCopy) {
- fCopy= isCopy;
- }
-
- /**
- * Sets whether a deprecation message including a link to the new element
- * should be added to the javadoc of the delegate. This is optional, but if
- * set it must be called prior to prepareDelegate().
- *
- * The default is true (create deprecation message).
- *
- * @param declareDeprecated true if the member should be deprecated
- */
- public void setDeclareDeprecated(boolean declareDeprecated) {
- fDeclareDeprecated= declareDeprecated;
- }
-
- /**
- * When in copy mode, use this method to control the insertion point of the
- * delegate. If the parameter is true, the delegate gets inserted before the
- * original declaration. If false, the delegate gets inserted after the
- * original declaration.
- *
- * The default is false (do not insert before).
- *
- * @param insertBefore insertion point
- */
- public void setInsertBefore(boolean insertBefore) {
- fInsertBefore= insertBefore;
- }
-
- // Methods to be overridden by subclasses
-
- /**
- * Initializes the creator. Must set the "new" name of the element if not
- * already set.
- *
- */
- protected abstract void initialize();
-
- /**
- *
- * Creates the body of the delegate.
- *
- * @param declaration the member declaration
- * @return the body of the delegate
- * @throws JavaScriptModelException
- */
- protected abstract ASTNode createBody(BodyDeclaration declaration) throws JavaScriptModelException;
-
- /**
- * Creates the javadoc reference to the old member to be put inside the
- * javadoc comment.
- *
- * This method is only called if isDeclareDeprecated() == true.
- *
- * @param declaration the member declaration
- * @return the javadoc link node
- * @throws JavaScriptModelException
- */
- protected abstract ASTNode createDocReference(BodyDeclaration declaration) throws JavaScriptModelException;
-
- /**
- * Returns the node of the declaration on which to add the body.
- *
- * @param declaration the member declaration
- * @return the body head
- */
- protected abstract ASTNode getBodyHead(BodyDeclaration declaration);
-
- /**
- * Returns the javadoc property descriptor. The javadoc will be added using
- * this descriptor.
- *
- * @return property descriptor
- */
- protected abstract ChildPropertyDescriptor getJavaDocProperty();
-
- /**
- * Returns the body property descriptor. The body of the delegate will be
- * added using this descriptor.
- *
- * @return property descriptor
- */
- protected abstract ChildPropertyDescriptor getBodyProperty();
-
-
- // Getters for subclasses
-
- protected boolean isMoveToAnotherFile() {
- return fIsMoveToAnotherFile;
- }
-
- protected AST getAst() {
- return fDelegateRewrite.getAST();
- }
-
- protected BodyDeclaration getDeclaration() {
- return fDeclaration;
- }
-
- protected String getNewElementName() {
- return fNewElementName;
- }
-
- /**
- * Prepares the delegate member. The delegate member will have the same
- * signature as the old member and contain a call to the new member and a
- * javadoc reference with a reference to the new member.
- *
- * All references to the new member will contain the new name of the member
- * and/or new declaring type, if any.
- *
- */
- public void prepareDelegate() throws JavaScriptModelException {
- Assert.isNotNull(fDelegateRewrite);
- Assert.isNotNull(fDeclaration);
-
- initialize();
-
- // Moving to a new type?
- if (fDestinationTypeBinding != null) {
- fDestinationType= fOriginalRewrite.getImportRewrite().addImport(fDestinationTypeBinding, getAst());
- fIsMoveToAnotherFile= true;
- } else
- fIsMoveToAnotherFile= false;
-
- fTrackedPosition= fDelegateRewrite.getASTRewrite().track(fDeclaration);
-
- ASTNode delegateBody= createBody(fDeclaration);
- if (delegateBody != null) {
- // is null for interface and abstract methods
- fDelegateRewrite.getASTRewrite().set(getBodyHead(fDeclaration), getBodyProperty(), delegateBody, null);
- }
-
- if (fDeclareDeprecated) {
- createJavadoc();
- }
- }
-
- /**
- * Creates the javadoc for the delegate.
- *
- * @throws JavaScriptModelException
- */
- private void createJavadoc() throws JavaScriptModelException {
- TagElement tag= getDelegateJavadocTag(fDeclaration);
-
- JSdoc comment= fDeclaration.getJavadoc();
- if (comment == null) {
- comment= getAst().newJSdoc();
- comment.tags().add(tag);
- fDelegateRewrite.getASTRewrite().set(fDeclaration, getJavaDocProperty(), comment, null);
- } else
- fDelegateRewrite.getASTRewrite().getListRewrite(comment, JSdoc.TAGS_PROPERTY).insertLast(tag, null);
- }
-
- /**
- * Performs the actual rewriting and adds an edit to the ASTRewrite set with
- * {@link #setSourceRewrite(CompilationUnitRewrite)}.
- *
- * @throws JavaScriptModelException
- */
- public void createEdit() throws JavaScriptModelException {
- try {
- IDocument document= new Document(fDelegateRewrite.getCu().getBuffer().getContents());
- TextEdit edit= fDelegateRewrite.getASTRewrite().rewriteAST(document, fDelegateRewrite.getCu().getJavaScriptProject().getOptions(true));
- edit.apply(document, TextEdit.UPDATE_REGIONS);
-
- String newSource= Strings.trimIndentation(document.get(fTrackedPosition.getStartPosition(), fTrackedPosition.getLength()),
- fPreferences.tabWidth, fPreferences.indentWidth, false);
-
- ASTNode placeholder= fOriginalRewrite.getASTRewrite().createStringPlaceholder(newSource, fDeclaration.getNodeType());
-
- CategorizedTextEditGroup groupDescription= fOriginalRewrite.createCategorizedGroupDescription(getTextEditGroupLabel(), CATEGORY_DELEGATE);
- ListRewrite bodyDeclarationsListRewrite= fOriginalRewrite.getASTRewrite().getListRewrite(fDeclaration.getParent(), getTypeBodyDeclarationsProperty());
- if (fCopy)
- if (fInsertBefore)
- bodyDeclarationsListRewrite.insertBefore(placeholder, fDeclaration, groupDescription);
- else
- bodyDeclarationsListRewrite.insertAfter(placeholder, fDeclaration, groupDescription);
- else
- bodyDeclarationsListRewrite.replace(fDeclaration, placeholder, groupDescription);
-
- } catch (BadLocationException e) {
- JavaScriptPlugin.log(e);
- }
- }
-
- protected abstract String getTextEditGroupLabel();
-
- /**
- * Returns the binding of the declaration.
- *
- * @return the binding of the declaration
- */
- protected abstract IBinding getDeclarationBinding();
-
- /**
- * Returns a new rewrite with the delegate changes registered. This rewrite
- * can be used in-between calls to prepareDelegate() and createEdit() to add
- * additional changes to the delegate.
- *
- * @return CompilationUnitRewrite the new rewrite
- */
- public CompilationUnitRewrite getDelegateRewrite() {
- return fDelegateRewrite;
- }
-
- // ******************* INTERNAL HELPERS ***************************
-
- private TagElement getDelegateJavadocTag(BodyDeclaration declaration) throws JavaScriptModelException {
- Assert.isNotNull(declaration);
-
- String msg= RefactoringCoreMessages.DelegateCreator_use_member_instead;
- int firstParam= msg.indexOf("{0}"); //$NON-NLS-1$
- Assert.isTrue(firstParam != -1);
-
- List fragments= new ArrayList();
- TextElement text= getAst().newTextElement();
- text.setText(msg.substring(0, firstParam).trim());
- fragments.add(text);
-
- fragments.add(createJavadocMemberReferenceTag(declaration, getAst()));
-
- text= getAst().newTextElement();
- text.setText(msg.substring(firstParam + 3).trim());
- fragments.add(text);
-
- final TagElement tag= getAst().newTagElement();
- tag.setTagName(TagElement.TAG_DEPRECATED);
- tag.fragments().addAll(fragments);
- return tag;
- }
-
- private TagElement createJavadocMemberReferenceTag(BodyDeclaration declaration, final AST ast) throws JavaScriptModelException {
- Assert.isNotNull(ast);
- Assert.isNotNull(declaration);
- ASTNode javadocReference= createDocReference(declaration);
- final TagElement element= ast.newTagElement();
- element.setTagName(TagElement.TAG_LINK);
- element.fragments().add(javadocReference);
- return element;
- }
-
- protected Expression getAccess() {
- return isMoveToAnotherFile() ? createDestinationTypeName() : null;
- }
-
- protected Name createDestinationTypeName() {
- return ASTNodeFactory.newName(getAst(), ASTNodes.asString(fDestinationType));
- }
-
- private ChildListPropertyDescriptor getTypeBodyDeclarationsProperty() {
- ASTNode parent= fDeclaration.getParent();
-
- if (parent instanceof JavaScriptUnit)
- return JavaScriptUnit.STATEMENTS_PROPERTY;
- else if (parent instanceof AbstractTypeDeclaration)
- return ((AbstractTypeDeclaration) parent).getBodyDeclarationsProperty();
- else if (parent instanceof AnonymousClassDeclaration)
- return AnonymousClassDeclaration.BODY_DECLARATIONS_PROPERTY;
-
- Assert.isTrue(false);
- return null;
- }
-}

Back to the top