diff options
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ModifiedDeclaration.java')
-rw-r--r-- | jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ModifiedDeclaration.java | 454 |
1 files changed, 0 insertions, 454 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ModifiedDeclaration.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ModifiedDeclaration.java deleted file mode 100644 index 9af69a287f..0000000000 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jdtutility/ModifiedDeclaration.java +++ /dev/null @@ -1,454 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2007 Oracle. 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: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.core.internal.jdtutility; - -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Annotation; -import org.eclipse.jdt.core.dom.BodyDeclaration; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IExtendedModifier; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jdt.core.dom.ImportDeclaration; -import org.eclipse.jdt.core.dom.SingleVariableDeclaration; -import org.eclipse.jdt.core.dom.VariableDeclarationExpression; -import org.eclipse.jdt.core.dom.VariableDeclarationStatement; -import org.eclipse.jpt.utility.internal.StringTools; -import org.eclipse.jpt.utility.internal.iterators.FilteringIterator; - -/** - * Define a wrapper that provides a common protocol for all the various AST - * declarations that have modifiers (i.e. there are a number of AST node - * classes that implement the method #modifiers(), but they do not implement - * a common interface): - * BodyDeclaration - * SingleVariableDeclaration - * VariableDeclarationExpression - * VariableDeclarationStatement - */ -public class ModifiedDeclaration { - private final Adapter adapter; - - - // ********** constructors ********** - - public ModifiedDeclaration(Adapter adapter) { - super(); - this.adapter = adapter; - } - - public ModifiedDeclaration(BodyDeclaration declaration) { - this(new BodyDeclarationAdapter(declaration)); - } - - public ModifiedDeclaration(SingleVariableDeclaration declaration) { - this(new SingleVariableDeclarationAdapter(declaration)); - } - - public ModifiedDeclaration(VariableDeclarationExpression declaration) { - this(new VariableDeclarationExpressionAdapter(declaration)); - } - - public ModifiedDeclaration(VariableDeclarationStatement declaration) { - this(new VariableDeclarationStatementAdapter(declaration)); - } - - - // ********** public methods ********** - - /** - * Return the "declaration" AST node. - */ - public ASTNode getDeclaration() { - return this.adapter.declaration(); - } - - /** - * Return the declaration's list of modifiers. - * Element type: org.eclipse.jdt.core.dom.IExtendedModifier - */ - public List<IExtendedModifier> modifiers() { - return this.adapter.modifiers(); - } - - /** - * Return the "declaration" AST. - */ - public AST getAST() { - return this.getDeclaration().getAST(); - } - - public CompilationUnit compilationUnit() { - return (CompilationUnit) this.getDeclaration().getRoot(); - } - - public ICompilationUnit iCompilationUnit() { - return (ICompilationUnit) this.compilationUnit().getJavaElement(); - } - - public IType type() { - return this.compilationUnit().getTypeRoot().findPrimaryType(); - } - - /** - * Return the declaration's annotations. - */ - public Iterator<Annotation> annotations() { - return new FilteringIterator<Annotation>(this.modifiers().iterator()) { - @Override - protected boolean accept(Object next) { - return ((IExtendedModifier) next).isAnnotation(); - } - }; - } - - /** - * Return the *first* annotation with the specified name. - * Return null if the declaration has no such annotation. - */ - public Annotation getAnnotationNamed(String annotationName) { - for (Iterator<Annotation> stream = this.annotations(); stream.hasNext(); ) { - Annotation annotation = stream.next(); - if (this.annotationIsNamed(annotation, annotationName)) { - return annotation; - } - } - return null; - } - - /** - * Return whether the declaration has an annotation with the specified name. - */ - public boolean containsAnnotationNamed(String annotationName) { - return this.getAnnotationNamed(annotationName) != null; - } - - /** - * Add the specified annotation to the declaration. - * By convention annotations precede the "standard" (JLS2) modifiers; - * though, technically, they can be interspersed. - */ - public void addAnnotation(Annotation annotation) { - List<IExtendedModifier> modifiers = this.modifiers(); - for (ListIterator<IExtendedModifier> stream = modifiers.listIterator(); stream.hasNext(); ) { - if (stream.next().isModifier()) { - stream.previous(); // put the annotation *before* the first "standard" (JLS2) modifier - stream.add(annotation); - return; - } - } - modifiers.add(annotation); // just tack it on to the end - } - - /** - * Remove the *first* annotation with the specified name from the declaration. - */ - public void removeAnnotationNamed(String annotationName) { - for (Iterator<IExtendedModifier> stream = this.modifiers().iterator(); stream.hasNext(); ) { - IExtendedModifier modifier = stream.next(); - if (modifier.isAnnotation()) { - if (this.annotationIsNamed((Annotation) modifier, annotationName)) { - stream.remove(); - break; - } - } - } - } - - /** - * Remove the specified annotation from the declaration. - */ - public void removeAnnotation(Annotation annotation) { - if ( ! this.modifiers().remove(annotation)) { - throw new IllegalArgumentException("invalid annotation: " + annotation); - } - } - - /** - * Replace the specified old annotation with the specified new annotation. - */ - public void replaceAnnotation(Annotation oldAnnotation, Annotation newAnnotation) { - for (ListIterator<IExtendedModifier> stream = this.modifiers().listIterator(); stream.hasNext(); ) { - if (stream.next().equals(oldAnnotation)) { - stream.set(newAnnotation); - return; - } - } - throw new IllegalArgumentException("invalid old annotation: " + oldAnnotation); - } - - /** - * Replace the specified old annotation with the specified new annotation. - * If there is no annotation with the specified name, simply add the new - * annotation to the declaration's modifiers. - */ - public void replaceAnnotationNamed(String oldAnnotationName, Annotation newAnnotation) { - List<IExtendedModifier> modifiers = this.modifiers(); - for (ListIterator<IExtendedModifier> stream = modifiers.listIterator(); stream.hasNext(); ) { - IExtendedModifier modifier = stream.next(); - if (modifier.isAnnotation()) { - if (this.annotationIsNamed((Annotation) modifier, oldAnnotationName)) { - stream.set(newAnnotation); - return; - } - } - } - this.addAnnotation(newAnnotation); - } - - /** - * Add the specified import to the declaration's compilation unit. - */ - public void addImport(String importName) { - this.addImport(importName, false); - } - - /** - * Add the specified static import to the declaration's compilation unit. - */ - public void addStaticImport(String importName) { - this.addImport(importName, true); - } - - /** - * Add the specified import to the declaration's compilation unit. - */ - public void addImport(String importName, boolean static_) { - if (importName.indexOf('.') != -1) { - this.addImportTo(this.compilationUnit(), importName, static_); - } - } - - public String importFor(String shortName) { - return this.importFor(shortName, false); - } - - public String staticImportFor(String shortName) { - return this.importFor(shortName, true); - } - - // TODO handle wildcards - public String importFor(String shortName, boolean static_) { - if (shortName.indexOf('.') != -1) { - return shortName; - } - List<ImportDeclaration> imports = this.imports(this.compilationUnit()); - for (ImportDeclaration importDeclaration : imports) { - if (this.importIsFor(importDeclaration, shortName, static_)) { - return importDeclaration.getName().getFullyQualifiedName(); - } - } - return null; - } - - protected boolean importIsFor(ImportDeclaration importDeclaration, String shortName, boolean static_) { - if (importDeclaration.isStatic() != static_) { - return false; - } - String importDeclarationName = importDeclaration.getName().getFullyQualifiedName(); - return importDeclarationName.endsWith(shortName); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.adapter.toString()); - } - - - // ********** internal methods ********** - - /** - * Return whether the specified annotation has the specified name. - */ - boolean annotationIsNamed(Annotation annotation, String name) { - String qualifiedName = this.qualifiedName(annotation); - return (qualifiedName != null) && qualifiedName.equals(name); - } - - private String qualifiedName(Annotation annotation) { - ITypeBinding typeBinding = annotation.resolveTypeBinding(); - if (typeBinding != null) { - String resolvedName = typeBinding.getQualifiedName(); - if (resolvedName != null) { - return resolvedName; - } - } - // hack(?): check for a matching import because when moving a stand-alone - // annotation to its container in CombinationIndexedDeclarationAnnotationAdapter - // the container's import is added but then it won't "resolve" upon - // subsequent lookups... :-( - return this.importFor(annotation.getTypeName().getFullyQualifiedName()); // look for a matching import - - // OLD METHOD SOURCE: -// String name = annotation.getTypeName().getFullyQualifiedName(); -// if (name.indexOf('.') != -1) { -// return name; // name is already qualified -// } -// String resolvedName = JDTTools.resolve(name, this.type()); -// // hack(?): check for a matching import because when moving a stand-alone -// // annotation to its container in CombinationIndexedDeclarationAnnotationAdapter -// // the container's import is added but then it won't "resolve" upon -// // subsequent lookups... :-( -// return this.importFor(name); // look for a matching import - } - - /** - * Return whether the specified import was added without a collision. - */ - // TODO handle collisions (e.g. java.util.Date vs. java.sql.Date) - protected void addImportTo(CompilationUnit astRoot, String importName, boolean static_) { - List<ImportDeclaration> imports = this.imports(astRoot); - if (this.importsInclude(imports, importName, static_)) { - return; - } - AST ast = astRoot.getAST(); - ImportDeclaration import_ = ast.newImportDeclaration(); - import_.setName(ast.newName(importName)); - import_.setStatic(static_); - imports.add(import_); - } - - @SuppressWarnings("unchecked") - protected List<ImportDeclaration> imports(CompilationUnit astRoot) { - return astRoot.imports(); - } - - protected boolean importsInclude(List<ImportDeclaration> imports, String importName, boolean static_) { - for (ImportDeclaration importDeclaration : imports) { - if (this.importIncludes(importDeclaration, importName, static_)) { - return true; - } - } - return false; - } - - protected boolean importIncludes(ImportDeclaration importDeclaration, String importName, boolean static_) { - if (importDeclaration.isStatic() != static_) { - return false; - } - String importDeclarationName = importDeclaration.getName().getFullyQualifiedName(); - if (importName.equals(importDeclarationName)) { - return true; - } - if (importDeclaration.isOnDemand() - && this.onDemandNameFor(importName).equals(importDeclarationName)) { - return true; - } - return false; - } - - protected String onDemandNameFor(String importName) { - int lastPeriod = importName.lastIndexOf('.'); - return (lastPeriod == -1) ? "" : importName.substring(0, lastPeriod); - } - - - // ********** declaration adapter interface and implementations ********** - - /** - * Define common protocol among the various "declarations". - */ - public interface Adapter { - - /** - * Return the adapted "declaration". - */ - ASTNode declaration(); - - /** - * Return the "declaration"'s list of modifiers. - * Element type: org.eclipse.jdt.core.dom.IExtendedModifier - */ - List<IExtendedModifier> modifiers(); - - } - - public static class BodyDeclarationAdapter implements Adapter { - private final BodyDeclaration declaration; - public BodyDeclarationAdapter(BodyDeclaration declaration) { - super(); - this.declaration = declaration; - } - public ASTNode declaration() { - return this.declaration; - } - @SuppressWarnings("unchecked") - public List<IExtendedModifier> modifiers() { - return this.declaration.modifiers(); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.declaration.toString()); - } - } - - public static class SingleVariableDeclarationAdapter implements Adapter { - private final SingleVariableDeclaration declaration; - public SingleVariableDeclarationAdapter(SingleVariableDeclaration declaration) { - super(); - this.declaration = declaration; - } - public ASTNode declaration() { - return this.declaration; - } - @SuppressWarnings("unchecked") - public List<IExtendedModifier> modifiers() { - return this.declaration.modifiers(); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.declaration.toString()); - } - } - - public static class VariableDeclarationExpressionAdapter implements Adapter { - private final VariableDeclarationExpression declaration; - public VariableDeclarationExpressionAdapter(VariableDeclarationExpression declaration) { - super(); - this.declaration = declaration; - } - public ASTNode declaration() { - return this.declaration; - } - @SuppressWarnings("unchecked") - public List<IExtendedModifier> modifiers() { - return this.declaration.modifiers(); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.declaration.toString()); - } - } - - public static class VariableDeclarationStatementAdapter implements Adapter { - private final VariableDeclarationStatement declaration; - public VariableDeclarationStatementAdapter(VariableDeclarationStatement declaration) { - super(); - this.declaration = declaration; - } - public ASTNode declaration() { - return this.declaration; - } - @SuppressWarnings("unchecked") - public List<IExtendedModifier> modifiers() { - return this.declaration.modifiers(); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.declaration.toString()); - } - } - -} |