diff options
Diffstat (limited to 'common/plugins/org.eclipse.jpt.common.core/src/org/eclipse')
186 files changed, 0 insertions, 24065 deletions
diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/AnnotationProvider.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/AnnotationProvider.java deleted file mode 100644 index 5551329f03..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/AnnotationProvider.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core; - -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jpt.common.core.resource.java.Annotation; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; -import org.eclipse.jpt.common.core.resource.java.NestableAnnotation; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; - -/** - * This is used to provide annotations and nestable annotations. An exception will - * be thrown on an attempt to build an annotation that does not exist. - * - * This interface is not intended to be implemented. - * - * @version 3.0 - * @since 3.0 - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - */ -public interface AnnotationProvider { - - /** - * Return the names of the annotations. - */ - Iterable<String> getAnnotationNames(); - - Iterable<String> getContainerAnnotationNames(); - - Iterable<String> getNestableAnnotationNames(); - - String getNestableAnnotationName(String containerAnnotationName); - - String getContainerAnnotationName(String nestableAnnotationName); - - String getNestableElementName(String nestableAnnotationName); - - /** - * Build an annotation with the specified name. - * Throw an IllegalArgumentException if the specified name is unsupported. - * @see #getAnnotationNames() - */ - Annotation buildAnnotation(JavaResourceAnnotatedElement parent, AnnotatedElement element, String annotationName); - - /** - * Build a nestable annotation with the specified name and index. - * Throw an IllegalArgumentException if the specified name is unsupported. - * @see #getNestableAnnotationNames() - */ - NestableAnnotation buildAnnotation(JavaResourceAnnotatedElement parent, AnnotatedElement element, String annotationName, int index); - - /** - * Build an annotation for the specified JDT annotation. - * Throw an IllegalArgumentException if the specified annotation is unsupported. - * @see #getAnnotationNames() - */ - Annotation buildAnnotation(JavaResourceAnnotatedElement parent, IAnnotation jdtAnnotation); - - /** - * Build a nestable annotation for the specified JDT annotation and index. - * Throw an IllegalArgumentException if the specified annotation is unsupported. - * @see #getNestableAnnotationNames() - */ - NestableAnnotation buildAnnotation(JavaResourceAnnotatedElement parent, IAnnotation jdtAnnotation, int index); - - /** - * Build a null annotation with the specified name. - * Throw an IllegalArgumentException if the specified annotation is unsupported. - * @see #getAnnotationNames() - */ - Annotation buildNullAnnotation(JavaResourceAnnotatedElement parent, String annotationName); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/GenericAnnotationProvider.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/GenericAnnotationProvider.java deleted file mode 100644 index 3eee738f74..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/GenericAnnotationProvider.java +++ /dev/null @@ -1,136 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core; - -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.resource.java.Annotation; -import org.eclipse.jpt.common.core.resource.java.AnnotationDefinition; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; -import org.eclipse.jpt.common.core.resource.java.NestableAnnotation; -import org.eclipse.jpt.common.core.resource.java.NestableAnnotationDefinition; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; -import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; -import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; - -/** - * Delegate to annotation definition providers. - * The platform factory will build an instance of this annotation provider, - * passing in the appropriate array of annotation definition providers necessary - * to build the annotations for the platform (vendor and/or version). - */ -public final class GenericAnnotationProvider - implements AnnotationProvider -{ - private final AnnotationDefinition[] annotationDefinitions; - - private final NestableAnnotationDefinition[] nestableAnnotationDefinitions; - - public GenericAnnotationProvider(AnnotationDefinition[] annotationDefinitions, NestableAnnotationDefinition[] nestableAnnotationDefinitions) { - super(); - this.annotationDefinitions = annotationDefinitions; - this.nestableAnnotationDefinitions = nestableAnnotationDefinitions; - } - - - protected Iterable<AnnotationDefinition> getAnnotationDefinitions() { - return new ArrayIterable<AnnotationDefinition>(this.annotationDefinitions); - } - - protected AnnotationDefinition getAnnotationDefinition(String annotationName) { - for (AnnotationDefinition annotationDefinition : this.annotationDefinitions) { - if (annotationDefinition.getAnnotationName().equals(annotationName)) { - return annotationDefinition; - } - } - return null; - } - - public Iterable<String> getAnnotationNames() { - return new TransformationIterable<AnnotationDefinition, String>(getAnnotationDefinitions()) { - @Override - protected String transform(AnnotationDefinition annotationDefinition) { - return annotationDefinition.getAnnotationName(); - } - }; - } - - public Iterable<String> getContainerAnnotationNames() { - return new TransformationIterable<NestableAnnotationDefinition, String>(getNestableAnnotationDefinitions()) { - @Override - protected String transform(NestableAnnotationDefinition annotationDefinition) { - return annotationDefinition.getContainerAnnotationName(); - } - }; - } - - public Iterable<String> getNestableAnnotationNames() { - return new TransformationIterable<NestableAnnotationDefinition, String>(getNestableAnnotationDefinitions()) { - @Override - protected String transform(NestableAnnotationDefinition annotationDefinition) { - return annotationDefinition.getNestableAnnotationName(); - } - }; - } - - public Annotation buildAnnotation(JavaResourceAnnotatedElement parent, AnnotatedElement element, String annotationName) { - return this.getAnnotationDefinition(annotationName).buildAnnotation(parent, element); - } - - public Annotation buildAnnotation(JavaResourceAnnotatedElement parent, IAnnotation jdtAnnotation) { - return this.getAnnotationDefinition(jdtAnnotation.getElementName()).buildAnnotation(parent, jdtAnnotation); - } - - public NestableAnnotation buildAnnotation(JavaResourceAnnotatedElement parent, IAnnotation jdtAnnotation, int index) { - return this.getNestableAnnotationDefinition(jdtAnnotation.getElementName()).buildAnnotation(parent, jdtAnnotation, index); - } - - public Annotation buildNullAnnotation(JavaResourceAnnotatedElement parent, String annotationName) { - return this.getAnnotationDefinition(annotationName).buildNullAnnotation(parent); - } - - protected Iterable<NestableAnnotationDefinition> getNestableAnnotationDefinitions() { - return new ArrayIterable<NestableAnnotationDefinition>(this.nestableAnnotationDefinitions); - } - - protected NestableAnnotationDefinition getNestableAnnotationDefinition(String annotationName) { - for (NestableAnnotationDefinition annotationDefinition : this.nestableAnnotationDefinitions) { - if (annotationDefinition.getNestableAnnotationName().equals(annotationName)) { - return annotationDefinition; - } - } - return null; - } - - public NestableAnnotation buildAnnotation(JavaResourceAnnotatedElement parent, AnnotatedElement element, String annotationName, int index) { - return this.getNestableAnnotationDefinition(annotationName).buildAnnotation(parent, element, index); - } - - public String getNestableAnnotationName(String containerAnnotationName) { - return getNestableAnnotationDefinitionForContainer(containerAnnotationName).getNestableAnnotationName(); - } - - public String getContainerAnnotationName(String nestableAnnotationName) { - return getNestableAnnotationDefinition(nestableAnnotationName).getContainerAnnotationName(); - } - - public String getNestableElementName(String nestableAnnotationName) { - return getNestableAnnotationDefinition(nestableAnnotationName).getElementName(); - } - - private NestableAnnotationDefinition getNestableAnnotationDefinitionForContainer(String containerAnnotationName) { - for (NestableAnnotationDefinition nestableAnnotationDefinition : getNestableAnnotationDefinitions()) { - if (nestableAnnotationDefinition.getContainerAnnotationName().equals(containerAnnotationName)) { - return nestableAnnotationDefinition; - } - } - return null; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptCommonCorePlugin.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptCommonCorePlugin.java deleted file mode 100644 index f7e06e39bf..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptCommonCorePlugin.java +++ /dev/null @@ -1,145 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011, 2012 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.common.core; - -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jpt.common.core.internal.JptPlugin; -import org.eclipse.jpt.common.core.internal.libval.LibraryValidatorManager; -import org.eclipse.jpt.common.core.libprov.JptLibraryProviderInstallOperationConfig; -import org.eclipse.jpt.common.core.libval.LibraryValidator; -import org.osgi.framework.BundleContext; - -// TODO bjv move to *private* internal package and move all public stuff to adapters etc. -public class JptCommonCorePlugin - extends JptPlugin -{ - - // ********** public constants ********** - - /** - * The plug-in identifier of the jpt common core support - * (value <code>"org.eclipse.jpt.common.core"</code>). - */ - public static final String PLUGIN_ID = "org.eclipse.jpt.common.core"; //$NON-NLS-1$ - public static final String PLUGIN_ID_ = PLUGIN_ID + '.'; - - - /** - * The content type for Java source code files. - */ - public static final IContentType JAVA_SOURCE_CONTENT_TYPE = getContentType(JavaCore.JAVA_SOURCE_CONTENT_TYPE); - - /** - * The resource type for Java source code files - */ - public static final JptResourceType JAVA_SOURCE_RESOURCE_TYPE = new JptResourceType(JAVA_SOURCE_CONTENT_TYPE); - - /** - * The content type for Java archives (JARs). - */ - public static final IContentType JAR_CONTENT_TYPE = getJptContentType("jar"); //$NON-NLS-1$ - - /** - * The resource type for Java archives (JARs). - */ - public static final JptResourceType JAR_RESOURCE_TYPE = new JptResourceType(JptCommonCorePlugin.JAR_CONTENT_TYPE); - - /** - * The content type for package-info Java code files. - */ - public static final IContentType JAVA_SOURCE_PACKAGE_INFO_CONTENT_TYPE = getJptContentType("javaPackageInfo"); //$NON-NLS-1$ - - /** - * The resource type for package-info Java code files - */ - public static final JptResourceType JAVA_SOURCE_PACKAGE_INFO_RESOURCE_TYPE = new JptResourceType(JAVA_SOURCE_PACKAGE_INFO_CONTENT_TYPE); - - - private static final String JPT_CONTENT_PREFIX = PLUGIN_ID_ + "content"; //$NON-NLS-1$ - - private static final String JPT_CONTENT_PREFIX_ = JPT_CONTENT_PREFIX + '.'; - - private static IContentType getJptContentType(String jptContentType) { - return getContentType(JPT_CONTENT_PREFIX_ + jptContentType); - } - - private static IContentType getContentType(String contentType) { - return Platform.getContentTypeManager().getContentType(contentType); - } - - public static Iterable<LibraryValidator> getLibraryValidators( - JptLibraryProviderInstallOperationConfig config) { - return LibraryValidatorManager.instance().getLibraryValidators(config); - } - - // ********** singleton ********** - - private static JptCommonCorePlugin INSTANCE; - - /** - * Return the singleton Dali common core plug-in. - */ - public static JptCommonCorePlugin instance() { - return INSTANCE; - } - - - // ********** public static methods ********** - - /** - * Log the specified message. - */ - public static void log(String msg) { - INSTANCE.logError(msg); - } - - /** - * Log the specified exception or error. - */ - public static void log(Throwable throwable) { - INSTANCE.logError(throwable); - } - - /** - * Log the specified message and exception or error. - */ - public static void log(String msg, Throwable throwable) { - INSTANCE.logError(msg, throwable); - } - - - // ********** plug-in implementation ********** - - public JptCommonCorePlugin() { - super(); - if (INSTANCE != null) { - throw new IllegalStateException(); - } - // this convention is *wack*... ~bjv - INSTANCE = this; - } - - @Override - public synchronized void start(BundleContext context) throws Exception { - super.start(context); - // nothing yet... - } - - @Override - public synchronized void stop(BundleContext context) throws Exception { - try { - // nothing yet... - } finally { - super.stop(context); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptResourceModel.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptResourceModel.java deleted file mode 100644 index f183add042..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptResourceModel.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2012 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.common.core; - -import org.eclipse.core.resources.IFile; - -/** - * Listeners are notified whenever anything in the JPT resource model changes. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 2.3 - * @since 2.2 - */ -public interface JptResourceModel { - /** - * Return the model's resource type. This can change. - * Return <code>null</code> if the resource type cannot be determined, - * the content type is <code>null</code> or the version is <code>null</code>. - */ - JptResourceType getResourceType(); - - /** - * Return the model's file. - */ - IFile getFile(); - - /** - * Changes to the resource model result in events. - * In particular, the JPA project performs an "update" whenever a resource - * model changes. - */ - void addResourceModelListener(JptResourceModelListener listener); - - /** - * @see #addResourceModelListener(JptResourceModelListener) - */ - void removeResourceModelListener(JptResourceModelListener listener); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptResourceModelListener.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptResourceModelListener.java deleted file mode 100644 index 5cca6fe240..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptResourceModelListener.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core; - -import java.util.EventListener; -import org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl; - -/** - * The listener is notified whenever anything in the JPA resource model changes. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 2.3 - * @since 2.2 - */ -public interface JptResourceModelListener - extends EventListener -{ - void resourceModelChanged(JptResourceModel jpaResourceModel); - - /** - * Modified resource is closed without saving - * @see TranslatorResourceImpl#isReverting() - */ - void resourceModelReverted(JptResourceModel jpaResourceModel); - - void resourceModelUnloaded(JptResourceModel jpaResourceModel); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptResourceType.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptResourceType.java deleted file mode 100644 index e86355e266..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/JptResourceType.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010 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.common.core; - -import org.eclipse.core.runtime.content.IContentType; - -/** - * Describes the file content type and version for JPA resources. - * This is a value object that defines an {@link #equals(Object)} method. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 2.3 - * @since 2.3 - */ -public class JptResourceType -{ - private final IContentType contentType; - - private final String version; - - - /** - * Version used when version can not be determined or when there is no - * sense of version (e.g. Java). - */ - public static final String UNDETERMINED_VERSION = "<undetermined>"; //$NON-NLS-1$ - - - public JptResourceType(IContentType contentType) { - this(contentType, UNDETERMINED_VERSION); - } - - public JptResourceType(IContentType contentType, String version) { - super(); - if (contentType == null) { - throw new NullPointerException("content type"); //$NON-NLS-1$ - } - if (version == null) { - throw new NullPointerException("version"); //$NON-NLS-1$ - } - this.contentType = contentType; - this.version = version; - } - - - public IContentType getContentType() { - return this.contentType; - } - - public String getVersion() { - return this.version; - } - - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - if ((obj == null) || (obj.getClass() != this.getClass())) { - return false; - } - JptResourceType other = (JptResourceType) obj; - return this.contentType.equals(other.contentType) && this.version.equals(other.version); - } - - @Override - public int hashCode() { - final int prime = 31; - int hash = 17; - hash = hash * prime + this.contentType.hashCode(); - hash = hash * prime + this.version.hashCode(); - return hash; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(this.getClass().getSimpleName()); - sb.append("(content = "); //$NON-NLS-1$ - sb.append(this.contentType); - sb.append(", "); //$NON-NLS-1$ - sb.append("version = "); //$NON-NLS-1$ - sb.append(this.version); - sb.append(')'); - return sb.toString(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/JptCommonCoreMessages.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/JptCommonCoreMessages.java deleted file mode 100644 index b9e6e40681..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/JptCommonCoreMessages.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2012 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.common.core.internal; - -import org.eclipse.osgi.util.NLS; - -/** - * Localized messages used by Dali common core. - */ -public class JptCommonCoreMessages { - - public static String DALI_JOB_NAME; - public static String DALI_EVENT_HANDLER_THREAD_NAME; - public static String GENERATION_CREATING_LAUNCH_CONFIG_TASK; - public static String GENERATION_SAVING_LAUNCH_CONFIG_TASK; - public static String GENERATION_LAUNCHING_CONFIG_TASK; - public static String REGISTRY_MISSING_ATTRIBUTE; - public static String REGISTRY_INVALID_VALUE; - public static String REGISTRY_DUPLICATE; - public static String REGISTRY_FAILED_CLASS_LOAD; - public static String REGISTRY_FAILED_INTERFACE_ASSIGNMENT; - public static String REGISTRY_FAILED_INSTANTIATION; - public static String USER_LIBRARY_VALIDATOR__CLASS_NOT_FOUND; - public static String VALIDATE_CONTAINER_NOT_SPECIFIED; - public static String VALIDATE_FILE_NAME_NOT_SPECIFIED; - public static String VALIDATE_FILE_ALREADY_EXISTS; - - private static final String BUNDLE_NAME = "jpt_common_core"; //$NON-NLS-1$ - private static final Class<?> BUNDLE_CLASS = JptCommonCoreMessages.class; - static { - NLS.initializeMessages(BUNDLE_NAME, BUNDLE_CLASS); - } - - private JptCommonCoreMessages() { - throw new UnsupportedOperationException(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/JptPlugin.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/JptPlugin.java deleted file mode 100644 index 52be7123d1..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/JptPlugin.java +++ /dev/null @@ -1,280 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Plugin; -import org.eclipse.core.runtime.Status; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.osgi.service.debug.DebugOptions; -import org.osgi.framework.BundleContext; -import org.osgi.util.tracker.ServiceTracker; - -/** - * Common Dali plug-in behavior. - */ -public abstract class JptPlugin - extends Plugin -{ - protected BundleContext bundleContext; - protected ServiceTracker<DebugOptions, DebugOptions> debugOptionsServiceTracker; - - - protected JptPlugin() { - super(); - } - - - // ********** logging ********** - - /** - * Log the specified message with a severity of - * {@link IStatus#ERROR ERROR}. - * @see #log(int, String) - * @see IStatus - */ - public void logError(String message) { - this.log(IStatus.ERROR, message); - } - - /** - * Log the specified message with the specified severity. - * @see IStatus#getSeverity() - */ - public void log(int severity, String message) { - this.log(severity, message, null); - } - - /** - * Log the specified exception or error with a severity of - * {@link IStatus#ERROR ERROR}. - * @see #log(int, Throwable) - * @see IStatus - */ - public void logError(Throwable throwable) { - this.log(IStatus.ERROR, throwable); - } - - /** - * Log the specified exception or error with the specified severity. - * @see IStatus#getSeverity() - */ - public void log(int severity, Throwable throwable) { - this.log(severity, throwable.getLocalizedMessage(), throwable); - } - - /** - * Log the specified message and exception or error with a severity of - * {@link IStatus#ERROR ERROR}. - * @see #log(int, String, Throwable) - * @see IStatus - */ - public void logError(String msg, Throwable throwable) { - this.log(IStatus.ERROR, msg, throwable); - } - - /** - * Log the specified message and exception or error - * with the specified severity. - * @see IStatus#getSeverity() - * @see IStatus#getCode() - */ - public void log(int severity, String msg, Throwable throwable) { - this.log(severity, IStatus.OK, msg, throwable); - } - - /** - * Log the specified message and exception or error - * with the specified severity and code. - * @see IStatus#getSeverity() - * @see IStatus#getCode() - */ - public void log(int severity, int code, String msg, Throwable throwable) { - this.getLog().log(new Status(severity, this.getPluginID(), code, msg, throwable)); - } - - - // ********** debug options ********** - - /** - * Return the specified debug option as a <code>boolean</code> value. - * Return <code>false</code> if no such option is found. - * <p> - * The debug option is within the scope of the plug-in's debug options - * (e.g. for the plug-in <code>"org.eclipse.jpt.common.core"</code>, - * the specified option <code>"foo"</code> will be mapped to - * the {@link Platform} option - * <code>"org.eclipse.jpt.common.core/debug/foo"</code>). - */ - public boolean getBooleanDebugOption(String option) { - return this.getBooleanDebugOption(option, false); - } - - /** - * Return the specified debug option as a <code>boolean</code> value. - * Return the specified default value if no such option is found. - * <p> - * The debug option is within the scope of the plug-in's debug options - * (e.g. for the plug-in <code>"org.eclipse.jpt.common.core"</code>, - * the specified option <code>"foo"</code> will be mapped to - * the {@link Platform} option - * <code>"org.eclipse.jpt.common.core/debug/foo"</code>). - */ - public boolean getBooleanDebugOption(String option, boolean defaultValue) { - String value = this.getDebugOption(option); - return (value == null) ? defaultValue : Boolean.parseBoolean(value.trim()); - } - - /** - * Return the specified debug option as an <code>int</code> value. - * Return <code>-1</code> if no such option is found. - * <p> - * The debug option is within the scope of the plug-in's debug options - * (e.g. for the plug-in <code>"org.eclipse.jpt.common.core"</code>, - * the specified option <code>"foo"</code> will be mapped to - * the {@link Platform} option - * <code>"org.eclipse.jpt.common.core/debug/foo"</code>). - */ - public int getIntegerDebugOption(String option) { - return this.getIntegerDebugOption(option, -1); - } - - /** - * Return the specified debug option as an <code>int</code> value. - * Return the specified default value if no such option is found. - * <p> - * The debug option is within the scope of the plug-in's debug options - * (e.g. for the plug-in <code>"org.eclipse.jpt.common.core"</code>, - * the specified option <code>"foo"</code> will be mapped to - * the {@link Platform} option - * <code>"org.eclipse.jpt.common.core/debug/foo"</code>). - */ - public int getIntegerDebugOption(String option, int defaultValue) { - String value = this.getDebugOption(option); - return (value == null) ? defaultValue : Integer.parseInt(value.trim()); - } - - /** - * Return the specified debug option. - * Return <code>null</code> if no such option is found. - * <p> - * The debug option is within the scope of the plug-in's debug options - * (e.g. for the plug-in <code>"org.eclipse.jpt.common.core"</code>, - * the specified option <code>"foo"</code> will be mapped to - * the {@link Platform} option - * <code>"org.eclipse.jpt.common.core/debug/foo"</code>). - */ - public String getDebugOption(String option) { - return this.getDebugOption(option, null); - } - - /** - * Return the specified debug option. - * Return the specified default value if no such option is found. - * <p> - * The debug option is within the scope of the plug-in's debug options - * (e.g. for the plug-in <code>"org.eclipse.jpt.common.core"</code>, - * the specified option <code>"foo"</code> will be mapped to - * the {@link Platform} option - * <code>"org.eclipse.jpt.common.core/debug/foo"</code>). - */ - public String getDebugOption(String option, String defaultValue) { - return this.isDebugging() ? this.getDebugOption_(option, defaultValue) : defaultValue; - } - - protected String getDebugOption_(String option, String defaultValue) { - if (StringTools.stringIsEmpty(option)) { - throw new IllegalArgumentException("debug option cannot be blank"); //$NON-NLS-1$ - } - String value = this.getDebugOption_(option); - return (value != null) ? value : defaultValue; - } - - protected String getDebugOption_(String option) { - DebugOptions debugOptions = this.getDebugOptions(); - return (debugOptions == null) ? null : debugOptions.getOption(this.getPluginDebugOption() + option); - } - - protected DebugOptions getDebugOptions() { - ServiceTracker<DebugOptions, DebugOptions> tracker = this.getDebugOptionsServiceTracker(); - return (tracker == null) ? null : tracker.getService(); - } - - private synchronized ServiceTracker<DebugOptions, DebugOptions> getDebugOptionsServiceTracker() { - if (this.isActive() && (this.debugOptionsServiceTracker == null)) { - this.debugOptionsServiceTracker = this.buildDebugOptionsServiceTracker(); - this.debugOptionsServiceTracker.open(); - } - return this.debugOptionsServiceTracker; - } - - private ServiceTracker<DebugOptions, DebugOptions> buildDebugOptionsServiceTracker() { - return new ServiceTracker<DebugOptions, DebugOptions>(this.bundleContext, DebugOptions.class, null); - } - - /** - * Return the plug-in's debug option path. - */ - protected String getPluginDebugOption() { - return this.getPluginID() + DEBUG_OPTION_SCOPE; - } - protected static final String DEBUG_OPTION_SCOPE = "/debug/"; //$NON-NLS-1$ - - - // ********** plug-in lifecycle ********** - - @Override - public synchronized void start(BundleContext context) throws Exception { - super.start(context); - this.bundleContext = context; - } - - @Override - public synchronized void stop(BundleContext context) throws Exception { - try { - this.stop_(); - } finally { - this.bundleContext = null; - super.stop(context); - } - } - - protected void stop_() throws Exception { - if (this.debugOptionsServiceTracker != null) { - this.debugOptionsServiceTracker.close(); - this.debugOptionsServiceTracker = null; - } - } - - - // ********** misc ********** - - public String getPluginID() { - return this.getBundle().getSymbolicName(); - } - - /** - * Return whether the plug-in is active; i.e. it has been - * {@link #start(BundleContext) started}. - */ - public synchronized boolean isActive() { - return this.bundleContext != null; - } - - /** - * Return whether the plug-in is inactive; i.e. it has been - * {@link #stop(BundleContext) stopped} or not yet - * {@link #start(BundleContext) started}. - */ - public boolean isInactive() { - return ! this.isActive(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/LibraryProviderPropertyTester.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/LibraryProviderPropertyTester.java deleted file mode 100644 index 0f3e21f034..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/LibraryProviderPropertyTester.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal; - -import org.eclipse.core.expressions.PropertyTester; -import org.eclipse.jst.common.project.facet.core.libprov.ILibraryProvider; - -/** - * Property tester for {@link ILibraryProvider}. - * See <code>org.eclipse.jpt.common.core/plugin.xml</code> - */ -public class LibraryProviderPropertyTester - extends PropertyTester -{ - public static final String ID = "id"; //$NON-NLS-1$ - public static final String EXTENDS_ID = "extendsId"; //$NON-NLS-1$ - - public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { - if (receiver instanceof ILibraryProvider) { - return this.test((ILibraryProvider) receiver, property, expectedValue); - } - return false; - } - - private boolean test(ILibraryProvider libraryProvider, String property, Object expectedValue) { - if (property.equals(ID)) { - return libraryProvider.getId().equals(expectedValue); - } - if (property.equals(EXTENDS_ID)) { - while (libraryProvider != null) { - if (libraryProvider.getId().equals(expectedValue)) { - return true; - } - libraryProvider = libraryProvider.getBaseProvider(); - } - return false; - } - return false; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/gen/AbstractJptGenerator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/gen/AbstractJptGenerator.java deleted file mode 100644 index 22dd3b8d85..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/gen/AbstractJptGenerator.java +++ /dev/null @@ -1,390 +0,0 @@ -/******************************************************************************* -* Copyright (c) 2008, 2011 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.common.core.internal.gen; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.SubMonitor; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.core.ILaunchesListener2; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; -import org.eclipse.jdt.launching.IRuntimeClasspathEntry; -import org.eclipse.jdt.launching.IVMInstall; -import org.eclipse.jdt.launching.JavaRuntime; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.internal.JptCommonCoreMessages; -import org.eclipse.osgi.service.datalocation.Location; -import org.osgi.framework.Bundle; - -public abstract class AbstractJptGenerator -{ - public static final String PLUGINS_DIR = "plugins/"; //$NON-NLS-1$ - - private IVMInstall jre; - protected ILaunchConfigurationWorkingCopy launchConfig; - private ILaunch launch; - - protected final IJavaProject javaProject; - protected final String projectLocation; - - private boolean isDebug = false; - - // ********** constructors ********** - - protected AbstractJptGenerator(IJavaProject javaProject) { - super(); - this.javaProject = javaProject; - this.projectLocation = javaProject.getProject().getLocation().toString(); - this.initialize(); - } - - // ********** abstract methods ********** - - protected abstract String getMainType(); - - protected abstract String getLaunchConfigName(); - - protected String getBootstrapJarPrefix() { - throw new RuntimeException("Bootstrap JAR not specified."); //$NON-NLS-1$; - } - - protected abstract void specifyProgramArguments(); - - protected abstract List<String> buildClasspath() throws CoreException; - - // ********** behavior ********** - - protected void initialize() { - try { - this.jre = this.getProjectJRE(); - if (this.jre == null) { - String message = "Could not identify the VM."; //$NON-NLS-1$ - throw new RuntimeException(message); - } - this.launchConfig = this.buildLaunchConfiguration(); - } - catch (CoreException e) { - throw new RuntimeException(e); - } - } - - protected void generate(IProgressMonitor monitor) { - SubMonitor sm = SubMonitor.convert(monitor, 10); - this.preGenerate(sm.newChild(2)); - if (sm.isCanceled()) { - throw new OperationCanceledException(); - } - sm.subTask(JptCommonCoreMessages.GENERATION_CREATING_LAUNCH_CONFIG_TASK); - this.initializeLaunchConfiguration(); - sm.worked(1); - if (sm.isCanceled()) { - throw new OperationCanceledException(); - } - - this.addLaunchListener(); - sm.worked(1); - - if (sm.isCanceled()) { - throw new OperationCanceledException(); - } - this.launch = this.saveAndLaunchConfig(sm.newChild(6)); - } - - private void initializeLaunchConfiguration() { - this.specifyJRE(); - - this.specifyProject(); - this.specifyMainType(); - - this.specifyProgramArguments(); - this.specifyWorkingDir(); - - this.specifyClasspathProperties(); - } - - private void addLaunchListener() { - - this.getLaunchManager().addLaunchListener(this.buildLaunchListener()); - } - - protected abstract void preGenerate(IProgressMonitor monitor); - - protected void postGenerate() { - try { - if( ! this.isDebug) { - this.removeLaunchConfiguration(); - } - this.refreshProject(); - } - catch(CoreException e) { - throw new RuntimeException(e); - } - } - - protected void refreshProject() throws CoreException { - this.getProject().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); - } - - private ILaunchesListener2 buildLaunchListener() { - return new ILaunchesListener2() { - - public void launchesTerminated(ILaunch[] launches) { - for(int i = 0; i < launches.length; i++) { - ILaunch launch = launches[i]; - if (launch.equals(AbstractJptGenerator.this.getLaunch())) { - try { - AbstractJptGenerator.this.postGenerate(); - AbstractJptGenerator.this.launch = null; - } - finally { - AbstractJptGenerator.this.getLaunchManager().removeLaunchListener(this); - } - return; - } - } - } - - public void launchesAdded(ILaunch[] launches) { - // not interested to this event - } - - public void launchesChanged(ILaunch[] launches) { - // not interested to this event - } - - public void launchesRemoved(ILaunch[] launches) { - // not interested to this event - } - }; - } - - // ********** Setting Launch Configuration ********** - - protected void specifyJRE() { - String jreName = this.jre.getName(); - String vmId = this.jre.getVMInstallType().getId(); - this.launchConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_JRE_CONTAINER_PATH, jreName); - this.launchConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_JRE_CONTAINER_PATH, vmId); - } - - private void specifyProject() { - String projectName = this.getProject().getName(); - this.launchConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, projectName); - } - - protected IProject getProject() { - return this.javaProject.getProject(); - } - - private void specifyMainType() { - this.launchConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, this.getMainType()); - } - - protected void specifyClasspathProperties() { - List<String> classpath; - try { - classpath = this.buildClasspath(); - } - catch (CoreException e) { - throw new RuntimeException("An error occured generating a memento", e); //$NON-NLS-1$ - } - this.launchConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH, classpath); - this.launchConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_DEFAULT_CLASSPATH, false); - } - - // ********** ClasspathEntry ********** - - protected IRuntimeClasspathEntry getSystemLibraryClasspathEntry() throws CoreException { - - IPath systemLibsPath = new Path(JavaRuntime.JRE_CONTAINER); - return JavaRuntime.newRuntimeContainerClasspathEntry(systemLibsPath, IRuntimeClasspathEntry.STANDARD_CLASSES); - } - - protected IRuntimeClasspathEntry getDefaultProjectClasspathEntry() { - - IRuntimeClasspathEntry projectEntry = JavaRuntime.newDefaultProjectClasspathEntry(this.javaProject); - projectEntry.setClasspathProperty(IRuntimeClasspathEntry.USER_CLASSES); - - return projectEntry; - } - - protected static IRuntimeClasspathEntry getArchiveClasspathEntry(IPath archivePath) { - IRuntimeClasspathEntry archiveEntry = JavaRuntime.newArchiveRuntimeClasspathEntry(archivePath); - archiveEntry.setClasspathProperty(IRuntimeClasspathEntry.USER_CLASSES); - - return archiveEntry; - } - - protected static IRuntimeClasspathEntry getVariableRuntimeClasspathEntry(IPath path) { - IRuntimeClasspathEntry varEntry = JavaRuntime.newVariableRuntimeClasspathEntry(path); - varEntry.setClasspathProperty(IRuntimeClasspathEntry.USER_CLASSES); - return varEntry; - } - - // ********** LaunchConfig ********** - - private ILaunch saveAndLaunchConfig(IProgressMonitor monitor) { - SubMonitor sm = SubMonitor.convert(monitor, 10); - ILaunchConfiguration configuration = null; - ILaunch result = null; - try { - sm.subTask(JptCommonCoreMessages.GENERATION_SAVING_LAUNCH_CONFIG_TASK); - configuration = this.launchConfig.doSave(); - } - catch (CoreException saveException) { - throw new RuntimeException("Could not save LaunchConfig", saveException); //$NON-NLS-1$ - } - sm.worked(1); - if (sm.isCanceled()) { - throw new OperationCanceledException(); - } - try { - sm.subTask(JptCommonCoreMessages.GENERATION_LAUNCHING_CONFIG_TASK); - result = configuration.launch(ILaunchManager.RUN_MODE, sm.newChild(9)); - } - catch (CoreException launchException) { - throw new RuntimeException("An error occured during launch", launchException); //$NON-NLS-1$ - } - return result; - } - - // ********** Main arguments ********** - - protected void appendDebugArgument(StringBuffer sb) { - if (this.isDebug) { - sb.append(" -debug"); //$NON-NLS-1$ - } - } - - // ********** Queries ********** - - protected ILaunch getLaunch() { - return this.launch; - } - - protected ILaunchManager getLaunchManager() { - return DebugPlugin.getDefault().getLaunchManager(); - } - - private IVMInstall getProjectJRE() throws CoreException { - return JavaRuntime.getVMInstall(this.javaProject); - } - - // ********** Utilities ********** - - protected IRuntimeClasspathEntry getBootstrapJarClasspathEntry() { - return getArchiveClasspathEntry(this.buildBootstrapJarPath()); - } - - protected IPath buildBootstrapJarPath() { - return this.findGenJarStartingWith(this.getBootstrapJarPrefix()); - } - - protected IPath findGenJarStartingWith(String genJarName) { - try { - File jarInstallDir = this.getBundleParentDir(JptCommonCorePlugin.PLUGIN_ID); - - List<File> result = new ArrayList<File>(); - this.findFileStartingWith(genJarName, jarInstallDir, result); - if (result.isEmpty()) { - throw new RuntimeException("Could not find: " + genJarName + "#.#.#v###.jar in: " + jarInstallDir); //$NON-NLS-1$ //$NON-NLS-2$ - } - File genJarFile = result.get(0); - String genJarPath = genJarFile.getCanonicalPath(); - return new Path(genJarPath); - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - - // ********** private methods ********** - - private File getBundleParentDir(String bundleName) throws IOException { - - if (Platform.inDevelopmentMode()) { - Location eclipseHomeLoc = Platform.getInstallLocation(); - String eclipseHome = eclipseHomeLoc.getURL().getPath(); - if ( ! eclipseHome.endsWith(PLUGINS_DIR)) { - eclipseHome += PLUGINS_DIR; - } - return new File(eclipseHome); - } - Bundle bundle = Platform.getBundle(bundleName); - return FileLocator.getBundleFile(bundle).getParentFile(); - } - - private ILaunchConfigurationWorkingCopy buildLaunchConfiguration() throws CoreException { - this.removeLaunchConfiguration(); - - ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager(); - ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION); - - return type.newInstance(null, this.getLaunchConfigName()); - } - - private void removeLaunchConfiguration() throws CoreException { - - ILaunchManager manager = this.getLaunchManager(); - ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION); - - ILaunchConfiguration[] configurations = manager.getLaunchConfigurations(type); - for (int i = 0; i < configurations.length; i++) { - ILaunchConfiguration configuration = configurations[i]; - if (configuration.getName().equals(this.getLaunchConfigName())) { - configuration.delete(); - break; - } - } - } - - private void findFileStartingWith(String fileName, File directory, List<? super File> list) { - if(directory.listFiles() == null) { - throw new RuntimeException("Could not find directory: " + directory); //$NON-NLS-1$ - } - for (File file : directory.listFiles()) { - if (file.getName().startsWith(fileName)) { - list.add(file); - } - if (file.isDirectory()) { - this.findFileStartingWith(fileName, file, list); - } - } - } - - private void specifyWorkingDir() { - File workingDir = new Path(this.projectLocation).toFile(); - this.launchConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, workingDir.getAbsolutePath()); - } - - protected void setDebug(boolean isDebug) { - this.isDebug = isDebug; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libprov/JptOsgiBundlesLibraryProviderInstallOperationConfig.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libprov/JptOsgiBundlesLibraryProviderInstallOperationConfig.java deleted file mode 100644 index b91c73b440..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libprov/JptOsgiBundlesLibraryProviderInstallOperationConfig.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.internal.libprov; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.libprov.JptLibraryProviderInstallOperationConfig; -import org.eclipse.jpt.common.core.libval.LibraryValidator; -import org.eclipse.jst.j2ee.internal.common.classpath.WtpOsgiBundlesLibraryProviderInstallOperationConfig; - - -public abstract class JptOsgiBundlesLibraryProviderInstallOperationConfig - extends WtpOsgiBundlesLibraryProviderInstallOperationConfig - implements JptLibraryProviderInstallOperationConfig { - - protected JptOsgiBundlesLibraryProviderInstallOperationConfig() { - super(); - } - - - @Override - public synchronized IStatus validate() { - IStatus status = super.validate(); - if (! status.isOK()) { - return status; - } - - for (LibraryValidator libraryValidator : JptCommonCorePlugin.getLibraryValidators(this)) { - status = libraryValidator.validate(this); - if (! status.isOK()) { - return status; - } - } - - return Status.OK_STATUS; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libprov/JptUserLibraryProviderInstallOperationConfig.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libprov/JptUserLibraryProviderInstallOperationConfig.java deleted file mode 100644 index 224f52afe2..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libprov/JptUserLibraryProviderInstallOperationConfig.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.internal.libprov; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.libprov.JptLibraryProviderInstallOperationConfig; -import org.eclipse.jpt.common.core.libval.LibraryValidator; -import org.eclipse.jst.j2ee.internal.common.classpath.WtpUserLibraryProviderInstallOperationConfig; - - -public abstract class JptUserLibraryProviderInstallOperationConfig - extends WtpUserLibraryProviderInstallOperationConfig - implements JptLibraryProviderInstallOperationConfig { - - protected JptUserLibraryProviderInstallOperationConfig() { - super(); - } - - - @Override - public synchronized IStatus validate() { - IStatus status = super.validate(); - if (! status.isOK()) { - return status; - } - - for (LibraryValidator libraryValidator : JptCommonCorePlugin.getLibraryValidators(this)) { - status = libraryValidator.validate(this); - if (! status.isOK()) { - return status; - } - } - - return Status.OK_STATUS; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libval/LibValUtil.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libval/LibValUtil.java deleted file mode 100644 index 34afb0c83b..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libval/LibValUtil.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 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.common.core.internal.libval; - -import static org.eclipse.jst.common.project.facet.core.internal.FacetedProjectFrameworkJavaPlugin.PLUGIN_ID; -import java.io.File; -import java.io.IOException; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jpt.common.core.internal.JptCommonCoreMessages; -import org.eclipse.osgi.util.NLS; - - -public class LibValUtil { - - public static IStatus validate(Iterable<IPath> libraryPaths, Set<String> classNames) { - Set<String> classFileNames = new HashSet<String>(); - Map<String,String> classFileNameToClassName = new HashMap<String,String>(); - for (String className : classNames) { - String classFileName = className.replace('.', '/') + ".class"; //$NON-NLS-1$ - classFileNames.add(classFileName); - classFileNameToClassName.put(classFileName, className); - } - - final Map<String,Integer> classAppearanceCounts = new HashMap<String,Integer>(); - - for (String classFileName : classFileNames) { - classAppearanceCounts.put(classFileName, 0); - } - - for (IPath libraryPath : libraryPaths) { - final File file = libraryPath.toFile(); - - if (file.exists()) { - ZipFile zip = null; - - try { - zip = new ZipFile(file); - - for (Enumeration<? extends ZipEntry> itr = zip.entries(); itr.hasMoreElements(); ) { - final ZipEntry zipEntry = itr.nextElement(); - final String name = zipEntry.getName(); - - Integer count = classAppearanceCounts.get(name); - - if (count != null) { - classAppearanceCounts.put(name, count + 1); - } - } - } - catch (IOException e) {} - finally { - if (zip != null) { - try { - zip.close(); - } - catch (IOException e) {} - } - } - } - } - - for (Map.Entry<String,Integer> entry : classAppearanceCounts.entrySet()) { - final int count = entry.getValue(); - - if (count == 0) { - final String classFileName = entry.getKey(); - final String className = classFileNameToClassName.get(classFileName); - final String message = - NLS.bind(JptCommonCoreMessages.USER_LIBRARY_VALIDATOR__CLASS_NOT_FOUND, className); - return new Status(IStatus.ERROR, PLUGIN_ID, message); - } - } - - return Status.OK_STATUS; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libval/LibraryValidatorConfig.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libval/LibraryValidatorConfig.java deleted file mode 100644 index 27a84ae9ba..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libval/LibraryValidatorConfig.java +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.internal.libval; - -import static org.eclipse.jst.common.project.facet.core.internal.FacetedProjectFrameworkJavaPlugin.log; -import org.eclipse.core.expressions.EvaluationContext; -import org.eclipse.core.expressions.EvaluationResult; -import org.eclipse.core.expressions.Expression; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jpt.common.core.internal.utility.XPointTools; -import org.eclipse.jpt.common.core.libprov.JptLibraryProviderInstallOperationConfig; -import org.eclipse.jpt.common.core.libval.LibraryValidator; - -public class LibraryValidatorConfig { - - public static final String CONFIG_EXPR_VAR = "config"; //$NON-NLS-1$ - public static final String LIBRARY_PROVIDER_EXPR_VAR = "libraryProvider"; //$NON-NLS-1$ - - - private String id; - private String pluginId; - private String className; - private Expression enablementCondition; - - - LibraryValidatorConfig() { - super(); - } - - - public String getId() { - return this.id; - } - - void setId(String id) { - this.id = id; - } - - public String getPluginId() { - return this.pluginId; - } - - void setPluginId(String pluginId) { - this.pluginId = pluginId; - } - - public String getClassName() { - return this.className; - } - - void setClassName(String className) { - this.className = className; - } - - public Expression getEnablementCondition() { - return this.enablementCondition; - } - - void setEnablementCondition(Expression enablementCondition) { - this.enablementCondition = enablementCondition; - } - - public LibraryValidator getLibraryValidator() { - return XPointTools.instantiate( - this.pluginId, LibraryValidatorManager.QUALIFIED_EXTENSION_POINT_ID, - this.className, LibraryValidator.class); - } - - public boolean isEnabledFor(JptLibraryProviderInstallOperationConfig config) { - EvaluationContext evalContext = new EvaluationContext(null, config); - evalContext.setAllowPluginActivation(true); - evalContext.addVariable(CONFIG_EXPR_VAR, config); - evalContext.addVariable(LIBRARY_PROVIDER_EXPR_VAR, config.getLibraryProvider()); - - if (this.enablementCondition != null) { - try { - EvaluationResult evalResult = this.enablementCondition.evaluate(evalContext); - - if (evalResult == EvaluationResult.FALSE) { - return false; - } - } - catch (CoreException e) { - log(e); - } - } - - return true; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libval/LibraryValidatorManager.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libval/LibraryValidatorManager.java deleted file mode 100644 index ce7c2eb179..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/libval/LibraryValidatorManager.java +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.internal.libval; - -import static org.eclipse.jpt.common.core.internal.utility.XPointTools.*; -import java.util.ArrayList; -import java.util.List; -import org.eclipse.core.expressions.Expression; -import org.eclipse.core.expressions.ExpressionConverter; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtension; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.IExtensionRegistry; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.internal.utility.XPointTools.XPointException; -import org.eclipse.jpt.common.core.libprov.JptLibraryProviderInstallOperationConfig; -import org.eclipse.jpt.common.core.libval.LibraryValidator; -import org.eclipse.jpt.common.utility.internal.KeyedSet; -import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; -import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; - -public class LibraryValidatorManager { - - public static final String EXTENSION_POINT_ID = "libraryValidators"; //$NON-NLS-1$ - public static final String QUALIFIED_EXTENSION_POINT_ID = JptCommonCorePlugin.PLUGIN_ID_ + EXTENSION_POINT_ID; - public static final String LIBRARY_VALIDATOR_ELEMENT = "libraryValidator"; //$NON-NLS-1$ - public static final String ID_ATTRIBUTE = "id"; //$NON-NLS-1$ - public static final String CLASS_ATTRIBUTE = "class"; //$NON-NLS-1$ - public static final String ENABLEMENT_ELEMENT = "enablement"; //$NON-NLS-1$ - - - private static LibraryValidatorManager INSTANCE = new LibraryValidatorManager(); - - - public static LibraryValidatorManager instance() { - return INSTANCE; - } - - - private KeyedSet<String, LibraryValidatorConfig> libraryValidatorConfigs; - - - private LibraryValidatorManager() { - this.libraryValidatorConfigs = new KeyedSet<String, LibraryValidatorConfig>(); - readExtensions(); - } - - - /** - * Return the {@link LibraryValidator}s - */ - public Iterable<LibraryValidator> getLibraryValidators(final JptLibraryProviderInstallOperationConfig config) { - return new FilteringIterable<LibraryValidator>( - new TransformationIterable<LibraryValidatorConfig, LibraryValidator>( - new FilteringIterable<LibraryValidatorConfig>( - this.libraryValidatorConfigs.getItemSet()) { - @Override - protected boolean accept(LibraryValidatorConfig o) { - return o.isEnabledFor(config); - } - }) { - @Override - protected LibraryValidator transform(LibraryValidatorConfig o) { - return o.getLibraryValidator(); - } - }) { - @Override - protected boolean accept(LibraryValidator o) { - return o != null; - } - }; - } - - private void readExtensions() { - final IExtensionRegistry registry = Platform.getExtensionRegistry(); - - final IExtensionPoint xpoint - = registry.getExtensionPoint(QUALIFIED_EXTENSION_POINT_ID); - - if (xpoint == null) { - throw new IllegalStateException(); - } - - final List<IConfigurationElement> configs = new ArrayList<IConfigurationElement>(); - - for (IExtension extension : xpoint.getExtensions()) { - for (IConfigurationElement element : extension.getConfigurationElements()) { - configs.add(element); - } - } - - for (IConfigurationElement element : configs) { - if (element.getName().equals(LIBRARY_VALIDATOR_ELEMENT)) { - readExtension(element); - } - } - } - - private void readExtension(IConfigurationElement element) { - try { - final LibraryValidatorConfig lvConfig = new LibraryValidatorConfig(); - - // plug-in id - lvConfig.setPluginId(element.getContributor().getName()); - - // resource locator id - lvConfig.setId(findRequiredAttribute(element, ID_ATTRIBUTE)); - - if (this.libraryValidatorConfigs.containsKey(lvConfig.getId())) { - logDuplicateExtension(QUALIFIED_EXTENSION_POINT_ID, ID_ATTRIBUTE, lvConfig.getId()); - throw new XPointException(); - } - - // resource locator class name - lvConfig.setClassName(findRequiredAttribute(element, CLASS_ATTRIBUTE)); - - // enablement - for (IConfigurationElement child : element.getChildren()) { - String childName = child.getName(); - if (childName.equals(ENABLEMENT_ELEMENT)) { - Expression expr; - try { - expr = ExpressionConverter.getDefault().perform(child); - } - catch (CoreException e) { - log(e); - throw new XPointException(); - } - lvConfig.setEnablementCondition(expr); - } - } - - this.libraryValidatorConfigs.addItem(lvConfig.getId(), lvConfig); - } - catch (XPointException e) { - // Ignore and continue. The problem has already been reported to the user - // in the log. - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationDataModelProvider.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationDataModelProvider.java deleted file mode 100644 index 1106f12032..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationDataModelProvider.java +++ /dev/null @@ -1,139 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2012 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.common.core.internal.operations; - -import java.util.Set; -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Status; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.internal.JptCommonCoreMessages; -import org.eclipse.jpt.common.core.internal.utility.PlatformTools; -import org.eclipse.jpt.common.core.resource.ProjectResourceLocator; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider; - -public abstract class AbstractJptFileCreationDataModelProvider - extends AbstractDataModelProvider - implements JptFileCreationDataModelProperties -{ - protected AbstractJptFileCreationDataModelProvider() { - super(); - } - - - @Override - public Set<String> getPropertyNames() { - @SuppressWarnings("unchecked") - Set<String> propertyNames = super.getPropertyNames(); - propertyNames.add(PROJECT); - propertyNames.add(CONTAINER_PATH); - propertyNames.add(FILE_NAME); - return propertyNames; - } - - @Override - public Object getDefaultProperty(String propertyName) { - if (propertyName.equals(CONTAINER_PATH)) { - IContainer sourceLocation = getDefaultContainer(); - if (sourceLocation != null && sourceLocation.exists()) { - return sourceLocation.getFullPath(); - } - } - else if (propertyName.equals(FILE_NAME)) { - return getDefaultFileName(); - } - return super.getDefaultProperty(propertyName); - } - - protected abstract String getDefaultFileName(); - - - // **************** validation ********************************************* - - @Override - public IStatus validate(String propertyName) { - IStatus status = Status.OK_STATUS; - if (propertyName.equals(CONTAINER_PATH) - || propertyName.equals(FILE_NAME)) { - status = validateContainerPathAndFileName(); - } - if (! status.isOK()) { - return status; - } - - return status; - } - - protected IStatus validateContainerPathAndFileName() { - IContainer container = getContainer(); - if (container == null) { - // verifies container has been specified, but should be unnecessary in most cases. - // there is almost always a default, and the new file wizard does this validation as well. - return new Status( - IStatus.ERROR, JptCommonCorePlugin.PLUGIN_ID, - JptCommonCoreMessages.VALIDATE_CONTAINER_NOT_SPECIFIED); - } - String fileName = getStringProperty(FILE_NAME); - if (StringTools.stringIsEmpty(fileName)) { - // verifies file name has been specified, but should be unnecessary in most cases. - // there is almost always a default, and the new file wizard does this validation as well. - return new Status( - IStatus.ERROR, JptCommonCorePlugin.PLUGIN_ID, - JptCommonCoreMessages.VALIDATE_FILE_NAME_NOT_SPECIFIED); - } - if (container.getFile(new Path(fileName)).exists()) { - // verifies file does not exist, but should be unnecessary in most cases. - // the new file wizard does this validation as well. - return new Status( - IStatus.ERROR, JptCommonCorePlugin.PLUGIN_ID, - JptCommonCoreMessages.VALIDATE_FILE_ALREADY_EXISTS); - } - return Status.OK_STATUS; - } - - - // **************** helper methods ***************************************** - - protected IPath getContainerPath() { - return (IPath) this.model.getProperty(CONTAINER_PATH); - } - - protected IContainer getContainer() { - IPath containerPath = getContainerPath(); - if (containerPath == null) { - return null; - } - return PlatformTools.getContainer(containerPath); - } - - protected IProject getProject() { - return getProject(getContainer()); - } - - protected IProject getProject(IContainer container) { - return (container == null) ? null : container.getProject(); - } - - /** - * Return a best guess source location for the for the specified project - */ - protected IContainer getDefaultContainer() { - IProject project = (IProject) this.model.getProperty(PROJECT); - if (project != null) { - ProjectResourceLocator locator = (ProjectResourceLocator) project.getAdapter(ProjectResourceLocator.class); - return locator.getDefaultResourceLocation(); - } - return null; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/JptFileCreationDataModelProperties.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/JptFileCreationDataModelProperties.java deleted file mode 100644 index 5c635c98c8..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/JptFileCreationDataModelProperties.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 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.common.core.internal.operations; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IPath; - -public interface JptFileCreationDataModelProperties -{ - /** - * Optional, type {@link IProject}, gives a clue as to the default container path - */ - String PROJECT = "JptFileCreationDataModelProperties.PROJECT"; //$NON-NLS-1$ - - /** - * Required, type {@link IPath}, identifies the full path to the container in which - * the file should be created - */ - String CONTAINER_PATH = "JptFileCreationDataModelProperties.CONTAINER_PATH"; //$NON-NLS-1$ - - /** - * Required, type {@link String}, identifies the file name - */ - String FILE_NAME = "JptFileCreationDataModelProperties.FILE_NAME"; //$NON-NLS-1$ -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ModuleResourceLocator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ModuleResourceLocator.java deleted file mode 100644 index d76318d249..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ModuleResourceLocator.java +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.resource; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.internal.utility.PlatformTools; -import org.eclipse.wst.common.componentcore.ComponentCore; -import org.eclipse.wst.common.componentcore.resources.IVirtualFile; -import org.eclipse.wst.common.componentcore.resources.IVirtualFolder; -import org.eclipse.wst.common.componentcore.resources.IVirtualResource; - -public class ModuleResourceLocator - extends SimpleJavaResourceLocator -{ - /** - * Return the folder representing the <code>META-INF</code> runtime location. - */ - @Override - public IContainer getDefaultResourceLocation(IProject project) { - return this.getRootFolder(project).getFolder(META_INF_PATH).getUnderlyingFolder(); - } - - @Override - public IPath getResourcePath(IProject project, IPath runtimePath) { - return this.getRootFolder(project).getFile(runtimePath).getWorkspaceRelativePath(); - } - - @Override - public IPath getRuntimePath(IProject project, IPath resourcePath) { - IVirtualFolder rootFolder = this.getRootFolder(project); - IFile file = PlatformTools.getFile(resourcePath); - IVirtualFile vFile = this.getVirtualFile(rootFolder, file); - if (vFile != null) { - return vFile.getRuntimePath().makeRelative(); - } - // couldn't find it - try the super-case - return super.getRuntimePath(project, resourcePath); - } - - protected IVirtualFile getVirtualFile(IVirtualFolder vFolder, IFile file) { - try { - return this.getVirtualFile_(vFolder, file); - } catch (CoreException ex) { - JptCommonCorePlugin.log(ex); - return null; - } - } - - protected IVirtualFile getVirtualFile_(IVirtualFolder vFolder, IFile file) throws CoreException { - for (IVirtualResource vResource : vFolder.members()) { - IVirtualFile vFile = this.getVirtualFile(vResource, file); - if (vFile != null) { - return vFile; - } - } - return null; - } - - protected IVirtualFile getVirtualFile(IVirtualResource vResource, IFile file) throws CoreException { - switch (vResource.getType()) { - case IVirtualResource.FILE: - IVirtualFile vFile = (IVirtualFile) vResource; - return file.equals(vFile.getUnderlyingResource()) ? vFile : null; - case IVirtualResource.FOLDER: - // recurse - return this.getVirtualFile_((IVirtualFolder) vResource, file); - default: - return null; - } - } - - protected IVirtualFolder getRootFolder(IProject project) { - return ComponentCore.createComponent(project).getRootFolder(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/PluginResourceLocator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/PluginResourceLocator.java deleted file mode 100644 index 2e8f070000..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/PluginResourceLocator.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.resource; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.internal.utility.PlatformTools; -import org.eclipse.pde.core.project.IBundleProjectService; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; - -public class PluginResourceLocator - extends SimpleJavaResourceLocator -{ - @Override - public IContainer getDefaultResourceLocation(IProject project) { - IContainer bundleRoot = this.getBundleRoot(project); - return (bundleRoot != null) ? - bundleRoot.getFolder(META_INF_PATH) : - super.getDefaultResourceLocation(project); - } - - @Override - public IPath getResourcePath(IProject project, IPath runtimePath) { - IContainer bundleRoot = this.getBundleRoot(project); - if (bundleRoot != null) { - IPath resourcePath = bundleRoot.getFullPath().append(runtimePath); - if (project.getWorkspace().getRoot().getFile(resourcePath).exists()) { - return resourcePath; - } - } - return super.getResourcePath(project, runtimePath); - } - - @Override - public IPath getRuntimePath(IProject project, IPath resourcePath) { - IContainer bundleRoot = this.getBundleRoot(project); - if (bundleRoot != null) { - IFile file = PlatformTools.getFile(resourcePath); - if (bundleRoot.contains(file)) { - return resourcePath.makeRelativeTo(bundleRoot.getFullPath()); - } - } - return super.getRuntimePath(project, resourcePath); - } - - protected IContainer getBundleRoot(IProject project) { - try { - return this.getBundleRoot_(project); - } catch (CoreException ex) { - // problem creating description on an existing project - JptCommonCorePlugin.log(ex); - return null; - } - } - - protected IContainer getBundleRoot_(IProject project) throws CoreException { - BundleContext bundleContext = JptCommonCorePlugin.instance().getBundle().getBundleContext(); - if (bundleContext == null) { - return project; - } - ServiceReference<IBundleProjectService> serviceRef = bundleContext.getServiceReference(IBundleProjectService.class); - if (serviceRef == null) { - return project; - } - IBundleProjectService service = bundleContext.getService(serviceRef); - if (service == null) { - bundleContext.ungetService(serviceRef); - return project; - } - IPath bundleRoot = service.getDescription(project).getBundleRoot(); - bundleContext.ungetService(serviceRef); - return (bundleRoot == null) ? project : project.getFolder(bundleRoot); - } - - protected IBundleProjectService getBundleProjectService() { - BundleContext context = JptCommonCorePlugin.instance().getBundle().getBundleContext(); - ServiceReference<IBundleProjectService> reference = context.getServiceReference(IBundleProjectService.class); - if (reference == null) { - return null; - } - IBundleProjectService service = context.getService(reference); - if (service != null) { - context.ungetService(reference); - } - return service; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ProjectAdapterFactory.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ProjectAdapterFactory.java deleted file mode 100644 index 1b0e356297..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ProjectAdapterFactory.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.resource; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IAdapterFactory; -import org.eclipse.jpt.common.core.resource.ProjectResourceLocator; - -/** - * Factory to build Dali adapters for an {@link IProject}:<ul> - * <li>{@link org.eclipse.jpt.common.core.resource.ProjectResourceLocator} - * </ul> - * See <code>org.eclipse.jpt.common.core/plugin.xml</code>. - */ -public class ProjectAdapterFactory - implements IAdapterFactory -{ - private static final Class<?>[] ADAPTER_LIST = new Class[] { - ProjectResourceLocator.class - }; - - public Class<?>[] getAdapterList() { - return ADAPTER_LIST; - } - - public Object getAdapter(Object adaptableObject, @SuppressWarnings("rawtypes") Class adapterType) { - if (adaptableObject instanceof IProject) { - return this.getAdapter((IProject) adaptableObject, adapterType); - } - return null; - } - - private Object getAdapter(IProject project, Class<?> adapterType) { - if (adapterType == ProjectResourceLocator.class) { - return this.getProjectResourceLocator(project); - } - return null; - } - - private ProjectResourceLocator getProjectResourceLocator(IProject project) { - return new SimpleProjectResourceLocator(project); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ResourceLocatorConfig.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ResourceLocatorConfig.java deleted file mode 100644 index 22a1b192af..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ResourceLocatorConfig.java +++ /dev/null @@ -1,167 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.internal.resource; - -import static org.eclipse.jst.common.project.facet.core.internal.FacetedProjectFrameworkJavaPlugin.log; -import org.eclipse.core.expressions.EvaluationContext; -import org.eclipse.core.expressions.EvaluationResult; -import org.eclipse.core.expressions.Expression; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jpt.common.core.internal.utility.XPointTools; -import org.eclipse.jpt.common.core.resource.ResourceLocator; -import org.eclipse.jpt.common.utility.internal.StringTools; - -public class ResourceLocatorConfig - implements Comparable<ResourceLocatorConfig> { - - public static final String PROJECT_ENABLEMENT_VARIABLE = "project"; //$NON-NLS-1$ - - private String id; - private String pluginId; - private String className; - private Priority priority; - private Expression enablementCondition; - - - ResourceLocatorConfig() { - super(); - } - - - public String getId() { - return this.id; - } - - void setId(String id) { - this.id = id; - } - - public String getPluginId() { - return this.pluginId; - } - - void setPluginId(String pluginId) { - this.pluginId = pluginId; - } - - public String getClassName() { - return this.className; - } - - void setClassName(String className) { - this.className = className; - } - - public Priority getPriority() { - return this.priority; - } - - void setPriority(Priority priority) { - this.priority = priority; - } - - public Expression getEnablementCondition() { - return this.enablementCondition; - } - - void setEnablementCondition(Expression enablementCondition) { - this.enablementCondition = enablementCondition; - } - - public ResourceLocator getResourceLocator() { - return XPointTools.instantiate( - this.pluginId, ResourceLocatorManager.QUALIFIED_EXTENSION_POINT_ID, - this.className, ResourceLocator.class); - } - - public boolean isEnabledFor(IProject project) { - EvaluationContext evalContext = new EvaluationContext(null, project); - evalContext.setAllowPluginActivation(true); - evalContext.addVariable(PROJECT_ENABLEMENT_VARIABLE, project); - - if (this.enablementCondition != null) { - try { - EvaluationResult evalResult = this.enablementCondition.evaluate(evalContext); - - if (evalResult == EvaluationResult.FALSE) { - return false; - } - } - catch (CoreException e) { - log(e); - } - } - - return true; - } - - public int compareTo(ResourceLocatorConfig other) { - return Priority.compare(this.priority, other.priority); - } - - - public static enum Priority { - - /* The lowest priority for a resource locator */ - LOWEST(6, "lowest"), //$NON-NLS-1$ - - /* The second lowest priority for a resource locator */ - LOWER(5, "lower"), //$NON-NLS-1$ - - /* The third lowest priority for a resource locator */ - LOW(4, "low"), //$NON-NLS-1$ - - /* The default priority for a resource locator */ - NORMAL(3, "normal"), //$NON-NLS-1$ - - /* The third highest priority for a resource locator */ - HIGH(2, "high"), //$NON-NLS-1$ - - /* The second highest priority for a resource locator */ - HIGHER(1, "higher"), //$NON-NLS-1$ - - /* The highest priority for a resource locator */ - HIGHEST(0, "highest"); //$NON-NLS-1$ - - - public static int compare(Priority priority1, Priority priority2) { - return priority1.value.compareTo(priority2.value); - } - - public static Priority get(String literal) { - if (literal == null) { - return NORMAL; - } - for (Priority priority : values()) { - if (StringTools.stringsAreEqual(literal, priority.literal)) { - return priority; - } - } - return null; - } - - - private Integer value; - private String literal; - - - private Priority(int value, String literal) { - this.value = Integer.valueOf(value); - this.literal = literal; - } - - - @Override - public String toString() { - return this.literal; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ResourceLocatorManager.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ResourceLocatorManager.java deleted file mode 100644 index ad71031646..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/ResourceLocatorManager.java +++ /dev/null @@ -1,160 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.internal.resource; - -import static org.eclipse.jpt.common.core.internal.utility.XPointTools.*; -import java.util.ArrayList; -import java.util.List; -import org.eclipse.core.expressions.Expression; -import org.eclipse.core.expressions.ExpressionConverter; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtension; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.IExtensionRegistry; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.internal.resource.ResourceLocatorConfig.Priority; -import org.eclipse.jpt.common.core.internal.utility.XPointTools.XPointException; -import org.eclipse.jpt.common.core.resource.ResourceLocator; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.KeyedSet; -import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; - -public class ResourceLocatorManager { - - public static final String EXTENSION_POINT_ID = "resourceLocators"; //$NON-NLS-1$ - public static final String QUALIFIED_EXTENSION_POINT_ID = JptCommonCorePlugin.PLUGIN_ID_ + EXTENSION_POINT_ID; - public static final String RESOURCE_LOCATOR_ELEMENT = "resourceLocator"; //$NON-NLS-1$ - public static final String ID_ATTRIBUTE = "id"; //$NON-NLS-1$ - public static final String CLASS_ATTRIBUTE = "class"; //$NON-NLS-1$ - public static final String PRIORITY_ATTRIBUTE = "priority"; //$NON-NLS-1$ - public static final String ENABLEMENT_ELEMENT = "enablement"; //$NON-NLS-1$ - - - private static ResourceLocatorManager INSTANCE = new ResourceLocatorManager(); - - - public static ResourceLocatorManager instance() { - return INSTANCE; - } - - - private KeyedSet<String, ResourceLocatorConfig> resourceLocatorConfigs; - - - private ResourceLocatorManager() { - this.resourceLocatorConfigs = new KeyedSet<String, ResourceLocatorConfig>(); - readExtensions(); - } - - - /** - * Return the {@link ResourceLocator} of highest priority that is acceptable - * for the given project - */ - public ResourceLocator getResourceLocator(final IProject project) { - Iterable<ResourceLocatorConfig> sortedConfigs = - //make ResourceLocatorConfig with higher priority go first - CollectionTools.sort( - new FilteringIterable<ResourceLocatorConfig>( - this.resourceLocatorConfigs.getItemSet()) { - @Override - protected boolean accept(ResourceLocatorConfig o) { - return o.isEnabledFor(project) - && o.getResourceLocator() != null; - } - }); - for (ResourceLocatorConfig config : sortedConfigs) { - ResourceLocator locator = config.getResourceLocator(); - if (locator != null) { - return locator; - } - } - return null; - } - - private void readExtensions() { - final IExtensionRegistry registry = Platform.getExtensionRegistry(); - - final IExtensionPoint xpoint - = registry.getExtensionPoint(QUALIFIED_EXTENSION_POINT_ID); - - if (xpoint == null) { - throw new IllegalStateException(); - } - - final List<IConfigurationElement> configs = new ArrayList<IConfigurationElement>(); - - for (IExtension extension : xpoint.getExtensions()) { - for (IConfigurationElement element : extension.getConfigurationElements()) { - configs.add(element); - } - } - - for (IConfigurationElement element : configs) { - if (element.getName().equals(RESOURCE_LOCATOR_ELEMENT)) { - readExtension(element); - } - } - } - - private void readExtension(IConfigurationElement element) { - try { - final ResourceLocatorConfig rlConfig = new ResourceLocatorConfig(); - - // plug-in id - rlConfig.setPluginId(element.getContributor().getName()); - - // resource locator id - rlConfig.setId(findRequiredAttribute(element, ID_ATTRIBUTE)); - - if (this.resourceLocatorConfigs.containsKey(rlConfig.getId())) { - logDuplicateExtension(QUALIFIED_EXTENSION_POINT_ID, ID_ATTRIBUTE, rlConfig.getId()); - throw new XPointException(); - } - - // resource locator class name - rlConfig.setClassName(findRequiredAttribute(element, CLASS_ATTRIBUTE)); - - // priority - String priorityString = element.getAttribute(PRIORITY_ATTRIBUTE).trim(); - Priority priority = Priority.get(priorityString); - if (priority == null) { - logInvalidValue(element, PRIORITY_ATTRIBUTE, priorityString); - throw new XPointException(); - } - rlConfig.setPriority(priority); - - // enablement - for (IConfigurationElement child : element.getChildren()) { - String childName = child.getName(); - if (childName.equals(ENABLEMENT_ELEMENT)) { - Expression expr; - try { - expr = ExpressionConverter.getDefault().perform(child); - } - catch (CoreException e) { - log(e); - throw new XPointException(); - } - rlConfig.setEnablementCondition(expr); - } - } - - this.resourceLocatorConfigs.addItem(rlConfig.getId(), rlConfig); - } - catch (XPointException e) { - // Ignore and continue. The problem has already been reported to the user - // in the log. - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/SimpleJavaResourceLocator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/SimpleJavaResourceLocator.java deleted file mode 100644 index 58712b543c..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/SimpleJavaResourceLocator.java +++ /dev/null @@ -1,219 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.resource; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.internal.utility.PlatformTools; -import org.eclipse.jpt.common.core.resource.ResourceLocator; -import org.eclipse.jpt.common.utility.Filter; -import org.eclipse.jpt.common.utility.internal.Transformer; -import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; -import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; -import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; -import org.eclipse.jst.j2ee.internal.J2EEConstants; - -public class SimpleJavaResourceLocator - implements ResourceLocator -{ - protected static final IPath META_INF_PATH = new Path(J2EEConstants.META_INF); - - /** - * Return whether the specified container is either:<ul> - * <li>on the corresponding Java project's classpath; or - * <li>in the non-Java resources, but not in the project output location - * </ul> - */ - public boolean resourceLocationIsValid(IProject project, IContainer container) { - try { - return this.resourceLocationIsValid_(project, container); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - // happens if the Java project does not exist - return false; - } - } - - protected boolean resourceLocationIsValid_(IProject project, IContainer container) throws JavaModelException { - IJavaProject javaProject = this.getJavaProject(project); - if (javaProject.isOnClasspath(container)) { - return true; - } - - IPath outputPath = javaProject.getOutputLocation(); - IPath containerPath = container.getFullPath(); - if (container.equals(project) && outputPath.isPrefixOf(containerPath)) { - return true; - } - - if (outputPath.isPrefixOf(containerPath)) { - return false; - } - for (Object resource : javaProject.getNonJavaResources()) { - if (resource instanceof IFolder) { - IFolder folder = (IFolder) resource; - if (folder.getFullPath().isPrefixOf(containerPath)) { - return true; - } - } - } - - return false; - } - - /** - * Return the default resource location for the specified project:<ul> - * <li>the first package fragment root (source folder) <code>META-INF</code> - * folder if it exists; or - * <li>the project rooted <code>META-INF</code> folder if it exists; or - * <li>the non-existent <code>META-INF</code> folder in the first package - * fragment root (source folder) - * </ul> - */ - public IContainer getDefaultResourceLocation(IProject project) { - try { - return this.getDefaultResourceLocation_(project); - } catch (Exception ex) { - JptCommonCorePlugin.log(ex); - // happens if the Java project does not exist or there is a problem with the - // Java resources - return null; - } - } - - protected IContainer getDefaultResourceLocation_(IProject project) throws JavaModelException { - IContainer defaultLocation = null; - for (IContainer sourceFolder : this.getSourceFolders(project)) { - IFolder metaInfFolder = sourceFolder.getFolder(META_INF_PATH); - if (metaInfFolder.exists()) { - return metaInfFolder; - } - if (defaultLocation == null) { - // save the first one, to use if none found - defaultLocation = metaInfFolder; - } - } - IFolder metaInfFolder = project.getFolder(META_INF_PATH); - if (metaInfFolder.exists()) { - return metaInfFolder; - } - return defaultLocation; - } - - public IPath getResourcePath(IProject project, IPath runtimePath) { - try { - return this.getResourcePath_(project, runtimePath); - } catch (Exception ex) { - JptCommonCorePlugin.log(ex); - return null; - } - } - - protected IPath getResourcePath_(IProject project, IPath runtimePath) throws JavaModelException { - IPath defaultResourcePath = null; - for (IContainer sourceFolder : this.getSourceFolders(project)) { - IPath resourcePath = sourceFolder.getFullPath().append(runtimePath); - IFile file = project.getWorkspace().getRoot().getFile(resourcePath); - if (file.exists()) { - return file.getFullPath(); - } - if (defaultResourcePath == null) { - // save the first one, to use if none found - defaultResourcePath = resourcePath; - } - } - return defaultResourcePath; - } - - public IPath getRuntimePath(IProject project, IPath resourcePath) { - try { - return this.getRuntimePath_(project, resourcePath); - } catch (Exception ex) { - JptCommonCorePlugin.log(ex); - return resourcePath.makeRelativeTo(project.getFullPath()); - } - } - - protected IPath getRuntimePath_(IProject project, IPath resourcePath) throws JavaModelException { - IFile file = PlatformTools.getFile(resourcePath); - for (IContainer sourceFolder : this.getSourceFolders(project)) { - if (sourceFolder.contains(file)) { - return resourcePath.makeRelativeTo(sourceFolder.getFullPath()); - } - } - return resourcePath.makeRelativeTo(project.getFullPath()); - } - - protected Iterable<IContainer> getSourceFolders(IProject project) throws JavaModelException { - return new TransformationIterable<IPackageFragmentRoot, IContainer>(this.getSourcePackageFragmentRoots(project), ROOT_CONTAINER_TRANSFORMER); - } - - protected static final Transformer<IPackageFragmentRoot, IContainer> ROOT_CONTAINER_TRANSFORMER = new RootContainerTransformer(); - - protected static class RootContainerTransformer - implements Transformer<IPackageFragmentRoot, IContainer> - { - public IContainer transform(IPackageFragmentRoot pfr) { - try { - return this.transform_(pfr); - } catch (JavaModelException ex) { - throw new RuntimeException(ex); - } - } - protected IContainer transform_(IPackageFragmentRoot pfr) throws JavaModelException { - return (IContainer) pfr.getUnderlyingResource(); - } - } - - protected Iterable<IPackageFragmentRoot> getSourcePackageFragmentRoots(IProject project) throws JavaModelException { - return new FilteringIterable<IPackageFragmentRoot>(this.getPackageFragmentRoots(project), SOURCE_ROOT_FILTER); - } - - protected static final Filter<IPackageFragmentRoot> SOURCE_ROOT_FILTER = new SourceRootFilter(); - - protected static class SourceRootFilter - implements Filter<IPackageFragmentRoot> - { - public boolean accept(IPackageFragmentRoot pfr) { - try { - return this.accept_(pfr); - } catch (JavaModelException ex) { - throw new RuntimeException(ex); - } - } - protected boolean accept_(IPackageFragmentRoot pfr) throws JavaModelException { - // accept both source folders and *class* folders (xml files may exist there as well) - IResource resource = pfr.getUnderlyingResource(); - return resource != null && resource.getType() == IResource.FOLDER; - } - } - - protected Iterable<IPackageFragmentRoot> getPackageFragmentRoots(IProject project) throws JavaModelException { - return new ArrayIterable<IPackageFragmentRoot>(this.getPackageFragmentRootsArray(project)); - } - - protected IPackageFragmentRoot[] getPackageFragmentRootsArray(IProject project) throws JavaModelException { - return this.getJavaProject(project).getPackageFragmentRoots(); - } - - protected IJavaProject getJavaProject(IProject project) { - return JavaCore.create(project); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/SimpleProjectResourceLocator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/SimpleProjectResourceLocator.java deleted file mode 100644 index 71b1d522ef..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/SimpleProjectResourceLocator.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.resource; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IPath; -import org.eclipse.jpt.common.core.resource.ProjectResourceLocator; -import org.eclipse.jpt.common.core.resource.ResourceLocator; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * @see org.eclipse.jpt.common.core.internal.resource.ProjectAdapterFactory - * @see ResourceLocatorManager - */ -public class SimpleProjectResourceLocator - implements ProjectResourceLocator -{ - protected final IProject project; - - - public SimpleProjectResourceLocator(IProject project) { - super(); - this.project = project; - } - - public boolean resourceLocationIsValid(IContainer container) { - ResourceLocator resourceLocator = this.getResourceLocator(); - return (resourceLocator != null) && resourceLocator.resourceLocationIsValid(this.project, container); - } - - public IContainer getDefaultResourceLocation() { - ResourceLocator resourceLocator = this.getResourceLocator(); - return (resourceLocator == null) ? null : resourceLocator.getDefaultResourceLocation(this.project); - } - - public IPath getResourcePath(IPath runtimePath) { - ResourceLocator resourceLocator = this.getResourceLocator(); - return (resourceLocator == null) ? null : resourceLocator.getResourcePath(this.project, runtimePath); - } - - public IPath getRuntimePath(IPath resourcePath) { - ResourceLocator resourceLocator = this.getResourceLocator(); - return (resourceLocator == null) ? null : resourceLocator.getRuntimePath(this.project, resourcePath); - } - - public IFile getPlatformFile(IPath runtimePath) { - IPath sourcePath = this.getResourcePath(runtimePath); - return (sourcePath == null) ? null : this.project.getWorkspace().getRoot().getFile(sourcePath); - } - - protected ResourceLocator getResourceLocator() { - return ResourceLocatorManager.instance().getResourceLocator(this.project); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.project); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/WebModuleResourceLocator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/WebModuleResourceLocator.java deleted file mode 100644 index 7d1cb6bfb4..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/WebModuleResourceLocator.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.resource; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.jst.j2ee.internal.J2EEConstants; - -public class WebModuleResourceLocator - extends ModuleResourceLocator -{ - protected static final IPath WEB_INF_CLASSES_PATH = new Path(J2EEConstants.WEB_INF_CLASSES); - protected static final IPath WEB_META_INF_PATH = WEB_INF_CLASSES_PATH.append(META_INF_PATH); - - /** - * Return the folder representing the <code>WEB-INF/classes/META-INF</code> - * location. - */ - @Override - public IContainer getDefaultResourceLocation(IProject project) { - return this.getRootFolder(project).getFolder(WEB_META_INF_PATH).getUnderlyingFolder(); - } - - /** - * Return the full resource path representing the specified runtime location - * appended to the <code>WEB-INF/classes</code> location. - */ - @Override - public IPath getResourcePath(IProject project, IPath runtimePath) { - return super.getResourcePath(project, WEB_INF_CLASSES_PATH.append(runtimePath)); - } - - /** - * - */ - @Override - public IPath getRuntimePath(IProject project, IPath resourcePath) { - IPath runtimePath = super.getRuntimePath(project, resourcePath); - return WEB_INF_CLASSES_PATH.isPrefixOf(runtimePath) ? - runtimePath.makeRelativeTo(WEB_INF_CLASSES_PATH) : - runtimePath; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/AbstractJavaResourceNode.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/AbstractJavaResourceNode.java deleted file mode 100644 index 79b621d8b5..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/AbstractJavaResourceNode.java +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core.internal.resource.java; - -import org.eclipse.core.resources.IFile; -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.utility.internal.model.AbstractModel; -import org.eclipse.jpt.common.utility.internal.model.AspectChangeSupport; -import org.eclipse.jpt.common.utility.internal.model.ChangeSupport; - -/** - * Java resource containment hierarchy - */ -public abstract class AbstractJavaResourceNode - extends AbstractModel - implements JavaResourceNode -{ - protected final JavaResourceNode parent; - - - // ********** constructor ********** - - protected AbstractJavaResourceNode(JavaResourceNode parent) { - super(); - this.checkParent(parent); - this.parent = parent; - } - - public JavaResourceNode getParent() { - return this.parent; - } - - // ********** parent ********** - - protected void checkParent(JavaResourceNode p) { - if (p == null) { - if (this.requiresParent()) { - throw new IllegalArgumentException("'parent' cannot be null"); //$NON-NLS-1$ - } - } else { - if (this.forbidsParent()) { - throw new IllegalArgumentException("'parent' must be null"); //$NON-NLS-1$ - } - } - } - - protected boolean requiresParent() { - return true; - } - - protected boolean forbidsParent() { - return ! this.requiresParent(); // assume 'parent' is not optional - } - - - // ********** change support callback hook ********** - - @Override - protected final ChangeSupport buildChangeSupport() { - return new AspectChangeSupport(this, this.buildChangeSupportListener()); - } - - private AspectChangeSupport.Listener buildChangeSupportListener() { - return new AspectChangeSupport.Listener() { - public void aspectChanged(String aspectName) { - AbstractJavaResourceNode.this.aspectChanged(aspectName); - } - }; - } - - /** - * ignore the aspect name, we notify listeners of *every* change - */ - protected void aspectChanged(@SuppressWarnings("unused") String aspectName) { - this.getRoot().resourceModelChanged(); - } - - - // ********** JavaResourceNode implementation ********** - - /** - * @see org.eclipse.jpt.common.core.internal.resource.java.binary.RootBinaryNode#getRoot() - * @see org.eclipse.jpt.common.core.internal.resource.java.source.SourceCompilationUnit#getRoot() - */ - public Root getRoot() { - return this.parent.getRoot(); - } - - public IFile getFile() { - return this.getRoot().getFile(); - } - - - // ********** convenience methods ********** - - protected AnnotationProvider getAnnotationProvider() { - return this.getRoot().getAnnotationProvider(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/NullAnnotation.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/NullAnnotation.java deleted file mode 100644 index 5a7e7b775e..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/NullAnnotation.java +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.internal.resource.java; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.resource.java.Annotation; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.core.utility.TextRange; - -/** - * Simplify null annotation classes - */ -public abstract class NullAnnotation<A extends Annotation> - extends AbstractJavaResourceNode - implements Annotation -{ - - protected NullAnnotation(JavaResourceNode parent) { - super(parent); - } - - public void initialize(CompilationUnit astRoot) { - // do nothing - } - - public org.eclipse.jdt.core.dom.Annotation getAstAnnotation(CompilationUnit astRoot) { - return null; - } - - public JavaResourceCompilationUnit getJavaResourceCompilationUnit() { - throw new UnsupportedOperationException(); - } - - public boolean isMappingAnnotation() { - return false; - } - - public void newAnnotation() { - throw new UnsupportedOperationException(); - } - - public void removeAnnotation() { - throw new UnsupportedOperationException(); - } - - public void moveAnnotation(int index) { - throw new UnsupportedOperationException(); - } - - public boolean isUnset() { - throw new UnsupportedOperationException(); - } - - public TextRange getTextRange(CompilationUnit astRoot) { - return null; - } - - public void synchronizeWith(CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - - /** - * Convenience method: Cast the annotation's parent to a - * persistent member. - */ - protected JavaResourceAnnotatedElement getAnnotatedElement() { - return (JavaResourceAnnotatedElement) this.parent; - } - - /** - * Convenience method: Add the type or attribute's annotation - * and return it. - * Pre-condition: The annotation's parent must be a persistent member - * (type or attribute). - */ - protected A addAnnotation() { - return this.addAnnotation_(); - } - - @SuppressWarnings("unchecked") - protected A addAnnotation_() { - return (A) this.getAnnotatedElement().addAnnotation(this.getAnnotationName()); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAbstractType.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAbstractType.java deleted file mode 100644 index 82dad91135..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAbstractType.java +++ /dev/null @@ -1,228 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2012 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.common.core.internal.resource.java.binary; - -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IMember; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.ITypeParameter; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType; -import org.eclipse.jpt.common.core.resource.java.JavaResourceEnum; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.core.resource.java.JavaResourceType; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; - -/** - * binary persistent type - */ -abstract class BinaryAbstractType - extends BinaryMember - implements JavaResourceAbstractType -{ - private String name; - - private String qualifiedName; - - private String packageName; - - private String declaringTypeName; - - private boolean memberType; - - - // ********** construction/initialization ********** - - protected BinaryAbstractType(JavaResourceNode parent, IType type) { - super(parent, new TypeAdapter(type)); - this.name = this.buildName(type); - this.qualifiedName = this.buildQualifiedName(type); - this.packageName = this.buildPackageName(type); - this.declaringTypeName = this.buildDeclaringTypeName(type); - this.memberType = this.buildMemberType(type); - } - - - // ********** overrides ********** - - @Override - protected void update(IMember member) { - super.update(member); - this.setName(this.buildName((IType) member)); - this.setQualifiedName(this.buildQualifiedName((IType) member)); - this.setPackageName(this.buildPackageName((IType) member)); - this.setDeclaringTypeName(this.buildDeclaringTypeName((IType) member)); - this.setMemberType(this.buildMemberType((IType) member)); - } - - @Override - public void toString(StringBuilder sb) { - sb.append(this.name); - } - - - // ********** JavaResourceAbstractType implementation ********** - - // ***** name - public String getName() { - return this.name; - } - - private void setName(String name) { - String old = this.name; - this.name = name; - this.firePropertyChanged(NAME_PROPERTY, old, name); - } - - private String buildName(IType type) { - return type.getElementName(); - } - - // ***** qualified name - public String getQualifiedName() { - return this.qualifiedName; - } - - private void setQualifiedName(String qualifiedName) { - String old = this.qualifiedName; - this.qualifiedName = qualifiedName; - this.firePropertyChanged(QUALIFIED_NAME_PROPERTY, old, qualifiedName); - } - - private String buildQualifiedName(IType type) { - return type.getFullyQualifiedName('.'); // no parameters are included here - } - - // ***** package - public String getPackageName() { - return this.packageName; - } - - private void setPackageName(String packageName) { - String old = this.packageName; - this.packageName = packageName; - this.firePropertyChanged(PACKAGE_NAME_PROPERTY, old, packageName); - } - - private String buildPackageName(IType type) { - return type.getPackageFragment().getElementName(); - } - - public boolean isIn(IPackageFragment packageFragment) { - return StringTools.stringsAreEqual(packageFragment.getElementName(), this.packageName); - } - - // ***** source folder - public boolean isIn(IPackageFragmentRoot sourceFolder) { - return getSourceFolder().equals(sourceFolder); - } - - private IPackageFragmentRoot getSourceFolder() { - return (IPackageFragmentRoot) this.getMember().getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT); - } - - // ***** declaring type name - public String getDeclaringTypeName() { - return this.declaringTypeName; - } - - private void setDeclaringTypeName(String declaringTypeName) { - String old = this.declaringTypeName; - this.declaringTypeName = declaringTypeName; - this.firePropertyChanged(DECLARING_TYPE_NAME_PROPERTY, old, declaringTypeName); - } - - private String buildDeclaringTypeName(IType type) { - IType declaringType = type.getDeclaringType(); - return (declaringType == null) ? null : declaringType.getFullyQualifiedName('.'); // no parameters are included here - } - - - // ***** member - public boolean isMemberType() { - return this.memberType; - } - - private void setMemberType(boolean memberType) { - boolean old = this.memberType; - this.memberType = memberType; - this.firePropertyChanged(MEMBER_TYPE_PROPERTY, old, memberType); - } - - private boolean buildMemberType(IType type) { - try { - return type.isMember(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - - // ********** misc ********** - - @Override - public IType getMember() { - return (IType) super.getMember(); - } - - public Iterable<JavaResourceType> getTypes() { - throw new UnsupportedOperationException(); - } - - public Iterable<JavaResourceEnum> getEnums() { - throw new UnsupportedOperationException(); - } - - public Iterable<JavaResourceType> getAllTypes() { - throw new UnsupportedOperationException(); - } - - public Iterable<JavaResourceEnum> getAllEnums() { - throw new UnsupportedOperationException(); - } - - // ********** IType adapter ********** - - static class TypeAdapter - implements Adapter { - - private final IType type; - - TypeAdapter(IType type) { - super(); - this.type = type; - } - - public IType getElement() { - return this.type; - } - - public Iterable<ITypeParameter> getTypeParameters() { - try { - return new ArrayIterable<ITypeParameter>(this.type.getTypeParameters()); - } - catch (JavaModelException jme) { - JptCommonCorePlugin.log(jme); - } - return EmptyIterable.instance(); - } - - public IAnnotation[] getAnnotations() throws JavaModelException { - return this.type.getAnnotations(); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAnnotatedElement.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAnnotatedElement.java deleted file mode 100644 index dfb509060d..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAnnotatedElement.java +++ /dev/null @@ -1,391 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.resource.java.binary; - -import java.util.Hashtable; -import java.util.Vector; -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IMemberValuePair; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.Annotation; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.core.resource.java.NestableAnnotation; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.Transformer; -import org.eclipse.jpt.common.utility.internal.TransformerAdapter; -import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; - -/** - * Java binary annotated element - */ -abstract class BinaryAnnotatedElement - extends BinaryNode - implements JavaResourceAnnotatedElement -{ - /** JDT annotated element adapter */ - final Adapter adapter; - - /** - * Annotations keyed by annotation name; - * no duplicates (the Java compiler does not allow duplicate annotations). - */ - private final Hashtable<String, Annotation> annotations = new Hashtable<String, Annotation>(); - - /** - * Annotation containers keyed by <em>nestable</em> annotation name. - * This is used to store annotations that can be both standalone and nested - * and are moved back and forth between the two. - */ - private final Hashtable<String, AnnotationContainer> annotationContainers = new Hashtable<String, AnnotationContainer>(); - - /** - * These are built as needed. - */ - private final Hashtable<String, Annotation> nullAnnotationsCache = new Hashtable<String, Annotation>(); - - - // ********** construction/initialization ********** - - BinaryAnnotatedElement(JavaResourceNode parent, Adapter adapter) { - super(parent); - this.adapter = adapter; - this.initializeAnnotations(); - } - - private void initializeAnnotations() { - for (IAnnotation annotation : this.getJdtAnnotations()) { - this.addAnnotation(annotation); - } - } - - private void addAnnotation(IAnnotation jdtAnnotation) { - String jdtAnnotationName = jdtAnnotation.getElementName(); - // check whether the annotation is a valid container annotation first - // because container validations are also valid annotations - // TODO remove container annotations from list of annotations??? - if (this.annotationIsValidContainer(jdtAnnotationName)) { - String nestableAnnotationName = this.getAnnotationProvider().getNestableAnnotationName(jdtAnnotationName); - AnnotationContainer container = new AnnotationContainer(); - container.initializeFromContainerAnnotation(jdtAnnotation); - this.annotationContainers.put(nestableAnnotationName, container); - } - else if (this.annotationIsValid(jdtAnnotationName)) { - this.annotations.put(jdtAnnotationName, this.buildAnnotation(jdtAnnotation)); - } - else if (this.annotationIsValidNestable(jdtAnnotationName)) { - // if we already have an annotation container (because there was a container annotation) - // ignore the standalone nestable annotation - if (this.annotationContainers.get(jdtAnnotationName) == null) { - AnnotationContainer container = new AnnotationContainer(); - container.initializeFromStandaloneAnnotation(jdtAnnotation); - this.annotationContainers.put(jdtAnnotationName, container); - } - } - } - - private boolean annotationIsValid(String annotationName) { - return CollectionTools.contains(this.getAnnotationProvider().getAnnotationNames(), annotationName); - } - - private boolean annotationIsValidContainer(String annotationName) { - return CollectionTools.contains(this.getAnnotationProvider().getContainerAnnotationNames(), annotationName); - } - - private boolean annotationIsValidNestable(String annotationName) { - return CollectionTools.contains(this.getAnnotationProvider().getNestableAnnotationNames(), annotationName); - } - - - // ********** updating ********** - - @Override - public void update() { - super.update(); - this.updateAnnotations(); - } - - // TODO - private void updateAnnotations() { - throw new UnsupportedOperationException(); - } - - - // ********** annotations ********** - - public Iterable<Annotation> getAnnotations() { - return new LiveCloneIterable<Annotation>(this.annotations.values()); - } - - public int getAnnotationsSize() { - return this.annotations.size(); - } - - public Annotation getAnnotation(String annotationName) { - return this.annotations.get(annotationName); - } - - public Annotation getNonNullAnnotation(String annotationName) { - Annotation annotation = this.getAnnotation(annotationName); - return (annotation != null) ? annotation : this.getNullAnnotation(annotationName); - } - - private Annotation getNullAnnotation(String annotationName) { - synchronized (this.nullAnnotationsCache) { - Annotation annotation = this.nullAnnotationsCache.get(annotationName); - if (annotation == null) { - annotation = this.buildNullAnnotation(annotationName); - this.nullAnnotationsCache.put(annotationName, annotation); - } - return annotation; - } - } - - private Annotation buildNullAnnotation(String annotationName) { - return this.getAnnotationProvider().buildNullAnnotation(this, annotationName); - } - - /* CU private */ Annotation buildAnnotation(IAnnotation jdtAnnotation) { - return this.getAnnotationProvider().buildAnnotation(this, jdtAnnotation); - } - - - // ********** combination annotations ********** - - private Iterable<NestableAnnotation> getNestableAnnotations() { - return new CompositeIterable<NestableAnnotation>(this.getNestableAnnotationLists()); - } - - private Iterable<Iterable<NestableAnnotation>> getNestableAnnotationLists() { - return new TransformationIterable<AnnotationContainer, Iterable<NestableAnnotation>>(this.getAnnotationContainers(), ANNOTATION_CONTAINER_NESTED_ANNOTATIONS_TRANSFORMER); - } - - private static final Transformer<AnnotationContainer, Iterable<NestableAnnotation>> ANNOTATION_CONTAINER_NESTED_ANNOTATIONS_TRANSFORMER = new AnnotationContainerNestedAnnotationsTransformer(); - static final class AnnotationContainerNestedAnnotationsTransformer - extends TransformerAdapter<AnnotationContainer, Iterable<NestableAnnotation>> - { - @Override - public Iterable<NestableAnnotation> transform(AnnotationContainer container) { - return container.getNestedAnnotations(); - } - } - - private Iterable<AnnotationContainer> getAnnotationContainers() { - return new LiveCloneIterable<AnnotationContainer>(this.annotationContainers.values()); - } - - public ListIterable<NestableAnnotation> getAnnotations(String nestableAnnotationName) { - AnnotationContainer container = this.annotationContainers.get(nestableAnnotationName); - return (container != null) ? container.getNestedAnnotations() : EmptyListIterable.<NestableAnnotation> instance(); - } - - - public int getAnnotationsSize(String nestableAnnotationName) { - AnnotationContainer container = this.annotationContainers.get(nestableAnnotationName); - return (container == null) ? 0 : container.getNestedAnnotationsSize(); - } - - public NestableAnnotation getAnnotation(int index, String nestableAnnotationName) { - AnnotationContainer container = this.annotationContainers.get(nestableAnnotationName); - return (container == null) ? null : container.getNestedAnnotation(index); - } - - private Iterable<Annotation> getContainerOrStandaloneNestableAnnotations() { - return new TransformationIterable<AnnotationContainer, Annotation>(this.getAnnotationContainers(), TOP_LEVEL_ANNOTATION_CONTAINER_TRANSFORMER); - } - - private static final Transformer<AnnotationContainer, Annotation> TOP_LEVEL_ANNOTATION_CONTAINER_TRANSFORMER = new TopLevelAnnotationContainerTransformer(); - /* CU private */ static final class TopLevelAnnotationContainerTransformer - extends TransformerAdapter<AnnotationContainer, Annotation> - { - @Override - public Annotation transform(AnnotationContainer container) { - Annotation containerAnnotation = container.getContainerAnnotation(); - return (containerAnnotation != null) ? containerAnnotation : container.getNestedAnnotation(0); - } - } - - /* CU private */ NestableAnnotation buildAnnotation(IAnnotation jdtAnnotation, int index) { - return this.getAnnotationProvider().buildAnnotation(this, jdtAnnotation, index); - } - - - // ***** all annotations ***** - - @SuppressWarnings("unchecked") - public Iterable<Annotation> getTopLevelAnnotations() { - return new CompositeIterable<Annotation>( - this.getAnnotations(), - this.getContainerOrStandaloneNestableAnnotations() - ); - } - - public boolean isAnnotated() { - return ! this.isUnannotated(); - } - - private boolean isUnannotated() { - return this.annotations.isEmpty() && this.annotationContainers.isEmpty(); - } - - public boolean isAnnotatedWithAnyOf(Iterable<String> annotationNames) { - for (Annotation annotation : this.getSignificantAnnotations()) { - if (CollectionTools.contains(annotationNames, annotation.getAnnotationName())) { - return true; - } - } - return false; - } - - /** - * Return the "significant" annotations; - * i.e. ignore the container annotations (they have no semantics). - */ - @SuppressWarnings("unchecked") - private Iterable<Annotation> getSignificantAnnotations() { - return new CompositeIterable<Annotation>( - this.getAnnotations(), - this.getNestableAnnotations() - ); - } - - - // ********** misc ********** - - @Override - protected AnnotationProvider getAnnotationProvider() { - return super.getAnnotationProvider(); - } - - private IAnnotation[] getJdtAnnotations() { - try { - return this.adapter.getAnnotations(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return EMPTY_JDT_ANNOTATION_ARRAY; - } - } - private static final IAnnotation[] EMPTY_JDT_ANNOTATION_ARRAY = new IAnnotation[0]; - - - // ********** IJavaElement adapter ********** - - interface Adapter { - /** - * Return the adapter's JDT element (IPackageFragment, IType, IField, IMethod). - */ - IJavaElement getElement(); - - /** - * Return the adapter's element's JDT annotations. - */ - IAnnotation[] getAnnotations() throws JavaModelException; - } - - - // ********** unsupported JavaResourcePersistentMember implementation ********** - - public Annotation addAnnotation(String annotationName) { - throw new UnsupportedOperationException(); - } - - public NestableAnnotation addAnnotation(int index, String nestableAnnotationName) { - throw new UnsupportedOperationException(); - } - - public void moveAnnotation(int targetIndex, int sourceIndex, String nestableAnnotationName) { - throw new UnsupportedOperationException(); - } - - public void removeAnnotation(String annotationName) { - throw new UnsupportedOperationException(); - } - - public void removeAnnotation(int index, String nestableAnnotationName) { - throw new UnsupportedOperationException(); - } - - public TextRange getNameTextRange(CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - - public TextRange getTextRange(String nestableAnnotationName, CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - - /* CU private */ static final IMemberValuePair[] EMPTY_MEMBER_VALUE_PAIR_ARRAY = new IMemberValuePair[0]; - /* CU private */ static final Object[] EMPTY_OBJECT_ARRAY = new Object[0]; - - - // ********** annotation container ********** - - /* CU private */ class AnnotationContainer { - - private Annotation containerAnnotation; - - private final Vector<NestableAnnotation> nestedAnnotations = new Vector<NestableAnnotation>(); - - AnnotationContainer() { - super(); - } - - void initializeFromContainerAnnotation(IAnnotation jdtContainerAnnotation) { - this.initializeNestedAnnotations(jdtContainerAnnotation); - this.containerAnnotation = BinaryAnnotatedElement.this.buildAnnotation(jdtContainerAnnotation); - } - - void initializeNestedAnnotations(IAnnotation jdtContainerAnnotation) { - Object[] jdtNestedAnnotations = this.getJdtNestedAnnotations(jdtContainerAnnotation); - int len = jdtNestedAnnotations.length; - for (int i = 0; i < len; i++) { - IAnnotation jdtNestedAnnotation = (IAnnotation) jdtNestedAnnotations[i]; - this.addAnnotation(jdtNestedAnnotation, i); - } - } - - private Object[] getJdtNestedAnnotations(IAnnotation jdtContainerAnnotation) { - return BinaryAnnotatedElement.this.getJdtMemberValues(jdtContainerAnnotation, "value"); //$NON-NLS-1$ - } - - void initializeFromStandaloneAnnotation(IAnnotation jdtNestableAnnotation) { - this.addAnnotation(jdtNestableAnnotation, 0); - } - - private void addAnnotation(IAnnotation jdtNestableAnnotation, int index) { - this.nestedAnnotations.add(BinaryAnnotatedElement.this.buildAnnotation(jdtNestableAnnotation, index)); - } - - Annotation getContainerAnnotation() { - return this.containerAnnotation; - } - - ListIterable<NestableAnnotation> getNestedAnnotations() { - return new LiveCloneListIterable<NestableAnnotation>(this.nestedAnnotations); - } - - int getNestedAnnotationsSize() { - return this.nestedAnnotations.size(); - } - - NestableAnnotation getNestedAnnotation(int index) { - return this.nestedAnnotations.get(index); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAnnotation.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAnnotation.java deleted file mode 100644 index 813453ccab..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAnnotation.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2012 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.common.core.internal.resource.java.binary; - -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.resource.java.Annotation; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; - -/** - * JAR annotation - */ -public abstract class BinaryAnnotation - extends BinaryNode - implements Annotation -{ - final IAnnotation jdtAnnotation; - - protected BinaryAnnotation(JavaResourceNode parent, IAnnotation jdtAnnotation) { - super(parent); - this.jdtAnnotation = jdtAnnotation; - } - - // ********** convenience methods ********** - - /** - * Return the values of the JDT annotation's member with the specified name. - */ - protected Object[] getJdtMemberValues(String memberName) { - return this.getJdtMemberValues(this.jdtAnnotation, memberName); - } - - /** - * Return the value of the JDT annotation's member with the specified name. - */ - protected Object getJdtMemberValue(String memberName) { - return this.getJdtMemberValue(this.jdtAnnotation, memberName); - } - - - // ********** Annotation implementation ********** - - public org.eclipse.jdt.core.dom.Annotation getAstAnnotation(CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - public void newAnnotation() { - throw new UnsupportedOperationException(); - } - public void removeAnnotation() { - throw new UnsupportedOperationException(); - } - public boolean isUnset() { - throw new UnsupportedOperationException(); - } - - // ********** NestableAnnotation implementation ********** - public void moveAnnotation(@SuppressWarnings("unused") int index) { - throw new UnsupportedOperationException(); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAttribute.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAttribute.java deleted file mode 100644 index d3deae8981..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryAttribute.java +++ /dev/null @@ -1,429 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2012 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.common.core.internal.resource.java.binary; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Vector; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.IMember; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.ITypeParameter; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAttribute; -import org.eclipse.jpt.common.core.resource.java.JavaResourceType; -import org.eclipse.jpt.common.utility.internal.ClassName; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; - -/** - * binary attribute (field or property) - */ -abstract class BinaryAttribute - extends BinaryMember - implements JavaResourceAttribute -{ - private int modifiers; - - private String typeName; - - private boolean typeIsInterface; - - private boolean typeIsEnum; - - private boolean typeIsArray; - - private int typeArrayDimensionality; - - private String typeArrayComponentTypeName; - - private final Vector<String> typeSuperclassNames = new Vector<String>(); - - private final Vector<String> typeInterfaceNames = new Vector<String>(); - - private final Vector<String> typeTypeArgumentNames = new Vector<String>(); - - - protected BinaryAttribute(JavaResourceType parent, Adapter adapter) { - super(parent, adapter); - IMember member = adapter.getElement(); - this.modifiers = this.buildModifiers(member); - - String typeSignature = getTypeSignature(); - Iterable<ITypeParameter> typeParameters = getAdapter().getTypeParameters(); - this.typeName = buildTypeName(typeSignature, typeParameters); - this.typeIsArray = buildTypeIsArray(typeSignature); - this.typeArrayDimensionality = buildTypeArrayDimensionality(typeSignature); - this.typeArrayComponentTypeName = buildTypeArrayComponentTypeName(typeSignature, typeParameters); - this.typeTypeArgumentNames.addAll(buildTypeTypeArgumentNames(typeSignature, typeParameters)); - - IType type = this.getType(member.getJavaProject()); - // if the type is an array, then the following will be false or empty - this.typeIsInterface = this.buildTypeIsInterface(type); - this.typeIsEnum = this.buildTypeIsEnum(type); - this.typeSuperclassNames.addAll(this.buildTypeSuperclassNames(type)); - this.typeInterfaceNames.addAll(this.buildTypeInterfaceNames(type)); - } - - // ******** overrides ******** - - @Override - public void update() { - super.update(); - - String typeSignature = getTypeSignature(); - Iterable<ITypeParameter> typeParameters = getAdapter().getTypeParameters(); - setTypeName(buildTypeName(typeSignature, typeParameters)); - setTypeIsArray(buildTypeIsArray(typeSignature)); - setTypeArrayDimensionality(buildTypeArrayDimensionality(typeSignature)); - setTypeArrayComponentTypeName(buildTypeArrayComponentTypeName(typeSignature, typeParameters)); - setTypeTypeArgumentNames(buildTypeTypeArgumentNames(typeSignature, typeParameters)); - } - - - @Override - protected void update(IMember member) { - super.update(member); - this.setModifiers(this.buildModifiers(member)); - - IType type = this.getType(member.getJavaProject()); // if the type is an array, then the following will be false or empty - this.setTypeIsInterface(this.buildTypeIsInterface(type)); - this.setTypeIsEnum(this.buildTypeIsEnum(type)); - this.setTypeSuperclassNames(this.buildTypeSuperclassNames(type)); - this.setTypeInterfaceNames(this.buildTypeInterfaceNames(type)); - } - - @Override - public void toString(StringBuilder sb) { - sb.append(this.getName()); - } - - - // ********** BinaryPersistentMember implementation ********** - - private Adapter getAdapter() { - return (Adapter) this.adapter; - } - - - // ********** JavaResourceAttribute implementation ********** - - @Override - public JavaResourceType getParent() { - return (JavaResourceType) super.getParent(); - } - - public JavaResourceType getResourceType() { - return this.getParent(); - } - - public String getName() { - return this.getAdapter().getAttributeName(); - } - - public boolean typeIsSubTypeOf(String tn) { - return ((this.typeName != null) && this.typeName.equals(tn)) - || this.typeInterfaceNames.contains(tn) - || this.typeSuperclassNames.contains(tn); - } - - public boolean typeIsVariablePrimitive() { - return (this.typeName != null) && ClassName.isVariablePrimitive(this.typeName); - } - - // ***** modifiers - public int getModifiers() { - return this.modifiers; - } - - private void setModifiers(int modifiers) { - int old = this.modifiers; - this.modifiers = modifiers; - this.firePropertyChanged(MODIFIERS_PROPERTY, old, modifiers); - } - - /** - * zero seems like a reasonable default... - */ - private int buildModifiers(IMember member) { - try { - return member.getFlags(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return 0; - } - } - - // ***** type name - public String getTypeName() { - return this.typeName; - } - - private void setTypeName(String typeName) { - String old = this.typeName; - this.typeName = typeName; - this.firePropertyChanged(TYPE_NAME_PROPERTY, old, typeName); - } - - private String buildTypeName(String typeSignature, Iterable<ITypeParameter> typeParameters) { - return convertTypeSignatureToTypeName(typeSignature, typeParameters); - } - - // ***** type is interface - public boolean typeIsInterface() { - return this.typeIsInterface; - } - - private void setTypeIsInterface(boolean typeIsInterface) { - boolean old = this.typeIsInterface; - this.typeIsInterface = typeIsInterface; - this.firePropertyChanged(TYPE_IS_INTERFACE_PROPERTY, old, typeIsInterface); - } - - private boolean buildTypeIsInterface(IType type) { - try { - return (type != null) && type.isInterface(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - // ***** type is enum - public boolean typeIsEnum() { - return this.typeIsEnum; - } - - private void setTypeIsEnum(boolean typeIsEnum) { - boolean old = this.typeIsEnum; - this.typeIsEnum = typeIsEnum; - this.firePropertyChanged(TYPE_IS_ENUM_PROPERTY, old, typeIsEnum); - } - - private boolean buildTypeIsEnum(IType type) { - try { - return (type != null) && type.isEnum(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - // ***** type is array - public boolean typeIsArray() { - return this.typeIsArray; - } - - private void setTypeIsArray(boolean typeIsArray) { - boolean old = this.typeIsArray; - this.typeIsArray = typeIsArray; - this.firePropertyChanged(TYPE_IS_ARRAY_PROPERTY, old, typeIsArray); - } - - private boolean buildTypeIsArray(String typeSignature) { - return convertTypeSignatureToTypeIsArray(typeSignature); - } - - // ***** type array dimensionality - public int getTypeArrayDimensionality() { - return this.typeArrayDimensionality; - } - - private void setTypeArrayDimensionality(int typeArrayDimensionality) { - int old = this.typeArrayDimensionality; - this.typeArrayDimensionality = typeArrayDimensionality; - firePropertyChanged(TYPE_ARRAY_DIMENSIONALITY_PROPERTY, old, typeArrayDimensionality); - } - - private int buildTypeArrayDimensionality(String typeSignature) { - return convertTypeSignatureToTypeArrayDimensionality(typeSignature); - } - - // ***** type array component type name - public String getTypeArrayComponentTypeName() { - return this.typeArrayComponentTypeName; - } - - private void setTypeArrayComponentTypeName(String typeArrayComponentTypeName) { - String old = this.typeArrayComponentTypeName; - this.typeArrayComponentTypeName = typeArrayComponentTypeName; - firePropertyChanged(TYPE_ARRAY_COMPONENT_TYPE_NAME_PROPERTY, old, typeArrayComponentTypeName); - } - - private String buildTypeArrayComponentTypeName(String typeSignature, Iterable<ITypeParameter> typeParameters) { - int arrayDimensionality = convertTypeSignatureToTypeArrayDimensionality(typeSignature); - return (arrayDimensionality == 0) ? null : convertTypeSignatureToTypeArrayComponentTypeName(typeSignature, typeParameters); - } - - // ***** type superclass hierarchy - public ListIterable<String> getTypeSuperclassNames() { - return new LiveCloneListIterable<String>(this.typeSuperclassNames); - } - - public boolean typeSuperclassNamesContains(String superclassName) { - return this.typeSuperclassNames.contains(superclassName); - } - - private void setTypeSuperclassNames(List<String> typeSuperclassNames) { - this.synchronizeList(typeSuperclassNames, this.typeSuperclassNames, TYPE_SUPERCLASS_NAMES_LIST); - } - - private List<String> buildTypeSuperclassNames(IType type) { - if (type == null) { - return Collections.emptyList(); - } - - ArrayList<String> names = new ArrayList<String>(); - type = this.findSuperclass(type); - while (type != null) { - names.add(type.getFullyQualifiedName('.')); // no parameters are included here - type = this.findSuperclass(type); - } - return names; - } - - // ***** type interface hierarchy - public Iterable<String> getTypeInterfaceNames() { - return new LiveCloneIterable<String>(this.typeInterfaceNames); - } - - public boolean typeInterfaceNamesContains(String interfaceName) { - return this.typeInterfaceNames.contains(interfaceName); - } - - private void setTypeInterfaceNames(Collection<String> typeInterfaceNames) { - this.synchronizeCollection(typeInterfaceNames, this.typeInterfaceNames, TYPE_INTERFACE_NAMES_COLLECTION); - } - - private Collection<String> buildTypeInterfaceNames(IType type) { - if (type == null) { - return Collections.emptySet(); - } - - HashSet<String> names = new HashSet<String>(); - while (type != null) { - this.addInterfaceNamesTo(type, names); - type = this.findSuperclass(type); - } - return names; - } - - private void addInterfaceNamesTo(IType type, HashSet<String> names) { - for (String interfaceSignature : this.getSuperInterfaceTypeSignatures(type)) { - String interfaceName = convertTypeSignatureToTypeName(interfaceSignature); - names.add(interfaceName); - IType interfaceType = this.findType(interfaceName, type.getJavaProject()); - if (interfaceType != null) { - this.addInterfaceNamesTo(interfaceType, names); // recurse - } - } - } - - // ***** type type argument names - public ListIterable<String> getTypeTypeArgumentNames() { - return new LiveCloneListIterable<String>(this.typeTypeArgumentNames); - } - - public int getTypeTypeArgumentNamesSize() { - return this.typeTypeArgumentNames.size(); - } - - public String getTypeTypeArgumentName(int index) { - return this.typeTypeArgumentNames.get(index); - } - - private void setTypeTypeArgumentNames(List<String> typeTypeArgumentNames) { - this.synchronizeList(typeTypeArgumentNames, this.typeTypeArgumentNames, TYPE_TYPE_ARGUMENT_NAMES_LIST); - } - - private List<String> buildTypeTypeArgumentNames(String typeSignature, Iterable<ITypeParameter> typeParameters) { - int arrayDimensionality = convertTypeSignatureToTypeArrayDimensionality(typeSignature); - return (arrayDimensionality != 0) ? Collections.<String>emptyList() : convertTypeSignatureToTypeTypeArgumentNames(typeSignature, typeParameters); - } - - - // ********** convenience methods ********** - - private String getTypeSignature() { - try { - return this.getAdapter().getTypeSignature(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return null; - } - } - - private IType findSuperclass(IType type) { - return this.findTypeBySignature(this.getSuperclassSignature(type), type.getJavaProject()); - } - - private String getSuperclassSignature(IType type) { - try { - return type.getSuperclassTypeSignature(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return null; - } - } - - private String[] getSuperInterfaceTypeSignatures(IType type) { - try { - return type.getSuperInterfaceTypeSignatures(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return StringTools.EMPTY_STRING_ARRAY; - } - } - - private IType findTypeBySignature(String typeSignature, IJavaProject javaProject) { - return (typeSignature == null) ? null : findType(convertTypeSignatureToTypeName_(typeSignature), javaProject); - } - - private IType getType(IJavaProject javaProject) { - return (this.typeName == null) ? null : findType(this.typeName, javaProject); - } - - private static IType findType(String fullyQualifiedName, IJavaProject javaProject) { - try { - return javaProject.findType(fullyQualifiedName); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return null; - } - } - - - - // ********** adapters ********** - - /** - * Adapt an IField or IMethod. - */ - interface Adapter - extends BinaryMember.Adapter { - - /** - * Return the field or getter method's "attribute" name - * (e.g. field "foo" -> "foo"; method "getFoo" -> "foo"). - */ - String getAttributeName(); - - /** - * Return the attribute's type signature. - */ - String getTypeSignature() throws JavaModelException; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryClassFile.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryClassFile.java deleted file mode 100644 index 3c4d009ad6..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryClassFile.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 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.common.core.internal.resource.java.binary; - -import org.eclipse.jdt.core.IClassFile; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType; -import org.eclipse.jpt.common.core.resource.java.JavaResourceClassFile; -import org.eclipse.jpt.common.core.resource.java.JavaResourcePackageFragment; - -/** - * binary class file - */ -final class BinaryClassFile - extends BinaryNode - implements JavaResourceClassFile -{ - /** JDT class file */ - private final IClassFile classFile; - - /** class file's type */ - private final JavaResourceAbstractType type; - - - // ********** construction/initialization ********** - - /** - * The JDT type gets passed in because the package fragment inspects it - * beforehand to determine whether it exists and is relevant. - */ - BinaryClassFile(JavaResourcePackageFragment parent, IClassFile classFile, IType jdtType) { - super(parent); - this.classFile = classFile; - this.type = this.buildType(jdtType); - } - - private JavaResourceAbstractType buildType(IType jdtType) { - try { - if (jdtType.isEnum()) { - return new BinaryEnum(this, jdtType); - } - } - catch (JavaModelException e) { - JptCommonCorePlugin.log(e); - } - return new BinaryType(this, jdtType); - } - - @Override - public void toString(StringBuilder sb) { - sb.append(this.classFile.getElementName()); - } - - - // ********** JavaResourceClassFile implementation ********** - - public JavaResourceAbstractType getType() { - return this.type; - } - - // TODO - @Override - public void update() { - super.update(); -// type(this.classFile.getType()); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryEnum.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryEnum.java deleted file mode 100644 index c41524bbd3..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryEnum.java +++ /dev/null @@ -1,128 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 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.common.core.internal.resource.java.binary; - -import java.util.Collection; -import java.util.Vector; -import org.eclipse.jdt.core.IField; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; -import org.eclipse.jpt.common.core.resource.java.JavaResourceEnum; -import org.eclipse.jpt.common.core.resource.java.JavaResourceEnumConstant; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; - -/** - * binary enum - */ -final class BinaryEnum - extends BinaryAbstractType - implements JavaResourceEnum -{ - private final Vector<JavaResourceEnumConstant> enumConstants; - - - // ********** construction/initialization ********** - - BinaryEnum(JavaResourceNode parent, IType type) { - super(parent, type); - this.enumConstants = this.buildEnumConstants(); - } - - public Kind getKind() { - return JavaResourceAnnotatedElement.Kind.ENUM; - } - // ********** overrides ********** - - @Override - public void update() { - super.update(); - this.updateEnumConstants(); - } - - // TODO - private void updateEnumConstants() { - throw new UnsupportedOperationException(); - } - - - - // ********** JavaResourceEnum implementation ********** - - - - // ********** enum constants ********** - - public Iterable<JavaResourceEnumConstant> getEnumConstants() { - return new LiveCloneIterable<JavaResourceEnumConstant>(this.enumConstants); - } - - private void addEnumConstant(JavaResourceEnumConstant enumConstants) { - this.addItemToCollection(enumConstants, this.enumConstants, ENUMS_COLLECTION); - } - - private JavaResourceEnumConstant getEnumConstant(String enumConstantName, int occurrence) { - for (JavaResourceEnumConstant enumConstant : this.getEnumConstants()) { - if (enumConstant.isFor(enumConstantName, occurrence)) { - return enumConstant; - } - } - return null; - } - - private void removeEnumConstants(Collection<JavaResourceEnumConstant> remove) { - this.removeItemsFromCollection(remove, this.enumConstants, ENUMS_COLLECTION); - } - - private Vector<JavaResourceEnumConstant> buildEnumConstants() { - Iterable<IField> jdtEnumConstants = this.getEnumConstants(this.getMember()); - Vector<JavaResourceEnumConstant> result = new Vector<JavaResourceEnumConstant>(CollectionTools.size(jdtEnumConstants)); - for (IField jdtEnumConstant : jdtEnumConstants) { - result.add(this.buildEnumConstant(jdtEnumConstant)); - } - return result; - } - - private Iterable<IField> getEnumConstants(IType type) { - return new FilteringIterable<IField>(CollectionTools.iterable(this.getFields(type))) { - @Override - protected boolean accept(IField jdtField) { - return isEnumConstant(jdtField); - } - }; - } - - private IField[] getFields(IType type) { - try { - return type.getFields(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return EMPTY_FIELD_ARRAY; - } - } - private static final IField[] EMPTY_FIELD_ARRAY = new IField[0]; - - private boolean isEnumConstant(IField field) { - try { - return field.isEnumConstant(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - private JavaResourceEnumConstant buildEnumConstant(IField jdtEnumConstant) { - return new BinaryEnumConstant(this, jdtEnumConstant); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryEnumConstant.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryEnumConstant.java deleted file mode 100644 index eae0c24578..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryEnumConstant.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.internal.resource.java.binary; - -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jdt.core.IField; -import org.eclipse.jdt.core.ITypeParameter; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.JavaResourceEnum; -import org.eclipse.jpt.common.core.resource.java.JavaResourceEnumConstant; -import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; - -/** - * Java binary enum constant, IField that returns true to isEnumConstant - */ -final class BinaryEnumConstant - extends BinaryMember - implements JavaResourceEnumConstant { - - - - BinaryEnumConstant(JavaResourceEnum parent, IField enumConstant){ - super(parent, new EnumConstantAdapter(enumConstant)); - } - - @Override - IField getMember() { - return (IField) super.getMember(); - } - - // ******** JavaResourceAnnotatedElement implementation ******** - - public Kind getKind() { - return Kind.ENUM_CONSTANT; - } - - - // ******** JavaResourceEnumConstant implementation ******** - - public String getName() { - return this.getMember().getElementName(); - } - - - // ********** IField adapter ********** - - static class EnumConstantAdapter - implements Adapter { - - private final IField enumConstant; - - EnumConstantAdapter(IField enumConstant) { - super(); - this.enumConstant = enumConstant; - } - - public IField getElement() { - return this.enumConstant; - } - - public Iterable<ITypeParameter> getTypeParameters() { - try { - return new ArrayIterable<ITypeParameter>(this.enumConstant.getDeclaringType().getTypeParameters()); - } - catch (JavaModelException jme) { - JptCommonCorePlugin.log(jme); - } - return EmptyIterable.instance(); - } - - public IAnnotation[] getAnnotations() throws JavaModelException { - return this.enumConstant.getAnnotations(); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryField.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryField.java deleted file mode 100644 index ea20715065..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryField.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 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.common.core.internal.resource.java.binary; - -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jdt.core.IField; -import org.eclipse.jdt.core.ITypeParameter; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.JavaResourceField; -import org.eclipse.jpt.common.core.resource.java.JavaResourceType; -import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; - -/** - * binary field - */ -final class BinaryField - extends BinaryAttribute - implements JavaResourceField -{ - - BinaryField(JavaResourceType parent, IField field) { - super(parent, new FieldAdapter(field)); - } - - - // ******** JavaResourceAnnotatedElement implementation ******** - - public Kind getKind() { - return Kind.FIELD; - } - - // ********** adapters ********** - - /** - * IField adapter - */ - static class FieldAdapter - implements BinaryAttribute.Adapter { - - final IField field; - - FieldAdapter(IField field) { - super(); - this.field = field; - } - - public IField getElement() { - return this.field; - } - - public Iterable<ITypeParameter> getTypeParameters() { - try { - return new ArrayIterable<ITypeParameter>(this.field.getDeclaringType().getTypeParameters()); - } - catch (JavaModelException jme) { - JptCommonCorePlugin.log(jme); - } - return EmptyIterable.instance(); - } - - public IAnnotation[] getAnnotations() throws JavaModelException { - return this.field.getAnnotations(); - } - - public String getAttributeName() { - return this.field.getElementName(); - } - - public String getTypeSignature() throws JavaModelException { - return this.field.getTypeSignature(); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryMember.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryMember.java deleted file mode 100644 index c7b38f8529..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryMember.java +++ /dev/null @@ -1,305 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2012 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.common.core.internal.resource.java.binary; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import org.eclipse.jdt.core.Flags; -import org.eclipse.jdt.core.IMember; -import org.eclipse.jdt.core.ITypeParameter; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.core.Signature; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.Annotation; -import org.eclipse.jpt.common.core.resource.java.JavaResourceMember; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; - -/** - * binary persistent member - */ -abstract class BinaryMember - extends BinaryAnnotatedElement - implements JavaResourceMember -{ - - private boolean final_; // 'final' is a reserved word - private boolean transient_; // 'transient' is a reserved word - private boolean public_; // 'public' is a reserved word - private boolean static_; // 'static' is a reserved word - private boolean protected_; // 'protected' is a reserved word - - - // ********** construction/initialization ********** - - public BinaryMember(JavaResourceNode parent, Adapter adapter) { - super(parent, adapter); - IMember member = adapter.getElement(); - this.final_ = this.buildFinal(member); - this.transient_ = this.buildTransient(member); - this.public_ = this.buildPublic(member); - this.static_ = this.buildStatic(member); - this.protected_ = this.buildProtected(member); - } - - // ********** updating ********** - - @Override - public void update() { - super.update(); - this.update(this.getMember()); - } - - protected void update(IMember member) { - this.setFinal(this.buildFinal(member)); - this.setTransient(this.buildTransient(member)); - this.setPublic(this.buildPublic(member)); - this.setStatic(this.buildStatic(member)); - this.setProtected(this.buildProtected(member)); - } - - // ********** simple state ********** - - // ***** final - public boolean isFinal() { - return this.final_; - } - - private void setFinal(boolean final_) { - boolean old = this.final_; - this.final_ = final_; - this.firePropertyChanged(FINAL_PROPERTY, old, final_); - } - - private boolean buildFinal(IMember member) { - try { - return Flags.isFinal(member.getFlags()); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - // ***** transient - public boolean isTransient() { - return this.transient_; - } - - private void setTransient(boolean transient_) { - boolean old = this.transient_; - this.transient_ = transient_; - this.firePropertyChanged(TRANSIENT_PROPERTY, old, transient_); - } - - private boolean buildTransient(IMember member) { - try { - return Flags.isTransient(member.getFlags()); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - // ***** public - public boolean isPublic() { - return this.public_; - } - - private void setPublic(boolean public_) { - boolean old = this.public_; - this.public_ = public_; - this.firePropertyChanged(PUBLIC_PROPERTY, old, public_); - } - - private boolean buildPublic(IMember member) { - try { - return Flags.isPublic(member.getFlags()); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - // ***** static - public boolean isStatic() { - return this.static_; - } - - private void setStatic(boolean static_) { - boolean old = this.static_; - this.static_ = static_; - this.firePropertyChanged(STATIC_PROPERTY, old, static_); - } - - private boolean buildStatic(IMember member) { - try { - return Flags.isStatic(member.getFlags()); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - // ***** protected - public boolean isProtected() { - return this.protected_; - } - - private void setProtected(boolean protected_) { - boolean old = this.protected_; - this.protected_ = protected_; - this.firePropertyChanged(PROTECTED_PROPERTY, old, protected_); - } - - private boolean buildProtected(IMember member) { - try { - return Flags.isProtected(member.getFlags()); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - // ********** miscellaneous ********** - - IMember getMember() { - return this.getAdapter().getElement(); - } - - private Adapter getAdapter() { - return (Adapter) this.adapter; - } - - /** - * Strip off the type signature's parameters if present. - * Convert to a readable string. - */ - static String convertTypeSignatureToTypeName(String typeSignature) { - return convertTypeSignatureToTypeName(typeSignature, EmptyIterable.<ITypeParameter>instance()); - } - - /** - * Strip off the type signature's parameters if present. - * Convert to a readable string. - */ - static String convertTypeSignatureToTypeName(String typeSignature, Iterable<ITypeParameter> typeParameters) { - return (typeSignature == null) ? null : convertTypeSignatureToTypeName_(typeSignature, typeParameters); - } - - /** - * no null check - */ - static String convertTypeSignatureToTypeName_(String typeSignature) { - return convertTypeSignatureToTypeName(typeSignature, EmptyIterable.<ITypeParameter>instance()); - } - - /** - * no null check - */ - static String convertTypeSignatureToTypeName_(String typeSignature, Iterable<ITypeParameter> typeParameters) { - String erasureSignature = Signature.getTypeErasure(typeSignature); - if (Signature.getTypeSignatureKind(erasureSignature) == Signature.TYPE_VARIABLE_SIGNATURE) { - try { - String typeParameterName = Signature.toString(erasureSignature); - for (ITypeParameter typeParameter : typeParameters) { - if (typeParameterName.equals(typeParameter.getElementName())) { - String[] bounds = typeParameter.getBoundsSignatures(); - if (bounds.length > 0) { - return convertTypeSignatureToTypeName_(bounds[0], typeParameters); - } - } - } - } - catch (JavaModelException jme) { - JptCommonCorePlugin.log(jme); - } - } - else if (Signature.getTypeSignatureKind(erasureSignature) == Signature.ARRAY_TYPE_SIGNATURE) { - int dim = Signature.getArrayCount(erasureSignature); - String arrayTypeName = convertTypeSignatureToTypeName(Signature.getElementType(erasureSignature), typeParameters); - return Signature.toString(Signature.createArraySignature(Signature.createTypeSignature(arrayTypeName, true), dim)); - } - else if (Signature.getTypeSignatureKind(erasureSignature) == Signature.WILDCARD_TYPE_SIGNATURE) { - // if signature is ? (wildcard) or ? super X (bottom bounded), return top bound, which is Object - if (String.valueOf(Signature.C_STAR).equals(erasureSignature) || erasureSignature.startsWith(String.valueOf(Signature.C_SUPER))) { - return Object.class.getName(); - } - // return top bound - return Signature.toString(erasureSignature.substring(1)); - } - return Signature.toString(erasureSignature); - } - - static boolean convertTypeSignatureToTypeIsArray(String typeSignature) { - return (typeSignature == null) ? false : Signature.getTypeSignatureKind(typeSignature) == Signature.ARRAY_TYPE_SIGNATURE; - } - - static int convertTypeSignatureToTypeArrayDimensionality(String typeSignature) { - return (typeSignature == null) ? 0 : Signature.getArrayCount(typeSignature); - } - - static String convertTypeSignatureToTypeArrayComponentTypeName(String typeSignature, Iterable<ITypeParameter> typeParameters) { - return (typeSignature == null) ? null : convertTypeSignatureToTypeName(Signature.getElementType(typeSignature), typeParameters); - } - - /** - * these types can be arrays (e.g. "java.lang.String[]"); - * but they won't have any further nested generic type arguments - * (e.g. "java.util.Collection<java.lang.String>") - */ - static List<String> convertTypeSignatureToTypeTypeArgumentNames(String typeSignature, Iterable<ITypeParameter> typeParameters) { - if (typeSignature == null) { - return Collections.emptyList(); - } - - String[] typeArgumentSignatures = Signature.getTypeArguments(typeSignature); - if (typeArgumentSignatures.length == 0) { - return Collections.emptyList(); - } - - ArrayList<String> names = new ArrayList<String>(typeArgumentSignatures.length); - for (String typeArgumentSignature : typeArgumentSignatures) { - names.add(convertTypeSignatureToTypeName(typeArgumentSignature, typeParameters)); - } - return names; - } - - public boolean isPublicOrProtected() { - return this.isPublic() || this.isProtected(); - } - - // ********** IMember adapter ********** - - interface Adapter extends BinaryAnnotatedElement.Adapter { - /** - * Return the adapter's JDT member (IType, IField, IMethod). - */ - IMember getElement(); - - Iterable<ITypeParameter> getTypeParameters(); - } - - - // ********** unsupported JavaResourceMember implementation ********** - - public Annotation setPrimaryAnnotation(String primaryAnnotationName, Iterable<String> supportingAnnotationNames) { - throw new UnsupportedOperationException(); - } - - public void resolveTypes(CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - - public boolean isFor(String memberName, int occurrence) { - throw new UnsupportedOperationException(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryMethod.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryMethod.java deleted file mode 100644 index fbdd9bea91..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryMethod.java +++ /dev/null @@ -1,193 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2012 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.common.core.internal.resource.java.binary; - -import java.util.ArrayList; -import java.util.List; -import java.util.Vector; -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jdt.core.ILocalVariable; -import org.eclipse.jdt.core.IMember; -import org.eclipse.jdt.core.IMethod; -import org.eclipse.jdt.core.ITypeParameter; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; -import org.eclipse.jpt.common.core.resource.java.JavaResourceMethod; -import org.eclipse.jpt.common.core.resource.java.JavaResourceType; -import org.eclipse.jpt.common.utility.MethodSignature; -import org.eclipse.jpt.common.utility.internal.NameTools; -import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; -import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; - -/** - * binary method - */ -final class BinaryMethod - extends BinaryAttribute - implements JavaResourceMethod { - - private boolean constructor; - - private final Vector<String> parameterTypeNames = new Vector<String>(); - - - BinaryMethod(JavaResourceType parent, IMethod method) { - super(parent, new MethodAdapter(method)); - } - - public Kind getKind() { - return JavaResourceAnnotatedElement.Kind.METHOD; - } - - // ***** overrides ***** - - @Override - protected void update(IMember member) { - super.update(member); - this.setConstructor(this.buildConstructor((IMethod) member)); - this.setParameterTypeNames(this.buildParameterTypeNames((IMethod) member)); - } - - public void initialize(MethodDeclaration methodDeclaration) { - throw new UnsupportedOperationException(); - } - - public void synchronizeWith(MethodDeclaration methodDeclaration) { - throw new UnsupportedOperationException(); - } - - @Override - IMethod getMember() { - return (IMethod) super.getMember(); - } - - - // ***** method name ***** - - public String getMethodName() { - return getMember().getElementName(); - } - - - // ***** parameter type names ***** - - public ListIterable<String> getParameterTypeNames() { - return new LiveCloneListIterable<String>(this.parameterTypeNames); - } - - public String getParameterTypeName(int index) { - return this.parameterTypeNames.get(index); - } - - public int getParametersSize() { - return this.parameterTypeNames.size(); - } - - private List<String> buildParameterTypeNames(IMethod method) { - ArrayList<String> names = new ArrayList<String>(); - for (ILocalVariable parameter : this.getParameters(method)) { - names.add(parameter.getElementName());//TODO is this right? - } - return names; - } - - private ILocalVariable[] getParameters(IMethod jdtMethod) { - try { - return jdtMethod.getParameters(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return null; - } - } - - private void setParameterTypeNames(List<String> parameterTypeNames) { - this.synchronizeList(parameterTypeNames, this.parameterTypeNames, PARAMETER_TYPE_NAMES_LIST); - } - - - // ***** constructor ***** - - public boolean isConstructor() { - return this.constructor; - } - - private void setConstructor(boolean isConstructor) { - boolean old = this.constructor; - this.constructor = isConstructor; - this.firePropertyChanged(CONSTRUCTOR_PROPERTY, old, isConstructor); - } - - private boolean buildConstructor(IMethod method) { - try { - return method.isConstructor(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - - // ***** misc ***** - - public boolean isFor(MethodSignature methodSignature, int occurrence) { - throw new UnsupportedOperationException(); - } - - - // ********** adapters ********** - - /** - * IMethod adapter - */ - static class MethodAdapter - implements BinaryAttribute.Adapter { - - final IMethod method; - static final IMethod[] EMPTY_METHOD_ARRAY = new IMethod[0]; - - MethodAdapter(IMethod method) { - super(); - this.method = method; - } - - public IMethod getElement() { - return this.method; - } - - public Iterable<ITypeParameter> getTypeParameters() { - try { - return new CompositeIterable<ITypeParameter>( - new ArrayIterable<ITypeParameter>(this.method.getTypeParameters()), - new ArrayIterable<ITypeParameter>(this.method.getDeclaringType().getTypeParameters())); - } - catch (JavaModelException jme) { - JptCommonCorePlugin.log(jme); - } - return EmptyIterable.instance(); - } - - public IAnnotation[] getAnnotations() throws JavaModelException { - return this.method.getAnnotations(); - } - - public String getAttributeName() { - return NameTools.convertGetterSetterMethodNameToPropertyName(this.method.getElementName()); - } - - public String getTypeSignature() throws JavaModelException { - return this.method.getReturnType(); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryNamedAnnotation.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryNamedAnnotation.java deleted file mode 100644 index 3e3b3f8cc0..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryNamedAnnotation.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 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.common.core.internal.resource.java.binary; - -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; - -/** - * Used for annotations that have no behavior, just a name - */ -public final class BinaryNamedAnnotation - extends BinaryAnnotation -{ - - private final String annotationName; - - public BinaryNamedAnnotation(JavaResourceNode parent, IAnnotation jdtAnnotation, String annotationName) { - super(parent, jdtAnnotation); - this.annotationName = annotationName; - } - - public String getAnnotationName() { - return this.annotationName; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryNode.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryNode.java deleted file mode 100644 index 76a1eecf52..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryNode.java +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2012 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.common.core.internal.resource.java.binary; - -import org.eclipse.core.resources.IFile; -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jdt.core.IMemberValuePair; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.internal.resource.java.AbstractJavaResourceNode; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.core.utility.TextRange; - -/** - * Binary convenience methods - */ -// TODO hopefully this class can go away with some sort of refactoring of the -// source and binary hierarchies... -public abstract class BinaryNode - extends AbstractJavaResourceNode -{ - protected BinaryNode(JavaResourceNode parent) { - super(parent); - } - - - // ********** JavaResourceNode implementation ********** - - @Override - public IFile getFile() { - return null; // only BinaryPackageFragmentRoot has a file... - } - - public void update() { - // nothing by default - } - - public JavaResourceCompilationUnit getJavaResourceCompilationUnit() { - throw new UnsupportedOperationException(); - } - - public TextRange getTextRange(CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - - public void initialize(CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - - public void synchronizeWith(CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - - - // ********** member value-pairs ********** - - /** - * Return the <em>values</em> of the specified JDT annotation's member with - * the specified name. - */ - public Object[] getJdtMemberValues(IAnnotation jdtContainerAnnotation, String memberName) { - Object[] values = (Object[]) this.getJdtMemberValue(jdtContainerAnnotation, memberName); - return (values != null) ? values : EMPTY_OBJECT_ARRAY; - } - private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0]; - - /** - * Return the value of the specified JDT annotation's member with - * the specified name. - */ - public Object getJdtMemberValue(IAnnotation jdtContainerAnnotation, String memberName) { - IMemberValuePair pair = this.getJdtMemberValuePair(jdtContainerAnnotation, memberName); - return (pair == null) ? null : pair.getValue(); - } - - /** - * Return the specified JDT annotation's member-value pair with - * the specified name. - */ - public IMemberValuePair getJdtMemberValuePair(IAnnotation jdtContainerAnnotation, String memberName) { - for (IMemberValuePair pair : this.getJdtMemberValuePairs(jdtContainerAnnotation)) { - if (pair.getMemberName().equals(memberName)) { - return pair; - } - } - return null; - } - - public IMemberValuePair[] getJdtMemberValuePairs(IAnnotation jdtContainerAnnotation) { - try { - return jdtContainerAnnotation.getMemberValuePairs(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return EMPTY_MEMBER_VALUE_PAIR_ARRAY; - } - } - private static final IMemberValuePair[] EMPTY_MEMBER_VALUE_PAIR_ARRAY = new IMemberValuePair[0]; -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryPackageFragment.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryPackageFragment.java deleted file mode 100644 index bbfdf84c37..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryPackageFragment.java +++ /dev/null @@ -1,152 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2012 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.common.core.internal.resource.java.binary; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Vector; -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jdt.core.IClassFile; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType; -import org.eclipse.jpt.common.core.resource.java.JavaResourceClassFile; -import org.eclipse.jpt.common.core.resource.java.JavaResourcePackageFragment; -import org.eclipse.jpt.common.core.resource.java.JavaResourcePackageFragmentRoot; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; - -/** - * binary package fragment - */ -final class BinaryPackageFragment - extends BinaryNode - implements JavaResourcePackageFragment -{ - /** JDT package fragment */ - private final IPackageFragment packageFragment; - - /** - * class files in the package fragment; - * we only hold class files/types that are actually annotated; - * if the unannotated types are needed (e.g. for orm.xml or an - * inheritance tree) they can be discovered on the classpath as needed - */ - private final Vector<JavaResourceClassFile> classFiles = new Vector<JavaResourceClassFile>(); - - - // ********** construction/initialization ********** - - BinaryPackageFragment(JavaResourcePackageFragmentRoot parent, IPackageFragment packageFragment) { - super(parent); - this.packageFragment = packageFragment; - this.classFiles.addAll(this.buildClassFiles()); - } - - private Collection<JavaResourceClassFile> buildClassFiles() { - IJavaElement[] children = this.getJDTChildren(); - ArrayList<JavaResourceClassFile> result = new ArrayList<JavaResourceClassFile>(children.length); - Collection<String> annotationNames = CollectionTools.collection(this.getAnnotationProvider().getAnnotationNames()); - for (IJavaElement child : children) { - IClassFile jdtClassFile = (IClassFile) child; - IType jdtType = jdtClassFile.getType(); - if (typeIsRelevant(jdtType, annotationNames)) { - result.add(new BinaryClassFile(this, jdtClassFile, jdtType)); - } - } - return result; - } - - //we will limit to classes, interfaces, and enums. Annotation types will be ignored. - static boolean typeIsRelevant(IType type, Collection<String> annotationNames) { - try { - return (type != null) - && type.exists() - && (type.isClass() || type.isInterface() || type.isEnum()) - && typeHasAnnotations(type, annotationNames); // we only hold annotated types - } - catch (JavaModelException e) { - return false; - } - } - - static boolean typeHasAnnotations(IType type, Collection<String> annotationNames) { - IAnnotation[] annotations; - try { - annotations = type.getAnnotations(); - } - catch (JavaModelException e) { - return false; - } - for (IAnnotation annotation : annotations) { - if (annotationNames.contains(annotation.getElementName())) { - return true; - } - } - return false; - } - - // ********** JarResourceNode implementation ********** - - @Override - public void update() { - super.update(); - this.updateClassFiles(); - } - - // TODO - private void updateClassFiles() { - throw new UnsupportedOperationException(); - } - - - // ********** JavaResourcePackageFragment implementation ********** - - public ListIterable<JavaResourceClassFile> getClassFiles() { - return new LiveCloneListIterable<JavaResourceClassFile>(this.classFiles); - } - - public int getClassFilesSize() { - return this.classFiles.size(); - } - - public Iterable<JavaResourceAbstractType> getTypes() { - return new TransformationIterable<JavaResourceClassFile, JavaResourceAbstractType>(this.getClassFiles()) { - @Override - protected JavaResourceAbstractType transform(JavaResourceClassFile classFile) { - return classFile.getType(); // we only hold annotated types - } - }; - } - - - // ********** misc ********** - - private IJavaElement[] getJDTChildren() { - try { - return this.packageFragment.getChildren(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return EMPTY_JAVA_ELEMENT_ARRAY; - } - } - protected static final IJavaElement[] EMPTY_JAVA_ELEMENT_ARRAY = new IJavaElement[0]; - - @Override - public void toString(StringBuilder sb) { - sb.append(this.packageFragment.getElementName()); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryPackageFragmentRoot.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryPackageFragmentRoot.java deleted file mode 100644 index 42865f3267..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryPackageFragmentRoot.java +++ /dev/null @@ -1,115 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 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.common.core.internal.resource.java.binary; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Vector; -import org.eclipse.core.resources.IFile; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.internal.utility.JDTTools; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType; -import org.eclipse.jpt.common.core.resource.java.JavaResourcePackageFragment; -import org.eclipse.jpt.common.core.resource.java.JavaResourcePackageFragmentRoot; -import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; -import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; - -/** - * binary package fragment root - */ -public final class BinaryPackageFragmentRoot - extends RootBinaryNode - implements JavaResourcePackageFragmentRoot -{ - /** JDT package fragment root */ - private final IPackageFragmentRoot packageFragmentRoot; - - /** package fragments in the JAR */ - private final Vector<JavaResourcePackageFragment> packageFragments = new Vector<JavaResourcePackageFragment>(); - - - // ********** construction/initialization ********** - - public BinaryPackageFragmentRoot(IPackageFragmentRoot packageFragmentRoot, AnnotationProvider annotationProvider) { - super(null, annotationProvider); // the package fragment root is the root of its sub-tree - this.packageFragmentRoot = packageFragmentRoot; - this.packageFragments.addAll(this.buildPackageFragments()); - } - - private Collection<JavaResourcePackageFragment> buildPackageFragments() { - IJavaElement[] jdtChildren = this.getJDTChildren(); - ArrayList<JavaResourcePackageFragment> result = new ArrayList<JavaResourcePackageFragment>(jdtChildren.length); - for (IJavaElement child : jdtChildren) { - result.add(new BinaryPackageFragment(this, (IPackageFragment) child)); - } - return result; - } - - - // ********** overrides ********** - - @Override - public IFile getFile() { - return (IFile) this.packageFragmentRoot.getResource(); - } - - @Override - public void update() { - super.update(); - this.updatePackageFragments(); - } - - // TODO - private void updatePackageFragments() { - throw new UnsupportedOperationException(); - } - - - // ********** JavaResourceNode.Root implementation ********** - - /** - * NB: we hold only annotated types - */ - public Iterable<JavaResourceAbstractType> getTypes() { - return new CompositeIterable<JavaResourceAbstractType>(this.persistedTypesLists()); - } - - private Iterable<Iterable<JavaResourceAbstractType>> persistedTypesLists() { - return new TransformationIterable<JavaResourcePackageFragment, Iterable<JavaResourceAbstractType>>(this.getPackageFragments()) { - @Override - protected Iterable<JavaResourceAbstractType> transform(JavaResourcePackageFragment fragment) { - return fragment.getTypes(); - } - }; - } - - - // ********** JavaResourcePackageFragmentRoot implementation ********** - - public Iterable<JavaResourcePackageFragment> getPackageFragments() { - return new LiveCloneIterable<JavaResourcePackageFragment>(this.packageFragments); - } - - public int getPackageFragmentsSize() { - return this.packageFragments.size(); - } - - - // ********** misc ********** - - private IJavaElement[] getJDTChildren() { - return JDTTools.getChildren(this.packageFragmentRoot); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryType.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryType.java deleted file mode 100644 index 2ae0b6d0c0..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryType.java +++ /dev/null @@ -1,389 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2012 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.common.core.internal.resource.java.binary; - -import java.util.Collection; -import java.util.Vector; -import org.eclipse.jdt.core.Flags; -import org.eclipse.jdt.core.IField; -import org.eclipse.jdt.core.IMember; -import org.eclipse.jdt.core.IMethod; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.core.dom.Modifier; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; -import org.eclipse.jpt.common.core.resource.java.JavaResourceField; -import org.eclipse.jpt.common.core.resource.java.JavaResourceMethod; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.core.resource.java.JavaResourceType; -import org.eclipse.jpt.common.utility.MethodSignature; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; - -/** - * binary type - */ -final class BinaryType - extends BinaryAbstractType - implements JavaResourceType -{ - private String superclassQualifiedName; - - private boolean abstract_; // 'abstract' is a reserved word - - private boolean hasNoArgConstructor; - - private boolean hasPrivateNoArgConstructor; - - private final Vector<JavaResourceField> fields; - - private final Vector<JavaResourceMethod> methods; - - - // ********** construction/initialization ********** - - BinaryType(JavaResourceNode parent, IType type) { - super(parent, type); - this.superclassQualifiedName = this.buildSuperclassQualifiedName(type); - this.abstract_ = this.buildAbstract(type); - this.hasNoArgConstructor = this.buildHasNoArgConstructor(type); - this.hasPrivateNoArgConstructor = this.buildHasPrivateNoArgConstructor(type); - this.fields = this.buildFields(type); - this.methods = this.buildMethods(type); - } - - public Kind getKind() { - return JavaResourceAnnotatedElement.Kind.TYPE; - } - - - // ********** overrides ********** - - @Override - protected void update(IMember member) { - super.update(member); - this.setSuperclassQualifiedName(this.buildSuperclassQualifiedName((IType) member)); - this.setAbstract(this.buildAbstract((IType) member)); - this.setHasNoArgConstructor(this.buildHasNoArgConstructor((IType) member)); - this.setHasPrivateNoArgConstructor(this.buildHasPrivateNoArgConstructor((IType) member)); - this.updateFields((IType) member); - this.updateMethods((IType) member); - } - - // TODO - private void updateFields(IType type) { - throw new UnsupportedOperationException(); - } - - // TODO - private void updateMethods(IType type) { - throw new UnsupportedOperationException(); - } - - - - // ********** JavaResourceType implementation ********** - - // ***** superclass qualified name - public String getSuperclassQualifiedName() { - return this.superclassQualifiedName; - } - - private void setSuperclassQualifiedName(String superclassQualifiedName) { - String old = this.superclassQualifiedName; - this.superclassQualifiedName = superclassQualifiedName; - this.firePropertyChanged(SUPERCLASS_QUALIFIED_NAME_PROPERTY, old, superclassQualifiedName); - } - - private String buildSuperclassQualifiedName(IType type) { - return convertTypeSignatureToTypeName(this.getSuperclassTypeSignature(type)); - } - - private String getSuperclassTypeSignature(IType type) { - try { - return type.getSuperclassTypeSignature(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return null; - } - } - - - // ***** abstract - public boolean isAbstract() { - return this.abstract_; - } - - private void setAbstract(boolean abstract_) { - boolean old = this.abstract_; - this.abstract_ = abstract_; - this.firePropertyChanged(ABSTRACT_PROPERTY, old, abstract_); - } - - private boolean buildAbstract(IType type) { - try { - return Flags.isAbstract(type.getFlags()); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - // ***** no-arg constructor - public boolean hasNoArgConstructor() { - return this.hasNoArgConstructor; - } - - private void setHasNoArgConstructor(boolean hasNoArgConstructor) { - boolean old = this.hasNoArgConstructor; - this.hasNoArgConstructor = hasNoArgConstructor; - this.firePropertyChanged(NO_ARG_CONSTRUCTOR_PROPERTY, old, hasNoArgConstructor); - } - - private boolean buildHasNoArgConstructor(IType type) { - return this.findNoArgConstructor(type) != null; - } - - private IMethod findNoArgConstructor(IType type) { - try { - for (IMethod method : type.getMethods()) { - if (method.isConstructor()) { - return method; - } - } - } - catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - } - return null; - } - - // ***** private no-arg constructor - public boolean hasPrivateNoArgConstructor() { - return this.hasPrivateNoArgConstructor; - } - - private void setHasPrivateNoArgConstructor(boolean hasPrivateNoArgConstructor) { - boolean old = this.hasPrivateNoArgConstructor; - this.hasPrivateNoArgConstructor = hasPrivateNoArgConstructor; - this.firePropertyChanged(PRIVATE_NO_ARG_CONSTRUCTOR_PROPERTY, old, hasPrivateNoArgConstructor); - } - - private boolean buildHasPrivateNoArgConstructor(IType type) { - IMethod method = this.findNoArgConstructor(type); - try { - return method != null && Flags.isPrivate(method.getFlags()); - } - catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - - // ***** public/protected no-arg constructor ***** - - public boolean hasPublicOrProtectedNoArgConstructor() { - Iterable<JavaResourceMethod> constructors = this.getConstructors(); - if (CollectionTools.size(constructors) == 0) { - return true; - } - for (JavaResourceMethod constructor : constructors) { - if (constructor.getParametersSize() == 0) { - return Modifier.isPublic(constructor.getModifiers()) - || Modifier.isProtected(constructor.getModifiers()); - } - } - return false; - } - - public boolean hasPublicNoArgConstructor() { - Iterable<JavaResourceMethod> constructors = this.getConstructors(); - if (CollectionTools.size(constructors) == 0) { - return true; - } - for (JavaResourceMethod constructor : constructors) { - if (constructor.getParametersSize() == 0) { - return Modifier.isPublic(constructor.getModifiers()); - } - } - return false; - } - - protected Iterable<JavaResourceMethod> getConstructors() { - return new FilteringIterable<JavaResourceMethod>(this.getMethods()) { - @Override - protected boolean accept(JavaResourceMethod method) { - return method.isConstructor(); - } - }; - } - - - // ********** misc ********** - - public boolean hasAnyAnnotatedFields() { - for (JavaResourceField field : this.getFields()) { - if (field.isAnnotated()) { - return true; - } - } - return false; - } - - public boolean hasAnyAnnotatedMethods() { - for (JavaResourceMethod method : this.getMethods()) { - if (method.isAnnotated()) { - return true; - } - } - return false; - } - - @Override - public IType getMember() { - return super.getMember(); - } - - // Two more requirements for a valid equals() method: - // 1. It should be public - // 2. The return type should be boolean - // Both requirements are validated by the compiler so they are excluded here - public boolean hasEqualsMethod() { - for (JavaResourceMethod method : this.getMethods()) { - if (StringTools.stringsAreEqual(method.getMethodName(), "equals") //$NON-NLS-1$ - && method.getParametersSize() == 1 - && StringTools.stringsAreEqual(method.getParameterTypeName(0), Object.class.getName())) { - return true; - } - } - return false; - } - - // Two more requirements for a valid hashCode() method: - // 1. It should be public - // 2. The return type should be int - // Both requirements are validated by the compiler so they are excluded here - public boolean hasHashCodeMethod() { - for (JavaResourceMethod method : this.getMethods()) { - if (StringTools.stringsAreEqual(method.getMethodName(), "hashCode") //$NON-NLS-1$ - && method.getParametersSize() == 0) { - return true; - } - } - return false; - } - - public JavaResourceMethod getMethod(String propertyName) { - for (JavaResourceMethod method : this.getMethods()) { - if (StringTools.stringsAreEqual(method.getMethodName(), propertyName)) { - return method; - } - } - return null; - } - - // ********** fields ********** - - public Iterable<JavaResourceField> getFields() { - return new LiveCloneIterable<JavaResourceField>(this.fields); - } - - private void addField(JavaResourceField field) { - this.addItemToCollection(field, this.fields, FIELDS_COLLECTION); - } - - private JavaResourceField getField(String fieldName, int occurrence) { - for (JavaResourceField field : this.getFields()) { - if (field.isFor(fieldName, occurrence)) { - return field; - } - } - return null; - } - - private void removeFields(Collection<JavaResourceField> remove) { - this.removeItemsFromCollection(remove, this.fields, FIELDS_COLLECTION); - } - - private Vector<JavaResourceField> buildFields(IType type) { - IField[] jdtFields = this.getFields(type); - Vector<JavaResourceField> result = new Vector<JavaResourceField>(jdtFields.length); - for (IField jdtField : jdtFields) { - result.add(this.buildField(jdtField)); - } - return result; - } - - private IField[] getFields(IType type) { - try { - return type.getFields(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return EMPTY_FIELD_ARRAY; - } - } - private static final IField[] EMPTY_FIELD_ARRAY = new IField[0]; - - private JavaResourceField buildField(IField jdtField) { - return new BinaryField(this, jdtField); - } - - - // ********** methods ********** - - public Iterable<JavaResourceMethod> getMethods() { - return new LiveCloneIterable<JavaResourceMethod>(this.methods); - } - - private JavaResourceMethod getMethod(MethodSignature signature, int occurrence) { - for (JavaResourceMethod method : this.getMethods()) { - if (method.isFor(signature, occurrence)) { - return method; - } - } - return null; - } - - private void addMethod(JavaResourceMethod method) { - this.addItemToCollection(method, this.methods, METHODS_COLLECTION); - } - - private void removeMethods(Collection<JavaResourceMethod> remove) { - this.removeItemsFromCollection(remove, this.methods, METHODS_COLLECTION); - } - - private Vector<JavaResourceMethod> buildMethods(IType type) { - IMethod[] jdtMethods = this.getMethods(type); - Vector<JavaResourceMethod> result = new Vector<JavaResourceMethod>(jdtMethods.length); - for (IMethod jdtMethod : jdtMethods) { - result.add(this.buildMethod(jdtMethod)); - } - return result; - } - - private IMethod[] getMethods(IType type) { - try { - return type.getMethods(); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return EMPTY_METHOD_ARRAY; - } - } - private static final IMethod[] EMPTY_METHOD_ARRAY = new IMethod[0]; - - private JavaResourceMethod buildMethod(IMethod jdtMethod) { - return new BinaryMethod(this, jdtMethod); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryTypeCache.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryTypeCache.java deleted file mode 100644 index fdc5684ba7..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/BinaryTypeCache.java +++ /dev/null @@ -1,157 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 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.common.core.internal.resource.java.binary; - -import java.util.Vector; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType; -import org.eclipse.jpt.common.core.resource.java.JavaResourceTypeCache; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; -import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; - -/** - * cache used to hold binary "external" Java resource types - * (typically derived from JARs on the project's build path) - */ -public final class BinaryTypeCache - extends RootBinaryNode - implements JavaResourceTypeCache -{ - /** populated on-demand */ - private final Vector<Entry> entries = new Vector<Entry>(); - - - // ********** construction ********** - - public BinaryTypeCache(AnnotationProvider annotationProvider) { - super(null, annotationProvider); - } - - - // ********** JavaResourceNode.Root implementation ********** - - public Iterable<JavaResourceAbstractType> getTypes() { - return new TransformationIterable<Entry, JavaResourceAbstractType>(this.getEntries()) { - @Override - protected JavaResourceAbstractType transform(Entry entry) { - return entry.type; - } - }; - } - - private Iterable<Entry> getEntries() { - return new LiveCloneIterable<Entry>(this.entries); - } - - - // ********** JavaResourcePersistentTypeCache implementation ********** - - public int getTypesSize() { - return this.entries.size(); - } - - public JavaResourceAbstractType addType(IType jdtType) { - Entry entry = this.buildEntry(jdtType); - this.entries.add(entry); - this.fireItemAdded(TYPES_COLLECTION, entry.type); - return entry.type; - } - - private Entry buildEntry(IType jdtType) { - return new Entry(this.buildType(jdtType), jdtType.getResource()); - } - - //ignore annotations - private JavaResourceAbstractType buildType(IType jdtType) { - try { - if (jdtType.isClass() || jdtType.isInterface()) { - return new BinaryType(this, jdtType); - } - if (jdtType.isEnum()) { - return new BinaryEnum(this, jdtType); - } - } - catch(JavaModelException e) { - JptCommonCorePlugin.log(e); - } - return null; - } - - public boolean removeTypes(IFile jarFile) { - boolean modified = false; - for (Entry entry : this.getEntries()) { - IResource resource = entry.resource; - if ((resource != null) && resource.equals(jarFile)) { - this.removeEntry(entry); - modified = true; - } - } - return modified; - } - - private void removeEntry(Entry entry) { - this.entries.remove(entry); - this.fireItemRemoved(TYPES_COLLECTION, entry.type); - } - - - // ********** overrides ********** - - /** - * Ignore changes to this collection. Adds can be ignored since they are triggered - * by requests that will, themselves, trigger updates (typically during the - * update of an object that calls a setter with the newly-created resource - * type). Deletes will be accompanied by manual updates. - */ - @Override - protected void aspectChanged(String aspectName) { - if ((aspectName != null) && ! aspectName.equals(TYPES_COLLECTION)) { - super.aspectChanged(aspectName); - } - } - - @Override - public void toString(StringBuilder sb) { - sb.append(this.entries); - } - - - // ********** cache entry ********** - - /** - * Associate a type with its resource. - * This will be a JAR in the case of a type loaded from a JAR that is in - * the Eclipse workspace. The resource will be null for a type loaded - * from a JAR or class directory outside of the workspace. - */ - static class Entry { - final JavaResourceAbstractType type; - final IResource resource; - - Entry(JavaResourceAbstractType type, IResource resource) { - super(); - this.type = type; - this.resource = resource; - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.type); - } - - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/RootBinaryNode.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/RootBinaryNode.java deleted file mode 100644 index 3afcf608da..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/binary/RootBinaryNode.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 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.common.core.internal.resource.java.binary; - -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.JptResourceModelListener; -import org.eclipse.jpt.common.core.JptResourceType; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.utility.internal.ListenerList; - -/** - * JAR and external types - */ -abstract class RootBinaryNode - extends BinaryNode - implements JavaResourceNode.Root -{ - /** pluggable annotation provider */ - private final AnnotationProvider annotationProvider; - - /** listeners notified whenever the resource model changes */ - private final ListenerList<JptResourceModelListener> resourceModelListenerList = new ListenerList<JptResourceModelListener>(JptResourceModelListener.class); - - - // ********** construction ********** - - RootBinaryNode(JavaResourceNode parent, AnnotationProvider annotationProvider) { - super(parent); - this.annotationProvider = annotationProvider; - } - - - // ********** overrides ********** - - @Override - protected boolean requiresParent() { - return false; - } - - @Override - public Root getRoot() { - return this; - } - - @Override - public AnnotationProvider getAnnotationProvider() { - return this.annotationProvider; - } - - - // ********** JavaResourceNode.Root implementation ********** - - public void resourceModelChanged() { - for (JptResourceModelListener listener : this.resourceModelListenerList.getListeners()) { - listener.resourceModelChanged(this); - } - } - - - // ********** JptResourceModel implementation ********** - - public JptResourceType getResourceType() { - return JptCommonCorePlugin.JAR_RESOURCE_TYPE; - } - - public void addResourceModelListener(JptResourceModelListener listener) { - this.resourceModelListenerList.add(listener); - } - - public void removeResourceModelListener(JptResourceModelListener listener) { - this.resourceModelListenerList.remove(listener); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAbstractType.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAbstractType.java deleted file mode 100644 index 16a42f37d3..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAbstractType.java +++ /dev/null @@ -1,199 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core.internal.resource.java.source; - -import java.util.HashMap; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IBinding; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.core.utility.jdt.AbstractType; -import org.eclipse.jpt.common.utility.internal.SimpleIntReference; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Java source type - */ -abstract class SourceAbstractType<A extends AbstractType> - extends SourceMember<A> - implements JavaResourceAbstractType -{ - private String name; - - private String qualifiedName; - - private String packageName; - - private String declaringTypeName; - - private boolean memberType; - - - // ********** construction/initialization ********** - - protected SourceAbstractType(JavaResourceCompilationUnit javaResourceCompilationUnit, A type) { - super(javaResourceCompilationUnit, type); - } - - @Override - protected void initialize(IBinding binding) { - super.initialize(binding); - this.name = this.buildName((ITypeBinding) binding); - this.qualifiedName = this.buildQualifiedName((ITypeBinding) binding); - this.packageName = this.buildPackageName((ITypeBinding) binding); - this.declaringTypeName = this.buildDeclaringTypeName((ITypeBinding) binding); - this.memberType = this.buildMemberType((ITypeBinding) binding); - } - - - // ********** update ********** - - @Override - protected void synchronizeWith(IBinding binding) { - super.synchronizeWith(binding); - this.syncName(this.buildName((ITypeBinding) binding)); - this.syncQualifiedName(this.buildQualifiedName((ITypeBinding) binding)); - this.syncPackageName(this.buildPackageName((ITypeBinding) binding)); - this.syncDeclaringTypeName(this.buildDeclaringTypeName((ITypeBinding) binding)); - this.syncMemberType(this.buildMemberType((ITypeBinding) binding)); - } - - - @Override - public void toString(StringBuilder sb) { - sb.append(this.name); - } - - - // ******** JavaResourceAbstractType implementation ******** - - // ***** name - public String getName() { - return this.name; - } - - private void syncName(String astName) { - String old = this.name; - this.name = astName; - this.firePropertyChanged(NAME_PROPERTY, old, astName); - } - - private String buildName(ITypeBinding binding) { - return (binding == null) ? null : binding.getName(); - } - - // ***** qualified name - public String getQualifiedName() { - return this.qualifiedName; - } - - private void syncQualifiedName(String astQualifiedName) { - String old = this.qualifiedName; - this.qualifiedName = astQualifiedName; - this.firePropertyChanged(QUALIFIED_NAME_PROPERTY, old, astQualifiedName); - } - - private String buildQualifiedName(ITypeBinding binding) { - return (binding == null) ? null : binding.getQualifiedName(); - } - - // ***** package name - public String getPackageName() { - return this.packageName; - } - - private void syncPackageName(String astPackageName) { - String old = this.packageName; - this.packageName = astPackageName; - this.firePropertyChanged(PACKAGE_NAME_PROPERTY, old, astPackageName); - } - - private String buildPackageName(ITypeBinding binding) { - return (binding == null) ? null : binding.getPackage().getName(); - } - - // ***** package - public boolean isIn(IPackageFragment packageFragment) { - return StringTools.stringsAreEqual(packageFragment.getElementName(), this.packageName); - } - - // ***** source folder - public boolean isIn(IPackageFragmentRoot sourceFolder) { - return getSourceFolder().equals(sourceFolder); - } - - private IPackageFragmentRoot getSourceFolder() { - return (IPackageFragmentRoot) this.getJavaResourceCompilationUnit().getCompilationUnit().getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT); - } - - // ***** declaring type name - public String getDeclaringTypeName() { - return this.declaringTypeName; - } - - private void syncDeclaringTypeName(String astDeclaringTypeName) { - String old = this.declaringTypeName; - this.declaringTypeName = astDeclaringTypeName; - this.firePropertyChanged(DECLARING_TYPE_NAME_PROPERTY, old, astDeclaringTypeName); - } - - private String buildDeclaringTypeName(ITypeBinding binding) { - if (binding == null) { - return null; - } - ITypeBinding declaringClass = binding.getDeclaringClass(); - return (declaringClass == null) ? null : declaringClass.getTypeDeclaration().getQualifiedName(); - } - - // ***** member type - public boolean isMemberType() { - return this.memberType; - } - - private void syncMemberType(boolean astMemberType) { - boolean old = this.memberType; - this.memberType = astMemberType; - this.firePropertyChanged(MEMBER_TYPE_PROPERTY, old, astMemberType); - } - - private boolean buildMemberType(ITypeBinding binding) { - return (binding == null) ? false : binding.isMember(); - } - - - // ********** CounterMap ********** - - protected static class CounterMap { - private final HashMap<Object, SimpleIntReference> counters; - - protected CounterMap(int initialCapacity) { - super(); - this.counters = new HashMap<Object, SimpleIntReference>(initialCapacity); - } - - /** - * Return the incremented count for the specified object. - */ - int increment(Object o) { - SimpleIntReference counter = this.counters.get(o); - if (counter == null) { - counter = new SimpleIntReference(); - this.counters.put(o, counter); - } - counter.increment(); - return counter.getValue(); - } - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAnnotatedElement.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAnnotatedElement.java deleted file mode 100644 index d5d80754fd..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAnnotatedElement.java +++ /dev/null @@ -1,834 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.resource.java.source; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.ASTVisitor; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IAnnotationBinding; -import org.eclipse.jdt.core.dom.IBinding; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jdt.core.dom.MarkerAnnotation; -import org.eclipse.jdt.core.dom.NormalAnnotation; -import org.eclipse.jdt.core.dom.SingleMemberAnnotation; -import org.eclipse.jpt.common.core.internal.utility.jdt.ASTTools; -import org.eclipse.jpt.common.core.resource.java.Annotation; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.core.resource.java.NestableAnnotation; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.Transformer; -import org.eclipse.jpt.common.utility.internal.TransformerAdapter; -import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; -import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; - -/** - * Java source annotated element - */ -abstract class SourceAnnotatedElement<E extends AnnotatedElement> - extends SourceNode - implements JavaResourceAnnotatedElement -{ - final E annotatedElement; - - /** - * Annotations keyed by annotation name; - * no duplicates (the Java compiler does not allow duplicate annotations). - */ - private final Hashtable<String, Annotation> annotations = new Hashtable<String, Annotation>(); - - /** - * Cache the null annotation objects or they will be rebuilt on every access. - * Make this a HashMap for performance, not concerned with duplicate creation and - * unlikely that multiple threads will access this. - */ - private final HashMap<String, Annotation> nullAnnotationCache = new HashMap<String, Annotation>(); - - /** - * Annotation containers keyed by <em>nestable</em> annotation name. - * This is used to store annotations that can be both standalone and nested - * and are moved back and forth between the two. - */ - private final Hashtable<String, CombinationAnnotationContainer> annotationContainers = new Hashtable<String, CombinationAnnotationContainer>(); - - - // ********** construction/initialization ********** - - SourceAnnotatedElement(JavaResourceNode parent, E annotatedElement) { - super(parent); - this.annotatedElement = annotatedElement; - } - - /** - * There are 2 initialize calls, 1 for ASTNode and one for IBinding. - * This is a performance enhancement because finding a MethodDeclaration - * for a SourceMethod is very non-performant. SourceMethod actually overrides - * this as unsupported and instead uses initialize(MethodDeclaration). - * TODO continue the pattern in SourceMethod with the other classes in this hierarchy - * trying not to change much API in 3.2M7 - * - * This is also to handle multiple fields declared in a single statement: - * private int foo, bar; - * JDTFieldAttribute.getBodyDeclaration(CompilationUnit) returns the FieldDeclaration - * in the call to getBodyDeclaration, this is the ASTNode for a field and - * has the annotations on it. - * JDTFieldAttribute.getBinding(CompiltationUnit) returns the IVariableBinding of the - * VariableDeclarationFragment which is the ASTNode for the particular field. - */ - public void initialize(CompilationUnit astRoot) { - this.initialize(this.annotatedElement.getBodyDeclaration(astRoot)); - this.initialize(this.annotatedElement.getBinding(astRoot)); - } - - protected void initialize(IBinding binding) { - //do nothing - } - - /** - * Gather up all the significant AST annotations - * and build the corresponding Dali annotations. - */ - protected void initialize(ASTNode node) { - AnnotationVisitor visitor = new AnnotationVisitor(node); - node.accept(visitor); - this.initializeAnnotations(visitor.astAnnotations); - // container annotations take precedence over... - this.initializeContainerAnnotations(visitor.astContainerAnnotations); - // ...standalone nestable annotations - this.initializeStandaloneNestableAnnotations(visitor.astStandaloneNestableAnnotations); - } - - private void initializeAnnotations(HashMap<String, org.eclipse.jdt.core.dom.Annotation> astAnnotations) { - for (Map.Entry<String, org.eclipse.jdt.core.dom.Annotation> entry : astAnnotations.entrySet()) { - String annotationName = entry.getKey(); - org.eclipse.jdt.core.dom.Annotation astAnnotation = entry.getValue(); - Annotation annotation = this.buildAnnotation(annotationName); - annotation.initialize((CompilationUnit) astAnnotation.getRoot()); // TODO pass the AST annotation! - this.annotations.put(annotationName, annotation); - } - } - - private void initializeContainerAnnotations(HashMap<String, org.eclipse.jdt.core.dom.Annotation> astContainerAnnotations) { - for (Map.Entry<String, org.eclipse.jdt.core.dom.Annotation> entry : astContainerAnnotations.entrySet()) { - String containerAnnotationName = entry.getKey(); - org.eclipse.jdt.core.dom.Annotation astAnnotation = entry.getValue(); - String nestableAnnotationName = this.getNestableAnnotationName(containerAnnotationName); - CombinationAnnotationContainer container = new CombinationAnnotationContainer(nestableAnnotationName, containerAnnotationName); - container.initializeFromContainerAnnotation(astAnnotation); - this.annotationContainers.put(nestableAnnotationName, container); - } - } - - private void initializeStandaloneNestableAnnotations(HashMap<String, org.eclipse.jdt.core.dom.Annotation> astStandaloneNestableAnnotations) { - for (Map.Entry<String, org.eclipse.jdt.core.dom.Annotation> entry : astStandaloneNestableAnnotations.entrySet()) { - String nestableAnnotationName = entry.getKey(); - org.eclipse.jdt.core.dom.Annotation astAnnotation = entry.getValue(); - // if we already have an annotation container (because there was a container annotation) - // ignore the standalone nestable annotation - if (this.annotationContainers.get(nestableAnnotationName) == null) { - CombinationAnnotationContainer container = new CombinationAnnotationContainer(nestableAnnotationName); - container.initializeFromStandaloneAnnotation(astAnnotation); - this.annotationContainers.put(nestableAnnotationName, container); - } - } - } - - /** - * @see #initialize(CompilationUnit) - */ - public void synchronizeWith(CompilationUnit astRoot) { - this.synchronizeWith(this.annotatedElement.getBodyDeclaration(astRoot)); - this.synchronizeWith(this.annotatedElement.getBinding(astRoot)); - } - - protected void synchronizeWith(ASTNode bodyDeclaration) { - this.syncAnnotations(bodyDeclaration); - } - - protected void synchronizeWith(IBinding binding) { - //do nothing - } - - - // ********** annotations ********** - - public Iterable<Annotation> getAnnotations() { - return new LiveCloneIterable<Annotation>(this.annotations.values()); - } - - public int getAnnotationsSize() { - return this.annotations.size(); - } - - public Annotation getAnnotation(String annotationName) { - // TODO one reason we search the containers is validation, we need to have separate API for getting the container annotation. - //The validation in org.eclipse.jpt.jaxb.core.internal.context.java.GenericJavaXmlAnyElementMapping is an example - if (this.annotationIsValidContainer(annotationName)) { - CombinationAnnotationContainer container = this.annotationContainers.get(this.getAnnotationProvider().getNestableAnnotationName(annotationName)); - return (container == null) ? null : container.getContainerAnnotation(); - } - return this.annotations.get(annotationName); - } - - public Annotation getNonNullAnnotation(String annotationName) { - Annotation annotation = this.performantGetAnnotation(annotationName); - return (annotation != null) ? annotation : this.getNullAnnotation(annotationName); - } - - /** - * TODO performance - hack for performance so we don't have to break API in M7. - * Our calls to getNonNullAnnotation are never used for container annotations, so - * I can use this method to avoid the expensive {@link #annotationIsValidContainer(String)} check - * in {@link #getAnnotation(String)}. In the next release I think we need - * to change the genAnnotation api to not check for container annotations and instead have - * separate API. - */ - protected Annotation performantGetAnnotation(String annotationName) { - return this.annotations.get(annotationName); - } - - private Annotation getNullAnnotation(String annotationName) { - Annotation annotation = this.nullAnnotationCache.get(annotationName); - if (annotation == null) { - annotation = this.buildNullAnnotation(annotationName); - this.nullAnnotationCache.put(annotationName, annotation); - } - return annotation; - } - - private Annotation buildNullAnnotation(String annotationName) { - return this.getAnnotationProvider().buildNullAnnotation(this, annotationName); - } - - public Annotation addAnnotation(String annotationName) { - Annotation annotation = this.buildAnnotation(annotationName); - this.annotations.put(annotationName, annotation); - annotation.newAnnotation(); - return annotation; - } - - public void removeAnnotation(String annotationName) { - Annotation annotation = this.annotations.remove(annotationName); - if (annotation != null) { - annotation.removeAnnotation(); - } - } - - /* CU private */ boolean annotationIsValid(String annotationName) { - return CollectionTools.contains(this.getAnnotationProvider().getAnnotationNames(), annotationName); - } - - /* CU private */ Annotation buildAnnotation(String annotationName) { - return this.getAnnotationProvider().buildAnnotation(this, this.annotatedElement, annotationName); - } - - - // ********** combination annotations ********** - - private Iterable<NestableAnnotation> getNestableAnnotations() { - return new CompositeIterable<NestableAnnotation>(this.getNestableAnnotationLists()); - } - - private Iterable<Iterable<NestableAnnotation>> getNestableAnnotationLists() { - return new TransformationIterable<CombinationAnnotationContainer_, Iterable<NestableAnnotation>>(this.getAnnotationContainers(), ANNOTATION_CONTAINER_NESTED_ANNOTATIONS_TRANSFORMER); - } - - private static final Transformer<CombinationAnnotationContainer_, Iterable<NestableAnnotation>> ANNOTATION_CONTAINER_NESTED_ANNOTATIONS_TRANSFORMER = new AnnotationContainerNestedAnnotationsTransformer(); - /* CU private */ static final class AnnotationContainerNestedAnnotationsTransformer - extends TransformerAdapter<CombinationAnnotationContainer_, Iterable<NestableAnnotation>> - { - @Override - public Iterable<NestableAnnotation> transform(CombinationAnnotationContainer_ container) { - return container.getNestedAnnotations(); - } - } - - private Iterable<CombinationAnnotationContainer> getAnnotationContainers() { - return new LiveCloneIterable<CombinationAnnotationContainer>(this.annotationContainers.values()); - } - - public ListIterable<NestableAnnotation> getAnnotations(String nestableAnnotationName) { - CombinationAnnotationContainer container = this.annotationContainers.get(nestableAnnotationName); - return (container != null) ? container.getNestedAnnotations() : EmptyListIterable.<NestableAnnotation> instance(); - } - - public int getAnnotationsSize(String nestableAnnotationName) { - CombinationAnnotationContainer container = this.annotationContainers.get(nestableAnnotationName); - return (container == null) ? 0 : container.getNestedAnnotationsSize(); - } - - public NestableAnnotation getAnnotation(int index, String nestableAnnotationName) { - CombinationAnnotationContainer container = this.annotationContainers.get(nestableAnnotationName); - if (container == null) { - throw new ArrayIndexOutOfBoundsException("size: 0 index: " + index); //$NON-NLS-1$ - } - return container.getNestedAnnotation(index); - } - - private String getNestableAnnotationName(String containerAnnotationName) { - return this.getAnnotationProvider().getNestableAnnotationName(containerAnnotationName); - } - - /* CU private */ String getContainerAnnotationName(String nestableAnnotationName) { - return this.getAnnotationProvider().getContainerAnnotationName(nestableAnnotationName); - } - - /* CU private */ String getNestableElementName(String nestableAnnotationName) { - return this.getAnnotationProvider().getNestableElementName(nestableAnnotationName); - } - - public NestableAnnotation addAnnotation(int index, String nestableAnnotationName) { - CombinationAnnotationContainer container = this.annotationContainers.get(nestableAnnotationName); - if (container == null) { - container = new CombinationAnnotationContainer(nestableAnnotationName); - this.annotationContainers.put(nestableAnnotationName, container); - } - return container.addNestedAnnotation(index); - } - - public void moveAnnotation(int targetIndex, int sourceIndex, String nestableAnnotationName) { - this.annotationContainers.get(nestableAnnotationName).moveNestedAnnotation(targetIndex, sourceIndex); - } - - public void removeAnnotation(int index, String nestableAnnotationName) { - CombinationAnnotationContainer container = this.annotationContainers.get(nestableAnnotationName); - container.removeNestedAnnotation(index); - if (container.isEmpty()) { - this.annotationContainers.remove(nestableAnnotationName); - } - } - - /* CU private */ boolean annotationIsValidContainer(String annotationName) { - return CollectionTools.contains(this.getAnnotationProvider().getContainerAnnotationNames(), annotationName); - } - - /* CU private */ boolean annotationIsValidNestable(String annotationName) { - return CollectionTools.contains(this.getAnnotationProvider().getNestableAnnotationNames(), annotationName); - } - - /* CU private */ NestableAnnotation buildNestableAnnotation(String annotationName, int index) { - return this.getAnnotationProvider().buildAnnotation(this, this.annotatedElement, annotationName, index); - } - - /* CU private */ void nestedAnnotationAdded(String collectionName, NestableAnnotation addedAnnotation) { - this.fireItemAdded(collectionName, addedAnnotation); - } - - /* CU private */ void nestedAnnotationsRemoved(String collectionName, Collection<? extends NestableAnnotation> removedAnnotations) { - this.fireItemsRemoved(collectionName, removedAnnotations); - } - - - // ***** all annotations ***** - - Annotation setPrimaryAnnotation(String primaryAnnotationName, Iterable<String> supportingAnnotationNames) { - // clear out extraneous annotations - HashSet<String> annotationNames = new HashSet<String>(); - CollectionTools.addAll(annotationNames, supportingAnnotationNames); - if (primaryAnnotationName != null) { - annotationNames.add(primaryAnnotationName); - } - this.retainAnnotations(annotationNames); - this.retainAnnotationContainers(annotationNames); - - // add the primary annotation - if (primaryAnnotationName == null) { - return null; - } - Annotation primaryAnnotation = this.getAnnotation(primaryAnnotationName); - if (primaryAnnotation == null) { - primaryAnnotation = this.buildAnnotation(primaryAnnotationName); - this.annotations.put(primaryAnnotationName, primaryAnnotation); - primaryAnnotation.newAnnotation(); - } - return primaryAnnotation; - } - - private void retainAnnotations(HashSet<String> annotationNames) { - synchronized (this.annotations) { - for (Iterator<Map.Entry<String, Annotation>> stream = this.annotations.entrySet().iterator(); stream.hasNext(); ) { - Map.Entry<String, Annotation> entry = stream.next(); - String annotationName = entry.getKey(); - Annotation annotation = entry.getValue(); - if ( ! annotationNames.contains(annotationName)) { - stream.remove(); - annotation.removeAnnotation(); - } - } - } - } - - private void retainAnnotationContainers(HashSet<String> annotationNames) { - synchronized (this.annotationContainers) { - for (Iterator<Map.Entry<String, CombinationAnnotationContainer>> stream = this.annotationContainers.entrySet().iterator(); stream.hasNext(); ) { - Map.Entry<String, CombinationAnnotationContainer> entry = stream.next(); - String nestableAnnotationName = entry.getKey(); - CombinationAnnotationContainer container = entry.getValue(); - Annotation containerAnnotation = container.getContainerAnnotation(); - if (containerAnnotation != null) { - if ( ! annotationNames.contains(container.getContainerAnnotationName())) { - stream.remove(); - containerAnnotation.removeAnnotation(); - } - } else { - // standalone "nestable" annotation - if ( ! annotationNames.contains(nestableAnnotationName)) { - stream.remove(); - container.getNestedAnnotation(0).removeAnnotation(); - } - } - } - } - } - - /** - * Gather up all the significant AST annotations - * and add or sync the corresponding Dali annotations. - */ - private void syncAnnotations(ASTNode node) { - AnnotationVisitor visitor = new AnnotationVisitor(node); - node.accept(visitor); - this.syncAnnotations(visitor.astAnnotations); - this.syncAnnotationContainers(visitor.astContainerAnnotations, visitor.astStandaloneNestableAnnotations); - } - - private void syncAnnotations(HashMap<String, org.eclipse.jdt.core.dom.Annotation> astAnnotations) { - HashMap<String, Annotation> annotationsToRemove = new HashMap<String, Annotation>(this.annotations); - HashMap<String, Annotation> annotationsToAdd = new HashMap<String, Annotation>(); - for (Map.Entry<String, org.eclipse.jdt.core.dom.Annotation> entry : astAnnotations.entrySet()) { - String annotationName = entry.getKey(); - org.eclipse.jdt.core.dom.Annotation astAnnotation = entry.getValue(); - Annotation annotation = annotationsToRemove.remove(annotationName); - if (annotation == null) { - annotation = this.buildAnnotation(annotationName); - annotation.initialize((CompilationUnit) astAnnotation.getRoot()); // TODO pass the AST annotation! - annotationsToAdd.put(annotationName, annotation); - } else { - annotation.synchronizeWith((CompilationUnit) astAnnotation.getRoot()); // TODO pass the AST annotation! - } - } - - for (String annotationName : annotationsToRemove.keySet()) { - this.annotations.remove(annotationName); - } - this.fireItemsRemoved(ANNOTATIONS_COLLECTION, annotationsToRemove.values()); - - this.annotations.putAll(annotationsToAdd); - this.fireItemsAdded(ANNOTATIONS_COLLECTION, annotationsToAdd.values()); - } - - private void syncAnnotationContainers(HashMap<String, org.eclipse.jdt.core.dom.Annotation> astContainerAnnotations, HashMap<String, org.eclipse.jdt.core.dom.Annotation> astStandaloneNestableAnnotations) { - HashMap<String, CombinationAnnotationContainer> containersToRemove = new HashMap<String, CombinationAnnotationContainer>(this.annotationContainers); - HashMap<String, CombinationAnnotationContainer> containersToAdd = new HashMap<String, CombinationAnnotationContainer>(); - - for (Map.Entry<String, org.eclipse.jdt.core.dom.Annotation> entry : astContainerAnnotations.entrySet()) { - String containerAnnotationName = entry.getKey(); - org.eclipse.jdt.core.dom.Annotation astContainerAnnotation = entry.getValue(); - String nestableAnnotationName = this.getNestableAnnotationName(containerAnnotationName); - CombinationAnnotationContainer container = containersToRemove.remove(nestableAnnotationName); - if (container == null) { - container = new CombinationAnnotationContainer(nestableAnnotationName, containerAnnotationName); - container.initializeFromContainerAnnotation(astContainerAnnotation); - containersToAdd.put(nestableAnnotationName, container); - } else { - container.synchronize(astContainerAnnotation); - } - // if it exists, strip out the standalone annotation - // corresponding to the current container annotation - astStandaloneNestableAnnotations.remove(nestableAnnotationName); - } - - for (Map.Entry<String, org.eclipse.jdt.core.dom.Annotation> entry : astStandaloneNestableAnnotations.entrySet()) { - String nestableAnnotationName = entry.getKey(); - org.eclipse.jdt.core.dom.Annotation astNestableAnnotation = entry.getValue(); - CombinationAnnotationContainer container = containersToRemove.remove(nestableAnnotationName); - if (container == null) { - container = new CombinationAnnotationContainer(nestableAnnotationName); - container.initializeFromStandaloneAnnotation(astNestableAnnotation); - containersToAdd.put(nestableAnnotationName, container); - } else { - container.synchronizeNestableAnnotation(astNestableAnnotation); - } - } - - ArrayList<NestableAnnotation> removedNestableAnnotations = new ArrayList<NestableAnnotation>(); - for (String nestableAnnotationName : containersToRemove.keySet()) { - CombinationAnnotationContainer container = this.annotationContainers.remove(nestableAnnotationName); - CollectionTools.addAll(removedNestableAnnotations, container.getNestedAnnotations()); - } - this.fireItemsRemoved(NESTABLE_ANNOTATIONS_COLLECTION, removedNestableAnnotations); - - ArrayList<NestableAnnotation> addedNestableAnnotations = new ArrayList<NestableAnnotation>(); - for (Map.Entry<String, CombinationAnnotationContainer> entry : containersToAdd.entrySet()) { - String nestableAnnotationName = entry.getKey(); - CombinationAnnotationContainer container = entry.getValue(); - this.annotationContainers.put(nestableAnnotationName, container); - CollectionTools.addAll(addedNestableAnnotations, container.getNestedAnnotations()); - } - this.fireItemsAdded(NESTABLE_ANNOTATIONS_COLLECTION, addedNestableAnnotations); - } - - @SuppressWarnings("unchecked") - public Iterable<Annotation> getTopLevelAnnotations() { - return new CompositeIterable<Annotation>( - this.getAnnotations(), - this.getContainerOrStandaloneNestableAnnotations() - ); - } - - private Iterable<Annotation> getContainerOrStandaloneNestableAnnotations() { - return new TransformationIterable<CombinationAnnotationContainer_, Annotation>(this.getAnnotationContainers(), TOP_LEVEL_ANNOTATION_CONTAINER_TRANSFORMER); - } - - private static final Transformer<CombinationAnnotationContainer_, Annotation> TOP_LEVEL_ANNOTATION_CONTAINER_TRANSFORMER = new TopLevelAnnotationContainerTransformer(); - static final class TopLevelAnnotationContainerTransformer - extends TransformerAdapter<CombinationAnnotationContainer_, Annotation> - { - @Override - public Annotation transform(CombinationAnnotationContainer_ container) { - Annotation containerAnnotation = container.getContainerAnnotation(); - return (containerAnnotation != null) ? containerAnnotation : container.getNestedAnnotation(0); - } - } - - public boolean isAnnotated() { - return ! this.isUnannotated(); - } - - public boolean isUnannotated() { - return this.annotations.isEmpty() && this.annotationContainers.isEmpty(); - } - - public boolean isAnnotatedWithAnyOf(Iterable<String> annotationNames) { - for (Annotation annotation : this.getSignificantAnnotations()) { - if (CollectionTools.contains(annotationNames, annotation.getAnnotationName())) { - return true; - } - } - return false; - } - - /** - * Return the "significant" annotations; - * i.e. ignore the container annotations (they have no semantics). - */ - @SuppressWarnings("unchecked") - private Iterable<Annotation> getSignificantAnnotations() { - return new CompositeIterable<Annotation>( - this.getAnnotations(), - this.getNestableAnnotations() - ); - } - - - // ********** misc ********** - - public TextRange getTextRange(CompilationUnit astRoot) { - // the AST is null for virtual Java attributes - // TODO remove the AST null check once we start storing text ranges - // in the resource model - return (astRoot == null) ? null : this.buildTextRange(this.annotatedElement.getBodyDeclaration(astRoot)); - } - - public TextRange getNameTextRange(CompilationUnit astRoot) { - // the AST is null for virtual Java attributes - // TODO remove the AST null check once we start storing text ranges - // in the resource model - return (astRoot == null) ? null : this.annotatedElement.getNameTextRange(astRoot); - } - - public TextRange getTextRange(String nestableAnnotationName, CompilationUnit astRoot) { - CombinationAnnotationContainer container = this.annotationContainers.get(nestableAnnotationName); - if (container == null) { - return null; - } - Annotation annotation = container.getContainerAnnotation(); - if (annotation == null) { - annotation = container.getNestedAnnotation(0); - } - return annotation.getTextRange(astRoot); - } - - private TextRange buildTextRange(ASTNode astNode) { - return (astNode == null) ? null : ASTTools.buildTextRange(astNode); - } - - - // ********** AST visitor ********** - - /** - * This annotation visitor gathers up all the <em>significant</em> - * (i.e. non-duplicate with a valid name) AST annotations - * container annotations and standalone nestable annotations for its - * {@link #node}. - */ - /* CU private */ class AnnotationVisitor - extends ASTVisitor - { - private final ASTNode node; - final HashMap<String, org.eclipse.jdt.core.dom.Annotation> astAnnotations = new HashMap<String, org.eclipse.jdt.core.dom.Annotation>(); - final HashMap<String, org.eclipse.jdt.core.dom.Annotation> astContainerAnnotations = new HashMap<String, org.eclipse.jdt.core.dom.Annotation>(); - final HashMap<String, org.eclipse.jdt.core.dom.Annotation> astStandaloneNestableAnnotations = new HashMap<String, org.eclipse.jdt.core.dom.Annotation>(); - - AnnotationVisitor(ASTNode node) { - super(); - this.node = node; - } - - @Override - public boolean visit(SingleMemberAnnotation annotation) { - return this.visit_(annotation); - } - - @Override - public boolean visit(NormalAnnotation annotation) { - return this.visit_(annotation); - } - - @Override - public boolean visit(MarkerAnnotation annotation) { - return this.visit_(annotation); - } - - /** - * Process only the annotations for the {@link #node}; ignore any children. - */ - private boolean visit_(org.eclipse.jdt.core.dom.Annotation astAnnotation) { - if (astAnnotation.getParent() == this.node) { - this.visitChildAnnotation(astAnnotation); - } - return false; // => do *not* visit children - } - - /** - * For each annotation name we save only the first one - * and ignore duplicates. - */ - private void visitChildAnnotation(org.eclipse.jdt.core.dom.Annotation astAnnotation) { - String astAnnotationName = this.resolveAnnotationName(astAnnotation); - if (astAnnotationName == null) { - return; - } - // check whether the annotation is a valid container annotation first - // because container validations are also valid annotations - // TODO remove container annotations from list of annotations??? - if (SourceAnnotatedElement.this.annotationIsValidContainer(astAnnotationName)) { - if (this.astContainerAnnotations.get(astAnnotationName) == null) { - this.astContainerAnnotations.put(astAnnotationName, astAnnotation); - } - } - else if (SourceAnnotatedElement.this.annotationIsValid(astAnnotationName)) { - if (this.astAnnotations.get(astAnnotationName) == null) { - this.astAnnotations.put(astAnnotationName, astAnnotation); - } - } - else if (SourceAnnotatedElement.this.annotationIsValidNestable(astAnnotationName)) { - if (this.astStandaloneNestableAnnotations.get(astAnnotationName) == null) { - this.astStandaloneNestableAnnotations.put(astAnnotationName, astAnnotation); - } - } - } - - /** - * Return the specified annotation's (fully-qualified) class name. - */ - private String resolveAnnotationName(org.eclipse.jdt.core.dom.Annotation astAnnotation) { - IAnnotationBinding annotationBinding = astAnnotation.resolveAnnotationBinding(); - if (annotationBinding == null) { - return null; - } - ITypeBinding annotationTypeBinding = annotationBinding.getAnnotationType(); - return (annotationTypeBinding == null) ? null : annotationTypeBinding.getQualifiedName(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, node); - } - } - - - // ********** annotation container ********** - - /** - * Use this interface to make static references to the annotation container. - * Sort of a hack.... - * @see AnnotationContainerNestedAnnotationsTransformer - * @see TopLevelAnnotationContainerTransformer - */ - private interface CombinationAnnotationContainer_ { - Annotation getContainerAnnotation(); - ListIterable<NestableAnnotation> getNestedAnnotations(); - NestableAnnotation getNestedAnnotation(int index); - } - - - /** - * Annotation container for top-level "combination" annotations that allow - * a single nestable annotation to stand alone, outside of its standard - * container annotation, and represent a single-element array. - */ - /* CU private */ class CombinationAnnotationContainer - extends AnnotationContainer<NestableAnnotation> - implements CombinationAnnotationContainer_ - { - /** - * The name of the nestable annotation that be either a top-level - * standalone annotation or nested within the container annotation. - */ - private final String nestableAnnotationName; - - /** - * The name of the container annotation, used to build the - * {@link #containerAnnotation container annotation} as necessary. - */ - private final String containerAnnotationName; - - /** - * This is <code>null</code> if the container annotation does not exist - * but the standalone nestable annotation does. - */ - private Annotation containerAnnotation; - - - CombinationAnnotationContainer(String nestableAnnotationName) { - this(nestableAnnotationName, SourceAnnotatedElement.this.getContainerAnnotationName(nestableAnnotationName)); - } - - CombinationAnnotationContainer(String nestableAnnotationName, String containerAnnotationName) { - super(); - if ((nestableAnnotationName == null) || (containerAnnotationName == null)) { - throw new NullPointerException(); - } - this.nestableAnnotationName = nestableAnnotationName; - this.containerAnnotationName = containerAnnotationName; - } - - @Override - public void initializeFromContainerAnnotation(org.eclipse.jdt.core.dom.Annotation astContainerAnnotation) { - super.initializeFromContainerAnnotation(astContainerAnnotation); - this.containerAnnotation = this.buildContainerAnnotation(this.containerAnnotationName); - } - - private Annotation buildContainerAnnotation(String name) { - return SourceAnnotatedElement.this.buildAnnotation(name); - } - - public Annotation getContainerAnnotation() { - return this.containerAnnotation; - } - - String getContainerAnnotationName() { - return this.containerAnnotationName; - } - - /** - * Return the element name of the nested annotations - */ - @Override - protected String getElementName() { - return SourceAnnotatedElement.this.getNestableElementName(this.nestableAnnotationName); - } - - /** - * Return the nested annotation name - */ - @Override - protected String getNestedAnnotationName() { - return this.nestableAnnotationName; - } - - /** - * Return a new nested annotation at the given index - */ - @Override - protected NestableAnnotation buildNestedAnnotation(int index) { - return SourceAnnotatedElement.this.buildNestableAnnotation(this.nestableAnnotationName, index); - } - - void initializeFromStandaloneAnnotation(org.eclipse.jdt.core.dom.Annotation astStandaloneNestableAnnotation) { - NestableAnnotation nestedAnnotation = this.buildNestedAnnotation(0); - this.nestedAnnotations.add(nestedAnnotation); - nestedAnnotation.initialize((CompilationUnit) astStandaloneNestableAnnotation.getRoot()); // TODO pass the AST annotation! - } - - /** - * If we get here, the container annotation is either empty or does - * <em>not</em> exist but the standalone nestable annotation does. - */ - void synchronizeNestableAnnotation(org.eclipse.jdt.core.dom.Annotation astStandaloneNestableAnnotation) { - this.containerAnnotation = null; - if (this.nestedAnnotations.size() == 0) { - // container annotation is present but empty - this.syncAddNestedAnnotation(astStandaloneNestableAnnotation); - } else { - this.nestedAnnotations.get(0).synchronizeWith((CompilationUnit) astStandaloneNestableAnnotation.getRoot()); // TODO pass the AST annotation! - // remove any remaining nested annotations - this.syncRemoveNestedAnnotations(1); - } - } - - @Override - public NestableAnnotation addNestedAnnotation(int index) { - if ((this.nestedAnnotations.size() == 1) && (this.containerAnnotation == null)) { - this.containerAnnotation = this.buildContainerAnnotation(this.containerAnnotationName); - } - return super.addNestedAnnotation(index); - } - - @Override - public NestableAnnotation removeNestedAnnotation(int index) { - if (this.nestedAnnotations.size() == 2) { - this.containerAnnotation = null; - } - return super.removeNestedAnnotation(index); - } - - /** - * <strong>NB:</strong> This is a <em>collection</em> name. - * @see #nestedAnnotationAdded(int, NestableAnnotation) - * @see #nestedAnnotationsRemoved(int, List) - */ - @Override - protected String getNestedAnnotationsListName() { - throw new UnsupportedOperationException(); - } - - /** - * <strong>NB:</strong> Convert to a <em>collection</em> change. - */ - @Override - void nestedAnnotationAdded(int index, NestableAnnotation addedAnnotation) { - SourceAnnotatedElement.this.nestedAnnotationAdded(NESTABLE_ANNOTATIONS_COLLECTION, addedAnnotation); - } - - /** - * <strong>NB:</strong> Convert to a <em>collection</em> change. - */ - @Override - void nestedAnnotationsRemoved(int index, List<NestableAnnotation> removedAnnotations) { - SourceAnnotatedElement.this.nestedAnnotationsRemoved(NESTABLE_ANNOTATIONS_COLLECTION, removedAnnotations); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAnnotation.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAnnotation.java deleted file mode 100644 index a7eaef1f9e..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAnnotation.java +++ /dev/null @@ -1,220 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.resource.java.source; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.internal.utility.jdt.ASTTools; -import org.eclipse.jpt.common.core.internal.utility.jdt.AnnotatedElementAnnotationElementAdapter; -import org.eclipse.jpt.common.core.internal.utility.jdt.ConversionDeclarationAnnotationElementAdapter; -import org.eclipse.jpt.common.core.internal.utility.jdt.ElementAnnotationAdapter; -import org.eclipse.jpt.common.core.resource.java.Annotation; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.core.resource.java.NestableAnnotation; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.IndexedAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.IndexedDeclarationAnnotationElementAdapter; - -/** - * some common state and behavior for Java source annotations; - * and lots of convenience methods - */ -public abstract class SourceAnnotation - extends SourceNode - implements Annotation -{ - protected final AnnotatedElement annotatedElement; - - protected final DeclarationAnnotationAdapter daa; - - protected final AnnotationAdapter annotationAdapter; - - - /** - * constructor for straight member annotation - */ - protected SourceAnnotation(JavaResourceNode parent, AnnotatedElement element, DeclarationAnnotationAdapter daa) { - this(parent, element, daa, new ElementAnnotationAdapter(element, daa)); - } - - /** - * constructor for nested annotation (typically) - */ - protected SourceAnnotation(JavaResourceNode parent, AnnotatedElement element, DeclarationAnnotationAdapter daa, AnnotationAdapter annotationAdapter) { - super(parent); - this.annotatedElement = element; - this.daa = daa; - this.annotationAdapter = annotationAdapter; - } - - - // ********** JavaResourceNode implementation ********** - - public TextRange getTextRange(CompilationUnit astRoot) { - return this.getAnnotationTextRange(astRoot); - } - - - // ********** Annotation implementation ********** - - public org.eclipse.jdt.core.dom.Annotation getAstAnnotation(CompilationUnit astRoot) { - return this.annotationAdapter.getAnnotation(astRoot); - } - - public void newAnnotation() { - this.annotationAdapter.newMarkerAnnotation(); - } - - public void removeAnnotation() { - this.annotationAdapter.removeAnnotation(); - } - - public boolean isUnset() { - return true; - } - - - // ********** convenience methods ********** - - protected DeclarationAnnotationElementAdapter<String> buildStringElementAdapter(String elementName) { - return ConversionDeclarationAnnotationElementAdapter.forStrings(this.daa, elementName); - } - - protected DeclarationAnnotationElementAdapter<Boolean> buildBooleanElementAdapter(String elementName) { - return ConversionDeclarationAnnotationElementAdapter.forBooleans(this.daa, elementName); - } - - protected DeclarationAnnotationElementAdapter<Integer> buildIntegerElementAdapter(String elementName) { - return ConversionDeclarationAnnotationElementAdapter.forNumbers(this.daa, elementName); - } - - protected AnnotationElementAdapter<String> buildStringElementAdapter(DeclarationAnnotationElementAdapter<String> daea) { - return new AnnotatedElementAnnotationElementAdapter<String>(this.annotatedElement, daea); - } - - protected AnnotationElementAdapter<Boolean> buildBooleanElementAdapter(DeclarationAnnotationElementAdapter<Boolean> daea) { - return new AnnotatedElementAnnotationElementAdapter<Boolean>(this.annotatedElement, daea); - } - - protected AnnotationElementAdapter<Integer> buildIntegerElementAdapter(DeclarationAnnotationElementAdapter<Integer> daea) { - return new AnnotatedElementAnnotationElementAdapter<Integer>(this.annotatedElement, daea); - } - - /** - /** - * Return the text range corresponding to the annotation. - * If the annotation is missing, return <code>null</code>. - */ - protected TextRange getAnnotationTextRange(CompilationUnit astRoot) { - // the AST is null for virtual Java attributes - // TODO remove the AST null check once we start storing text ranges - // in the resource model - return (astRoot == null) ? null : this.buildTextRange(this.getAstAnnotation(astRoot)); - } - - /** - * Convenience method. - * Return the text range corresponding to the specified element. - * If the specified element is missing, return the annotation's text range instead. - */ - protected TextRange getElementTextRange(DeclarationAnnotationElementAdapter<?> elementAdapter, CompilationUnit astRoot) { - return this.getElementTextRange(this.getAnnotationElementTextRange(elementAdapter, astRoot), astRoot); - } - - /** - * Convenience method. If the specified element text range is null - * return the member's text range instead. - */ - protected TextRange getElementTextRange(TextRange elementTextRange, CompilationUnit astRoot) { - return (elementTextRange != null) ? elementTextRange : this.getAnnotationTextRange(astRoot); - } - - /** - * Convenience method. Return whether the specified position exists and - * touches the specified element. - */ - protected boolean elementTouches(DeclarationAnnotationElementAdapter<?> elementAdapter, int pos, CompilationUnit astRoot) { - return this.textRangeTouches(this.getAnnotationElementTextRange(elementAdapter, astRoot), pos); - } - - /** - * Convenience method. Return whether the specified text range is not - * null (meaning the corresponding AST node exists) and the specified position touches it. - */ - protected boolean textRangeTouches(TextRange textRange, int pos) { - return (textRange != null) && textRange.touches(pos); - } - - /** - * Return the text range corresponding to the specified element. - * If the element is missing, return null. - */ - protected TextRange getAnnotationElementTextRange(DeclarationAnnotationElementAdapter<?> adapter, CompilationUnit astRoot) { - // the AST is null for virtual Java attributes - // TODO remove the AST null check once we start storing text ranges - // in the resource model - return (astRoot == null) ? null : this.buildTextRange(this.getAnnotationElementExpression(adapter, astRoot)); - } - - /** - * Return the specified AST DOM element. - */ - protected Expression getAnnotationElementExpression(DeclarationAnnotationElementAdapter<?> adapter, CompilationUnit astRoot) { - return adapter.getExpression(this.annotatedElement.getModifiedDeclaration(astRoot)); - } - - /** - * Return the text range corresponding to the expression at the specified - * index of the element's array. - * @exception ArrayIndexOutOfBoundsException if the index is out of range - */ - protected TextRange selectAnnotationElementTextRange(IndexedDeclarationAnnotationElementAdapter<?> adapter, int index, CompilationUnit astRoot) { - // the AST is null for virtual Java attributes - // TODO remove the AST null check once we start storing text ranges - // in the resource model - return (astRoot == null) ? null : this.buildTextRange(this.selectAnnotationElementExpression(adapter, index, astRoot)); - } - - /** - * Return the expression at the specified index of the element's array. - */ - protected Expression selectAnnotationElementExpression(IndexedDeclarationAnnotationElementAdapter<?> adapter, int index, CompilationUnit astRoot) { - return adapter.selectExpression(this.annotatedElement.getModifiedDeclaration(astRoot), index); - } - - /** - * Return the text range corresponding to the specified AST node. - * Return <code>null</code> if the AST node is <code>null</code>. - */ - protected TextRange buildTextRange(ASTNode astNode) { - return (astNode == null) ? null : ASTTools.buildTextRange(astNode); - } - - - // ********** NestableAnnotation implementation ********** - - /** - * Convenience implementation of method from {@link NestableAnnotation} interface - * for subclasses. - */ - public void moveAnnotation(int newIndex) { - this.getIndexedAnnotationAdapter().moveAnnotation(newIndex); - } - - private IndexedAnnotationAdapter getIndexedAnnotationAdapter() { - return (IndexedAnnotationAdapter) this.annotationAdapter; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAttribute.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAttribute.java deleted file mode 100644 index 4802d09239..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceAttribute.java +++ /dev/null @@ -1,396 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core.internal.resource.java.source; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Vector; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IBinding; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAttribute; -import org.eclipse.jpt.common.core.resource.java.JavaResourceType; -import org.eclipse.jpt.common.core.utility.jdt.Attribute; -import org.eclipse.jpt.common.utility.internal.ClassName; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; - -/** - * Java source attribute (field or method) - */ -abstract class SourceAttribute<A extends Attribute> - extends SourceMember<A> - implements JavaResourceAttribute -{ - private int modifiers; - - private String typeName; - - private boolean typeIsInterface; - - private boolean typeIsEnum; - - private boolean typeIsArray; - - private int typeArrayDimensionality; - - private String typeArrayComponentTypeName; - - private final Vector<String> typeSuperclassNames = new Vector<String>(); - - private final Vector<String> typeInterfaceNames = new Vector<String>(); - - private final Vector<String> typeTypeArgumentNames = new Vector<String>(); - - - protected SourceAttribute(JavaResourceType parent, A attribute){ - super(parent, attribute); - } - - @Override - protected void initialize(IBinding binding) { - super.initialize(binding); - this.modifiers = this.buildModifiers(binding); - } - - /** - * subclasses need to call this method - */ - protected void initialize(ITypeBinding attributeTypeBinding) { - this.typeName = this.buildTypeName(attributeTypeBinding); - this.typeIsInterface = this.buildTypeIsInterface(attributeTypeBinding); - this.typeIsEnum = this.buildTypeIsEnum(attributeTypeBinding); - this.typeIsArray = this.buildTypeIsArray(attributeTypeBinding); - this.typeArrayDimensionality = buildTypeArrayDimensionality(attributeTypeBinding); - this.typeArrayComponentTypeName = buildTypeArrayComponentTypeName(attributeTypeBinding); - this.typeSuperclassNames.addAll(this.buildTypeSuperclassNames(attributeTypeBinding)); - this.typeInterfaceNames.addAll(this.buildTypeInterfaceNames(attributeTypeBinding)); - this.typeTypeArgumentNames.addAll(this.buildTypeTypeArgumentNames(attributeTypeBinding)); - } - - - // ******** overrides ******** - - @Override - public void resolveTypes(CompilationUnit astRoot) { - super.resolveTypes(astRoot); - this.resolveTypes(this.getTypeBinding(astRoot));//build once, minor performance tweak for major benefit - } - - protected void resolveTypes(ITypeBinding typeBinding) { - this.syncTypeName(this.buildTypeName(typeBinding)); - this.syncTypeArrayComponentTypeName(this.buildTypeArrayComponentTypeName(typeBinding)); - this.syncTypeSuperclassNames(this.buildTypeSuperclassNames(typeBinding)); - this.syncTypeInterfaceNames(this.buildTypeInterfaceNames(typeBinding)); - this.syncTypeTypeArgumentNames(this.buildTypeTypeArgumentNames(typeBinding)); - } - - /** - * subclasses need to call this method - */ - protected void synchronizeWith(ITypeBinding attributeTypeBinding) { - this.syncTypeName(this.buildTypeName(attributeTypeBinding)); - this.syncTypeIsInterface(this.buildTypeIsInterface(attributeTypeBinding)); - this.syncTypeIsEnum(this.buildTypeIsEnum(attributeTypeBinding)); - this.syncTypeIsArray(this.buildTypeIsArray(attributeTypeBinding)); - this.syncTypeArrayDimensionality(this.buildTypeArrayDimensionality(attributeTypeBinding)); - this.syncTypeArrayComponentTypeName(this.buildTypeArrayComponentTypeName(attributeTypeBinding)); - this.syncTypeSuperclassNames(this.buildTypeSuperclassNames(attributeTypeBinding)); - this.syncTypeInterfaceNames(this.buildTypeInterfaceNames(attributeTypeBinding)); - this.syncTypeTypeArgumentNames(this.buildTypeTypeArgumentNames(attributeTypeBinding)); - } - - @Override - protected void synchronizeWith(IBinding binding) { - super.synchronizeWith(binding); - this.syncModifiers(this.buildModifiers(binding)); - } - - @Override - public void toString(StringBuilder sb) { - sb.append(this.getName()); - } - - - // ******** JavaResourceAttribute implementation ******** - - @Override - public JavaResourceType getParent() { - return (JavaResourceType) super.getParent(); - } - - public JavaResourceType getResourceType() { - return this.getParent(); - } - - public String getName() { - return this.annotatedElement.getAttributeName(); - } - - public boolean typeIsSubTypeOf(String tn) { - if (this.typeName == null) { - return false; - } - return this.typeName.equals(tn) - || this.typeInterfaceNames.contains(tn) - || this.typeSuperclassNames.contains(tn); - } - - public boolean typeIsVariablePrimitive() { - return (this.typeName != null) && ClassName.isVariablePrimitive(this.typeName); - } - - protected ITypeBinding getTypeBinding(CompilationUnit astRoot) { - return this.annotatedElement.getTypeBinding(astRoot); - } - - - // ***** modifiers - public int getModifiers() { - return this.modifiers; - } - - private void syncModifiers(int astModifiers) { - int old = this.modifiers; - this.modifiers = astModifiers; - this.firePropertyChanged(MODIFIERS_PROPERTY, old, astModifiers); - } - - /** - * zero seems like a reasonable default... - */ - private int buildModifiers(IBinding binding) { - return (binding == null) ? 0 : binding.getModifiers(); - } - - // ***** type name - public String getTypeName() { - return this.typeName; - } - - private void syncTypeName(String astTypeName) { - String old = this.typeName; - this.typeName = astTypeName; - this.firePropertyChanged(TYPE_NAME_PROPERTY, old, astTypeName); - } - - /** - * this can be an array (e.g. "java.lang.String[]"); - * but no generic type arguments - */ - private String buildTypeName(ITypeBinding typeBinding) { - if (typeBinding == null) { - return null; - } - - typeBinding = typeBinding.getErasure(); - String tbName = typeBinding.getTypeDeclaration().getQualifiedName(); - return (tbName.length() == 0) ? null : tbName; - } - - // ***** type is interface - public boolean typeIsInterface() { - return this.typeIsInterface; - } - - private void syncTypeIsInterface(boolean astTypeIsInterface) { - boolean old = this.typeIsInterface; - this.typeIsInterface = astTypeIsInterface; - this.firePropertyChanged(TYPE_IS_INTERFACE_PROPERTY, old, astTypeIsInterface); - } - - private boolean buildTypeIsInterface(ITypeBinding typeBinding) { - return (typeBinding != null) && ( ! typeBinding.isArray()) && typeBinding.isInterface(); - } - - // ***** type is enum - public boolean typeIsEnum() { - return this.typeIsEnum; - } - - private void syncTypeIsEnum(boolean astTypeIsEnum) { - boolean old = this.typeIsEnum; - this.typeIsEnum = astTypeIsEnum; - this.firePropertyChanged(TYPE_IS_ENUM_PROPERTY, old, astTypeIsEnum); - } - - private boolean buildTypeIsEnum(ITypeBinding typeBinding) { - return (typeBinding != null) && ( ! typeBinding.isArray()) && typeBinding.isEnum(); - } - - // ***** type is array - public boolean typeIsArray() { - return this.typeIsArray; - } - - private void syncTypeIsArray(boolean astTypeIsArray) { - boolean old = this.typeIsArray; - this.typeIsArray = astTypeIsArray; - this.firePropertyChanged(TYPE_IS_ARRAY_PROPERTY, old, astTypeIsArray); - } - - private boolean buildTypeIsArray(ITypeBinding typeBinding) { - return (typeBinding != null) && typeBinding.isArray(); - } - - // ***** type array dimensionality - public int getTypeArrayDimensionality() { - return this.typeArrayDimensionality; - } - - private void syncTypeArrayDimensionality(int astTypeArrayDimensionality) { - int old = this.typeArrayDimensionality; - this.typeArrayDimensionality = astTypeArrayDimensionality; - firePropertyChanged(TYPE_ARRAY_DIMENSIONALITY_PROPERTY, old, astTypeArrayDimensionality); - } - - private int buildTypeArrayDimensionality(ITypeBinding typeBinding) { - return (typeBinding == null) ? 0 : typeBinding.getDimensions(); - } - - // ***** type array component type name - public String getTypeArrayComponentTypeName() { - return this.typeArrayComponentTypeName; - } - - private void syncTypeArrayComponentTypeName(String astTypeArrayComponentTypeName) { - String old = this.typeArrayComponentTypeName; - this.typeArrayComponentTypeName = astTypeArrayComponentTypeName; - firePropertyChanged(TYPE_ARRAY_COMPONENT_TYPE_NAME_PROPERTY, old, astTypeArrayComponentTypeName); - } - - private String buildTypeArrayComponentTypeName(ITypeBinding typeBinding) { - if (typeBinding == null || ! typeBinding.isArray()) { - return null; - } - - // the component type of String[][] is actually String[], whereas we want String - while (typeBinding.isArray()) { - typeBinding = typeBinding.getComponentType(); - - if (typeBinding == null) { - return null; - } - } - - // a type variable is what is declared by a generic type; - // e.g. "E" is a type variable declared by the generic type "Collection" in - // public interface Collection<E> - if (typeBinding.isTypeVariable()) { - // e.g. "E extends Number" has an erasure of "Number" - typeBinding = typeBinding.getErasure(); - } - String tbName = typeBinding.getTypeDeclaration().getQualifiedName(); - return (tbName.length() == 0) ? null : tbName; - } - - // ***** type superclass hierarchy - public ListIterable<String> getTypeSuperclassNames() { - return new LiveCloneListIterable<String>(this.typeSuperclassNames); - } - - private void syncTypeSuperclassNames(List<String> astTypeSuperclassNames) { - this.synchronizeList(astTypeSuperclassNames, this.typeSuperclassNames, TYPE_SUPERCLASS_NAMES_LIST); - } - - private List<String> buildTypeSuperclassNames(ITypeBinding typeBinding) { - if (typeBinding == null) { - return Collections.emptyList(); - } - ArrayList<String> names = new ArrayList<String>(); - typeBinding = typeBinding.getSuperclass(); - while (typeBinding != null) { - names.add(typeBinding.getErasure().getQualifiedName()); - typeBinding = typeBinding.getSuperclass(); - } - return names; - } - - // ***** type interface hierarchy - public Iterable<String> getTypeInterfaceNames() { - return new LiveCloneIterable<String>(this.typeInterfaceNames); - } - -// private boolean typeInterfaceNamesContains(String interfaceName) { -// return this.typeInterfaceNames.contains(interfaceName); -// } -// - private void syncTypeInterfaceNames(Collection<String> astTypeInterfaceNames) { - this.synchronizeCollection(astTypeInterfaceNames, this.typeInterfaceNames, TYPE_INTERFACE_NAMES_COLLECTION); - } - - private Collection<String> buildTypeInterfaceNames(ITypeBinding typeBinding) { - if (typeBinding == null) { - return Collections.emptySet(); - } - HashSet<String> names = new HashSet<String>(); - while (typeBinding != null) { - this.addInterfaceNamesTo(typeBinding, names); - typeBinding = typeBinding.getSuperclass(); - } - return names; - } - - private void addInterfaceNamesTo(ITypeBinding typeBinding, HashSet<String> names) { - for (ITypeBinding interfaceBinding : typeBinding.getInterfaces()) { - names.add(interfaceBinding.getTypeDeclaration().getErasure().getQualifiedName()); - this.addInterfaceNamesTo(interfaceBinding, names); // recurse - } - } - - // ***** type type argument names - public ListIterable<String> getTypeTypeArgumentNames() { - return new LiveCloneListIterable<String>(this.typeTypeArgumentNames); - } - - public int getTypeTypeArgumentNamesSize() { - return this.typeTypeArgumentNames.size(); - } - - public String getTypeTypeArgumentName(int index) { - return this.typeTypeArgumentNames.get(index); - } - - private void syncTypeTypeArgumentNames(List<String> astTypeTypeArgumentNames) { - this.synchronizeList(astTypeTypeArgumentNames, this.typeTypeArgumentNames, TYPE_TYPE_ARGUMENT_NAMES_LIST); - } - - /** - * these types can be arrays (e.g. "java.lang.String[]"); - * but they won't have any further nested generic type arguments - * (e.g. "java.util.Collection<java.lang.String>") - */ - private List<String> buildTypeTypeArgumentNames(ITypeBinding typeBinding) { - if (typeBinding == null) { - return Collections.emptyList(); - } - - ITypeBinding[] typeArguments = typeBinding.getTypeArguments(); - if (typeArguments.length == 0) { - return Collections.emptyList(); - } - - ArrayList<String> names = new ArrayList<String>(typeArguments.length); - for (ITypeBinding typeArgument : typeArguments) { - if (typeArgument == null) { - names.add(null); - } else { - // e.g. "? extends Number" has an erasure of "Number" - ITypeBinding erasure = typeArgument.getErasure(); - names.add(erasure.getTypeDeclaration().getQualifiedName()); - } - } - return names; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceCompilationUnit.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceCompilationUnit.java deleted file mode 100644 index bf69665e48..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceCompilationUnit.java +++ /dev/null @@ -1,177 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core.internal.resource.java.source; - -import org.eclipse.core.resources.IFile; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.JptResourceModelListener; -import org.eclipse.jpt.common.core.internal.utility.jdt.ASTTools; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.utility.command.CommandExecutor; -import org.eclipse.jpt.common.utility.internal.ListenerList; - -/** - * Java compilation unit (source file) - */ -public abstract class SourceCompilationUnit - extends SourceNode - implements JavaResourceCompilationUnit -{ - /** JDT compilation unit */ - final ICompilationUnit compilationUnit; - - /** pluggable annotation provider */ - private final AnnotationProvider annotationProvider; - - /** improved annotation formatting */ - private final AnnotationEditFormatter annotationEditFormatter; - - /** pluggable executor that allows the document to be modified on another thread */ - private final CommandExecutor modifySharedDocumentCommandExecutor; - - /** listeners notified whenever the resource model changes */ - private final ListenerList<JptResourceModelListener> resourceModelListenerList; - - - // ********** construction ********** - - protected SourceCompilationUnit( - ICompilationUnit compilationUnit, - AnnotationProvider annotationProvider, - AnnotationEditFormatter annotationEditFormatter, - CommandExecutor modifySharedDocumentCommandExecutor) { - super(null); // the JPA compilation unit is the root of its sub-tree - this.compilationUnit = compilationUnit; - this.annotationProvider = annotationProvider; - this.annotationEditFormatter = annotationEditFormatter; - this.modifySharedDocumentCommandExecutor = modifySharedDocumentCommandExecutor; - this.resourceModelListenerList = new ListenerList<JptResourceModelListener>(JptResourceModelListener.class); - } - - public void initialize(CompilationUnit astRoot) { - // never called? - } - - void openCompilationUnit() { - try { - this.compilationUnit.open(null); - } catch (JavaModelException ex) { - // do nothing - we just won't have a primary type in this case - } - } - - void closeCompilationUnit() { - try { - this.compilationUnit.close(); - } catch (JavaModelException ex) { - // hmmm - } - } - - - // ********** AbstractJavaResourceNode overrides ********** - - @Override - protected boolean requiresParent() { - return false; - } - - @Override - public JavaResourceCompilationUnit getRoot() { - return this; - } - - @Override - public IFile getFile() { - return (IFile) this.compilationUnit.getResource(); - } - - @Override - public AnnotationProvider getAnnotationProvider() { - return this.annotationProvider; - } - - - // ********** JavaResourceNode implementation ********** - - public TextRange getTextRange(CompilationUnit astRoot) { - return null; - } - - - // ********** JavaResourceNode.Root implementation ********** - - public void resourceModelChanged() { - for (JptResourceModelListener listener : this.resourceModelListenerList.getListeners()) { - listener.resourceModelChanged(this); - } - } - - - // ********** JavaResourceCompilationUnit implementation ********** - - public ICompilationUnit getCompilationUnit() { - return this.compilationUnit; - } - - public CommandExecutor getModifySharedDocumentCommandExecutor() { - return this.modifySharedDocumentCommandExecutor; - } - - public AnnotationEditFormatter getAnnotationEditFormatter() { - return this.annotationEditFormatter; - } - - @Override - public CompilationUnit buildASTRoot() { - return ASTTools.buildASTRoot(this.compilationUnit); - } - - - // ********** JpaResourceModel implementation ********** - - public void addResourceModelListener(JptResourceModelListener listener) { - this.resourceModelListenerList.add(listener); - } - - public void removeResourceModelListener(JptResourceModelListener listener) { - this.resourceModelListenerList.remove(listener); - } - - - // ********** Java changes ********** - - public void synchronizeWithJavaSource() { - this.synchronizeWith(this.buildASTRoot()); - } - - - // ********** internal ********** - - String getCompilationUnitName() { - return this.removeJavaExtension(this.compilationUnit.getElementName()); - } - - private String removeJavaExtension(String fileName) { - int index = fileName.lastIndexOf(".java"); //$NON-NLS-1$ - return (index == -1) ? fileName : fileName.substring(0, index); - } - - @Override - public void toString(StringBuilder sb) { - sb.append(this.getCompilationUnitName()); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceEnum.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceEnum.java deleted file mode 100644 index edc6b44065..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceEnum.java +++ /dev/null @@ -1,220 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2011 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.common.core.internal.resource.java.source; - -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Vector; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.EnumConstantDeclaration; -import org.eclipse.jdt.core.dom.EnumDeclaration; -import org.eclipse.jpt.common.core.internal.utility.jdt.JDTEnum; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.core.resource.java.JavaResourceEnum; -import org.eclipse.jpt.common.core.resource.java.JavaResourceEnumConstant; -import org.eclipse.jpt.common.core.resource.java.JavaResourceType; -import org.eclipse.jpt.common.core.utility.jdt.Enum; -import org.eclipse.jpt.common.core.utility.jdt.Type; -import org.eclipse.jpt.common.utility.internal.SimpleIntReference; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; -import org.eclipse.jpt.common.utility.internal.iterables.SingleElementIterable; - -/** - * Java source type - */ -final class SourceEnum - extends SourceAbstractType<Enum> - implements JavaResourceEnum -{ - - private final Vector<JavaResourceEnumConstant> enumConstants; - - - - // ********** construction/initialization ********** - - /** - * build top-level type - */ - static JavaResourceEnum newInstance( - JavaResourceCompilationUnit javaResourceCompilationUnit, - EnumDeclaration enumDeclaration, - CompilationUnit astRoot) { - Enum _enum = new JDTEnum( - enumDeclaration, - javaResourceCompilationUnit.getCompilationUnit(), - javaResourceCompilationUnit.getModifySharedDocumentCommandExecutor(), - javaResourceCompilationUnit.getAnnotationEditFormatter()); - JavaResourceEnum jre = new SourceEnum(javaResourceCompilationUnit, _enum); - jre.initialize(astRoot); - return jre; - } - - /** - * build nested type - */ - protected static JavaResourceEnum newInstance( - JavaResourceCompilationUnit javaResourceCompilationUnit, - Type declaringType, - EnumDeclaration enumDeclaration, - int occurrence, - CompilationUnit astRoot) { - Enum _enum = new JDTEnum( - declaringType, - enumDeclaration, - occurrence, - javaResourceCompilationUnit.getCompilationUnit(), - javaResourceCompilationUnit.getModifySharedDocumentCommandExecutor(), - javaResourceCompilationUnit.getAnnotationEditFormatter()); - JavaResourceEnum jre = new SourceEnum(javaResourceCompilationUnit, _enum); - jre.initialize(astRoot); - return jre; - } - - private SourceEnum(JavaResourceCompilationUnit javaResourceCompilationUnit, Enum _enum) { - super(javaResourceCompilationUnit, _enum); - this.enumConstants = new Vector<JavaResourceEnumConstant>(); - } - - @Override - public void initialize(CompilationUnit astRoot) { - super.initialize(astRoot); - this.initializeEnumConstants(astRoot); - } - - - // ********** update ********** - - @Override - public void synchronizeWith(CompilationUnit astRoot) { - super.synchronizeWith(astRoot); - this.syncEnumConstants(astRoot); - } - - - // ********** SourceAnnotatedElement implementation ********** - - @Override - public void resolveTypes(CompilationUnit astRoot) { - super.resolveTypes(astRoot); - - for (JavaResourceEnumConstant enumConstant : this.getEnumConstants()) { - enumConstant.resolveTypes(astRoot); - } - } - - - // ******** JavaResourceAnnotatedElement implementation ******** - - public Kind getKind() { - return Kind.ENUM; - } - - - // ********** enum constants ********** - - public Iterable<JavaResourceEnumConstant> getEnumConstants() { - return new LiveCloneIterable<JavaResourceEnumConstant>(this.enumConstants); - } - - private void addEnumConstant(JavaResourceEnumConstant enumConstant) { - this.addItemToCollection(enumConstant, this.enumConstants, ENUM_CONSTANTS_COLLECTION); - } - - private JavaResourceEnumConstant getEnumConstant(String fieldName, int occurrence) { - for (JavaResourceEnumConstant enumConstant : this.getEnumConstants()) { - if (enumConstant.isFor(fieldName, occurrence)) { - return enumConstant; - } - } - return null; - } - - private void removeEnumConstants(Collection<JavaResourceEnumConstant> remove) { - this.removeItemsFromCollection(remove, this.enumConstants, ENUM_CONSTANTS_COLLECTION); - } - - private void initializeEnumConstants(CompilationUnit astRoot) { - EnumConstantDeclaration[] enumConstantDeclarations = this.annotatedElement.getEnumConstants(astRoot); - CounterMap counters = new CounterMap(enumConstantDeclarations.length); - for (EnumConstantDeclaration enumConstantDeclaration : enumConstantDeclarations) { - String constantName = enumConstantDeclaration.getName().getFullyQualifiedName(); - int occurrence = counters.increment(constantName); - this.enumConstants.add(this.buildEnumConstant(constantName, occurrence, astRoot)); - } - } - - private void syncEnumConstants(CompilationUnit astRoot) { - EnumConstantDeclaration[] enumConstantDeclarations = this.annotatedElement.getEnumConstants(astRoot); - CounterMap counters = new CounterMap(enumConstantDeclarations.length); - HashSet<JavaResourceEnumConstant> enumConstantsToRemove = new HashSet<JavaResourceEnumConstant>(this.enumConstants); - for (EnumConstantDeclaration enumConstantDeclaration : enumConstantDeclarations) { - String constantName = enumConstantDeclaration.getName().getFullyQualifiedName(); - int occurrence = counters.increment(constantName); - - JavaResourceEnumConstant enumConstant = this.getEnumConstant(constantName, occurrence); - if (enumConstant == null) { - this.addEnumConstant(this.buildEnumConstant(constantName, occurrence, astRoot)); - } else { - enumConstantsToRemove.remove(enumConstant); - enumConstant.synchronizeWith(astRoot); - } - } - this.removeEnumConstants(enumConstantsToRemove); - } - - private JavaResourceEnumConstant buildEnumConstant(String fieldName, int occurrence, CompilationUnit astRoot) { - return SourceEnumConstant.newInstance(this, this.annotatedElement, fieldName, occurrence, this.getJavaResourceCompilationUnit(), astRoot); - } - - - public Iterable<JavaResourceType> getTypes() { - return EmptyIterable.instance(); - } - - public Iterable<JavaResourceType> getAllTypes() { - return EmptyIterable.instance(); - } - - public Iterable<JavaResourceEnum> getEnums() { - return EmptyIterable.instance(); - } - - public Iterable<JavaResourceEnum> getAllEnums() { - return new SingleElementIterable<JavaResourceEnum>(this); - } - - // ********** CounterMap ********** - - private static class CounterMap { - private final HashMap<Object, SimpleIntReference> counters; - - protected CounterMap(int initialCapacity) { - super(); - this.counters = new HashMap<Object, SimpleIntReference>(initialCapacity); - } - - /** - * Return the incremented count for the specified object. - */ - int increment(Object o) { - SimpleIntReference counter = this.counters.get(o); - if (counter == null) { - counter = new SimpleIntReference(); - this.counters.put(o, counter); - } - counter.increment(); - return counter.getValue(); - } - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceEnumConstant.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceEnumConstant.java deleted file mode 100644 index 939a08f374..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceEnumConstant.java +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.internal.resource.java.source; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.internal.utility.jdt.JDTEnumConstant; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.core.resource.java.JavaResourceEnum; -import org.eclipse.jpt.common.core.resource.java.JavaResourceEnumConstant; -import org.eclipse.jpt.common.core.utility.jdt.Enum; -import org.eclipse.jpt.common.core.utility.jdt.EnumConstant; - -/** - * Java source enum constant - */ -final class SourceEnumConstant - extends SourceMember<EnumConstant> - implements JavaResourceEnumConstant -{ - - /** - * construct enum constant - */ - static JavaResourceEnumConstant newInstance( - JavaResourceEnum parent, - Enum declaringEnum, - String name, - int occurrence, - JavaResourceCompilationUnit javaResourceCompilationUnit, - CompilationUnit astRoot) { - - EnumConstant enumConstant = new JDTEnumConstant( - declaringEnum, - name, - occurrence, - javaResourceCompilationUnit.getCompilationUnit(), - javaResourceCompilationUnit.getModifySharedDocumentCommandExecutor(), - javaResourceCompilationUnit.getAnnotationEditFormatter()); - JavaResourceEnumConstant jrec = new SourceEnumConstant(parent, enumConstant); - jrec.initialize(astRoot); - return jrec; - } - - - private SourceEnumConstant(JavaResourceEnum parent, EnumConstant enumConstant){ - super(parent, enumConstant); - } - - - @Override - public void initialize(CompilationUnit astRoot) { - super.initialize(astRoot); - } - - - // ******** JavaResourceAnnotatedElement implementation ******** - - public Kind getKind() { - return Kind.ENUM_CONSTANT; - } - - - // ******** overrides ******** - - @Override - public void resolveTypes(CompilationUnit astRoot) { - super.resolveTypes(astRoot); - } - - @Override - public void synchronizeWith(CompilationUnit astRoot) { - super.synchronizeWith(astRoot); - } - - @Override - public void toString(StringBuilder sb) { - sb.append(this.getName()); - } - - - // ******** JavaResourceEnumConstant implementation ******** - - public String getName() { - return this.annotatedElement.getName(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceField.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceField.java deleted file mode 100644 index fc4e4ab95f..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceField.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core.internal.resource.java.source; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.FieldDeclaration; -import org.eclipse.jpt.common.core.internal.utility.jdt.JDTFieldAttribute; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.core.resource.java.JavaResourceField; -import org.eclipse.jpt.common.core.resource.java.JavaResourceType; -import org.eclipse.jpt.common.core.utility.jdt.FieldAttribute; -import org.eclipse.jpt.common.core.utility.jdt.Type; - -/** - * Java source field - */ -final class SourceField - extends SourceAttribute<FieldAttribute> - implements JavaResourceField -{ - - /** - * construct field attribute - */ - static JavaResourceField newInstance( - JavaResourceType parent, - Type declaringType, - String name, - int occurrence, - JavaResourceCompilationUnit javaResourceCompilationUnit, - CompilationUnit astRoot) { - - FieldAttribute field = new JDTFieldAttribute( - declaringType, - name, - occurrence, - javaResourceCompilationUnit.getCompilationUnit(), - javaResourceCompilationUnit.getModifySharedDocumentCommandExecutor(), - javaResourceCompilationUnit.getAnnotationEditFormatter()); - JavaResourceField jrpa = new SourceField(parent, field); - jrpa.initialize(astRoot); - return jrpa; - } - - - private SourceField(JavaResourceType parent, FieldAttribute field){ - super(parent, field); - } - - // ******** JavaResourceAnnotatedElement implementation ******** - - public Kind getKind() { - return Kind.FIELD; - } - - @Override - protected void initialize(ASTNode node) { - super.initialize(node); - this.initialize(((FieldDeclaration) node).getType().resolveBinding()); - } - - @Override - public void synchronizeWith(ASTNode node) { - super.synchronizeWith(node); - this.synchronizeWith(((FieldDeclaration) node).getType().resolveBinding()); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceMember.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceMember.java deleted file mode 100644 index 380f175fcf..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceMember.java +++ /dev/null @@ -1,156 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core.internal.resource.java.source; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IBinding; -import org.eclipse.jdt.core.dom.Modifier; -import org.eclipse.jpt.common.core.resource.java.Annotation; -import org.eclipse.jpt.common.core.resource.java.JavaResourceMember; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.core.utility.jdt.Member; - -/** - * Java source member (annotations, "persistable") - */ -abstract class SourceMember<M extends Member> - extends SourceAnnotatedElement<M> - implements JavaResourceMember -{ - boolean final_; // 'final' is a reserved word - - boolean transient_; // 'transient' is a reserved word - - boolean public_; // 'public' is a reserved word - - boolean static_; // 'static' is a reserved word - - boolean protected_; // 'protected' is a reserved word - - // ********** construction/initialization ********** - - SourceMember(JavaResourceNode parent, M member) { - super(parent, member); - } - - @Override - protected void initialize(IBinding binding) { - super.initialize(binding); - this.final_ = this.buildFinal(binding); - this.transient_ = this.buildTransient(binding); - this.public_ = this.buildPublic(binding); - this.static_ = this.buildStatic(binding); - this.protected_ = this.buildProtected(binding); - } - - @Override - protected void synchronizeWith(IBinding binding) { - super.synchronizeWith(binding); - this.syncFinal(this.buildFinal(binding)); - this.syncTransient(this.buildTransient(binding)); - this.syncPublic(this.buildPublic(binding)); - this.syncStatic(this.buildStatic(binding)); - this.syncProtected(this.buildProtected(binding)); - } - - // ***** final - public boolean isFinal() { - return this.final_; - } - - private void syncFinal(boolean astFinal) { - boolean old = this.final_; - this.final_ = astFinal; - this.firePropertyChanged(FINAL_PROPERTY, old, astFinal); - } - - private boolean buildFinal(IBinding binding) { - return (binding == null) ? false : Modifier.isFinal(binding.getModifiers()); - } - - // ***** transient - public boolean isTransient() { - return this.transient_; - } - - private void syncTransient(boolean astTransient) { - boolean old = this.transient_; - this.transient_ = astTransient; - this.firePropertyChanged(TRANSIENT_PROPERTY, old, astTransient); - } - - private boolean buildTransient(IBinding binding) { - return (binding == null) ? false : Modifier.isTransient(binding.getModifiers()); - } - - // ***** public - public boolean isPublic() { - return this.public_; - } - - private void syncPublic(boolean astPublic) { - boolean old = this.public_; - this.public_ = astPublic; - this.firePropertyChanged(PUBLIC_PROPERTY, old, astPublic); - } - - private boolean buildPublic(IBinding binding) { - return (binding == null) ? false : Modifier.isPublic(binding.getModifiers()); - } - - // ***** static - public boolean isStatic() { - return this.static_; - } - - private void syncStatic(boolean astStatic) { - boolean old = this.static_; - this.static_ = astStatic; - this.firePropertyChanged(STATIC_PROPERTY, old, astStatic); - } - - private boolean buildStatic(IBinding binding) { - return (binding == null) ? false : Modifier.isStatic(binding.getModifiers()); - } - - // ***** protected - public boolean isProtected() { - return this.protected_; - } - - private void syncProtected(boolean astProtected) { - boolean old = this.protected_; - this.protected_ = astProtected; - this.firePropertyChanged(PROTECTED_PROPERTY, old, astProtected); - } - - private boolean buildProtected(IBinding binding) { - return (binding == null) ? false : Modifier.isProtected(binding.getModifiers()); - } - - // ********** miscellaneous ********** - - public boolean isFor(String memberName, int occurrence) { - return this.annotatedElement.matches(memberName, occurrence); - } - - @Override - public Annotation setPrimaryAnnotation(String primaryAnnotationName, Iterable<String> supportingAnnotationNames) { - return super.setPrimaryAnnotation(primaryAnnotationName, supportingAnnotationNames); - } - - public void resolveTypes(CompilationUnit astRoot) { - // do nothing? - } - - public boolean isPublicOrProtected() { - return this.isPublic() || this.isProtected(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceMethod.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceMethod.java deleted file mode 100644 index d92d2d7dcb..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceMethod.java +++ /dev/null @@ -1,201 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.internal.resource.java.source; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Vector; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IBinding; -import org.eclipse.jdt.core.dom.IMethodBinding; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jpt.common.core.internal.utility.jdt.JDTMethodAttribute; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.core.resource.java.JavaResourceMethod; -import org.eclipse.jpt.common.core.resource.java.JavaResourceType; -import org.eclipse.jpt.common.core.utility.jdt.MethodAttribute; -import org.eclipse.jpt.common.core.utility.jdt.Type; -import org.eclipse.jpt.common.utility.MethodSignature; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; - -/** - * Java source method - */ -final class SourceMethod - extends SourceAttribute<MethodAttribute> - implements JavaResourceMethod { - - boolean constructor; - - private final Vector<String> parameterTypeNames = new Vector<String>(); - - - /** - * construct method - */ - static JavaResourceMethod newInstance( - JavaResourceType parent, - Type declaringType, - MethodSignature signature, - int occurrence, - JavaResourceCompilationUnit javaResourceCompilationUnit, - MethodDeclaration methodDeclaration) { - - MethodAttribute method = JDTMethodAttribute.newInstance( - declaringType, - signature, - occurrence, - javaResourceCompilationUnit.getCompilationUnit(), - javaResourceCompilationUnit.getModifySharedDocumentCommandExecutor(), - javaResourceCompilationUnit.getAnnotationEditFormatter()); - JavaResourceMethod jrm = new SourceMethod(parent, method); - jrm.initialize(methodDeclaration); - return jrm; - } - - - private SourceMethod(JavaResourceType parent, MethodAttribute method){ - super(parent, method); - } - - //call initialize(MethodDeclaration) now for performance - //trying to minimize API changes, this should be removed from the interface - //TODO other members of this hierarchy should have similar initialize methods - @Override - public void initialize(CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - - @Override - protected void initialize(IBinding binding) { - super.initialize(binding); - this.constructor = this.buildConstructor((IMethodBinding) binding); - this.parameterTypeNames.addAll(this.buildParameterTypeNames((IMethodBinding) binding)); - } - - public void initialize(MethodDeclaration methodDeclaration) { - super.initialize(methodDeclaration); - IMethodBinding binding = methodDeclaration.resolveBinding(); - this.initialize(binding.getReturnType()); - this.initialize(binding); - - } - - - // ******** JavaResourceAnnotatedElement implementation ******** - - public Kind getKind() { - return Kind.METHOD; - } - - - // ******** overrides ******** - - @Override - public void resolveTypes(CompilationUnit astRoot) { - super.resolveTypes(astRoot); - } - - //call synchronizeWith(MethodDeclaration) now for performance - //trying to minimize API changes, this should be removed from the interface - //TODO other members of this hierarchy should have similar synchronizeWith methods - @Override - public void synchronizeWith(CompilationUnit astRoot) { - throw new UnsupportedOperationException(); - } - - public void synchronizeWith(MethodDeclaration methodDeclaration) { - super.synchronizeWith(methodDeclaration); - IMethodBinding binding = methodDeclaration.resolveBinding(); - this.synchronizeWith(binding.getReturnType()); - this.synchronizeWith(binding); - } - - @Override - public void synchronizeWith(IBinding binding) { - super.synchronizeWith(binding); - this.syncConstructor(this.buildConstructor((IMethodBinding) binding)); - this.syncParameterTypeNames(this.buildParameterTypeNames((IMethodBinding) binding)); - } - - @Override - public void toString(StringBuilder sb) { - sb.append(this.getMethodName()); - } - - - // ***** method name ***** - - public String getMethodName() { - return this.annotatedElement.getName(); - } - - - // ***** parameter type names ***** - - public ListIterable<String> getParameterTypeNames() { - return new LiveCloneListIterable<String>(this.parameterTypeNames); - } - - public String getParameterTypeName(int index) { - return this.parameterTypeNames.get(index); - } - - public int getParametersSize() { - return this.parameterTypeNames.size(); - } - - private void syncParameterTypeNames(List<String> astParameterTypeNames) { - this.synchronizeList(astParameterTypeNames, this.parameterTypeNames, PARAMETER_TYPE_NAMES_LIST); - } - - private List<String> buildParameterTypeNames(IMethodBinding methodBinding) { - if (methodBinding == null) { - return Collections.emptyList(); - } - ArrayList<String> names = new ArrayList<String>(); - for (ITypeBinding parameterType : methodBinding.getParameterTypes()) { - if (parameterType.isTypeVariable()) { - // e.g. "E extends Number" has an erasure of "Number" - parameterType = parameterType.getErasure(); - } - String ptName = parameterType.getTypeDeclaration().getQualifiedName(); - names.add(ptName); - } - return names; - } - - - // ***** constructor ***** - - public boolean isConstructor() { - return this.constructor; - } - - private void syncConstructor(boolean astConstructor) { - boolean old = this.constructor; - this.constructor = astConstructor; - this.firePropertyChanged(CONSTRUCTOR_PROPERTY, old, astConstructor); - } - - private boolean buildConstructor(IMethodBinding methodBinding) { - return methodBinding == null ? false : methodBinding.isConstructor(); - } - - - // ***** misc ***** - - public boolean isFor(MethodSignature signature, int occurrence) { - return this.annotatedElement.matches(signature, occurrence); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceNamedAnnotation.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceNamedAnnotation.java deleted file mode 100644 index 84c17f3df1..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceNamedAnnotation.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011, 2012 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.common.core.internal.resource.java.source; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.internal.resource.java.source.SourceAnnotation; -import org.eclipse.jpt.common.core.internal.utility.jdt.SimpleDeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; - -/** - * Used for annotations that have no behavior, just a name - */ -public final class SourceNamedAnnotation - extends SourceAnnotation -{ - private final String annotationName; - - public SourceNamedAnnotation(JavaResourceAnnotatedElement parent, AnnotatedElement annotatedElement, String annotationName) { - super(parent, annotatedElement, new SimpleDeclarationAnnotationAdapter(annotationName)); - this.annotationName = annotationName; - } - - public String getAnnotationName() { - return this.annotationName; - } - - public void initialize(CompilationUnit astRoot) { - //nothing - } - - public void synchronizeWith(CompilationUnit astRoot) { - //nothing - } - - @Override - public void toString(StringBuilder sb) { - sb.append(this.annotationName); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceNode.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceNode.java deleted file mode 100644 index 2a46bc62b1..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceNode.java +++ /dev/null @@ -1,379 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.resource.java.source; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.ArrayInitializer; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jdt.core.dom.MemberValuePair; -import org.eclipse.jdt.core.dom.NormalAnnotation; -import org.eclipse.jdt.core.dom.SingleMemberAnnotation; -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.internal.resource.java.AbstractJavaResourceNode; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.core.resource.java.JavaResourceNode; -import org.eclipse.jpt.common.core.resource.java.NestableAnnotation; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable; - - -/** - * Source convenience methods - */ -public abstract class SourceNode - extends AbstractJavaResourceNode -{ - - protected SourceNode(JavaResourceNode parent) { - super(parent); - } - - public JavaResourceCompilationUnit getJavaResourceCompilationUnit() { - return (JavaResourceCompilationUnit) this.getRoot(); - } - - protected CompilationUnit buildASTRoot() { - return this.getJavaResourceCompilationUnit().buildASTRoot(); - } - - protected void nestedAnnotationAdded(String listName, int index, NestableAnnotation addedAnnotation) { - this.fireItemAdded(listName, index, addedAnnotation); - } - - protected void nestedAnnotationsRemoved(String listName, int index, List<? extends NestableAnnotation> removedAnnotations) { - this.fireItemsRemoved(listName, index, removedAnnotations); - } - - @Override - protected AnnotationProvider getAnnotationProvider() { - return super.getAnnotationProvider(); - } - - - // ********** annotation container ********** - - /** - * A container for nested annotations. The owner of the AnnotationContainer - * needs to call - * {@link #initializeFromContainerAnnotation(org.eclipse.jdt.core.dom.Annotation)} - * on it. - * @param <A> the type of the resource nestable annotations - */ - protected abstract class AnnotationContainer<A extends NestableAnnotation> { - protected final Vector<A> nestedAnnotations = new Vector<A>(); - - protected AnnotationContainer() { - super(); - } - - /** - * Return the element name of the nested annotations - */ - protected abstract String getElementName(); - - /** - * Return the nested annotation name - */ - protected abstract String getNestedAnnotationName(); - - /** - * Return a new nested annotation at the given index - */ - protected abstract A buildNestedAnnotation(int index); - - public void initializeFromContainerAnnotation(org.eclipse.jdt.core.dom.Annotation astContainerAnnotation) { - // ignore the nested AST annotations themselves - // TODO (maybe someday we can use them during initialization...) - int size = this.getNestedAstAnnotations(astContainerAnnotation).size(); - for (int i = 0; i < size; i++) { - A nestedAnnotation = this.buildNestedAnnotation(i); - this.nestedAnnotations.add(i, nestedAnnotation); - nestedAnnotation.initialize((CompilationUnit) astContainerAnnotation.getRoot()); - } - } - - /** - * Synchronize the resource model annotations with those in the specified AST. - * Trigger the appropriate change notification. - */ - public void synchronize(org.eclipse.jdt.core.dom.Annotation astContainerAnnotation) { - ArrayList<org.eclipse.jdt.core.dom.Annotation> astAnnotations = this.getNestedAstAnnotations(astContainerAnnotation); - Iterator<org.eclipse.jdt.core.dom.Annotation> astAnnotationStream = astAnnotations.iterator(); - - for (A nestedAnnotation : this.getNestedAnnotations()) { - if (astAnnotationStream.hasNext()) { - // matching AST annotation is present - synchronize the nested annotation - astAnnotationStream.next(); // TODO pass this to the update - nestedAnnotation.synchronizeWith((CompilationUnit) astContainerAnnotation.getRoot()); - } else { - // no more AST annotations - remove the remaining nested annotations and exit - this.syncRemoveNestedAnnotations(astAnnotations.size()); - return; - } - } - - // add nested annotations for any remaining AST annotations - while (astAnnotationStream.hasNext()) { - this.syncAddNestedAnnotation(astAnnotationStream.next()); - } - } - - public ListIterable<A> getNestedAnnotations() { - return new LiveCloneListIterable<A>(this.nestedAnnotations); - } - - public int getNestedAnnotationsSize() { - return this.nestedAnnotations.size(); - } - - public A getNestedAnnotation(int index) { - return this.nestedAnnotations.get(index); - } - - public A addNestedAnnotation(int index) { - // add a new annotation to the end of the list... - int sourceIndex = this.nestedAnnotations.size(); - A nestedAnnotation = this.buildNestedAnnotation(sourceIndex); - this.nestedAnnotations.add(sourceIndex, nestedAnnotation); - nestedAnnotation.newAnnotation(); - nestedAnnotation.initialize(nestedAnnotation.getJavaResourceCompilationUnit().buildASTRoot()); - // ...then move it to the specified index - this.moveNestedAnnotation(index, sourceIndex); - return nestedAnnotation; - } - - public A moveNestedAnnotation(int targetIndex, int sourceIndex) { - if (targetIndex != sourceIndex) { - return this.moveNestedAnnotation_(targetIndex, sourceIndex); - } - return null; - } - - public A removeNestedAnnotation(int index) { - A nestedAnnotation = this.nestedAnnotations.remove(index); - nestedAnnotation.removeAnnotation(); - this.syncAstAnnotationsAfterRemove(index); - return nestedAnnotation; - } - - private A moveNestedAnnotation_(int targetIndex, int sourceIndex) { - A nestedAnnotation = CollectionTools.move(this.nestedAnnotations, targetIndex, sourceIndex).get(targetIndex); - this.syncAstAnnotationsAfterMove(targetIndex, sourceIndex, nestedAnnotation); - return nestedAnnotation; - } - - /** - * Return a list of the nested AST annotations. - */ - private ArrayList<org.eclipse.jdt.core.dom.Annotation> getNestedAstAnnotations(org.eclipse.jdt.core.dom.Annotation astContainerAnnotation) { - ArrayList<org.eclipse.jdt.core.dom.Annotation> result = new ArrayList<org.eclipse.jdt.core.dom.Annotation>(); - if (astContainerAnnotation == null || astContainerAnnotation.isMarkerAnnotation()) { - // no nested annotations - } - else if (astContainerAnnotation.isSingleMemberAnnotation()) { - if (this.getElementName().equals("value")) { //$NON-NLS-1$ - Expression ex = ((SingleMemberAnnotation) astContainerAnnotation).getValue(); - this.addAstAnnotationsTo(ex, result); - } else { - // no nested annotations - } - } - else if (astContainerAnnotation.isNormalAnnotation()) { - MemberValuePair pair = this.getMemberValuePair((NormalAnnotation) astContainerAnnotation); - if (pair == null) { - // no nested annotations - } else { - this.addAstAnnotationsTo(pair.getValue(), result); - } - } - return result; - } - - /** - * Add whatever annotations are represented by the specified expression to - * the specified list. Do not add null to the list for any non-annotation expression. - */ - private void addAstAnnotationsTo(Expression expression, ArrayList<org.eclipse.jdt.core.dom.Annotation> astAnnotations) { - if (expression == null) { - //do not add null to the list, not sure how we would get here... - } - else if (expression.getNodeType() == ASTNode.ARRAY_INITIALIZER) { - this.addAstAnnotationsTo((ArrayInitializer) expression, astAnnotations); - } - else { - org.eclipse.jdt.core.dom.Annotation astAnnotation = this.getAstAnnotation_(expression); - if (astAnnotation != null) { - astAnnotations.add(astAnnotation); - } - } - } - - private void addAstAnnotationsTo(ArrayInitializer arrayInitializer, ArrayList<org.eclipse.jdt.core.dom.Annotation> astAnnotations) { - List<Expression> expressions = this.expressions(arrayInitializer); - for (Expression expression : expressions) { - org.eclipse.jdt.core.dom.Annotation astAnnotation = getAstAnnotation(expression); - if (astAnnotation != null) { - astAnnotations.add(astAnnotation); - } - } - } - - // minimize scope of suppressed warnings - @SuppressWarnings("unchecked") - private List<Expression> expressions(ArrayInitializer arrayInitializer) { - return arrayInitializer.expressions(); - } - - /** - * If the specified expression is an annotation with the specified name, return it; - * otherwise return null. - */ - private org.eclipse.jdt.core.dom.Annotation getAstAnnotation(Expression expression) { - // not sure how the expression could be null... - return (expression == null) ? null : getAstAnnotation_(expression); - } - - /** - * pre-condition: expression is not null - */ - private org.eclipse.jdt.core.dom.Annotation getAstAnnotation_(Expression expression) { - switch (expression.getNodeType()) { - case ASTNode.NORMAL_ANNOTATION: - case ASTNode.SINGLE_MEMBER_ANNOTATION: - case ASTNode.MARKER_ANNOTATION: - org.eclipse.jdt.core.dom.Annotation astAnnotation = (org.eclipse.jdt.core.dom.Annotation) expression; - if (this.getQualifiedName(astAnnotation).equals(this.getNestedAnnotationName())) { - return astAnnotation; - } - return null; - default: - return null; - } - } - - private String getQualifiedName(org.eclipse.jdt.core.dom.Annotation astAnnotation) { - ITypeBinding typeBinding = astAnnotation.resolveTypeBinding(); - if (typeBinding != null) { - String resolvedName = typeBinding.getQualifiedName(); - if (resolvedName != null) { - return resolvedName; - } - } - return astAnnotation.getTypeName().getFullyQualifiedName(); - } - - private MemberValuePair getMemberValuePair(NormalAnnotation annotation) { - List<MemberValuePair> pairs = this.values(annotation); - for (MemberValuePair pair : pairs) { - if (pair.getName().getFullyQualifiedName().equals(this.getElementName())) { - return pair; - } - } - return null; - } - - @SuppressWarnings("unchecked") - private List<MemberValuePair> values(NormalAnnotation na) { - return na.values(); - } - - /** - * An annotation was moved within the specified annotation container from - * the specified source index to the specified target index. - * Synchronize the AST annotations with the resource model annotation container, - * starting with the lower index to prevent overlap. - */ - private void syncAstAnnotationsAfterMove(int targetIndex, int sourceIndex, A nestedAnnotation) { - // move the Java annotation to the end of the list... - nestedAnnotation.moveAnnotation(this.nestedAnnotations.size()); - // ...then shift the other AST annotations over one slot... - if (sourceIndex < targetIndex) { - for (int i = sourceIndex; i < targetIndex; i++) { - this.nestedAnnotations.get(i).moveAnnotation(i); - } - } else { - for (int i = sourceIndex; i > targetIndex; i-- ) { - this.nestedAnnotations.get(i).moveAnnotation(i); - } - } - // ...then move the AST annotation to the now empty slot at the target index - nestedAnnotation.moveAnnotation(targetIndex); - } - - /** - * An annotation was removed from the specified annotation container at the - * specified index. - * Synchronize the AST annotations with the resource model annotation container, - * starting at the specified index to prevent overlap. - */ - private void syncAstAnnotationsAfterRemove(int index) { - for (int i = index; i < this.nestedAnnotations.size(); i++) { - // the indices are the same because the model annotations are - // already in the proper locations - it's the AST annotations that - // need to be moved to the matching location - this.nestedAnnotations.get(i).moveAnnotation(i); - } - } - - void syncAddNestedAnnotation(org.eclipse.jdt.core.dom.Annotation astAnnotation) { - int index = this.nestedAnnotations.size(); - A nestedAnnotation = this.buildNestedAnnotation(index); - nestedAnnotation.initialize((CompilationUnit) astAnnotation.getRoot()); - this.nestedAnnotations.add(index, nestedAnnotation); - this.nestedAnnotationAdded(index, nestedAnnotation); - } - - void nestedAnnotationAdded(int index, A addedAnnotation) { - SourceNode.this.nestedAnnotationAdded(this.getNestedAnnotationsListName(), index, addedAnnotation); - } - - /** - * Remove the nested annotations from the specified index to the end of - * the list. - */ - void syncRemoveNestedAnnotations(int index) { - List<A> subList = this.nestedAnnotations.subList(index, this.nestedAnnotations.size()); - List<A> removedAnnotations = new ArrayList<A>(subList); - subList.clear(); - this.nestedAnnotationsRemoved(index, removedAnnotations); - } - - void nestedAnnotationsRemoved(int index, List<A> removedAnnotations) { - SourceNode.this.nestedAnnotationsRemoved(this.getNestedAnnotationsListName(), index, removedAnnotations); - } - - /** - * Return the nested annotations list name for firing property change - * notification. - */ - protected abstract String getNestedAnnotationsListName(); - - public boolean isEmpty() { - return this.nestedAnnotations.isEmpty(); - } - - AnnotationProvider getAnnotationProvider() { - return SourceNode.this.getAnnotationProvider(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.nestedAnnotations); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourcePackage.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourcePackage.java deleted file mode 100644 index b2fbc06fff..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourcePackage.java +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 Red Hat, Inc. - * Distributed under license by Red Hat, Inc. All rights reserved. - * This program is 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: - * Red Hat, Inc. - initial API and implementation - * Oracle - ******************************************************************************/ -package org.eclipse.jpt.common.core.internal.resource.java.source; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IBinding; -import org.eclipse.jdt.core.dom.IPackageBinding; -import org.eclipse.jdt.core.dom.PackageDeclaration; -import org.eclipse.jpt.common.core.internal.utility.jdt.JDTPackage; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.core.resource.java.JavaResourcePackage; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedPackage; - -/** - * @author Dmitry Geraskov - * Source package-info.java - * - */ -public final class SourcePackage - extends SourceAnnotatedElement<AnnotatedPackage> - implements JavaResourcePackage -{ - - private String name; - - /** - * construct package info - */ - public static JavaResourcePackage newInstance( - JavaResourceCompilationUnit parent, - PackageDeclaration declaringPackage, - CompilationUnit astRoot) { - AnnotatedPackage pack = new JDTPackage( - declaringPackage, - parent.getCompilationUnit(), - parent.getModifySharedDocumentCommandExecutor(), - parent.getAnnotationEditFormatter()); - JavaResourcePackage jrpp = new SourcePackage(parent, pack); - jrpp.initialize(astRoot); - return jrpp; - } - - private SourcePackage( - JavaResourceCompilationUnit parent, - AnnotatedPackage pack){ - super(parent, pack); - } - - - @Override - protected void initialize(IBinding binding) { - super.initialize(binding); - this.name = this.buildName((IPackageBinding) binding); - } - - // ******** JavaResourceAnnotatedElement implementation ******** - - public Kind getKind() { - return Kind.PACKAGE; - } - - - // ********** JavaResourcePackageInfo implementation ********** - - // ***** name - public String getName() { - return this.name; - } - - private void syncName(String astName) { - if (valuesAreDifferent(astName, this.name)){ - String old = this.name; - this.name = astName; - this.firePropertyChanged(NAME_PROPERTY, old, astName); - } - } - - private String buildName(IPackageBinding binding) { - return (binding == null) ? null : binding.getName(); - } - - - // ********** Java changes ********** - - @Override - protected void synchronizeWith(IBinding binding) { - super.synchronizeWith(binding); - this.syncName(this.buildName((IPackageBinding) binding)); - } - - @Override - public void toString(StringBuilder sb) { - sb.append(this.name); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourcePackageInfoCompilationUnit.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourcePackageInfoCompilationUnit.java deleted file mode 100644 index 0ee2aae4a1..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourcePackageInfoCompilationUnit.java +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 Red Hat, Inc. 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: - * Red Hat, Inc. - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.core.internal.resource.java.source; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.PackageDeclaration; -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.JptResourceType; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType; -import org.eclipse.jpt.common.core.resource.java.JavaResourcePackage; -import org.eclipse.jpt.common.core.resource.java.JavaResourcePackageInfoCompilationUnit; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.utility.command.CommandExecutor; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; - -/** - * @author Dmitry Geraskov - * Source package-info.java - * - */ -public final class SourcePackageInfoCompilationUnit - extends SourceCompilationUnit - implements JavaResourcePackageInfoCompilationUnit { - - private JavaResourcePackage package_; - - public SourcePackageInfoCompilationUnit( - ICompilationUnit compilationUnit, - AnnotationProvider annotationProvider, - AnnotationEditFormatter annotationEditFormatter, - CommandExecutor modifySharedDocumentCommandExecutor) { - super(compilationUnit, annotationProvider, annotationEditFormatter, modifySharedDocumentCommandExecutor); // the JPA compilation unit is the root of its sub-tree - this.package_ = this.buildPackage(); - } - - - private JavaResourcePackage buildPackage() { - this.openCompilationUnit(); - CompilationUnit astRoot = this.buildASTRoot(); - this.closeCompilationUnit(); - return this.buildPackage(astRoot); - } - - - // ********** JavaResourceNode.Root implementation ********** - - public Iterable<JavaResourceAbstractType> getTypes() { - return EmptyIterable.instance(); - } - - public JavaResourceAbstractType getPrimaryType() { - return null; - } - - // ********** JptResourceModel implementation ********** - - public JptResourceType getResourceType() { - return JptCommonCorePlugin.JAVA_SOURCE_PACKAGE_INFO_RESOURCE_TYPE; - } - - - // ********** Java changes ********** - - public void synchronizeWith(CompilationUnit astRoot) { - this.syncPackage(astRoot); - } - - - // ********** JavaResourceCompilationUnit implementation ********** - - public void resolveTypes() { - //no-op - } - - // ********** package-info ********** - - public JavaResourcePackage getPackage() { - return this.package_; - } - - private JavaResourcePackage buildPackage(CompilationUnit astRoot) { - return this.buildPackage(astRoot, this.getPackageDeclaration(astRoot)); - } - - private void syncPackage(CompilationUnit astRoot) { - PackageDeclaration pd = this.getPackageDeclaration(astRoot); - if (pd == null) { - this.syncPackage_(null); - } else { - if (this.package_ == null) { - this.syncPackage_(this.buildPackage(astRoot, pd)); - } else { - this.package_.synchronizeWith(astRoot); - } - } - } - - private PackageDeclaration getPackageDeclaration(CompilationUnit astRoot) { - return astRoot.getPackage(); - } - - private void syncPackage_(JavaResourcePackage astPackage) { - JavaResourcePackage old = this.package_; - this.package_ = astPackage; - this.firePropertyChanged(PACKAGE, old, astPackage); - } - - private JavaResourcePackage buildPackage(CompilationUnit astRoot, PackageDeclaration packageDeclaration) { - return SourcePackage.newInstance(this, packageDeclaration, astRoot); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceType.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceType.java deleted file mode 100644 index 1108105280..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceType.java +++ /dev/null @@ -1,622 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core.internal.resource.java.source; - -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.EnumDeclaration; -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.ITypeBinding; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jdt.core.dom.Modifier; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jdt.core.dom.VariableDeclarationFragment; -import org.eclipse.jpt.common.core.internal.utility.jdt.ASTTools; -import org.eclipse.jpt.common.core.internal.utility.jdt.JDTType; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.core.resource.java.JavaResourceEnum; -import org.eclipse.jpt.common.core.resource.java.JavaResourceField; -import org.eclipse.jpt.common.core.resource.java.JavaResourceMethod; -import org.eclipse.jpt.common.core.resource.java.JavaResourceType; -import org.eclipse.jpt.common.core.utility.jdt.Type; -import org.eclipse.jpt.common.utility.MethodSignature; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; -import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; -import org.eclipse.jpt.common.utility.internal.iterables.TreeIterable; - -/** - * Java source type (type or interface) - */ -final class SourceType - extends SourceAbstractType<Type> - implements JavaResourceType -{ - - private String superclassQualifiedName; - - private boolean abstract_; // 'abstract' is a reserved word - - private boolean hasNoArgConstructor; - - private boolean hasPrivateNoArgConstructor; - - private final Vector<JavaResourceType> types; - - private final Vector<JavaResourceEnum> enums; - - private final Vector<JavaResourceField> fields; - - private final Vector<JavaResourceMethod> methods; - - - // ********** construction/initialization ********** - - /** - * build top-level type - */ - static JavaResourceType newInstance( - JavaResourceCompilationUnit javaResourceCompilationUnit, - TypeDeclaration typeDeclaration, - CompilationUnit astRoot) { - Type type = new JDTType( - typeDeclaration, - javaResourceCompilationUnit.getCompilationUnit(), - javaResourceCompilationUnit.getModifySharedDocumentCommandExecutor(), - javaResourceCompilationUnit.getAnnotationEditFormatter()); - JavaResourceType jrpt = new SourceType(javaResourceCompilationUnit, type); - jrpt.initialize(astRoot); - return jrpt; - } - - /** - * build nested type - */ - private static JavaResourceType newInstance( - JavaResourceCompilationUnit javaResourceCompilationUnit, - Type declaringType, - TypeDeclaration typeDeclaration, - int occurrence, - CompilationUnit astRoot) { - Type type = new JDTType( - declaringType, - typeDeclaration, - occurrence, - javaResourceCompilationUnit.getCompilationUnit(), - javaResourceCompilationUnit.getModifySharedDocumentCommandExecutor(), - javaResourceCompilationUnit.getAnnotationEditFormatter()); - JavaResourceType jrpt = new SourceType(javaResourceCompilationUnit, type); - jrpt.initialize(astRoot); - return jrpt; - } - - private SourceType(JavaResourceCompilationUnit javaResourceCompilationUnit, Type type) { - super(javaResourceCompilationUnit, type); - this.types = new Vector<JavaResourceType>(); - this.enums = new Vector<JavaResourceEnum>(); - this.fields = new Vector<JavaResourceField>(); - this.methods = new Vector<JavaResourceMethod>(); - } - - @Override - public void initialize(CompilationUnit astRoot) { - super.initialize(astRoot); - this.initializeTypes(astRoot); - this.initializeEnums(astRoot); - this.initializeFields(astRoot); - this.initializeMethods(astRoot); - } - - @Override - protected void initialize(IBinding binding) { - super.initialize(binding); - this.superclassQualifiedName = this.buildSuperclassQualifiedName((ITypeBinding) binding); - this.abstract_ = this.buildAbstract((ITypeBinding) binding); - this.hasNoArgConstructor = this.buildHasNoArgConstructor((ITypeBinding) binding); - this.hasPrivateNoArgConstructor = this.buildHasPrivateNoArgConstructor((ITypeBinding) binding); - } - - - // ********** update ********** - - @Override - public void synchronizeWith(CompilationUnit astRoot) { - super.synchronizeWith(astRoot); - this.syncTypes(astRoot); - this.syncEnums(astRoot); - this.syncFields(astRoot); - this.syncMethods(astRoot); - } - - @Override - protected void synchronizeWith(IBinding binding) { - super.synchronizeWith(binding); - this.syncSuperclassQualifiedName(this.buildSuperclassQualifiedName((ITypeBinding) binding)); - this.syncAbstract(this.buildAbstract((ITypeBinding) binding)); - this.syncHasNoArgConstructor(this.buildHasNoArgConstructor((ITypeBinding) binding)); - this.syncHasPrivateNoArgConstructor(this.buildHasPrivateNoArgConstructor((ITypeBinding) binding)); - } - - - // ********** SourceAnnotatedElement implementation ********** - - @Override - public void resolveTypes(CompilationUnit astRoot) { - super.resolveTypes(astRoot); - - this.syncSuperclassQualifiedName(this.buildSuperclassQualifiedName(this.annotatedElement.getBinding(astRoot))); - - for (JavaResourceField field : this.getFields()) { - field.resolveTypes(astRoot); - } - - // a new type can trigger a method parameter type to be a resolved, - // fully-qualified name, so we need to rebuild our list of methods: - // "setFoo(Foo)" is not the same as "setFoo(com.bar.Foo)" - // and, vice-versa, a removed type can "unresolve" a parameter type - this.syncMethods(astRoot); - - // this is commented out because the above syncMethods() calls - // JavaResourceMethod.sysynchronizeWith(MethodDeclaration) - // on all the methods. resolveTypes() is a subset of synchronizeWith() - // so it is redundant and expensive to do both of these. - //for (JavaResourceMethod method : this.getMethods()) { - // method.resolveTypes(astRoot); - //} - for (JavaResourceType type : this.getTypes()) { - type.resolveTypes(astRoot); - } - for (JavaResourceEnum enum_ : this.getEnums()) { - enum_.resolveTypes(astRoot); - } - } - - - // ******** JavaResourceType implementation ******** - - public Kind getKind() { - return Kind.TYPE; - } - - // ***** superclass qualified name - public String getSuperclassQualifiedName() { - return this.superclassQualifiedName; - } - - private void syncSuperclassQualifiedName(String astSuperclassQualifiedName) { - String old = this.superclassQualifiedName; - this.superclassQualifiedName = astSuperclassQualifiedName; - this.firePropertyChanged(SUPERCLASS_QUALIFIED_NAME_PROPERTY, old, astSuperclassQualifiedName); - } - - private String buildSuperclassQualifiedName(ITypeBinding binding) { - ITypeBinding superclass = binding == null ? null : binding.getSuperclass(); - return (superclass == null) ? null : superclass.getTypeDeclaration().getQualifiedName(); - } - - // ***** abstract - public boolean isAbstract() { - return this.abstract_; - } - - private void syncAbstract(boolean astAbstract) { - boolean old = this.abstract_; - this.abstract_ = astAbstract; - this.firePropertyChanged(ABSTRACT_PROPERTY, old, astAbstract); - } - - private boolean buildAbstract(ITypeBinding binding) { - return (binding == null) ? false : Modifier.isAbstract(binding.getModifiers()); - } - - // ***** no-arg constructor - public boolean hasNoArgConstructor() { - return this.hasNoArgConstructor; - } - - private void syncHasNoArgConstructor(boolean astHasNoArgConstructor) { - boolean old = this.hasNoArgConstructor; - this.hasNoArgConstructor = astHasNoArgConstructor; - this.firePropertyChanged(NO_ARG_CONSTRUCTOR_PROPERTY, old, astHasNoArgConstructor); - } - - private boolean buildHasNoArgConstructor(ITypeBinding binding) { - return (binding == null) ? false : typeHasNoArgConstructor(binding); - } - - protected static boolean typeHasNoArgConstructor(ITypeBinding binding) { - return findNoArgConstructor(binding) != null; - } - - protected static IMethodBinding findNoArgConstructor(ITypeBinding binding) { - for (IMethodBinding method : binding.getDeclaredMethods()) { - if (method.isConstructor()) { - if (method.getParameterTypes().length == 0) { - return method; - } - } - } - return null; - } - - // ***** private no-arg constructor - public boolean hasPrivateNoArgConstructor() { - return this.hasPrivateNoArgConstructor; - } - - private void syncHasPrivateNoArgConstructor(boolean astHasPrivateNoArgConstructor) { - boolean old = this.hasPrivateNoArgConstructor; - this.hasPrivateNoArgConstructor = astHasPrivateNoArgConstructor; - this.firePropertyChanged(PRIVATE_NO_ARG_CONSTRUCTOR_PROPERTY, old, astHasPrivateNoArgConstructor); - } - - private boolean buildHasPrivateNoArgConstructor(ITypeBinding binding) { - return (binding == null) ? false : typeHasPrivateNoArgConstructor(binding); - } - - protected static boolean typeHasPrivateNoArgConstructor(ITypeBinding binding) { - IMethodBinding method = findNoArgConstructor(binding); - return (method != null) && Modifier.isPrivate(method.getModifiers()); - } - - - // ***** public/protected no-arg constructor ***** - - public boolean hasPublicOrProtectedNoArgConstructor() { - Iterable<JavaResourceMethod> constructors = getConstructors(); - if (CollectionTools.size(constructors) == 0) { - return true; - } - for (JavaResourceMethod constructor : constructors) { - if (constructor.getParametersSize() == 0) { - return Modifier.isPublic(constructor.getModifiers()) - || Modifier.isProtected(constructor.getModifiers()); - } - } - return false; - } - - public boolean hasPublicNoArgConstructor() { - Iterable<JavaResourceMethod> constructors = this.getConstructors(); - if (CollectionTools.size(constructors) == 0) { - return true; - } - for (JavaResourceMethod constructor : constructors) { - if (constructor.getParametersSize() == 0) { - return Modifier.isPublic(constructor.getModifiers()); - } - } - return false; - } - - protected Iterable<JavaResourceMethod> getConstructors() { - return new FilteringIterable<JavaResourceMethod>(this.getMethods()) { - @Override - protected boolean accept(JavaResourceMethod method) { - return method.isConstructor(); - } - }; - } - - - // ********** types ********** - - public Iterable<JavaResourceType> getTypes() { - return new LiveCloneIterable<JavaResourceType>(this.types); // read-only - } - - public Iterable<JavaResourceType> getAllTypes() { - return new TreeIterable<JavaResourceType>(this) { - @Override - protected Iterator<? extends JavaResourceType> children(JavaResourceType type) { - return type.getTypes().iterator(); - } - }; - } - - private JavaResourceType getType(String typeName, int occurrence) { - for (JavaResourceType type : this.getTypes()) { - if (type.isFor(typeName, occurrence)) { - return type; - } - } - return null; - } - - private void addType(JavaResourceType type) { - this.addItemToCollection(type, this.types, TYPES_COLLECTION); - } - - private void removeTypes(Collection<JavaResourceType> remove) { - this.removeItemsFromCollection(remove, this.types, TYPES_COLLECTION); - } - - private void initializeTypes(CompilationUnit astRoot) { - TypeDeclaration[] typeDeclarations = this.annotatedElement.getTypes(astRoot); - CounterMap counters = new CounterMap(typeDeclarations.length); - for (TypeDeclaration td : typeDeclarations) { - String tdName = td.getName().getFullyQualifiedName(); - int occurrence = counters.increment(tdName); - this.types.add(this.buildType(td, occurrence, astRoot)); - } - } - - private void syncTypes(CompilationUnit astRoot) { - TypeDeclaration[] typeDeclarations = this.annotatedElement.getTypes(astRoot); - CounterMap counters = new CounterMap(typeDeclarations.length); - HashSet<JavaResourceType> typesToRemove = new HashSet<JavaResourceType>(this.types); - for (TypeDeclaration typeDeclaration : typeDeclarations) { - String tdName = typeDeclaration.getName().getFullyQualifiedName(); - int occurrence = counters.increment(tdName); - - JavaResourceType type = this.getType(tdName, occurrence); - if (type == null) { - this.addType(this.buildType(typeDeclaration, occurrence, astRoot)); - } else { - typesToRemove.remove(type); - type.synchronizeWith(astRoot); - } - } - this.removeTypes(typesToRemove); - } - - private JavaResourceType buildType(TypeDeclaration nestedTypeDeclaration, int occurrence, CompilationUnit astRoot) { - return newInstance(this.getJavaResourceCompilationUnit(), this.annotatedElement, nestedTypeDeclaration, occurrence, astRoot); - } - - - // ********** enums ********** - - public Iterable<JavaResourceEnum> getEnums() { - return new LiveCloneIterable<JavaResourceEnum>(this.enums); // read-only - } - - public Iterable<JavaResourceEnum> getAllEnums() { - return this.getEnums(); - } - - private JavaResourceEnum getEnum(String enumName, int occurrence) { - for (JavaResourceEnum enum_ : this.getEnums()) { - if (enum_.isFor(enumName, occurrence)) { - return enum_; - } - } - return null; - } - - private void addEnum(JavaResourceEnum enum_) { - this.addItemToCollection(enum_, this.enums, ENUMS_COLLECTION); - } - - private void removeEnums(Collection<JavaResourceEnum> remove) { - this.removeItemsFromCollection(remove, this.enums, ENUMS_COLLECTION); - } - - private void initializeEnums(CompilationUnit astRoot) { - EnumDeclaration[] enumDeclarations = this.annotatedElement.getEnums(astRoot); - CounterMap counters = new CounterMap(enumDeclarations.length); - for (EnumDeclaration ed : enumDeclarations) { - String tdName = ed.getName().getFullyQualifiedName(); - int occurrence = counters.increment(tdName); - this.enums.add(this.buildEnum(ed, occurrence, astRoot)); - } - } - - private void syncEnums(CompilationUnit astRoot) { - EnumDeclaration[] enumDeclarations = this.annotatedElement.getEnums(astRoot); - CounterMap counters = new CounterMap(enumDeclarations.length); - HashSet<JavaResourceEnum> enumsToRemove = new HashSet<JavaResourceEnum>(this.enums); - for (EnumDeclaration enumDeclaration : enumDeclarations) { - String tdName = enumDeclaration.getName().getFullyQualifiedName(); - int occurrence = counters.increment(tdName); - - JavaResourceEnum enum_ = this.getEnum(tdName, occurrence); - if (enum_ == null) { - this.addEnum(this.buildEnum(enumDeclaration, occurrence, astRoot)); - } else { - enumsToRemove.remove(enum_); - enum_.synchronizeWith(astRoot); - } - } - this.removeEnums(enumsToRemove); - } - - private JavaResourceEnum buildEnum(EnumDeclaration nestedEnumDeclaration, int occurrence, CompilationUnit astRoot) { - return SourceEnum.newInstance(this.getJavaResourceCompilationUnit(), this.annotatedElement, nestedEnumDeclaration, occurrence, astRoot); - } - - - // ********** fields ********** - - public Iterable<JavaResourceField> getFields() { - return new LiveCloneIterable<JavaResourceField>(this.fields); - } - - private void addField(JavaResourceField field) { - this.addItemToCollection(field, this.fields, FIELDS_COLLECTION); - } - - private JavaResourceField getField(String fieldName, int occurrence) { - for (JavaResourceField field : this.getFields()) { - if (field.isFor(fieldName, occurrence)) { - return field; - } - } - return null; - } - - private void removeFields(Collection<JavaResourceField> remove) { - this.removeItemsFromCollection(remove, this.fields, FIELDS_COLLECTION); - } - - private void initializeFields(CompilationUnit astRoot) { - FieldDeclaration[] fieldDeclarations = this.annotatedElement.getFields(astRoot); - CounterMap counters = new CounterMap(fieldDeclarations.length); - for (FieldDeclaration fieldDeclaration : fieldDeclarations) { - for (VariableDeclarationFragment fragment : fragments(fieldDeclaration)) { - String fieldName = fragment.getName().getFullyQualifiedName(); - int occurrence = counters.increment(fieldName); - this.fields.add(this.buildField(fieldName, occurrence, astRoot)); - } - } - } - - private void syncFields(CompilationUnit astRoot) { - FieldDeclaration[] fieldDeclarations = this.annotatedElement.getFields(astRoot); - CounterMap counters = new CounterMap(fieldDeclarations.length); - HashSet<JavaResourceField> fieldsToRemove = new HashSet<JavaResourceField>(this.fields); - for (FieldDeclaration fieldDeclaration : fieldDeclarations) { - for (VariableDeclarationFragment fragment : fragments(fieldDeclaration)) { - String fieldName = fragment.getName().getFullyQualifiedName(); - int occurrence = counters.increment(fieldName); - - JavaResourceField field = this.getField(fieldName, occurrence); - if (field == null) { - this.addField(this.buildField(fieldName, occurrence, astRoot)); - } else { - fieldsToRemove.remove(field); - field.synchronizeWith(astRoot); - } - } - } - this.removeFields(fieldsToRemove); - } - - private JavaResourceField buildField(String fieldName, int occurrence, CompilationUnit astRoot) { - return SourceField.newInstance(this, this.annotatedElement, fieldName, occurrence, this.getJavaResourceCompilationUnit(), astRoot); - } - - // minimize scope of suppressed warnings - @SuppressWarnings("unchecked") - private static List<VariableDeclarationFragment> fragments(FieldDeclaration fd) { - return fd.fragments(); - } - - - // ********** methods ********** - - public Iterable<JavaResourceMethod> getMethods() { - return new LiveCloneIterable<JavaResourceMethod>(this.methods); - } - - private static JavaResourceMethod getMethod(Collection<JavaResourceMethod> methods, MethodSignature signature, int occurrence) { - for (JavaResourceMethod method : methods) { - if (method.isFor(signature, occurrence)) { - return method; - } - } - return null; - } - - private void addMethod(JavaResourceMethod method) { - this.addItemToCollection(method, this.methods, METHODS_COLLECTION); - } - - private void removeMethods(Collection<JavaResourceMethod> remove) { - this.removeItemsFromCollection(remove, this.methods, METHODS_COLLECTION); - } - - private void initializeMethods(CompilationUnit astRoot) { - MethodDeclaration[] methodDeclarations = this.annotatedElement.getMethods(astRoot); - CounterMap counters = new CounterMap(methodDeclarations.length); - for (MethodDeclaration methodDeclaration : methodDeclarations) { - MethodSignature signature = ASTTools.buildMethodSignature(methodDeclaration); - int occurrence = counters.increment(signature); - this.methods.add(this.buildMethod(signature, occurrence, methodDeclaration)); - } - } - - private void syncMethods(CompilationUnit astRoot) { - MethodDeclaration[] methodDeclarations = this.annotatedElement.getMethods(astRoot); - CounterMap counters = new CounterMap(methodDeclarations.length); - HashSet<JavaResourceMethod> methodsToRemove = new HashSet<JavaResourceMethod>(this.methods); - for (MethodDeclaration methodDeclaration : methodDeclarations) { - MethodSignature signature = ASTTools.buildMethodSignature(methodDeclaration); - int occurrence = counters.increment(signature); - - JavaResourceMethod method = getMethod(methodsToRemove, signature, occurrence); - if (method == null) { - this.addMethod(this.buildMethod(signature, occurrence, methodDeclaration)); - } else { - methodsToRemove.remove(method); - method.synchronizeWith(methodDeclaration); - } - } - this.removeMethods(methodsToRemove); - } - - private JavaResourceMethod buildMethod(MethodSignature signature, int occurrence, MethodDeclaration methodDeclaration) { - return SourceMethod.newInstance(this, this.annotatedElement, signature, occurrence, this.getJavaResourceCompilationUnit(), methodDeclaration); - } - - - public boolean hasAnyAnnotatedFields() { - for (JavaResourceField field : this.getFields()) { - if (field.isAnnotated()) { - return true; - } - } - return false; - } - - public boolean hasAnyAnnotatedMethods() { - for (JavaResourceMethod method : this.getMethods()) { - if (method.isAnnotated()) { - return true; - } - } - return false; - } - - // Two more requirements for a valid equals() method: - // 1. It should be public - // 2. The return type should be boolean - // Both requirements are validated by the compiler so they are excluded here - public boolean hasEqualsMethod() { - for (JavaResourceMethod method : this.getMethods()) { - if (StringTools.stringsAreEqual(method.getMethodName(), "equals") //$NON-NLS-1$ - && method.getParametersSize() == 1 - && StringTools.stringsAreEqual(method.getParameterTypeName(0), Object.class.getName())) { - return true; - } - } - return false; - } - - // Two more requirements for a valid hashCode() method: - // 1. It should be public - // 2. The return type should be int - // Both requirements are validated by the compiler so they are excluded here - public boolean hasHashCodeMethod() { - for (JavaResourceMethod method : this.getMethods()) { - if (StringTools.stringsAreEqual(method.getMethodName(), "hashCode") //$NON-NLS-1$ - && method.getParametersSize() == 0) { - return true; - } - } - return false; - } - - public JavaResourceMethod getMethod(String propertyName) { - for (JavaResourceMethod method : this.getMethods()) { - if (StringTools.stringsAreEqual(method.getMethodName(), propertyName)) { - return method; - } - } - return null; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceTypeCompilationUnit.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceTypeCompilationUnit.java deleted file mode 100644 index bf5333f91d..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/resource/java/source/SourceTypeCompilationUnit.java +++ /dev/null @@ -1,190 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core.internal.resource.java.source; - -import java.util.List; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.EnumDeclaration; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.JptResourceType; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.utility.command.CommandExecutor; -import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; - -/** - * Java compilation unit (source file) - * non package-info.java file - */ -public final class SourceTypeCompilationUnit - extends SourceCompilationUnit -{ - - /** - * The primary type of the AST compilation unit. We are not going to handle - * multiple types defined in a single compilation unit. Entities must have - * a public/protected no-arg constructor, and there is no way to access - * the constructor in a package class (which is what all top-level, - * non-primary classes must be). - */ - private JavaResourceAbstractType primaryType; - - - // ********** construction ********** - - public SourceTypeCompilationUnit( - ICompilationUnit compilationUnit, - AnnotationProvider annotationProvider, - AnnotationEditFormatter annotationEditFormatter, - CommandExecutor modifySharedDocumentCommandExecutor) { - super(compilationUnit, annotationProvider, annotationEditFormatter, modifySharedDocumentCommandExecutor); // the compilation unit is the root of its sub-tree - this.primaryType = this.buildPrimaryType(); - } - - private JavaResourceAbstractType buildPrimaryType() { - this.openCompilationUnit(); - CompilationUnit astRoot = this.buildASTRoot(); - this.closeCompilationUnit(); - return this.buildPrimaryType(astRoot); - } - - - // ********** JavaResourceNode implementation ********** - - public void synchronizeWith(CompilationUnit astRoot) { - this.syncPrimaryType(astRoot); - } - - - // ********** JavaResourceNode.Root implementation ********** - - /** - * NB: return *all* the types since we build them all - */ - public Iterable<JavaResourceAbstractType> getTypes() { - return (this.primaryType == null) ? - EmptyIterable.<JavaResourceAbstractType>instance() : - new CompositeIterable<JavaResourceAbstractType>(this.primaryType.getAllTypes(), this.primaryType.getAllEnums()); - } - - - // ********** JpaResourceModel implementation ********** - - public JptResourceType getResourceType() { - return JptCommonCorePlugin.JAVA_SOURCE_RESOURCE_TYPE; - } - - - // ********** JavaResourceCompilationUnit implementation ********** - - public void resolveTypes() { - if (this.primaryType != null) { - this.primaryType.resolveTypes(this.buildASTRoot()); - } - } - - - // ********** type ********** - - public JavaResourceAbstractType getPrimaryType() { - return this.primaryType; - } - - private JavaResourceAbstractType buildPrimaryType(CompilationUnit astRoot) { - AbstractTypeDeclaration td = this.getPrimaryTypeOrEnumDeclaration(astRoot); - return (td == null) ? null : this.buildPrimaryType(astRoot, td); - } - - - private void syncPrimaryType(CompilationUnit astRoot) { - AbstractTypeDeclaration td = this.getPrimaryTypeOrEnumDeclaration(astRoot); - if (td == null) { - this.syncPrimaryType_(null); - } else { - if (this.primaryType == null || (!typeMatchesASTNodeType(this.primaryType, td))) { - this.syncPrimaryType_(this.buildPrimaryType(astRoot, td)); - } else { - this.primaryType.synchronizeWith(astRoot); - } - } - } - - /** - * Must be non-null JavaResourceAbstractType and AbstractTypeDeclaration - */ - protected static boolean typeMatchesASTNodeType(JavaResourceAbstractType type, AbstractTypeDeclaration astType) { - return type.getKind().getAstNodeType() == astType.getNodeType(); - } - - private void syncPrimaryType_(JavaResourceAbstractType astType) { - JavaResourceAbstractType old = this.primaryType; - this.primaryType = astType; - this.firePropertyChanged(TYPES_COLLECTION, old, astType); - } - - - // ********** internal ********** - - private JavaResourceAbstractType buildPrimaryType(CompilationUnit astRoot, AbstractTypeDeclaration typeDeclaration) { - if (typeDeclaration.getNodeType() == ASTNode.TYPE_DECLARATION) { - return SourceType.newInstance(this, (TypeDeclaration) typeDeclaration, astRoot); - } - else if (typeDeclaration.getNodeType() == ASTNode.ENUM_DECLARATION) { - return SourceEnum.newInstance(this, (EnumDeclaration) typeDeclaration, astRoot); - } - throw new IllegalArgumentException(); - } - - /** - * i.e. the type with the same name as the compilation unit; - * return the first class, interface or enum (ignore annotations) with - * the same name as the compilation unit (file); - * NB: this type could be in error if there is an annotation - * with the same name preceding it in the compilation unit - * - * Return null if the parser did not resolve the type declaration's binding. - * This can occur if the project JRE is removed (bug 225332). - */ - private AbstractTypeDeclaration getPrimaryTypeOrEnumDeclaration(CompilationUnit astRoot) { - String primaryTypeName = this.getPrimaryTypeName(); - for (AbstractTypeDeclaration atd : this.types(astRoot)) { - if (this.nodeIsPrimaryTypeOrEnumDeclaration(atd, primaryTypeName)) { - return (atd.resolveBinding() == null) ? null : atd; - } - } - return null; - } - - private boolean nodeIsPrimaryTypeOrEnumDeclaration(AbstractTypeDeclaration atd, String primaryTypeName) { - return this.nodeIsTypeOrEnumDeclaration(atd) && - (atd.getName().getFullyQualifiedName().equals(primaryTypeName)); - } - - private boolean nodeIsTypeOrEnumDeclaration(AbstractTypeDeclaration atd) { - return atd.getNodeType() == ASTNode.TYPE_DECLARATION || - atd.getNodeType() == ASTNode.ENUM_DECLARATION; - } - - private String getPrimaryTypeName() { - return this.getCompilationUnitName(); - } - - // minimize scope of suppressed warnings - @SuppressWarnings("unchecked") - private List<AbstractTypeDeclaration> types(CompilationUnit astRoot) { - return astRoot.types(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/CallbackJobSynchronizer.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/CallbackJobSynchronizer.java deleted file mode 100644 index 947d027e5e..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/CallbackJobSynchronizer.java +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2012 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.common.core.internal.utility; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.jpt.common.core.utility.command.JobCommand; -import org.eclipse.jpt.common.utility.internal.ListenerList; -import org.eclipse.jpt.common.utility.synchronizers.CallbackSynchronizer; - -/** - * Extend the job synchronizer to notify listeners - * when a synchronization "cycle" is complete; i.e. the synchronization has, - * for the moment, handled every "synchronize" request and quiesced. - * This notification is <em>not</em> guaranteed to occur with <em>every</em> - * synchronization "cycle"; - * since other, unrelated, synchronizations can be triggered concurrently; - * preventing the synchronization from quiescing. - */ -public class CallbackJobSynchronizer - extends JobSynchronizer - implements CallbackSynchronizer -{ - private final ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class); - - - // ********** construction ********** - - /** - * Construct a callback job synchronizer that uses the specified job command to - * perform the synchronization. Assign the generated Eclipse job the - * specified name. - */ - public CallbackJobSynchronizer(String jobName, JobCommand command) { - super(jobName, command); - } - - /** - * Construct a callback job synchronizer that uses the specified job command to - * perform the synchronization. Assign the generated Eclipse job the - * specified name and scheduling rule. - */ - public CallbackJobSynchronizer(String jobName, JobCommand command, ISchedulingRule schedulingRule) { - super(jobName, command, schedulingRule); - } - - /** - * Build a job that will let us know when the synchronization has - * quiesced. - */ - @Override - SynchronizationJob buildJob(String jobName, JobCommand command, ISchedulingRule schedulingRule) { - return new CallbackSynchronizationJob(jobName, command, schedulingRule); - } - - - // ********** CallbackSynchronizer implementation ********** - - public void addListener(Listener listener) { - this.listenerList.add(listener); - } - - public void removeListener(Listener listener) { - this.listenerList.remove(listener); - } - - /** - * Notify our listeners. - */ - void synchronizationQuiesced() { - for (Listener listener : this.listenerList.getListeners()) { - listener.synchronizationQuiesced(this); - } - } - - - // ********** synchronization job ********** - - /** - * Extend {@link JobSynchronizer.SynchronizationJob} - * to notify the synchronizer when the synchronization has quiesced - * (i.e. the command has finished executing and there are no further - * requests for synchronization). - * Because synchronization occurs during the job's execution, - * no other thread will be able to - * initiate another synchronization until the synchronizer's listeners have been - * notified. Note also, the synchronizer's listeners can, themselves, - * trigger another synchronization (by directly or indirectly calling - * {@link org.eclipse.jpt.common.utility.synchronizers.Synchronizer#synchronize()}); - * but this synchronization will not occur until <em>after</em> all the - * listeners have been notified. - */ - class CallbackSynchronizationJob - extends SynchronizationJob - { - /** - * When this flag is set to true, the job has been scheduled to run. - * We need this because {@link org.eclipse.core.runtime.jobs.Job Job} - * has no public API for discovering whether a job is "scheduled". - */ - // use 'volatile' because synchronization isn't really required - private volatile boolean scheduled; - - - CallbackSynchronizationJob(String jobName, JobCommand command, ISchedulingRule schedulingRule) { - super(jobName, command, schedulingRule); - this.scheduled = false; - } - - /** - * If we are allowing the job to be scheduled (i.e. {@link #start()} - * was called), set the "scheduled" flag. - */ - @Override - void synchronize() { - if (this.shouldSchedule) { - this.scheduled = true; - } - super.synchronize(); - } - - /** - * Clear the "scheduled" flag; perform the synchronization; and, - * if the "scheduled" flag is still clear (i.e. there have been no - * further calls to {@link #synchronize()}), notify our listeners. - */ - @Override - protected IStatus run(IProgressMonitor monitor) { - this.scheduled = false; - IStatus status = super.run(monitor); - // hmmm - we will notify listeners even when we our job is "stopped"; - // that seems ok... ~bjv - if ( ! this.scheduled) { - CallbackJobSynchronizer.this.synchronizationQuiesced(); - } - return status; - } - - @Override - void stop() { - this.scheduled = false; - super.stop(); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/ICUStringCollator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/ICUStringCollator.java deleted file mode 100644 index 555fa43caf..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/ICUStringCollator.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 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.common.core.internal.utility; - -import java.util.Comparator; -import java.util.Locale; -import org.eclipse.jpt.common.utility.internal.StringTools; -import com.ibm.icu.text.Collator; - -/** - * This collator simply wraps an ICU4J collator and implements a - * {@link String} {@link Comparator} (instead of an {@link Object} - * {@link Comparator}, which is what {@link Collator} does, mimicking the - * JDK(?)). - * - * @see Collator - */ -public class ICUStringCollator - implements Comparator<String> -{ - private final Collator collator; - - - /** - * Wrap the default collator. - * @see Collator#getInstance() - */ - public ICUStringCollator() { - this(Collator.getInstance()); - } - - /** - * Wrap the collator for the specified locale. - * @see Collator#getInstance(Locale) - */ - public ICUStringCollator(Locale locale) { - this(Collator.getInstance(locale)); - } - - /** - * Wrap the specified collator. - */ - public ICUStringCollator(Collator collator) { - super(); - this.collator = collator; - } - - public int compare(String string1, String string2) { - return this.collator.compare(string1, string2); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.collator); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JDTTools.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JDTTools.java deleted file mode 100644 index 024853c8cd..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JDTTools.java +++ /dev/null @@ -1,256 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.utility; - -import java.io.FileNotFoundException; -import java.util.ArrayList; -import org.eclipse.jdt.core.Flags; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.IMethod; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jdt.core.IParent; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.utility.Filter; -import org.eclipse.jpt.common.utility.internal.NotNullFilter; -import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; -import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; -import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; -import org.eclipse.jpt.common.utility.internal.iterables.SingleElementIterable; - -/** - * Convenience methods for dealing with JDT core - */ -public final class JDTTools { - - /** - * Wrap checked exception. - */ - public static boolean packageFragmentRootIsSourceFolder(IPackageFragmentRoot pfr) { - try { - return packageFragmentRootIsSourceFolder_(pfr); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - static boolean packageFragmentRootIsSourceFolder_(IPackageFragmentRoot pfr) throws JavaModelException { - return pfr.exists() && (pfr.getKind() == IPackageFragmentRoot.K_SOURCE); - } - - /** - * Wrap checked exception and check for out of sync workspace. - */ - public static IJavaElement[] getChildren(IParent parent) { - try { - return parent.getChildren(); - } catch (JavaModelException ex) { - // ignore FNFE - which can happen when the workspace is out of sync with O/S file system - if ( ! (ex.getCause() instanceof FileNotFoundException)) { - JptCommonCorePlugin.log(ex); - } - return EMPTY_JAVA_ELEMENT_ARRAY; - } - } - - private static final IJavaElement[] EMPTY_JAVA_ELEMENT_ARRAY = new IJavaElement[0]; - - /** - * Climb the specified type's inheritance hierarchy looking for the specified interface. - */ - public static boolean typeIsSubType(IJavaProject javaProject, String potentialSubType, String potentialSuperType) { - try { - return typeIsSubType(javaProject, javaProject.findType(potentialSubType), javaProject.findType(potentialSuperType)); - } - catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - public static boolean typeIsSubType(IJavaProject javaProject, IType potentialSubType, String potentialSuperType) { - try { - return typeIsSubType_(javaProject, potentialSubType, potentialSuperType); - } - catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return false; - } - } - - private static boolean typeIsSubType_(IJavaProject javaProject, IType potentialSubType, String potentialSuperType) throws JavaModelException { - return typeIsSubType(javaProject, potentialSubType, javaProject.findType(potentialSuperType)); - } - - private static boolean typeIsSubType(IJavaProject javaProject, IType potentialSubType, IType potentialSuperType) throws JavaModelException { - if ((potentialSubType == null) || (potentialSuperType == null)) { - return false; - } - - // short cut if types are the same - if (potentialSubType.equals(potentialSuperType)) { - return true; - } - - // short cut if potential supertype is java.lang.Object - if (javaProject.findType(Object.class.getName()).equals(potentialSuperType)) { - return true; - } - - String potentialSuperTypeName = potentialSuperType.getFullyQualifiedName(); - - for (String superTypeName : getResolvedSuperTypeNames(potentialSubType)) { - if (superTypeName.equals(potentialSuperTypeName)) { - return true; - } - - // recurse into super type - if (typeIsSubType(javaProject, javaProject.findType(superTypeName), potentialSuperType)) { - return true; - } - } - - return false; - } - - /** - * Return the names of the specified type's supertypes (class and interfaces). - * This is necessary because, for whatever reason, { @link IType#getSuperInterfaceNames()} - * {@link IType#getSuperclassName()} return unqualified names when the type is from Java source. - */ - private static Iterable<String> getResolvedSuperTypeNames(IType type) throws JavaModelException { - Iterable<String> nonResolvedSuperTypeNames = getNonResolvedSuperTypeNames(type); - if (type.isBinary()) { - // if type is binary, the types are already resolved - return nonResolvedSuperTypeNames; - } - ArrayList<String> resolvedSuperTypeNames = new ArrayList<String>(); - for (String superTypeName : nonResolvedSuperTypeNames) { - resolvedSuperTypeNames.add(resolveType(type, superTypeName)); - } - return resolvedSuperTypeNames; - } - - /** - * Return the (potentially) non-resolved names of the specified type's supertypes (class and interfaces). - * This is necessary because, for whatever reason, { @link IType#getSuperInterfaceNames()} and - * {@link IType#getSuperclassName()} return unqualified names when the type is from Java source. - */ - private static Iterable<String> getNonResolvedSuperTypeNames(IType type) throws JavaModelException { - return new CompositeIterable<String>( - new FilteringIterable<String>( - new SingleElementIterable<String>(type.getSuperclassName()), - NotNullFilter.<String>instance()), - new ArrayIterable<String>(type.getSuperInterfaceNames())); - } - - /** - * Just grab the first candidate type. - */ - private static String resolveType(IType type, String className) throws JavaModelException { - String[][] resolvedClassNames = type.resolveType(className); - if (resolvedClassNames == null) { - return null; - } - String pkg = resolvedClassNames[0][0]; - String cls = resolvedClassNames[0][1]; - // check for default package - return (pkg.length() == 0) ? cls : (pkg + '.' + cls); - } - - public static IType findType(IJavaProject javaProject, String fullyQualifiedName) { - try { - return javaProject.findType(fullyQualifiedName); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return null; - } - } - - public static Iterable<IPackageFragmentRoot> getJavaSourceFolders(IJavaProject javaProject) { - return new FilteringIterable<IPackageFragmentRoot>( - getPackageFragmentRoots(javaProject), - SOURCE_PACKAGE_FRAGMENT_ROOT_FILTER - ); - } - - private static final Filter<IPackageFragmentRoot> SOURCE_PACKAGE_FRAGMENT_ROOT_FILTER = - new Filter<IPackageFragmentRoot>() { - public boolean accept(IPackageFragmentRoot pfr) { - return packageFragmentRootIsSourceFolder(pfr); - } - }; - - private static Iterable<IPackageFragmentRoot> getPackageFragmentRoots(IJavaProject javaProject) { - try { - return getPackageFragmentRoots_(javaProject); - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - return EmptyIterable.instance(); - } - } - - private static Iterable<IPackageFragmentRoot> getPackageFragmentRoots_(IJavaProject javaProject) throws JavaModelException { - return new ArrayIterable<IPackageFragmentRoot>(javaProject.getPackageFragmentRoots()); - } - - public static boolean typeIsEnum(IType type) { - try { - if (type.isEnum()) { - return true; - } - } - catch (JavaModelException e) { - JptCommonCorePlugin.log(e); - } - return false; - } - - public static boolean typeIsSerializable(IJavaProject javaProject, IType type) { - return typeIsSubType(javaProject, type, SERIALIZABLE_CLASS_NAME); - } - - public static final String SERIALIZABLE_CLASS_NAME = java.io.Serializable.class.getName(); - - public static boolean classHasPublicZeroArgConstructor(IJavaProject javaProject, String className) { - if (javaProject != null && className != null) { - IType type = findType(javaProject, className); - if (type != null) { - return typeHasPublicZeroArgConstructor(type); - } - } - return false; - } - - public static boolean typeHasPublicZeroArgConstructor(IType type) { - boolean hasDefinedConstructor = false; - try { - for (IMethod method : type.getMethods()) { - if (method.isConstructor()) { - if ((method.getNumberOfParameters() == 0) && (Flags.isPublic(method.getFlags()))) { - return true; - } - hasDefinedConstructor = true; - } - } - //When there's no defined constructor, the default constructor is in place. - if (!hasDefinedConstructor) { - return true; - } - } catch (JavaModelException ex) { - JptCommonCorePlugin.log(ex); - } - return false; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JobSynchronizer.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JobSynchronizer.java deleted file mode 100644 index 768e8e01e6..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JobSynchronizer.java +++ /dev/null @@ -1,199 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2012 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.common.core.internal.utility; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jpt.common.core.utility.command.JobCommand; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.synchronizers.Synchronizer; - -/** - * This synchronizer will perform synchronizations in an Eclipse job on a - * separate thread, allowing calls to {@link Synchronizer#synchronize()} - * to return immediately. - * <p> - * If necessary, the client-supplied job command should handle any - * exceptions appropriately. Although, the default exception-handling provided - * by the Eclipse Job Framework is probably adequate in most cases:<ul> - * <li>An {@link org.eclipse.core.runtime.OperationCanceledException OperationCanceledException} - * results in a {@link org.eclipse.core.runtime.Status#CANCEL_STATUS CANCEL_STATUS}. - * <li>Any non-{@link ThreadDeath} {@link Throwable} - * results in a {@link org.eclipse.core.runtime.IStatus#ERROR ERROR} - * {@link org.eclipse.core.runtime.IStatus IStatus} - * </ul> - * @see org.eclipse.core.internal.jobs.Worker#run() - */ -public class JobSynchronizer - implements Synchronizer -{ - /** - * The synchronization is performed by this job. The same job is used - * for every start/stop cycle (since a job can be re-started). - */ - private final SynchronizationJob job; - - - // ********** construction ********** - - /** - * Construct a job synchronizer that uses the specified job command to - * perform the synchronization. Assign the generated Eclipse job the - * specified name. - */ - public JobSynchronizer(String jobName, JobCommand command) { - this(jobName, command, null); - } - - /** - * Construct a job synchronizer that uses the specified job command to - * perform the synchronization. Assign the generated Eclipse job the - * specified name and scheduling rule. - */ - public JobSynchronizer(String jobName, JobCommand command, ISchedulingRule schedulingRule) { - super(); - this.job = this.buildJob(jobName, command, schedulingRule); - } - - SynchronizationJob buildJob(String jobName, JobCommand command, ISchedulingRule schedulingRule) { - return new SynchronizationJob(jobName, command, schedulingRule); - } - - - // ********** Synchronizer implementation ********** - - /** - * Allow the job to be scheduled, but postpone the first synchronization - * until requested, via {@link #synchronize()}. - */ - public void start() { - this.job.start(); - } - - /** - * "Schedule" the job. - */ - public void synchronize() { - this.job.synchronize(); - } - - /** - * Wait for the current job execution to complete. - */ - public void stop() { - this.job.stop(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.job); - } - - - // ********** synchronization job ********** - - /** - * This is the job that gets scheduled by the job synchronizer. - * When the job is run it executes the client-supplied job command. - */ - static class SynchronizationJob - extends Job - { - /** - * The client-supplied job command that executes every time the job - * runs. - */ - private final JobCommand command; - - /** - * When this flag is set to false, the job does not stop immediately; - * but it will not be scheduled to run again. - */ - // use 'volatile' because synchronization isn't really required - volatile boolean shouldSchedule; - - - SynchronizationJob(String jobName, JobCommand command, ISchedulingRule schedulingRule) { - super(jobName); - if (command == null) { - throw new NullPointerException(); - } - this.command = command; - this.shouldSchedule = false; - this.setRule(schedulingRule); - } - - /** - * Just set the "should schedule" flag so the job <em>can</em> be - * scheduled; but don't actually schedule it. - */ - void start() { - if (this.shouldSchedule) { - throw new IllegalStateException("The Synchronizer was not stopped."); //$NON-NLS-1$ - } - this.shouldSchedule = true; - } - - /** - * Simply re-schedule the job, allowing the current execution - * to run to completion (i.e. do not try to cancel it prematurely). - * This should minimize the number of times the job is re-executed - * (recursively and otherwise). - */ - void synchronize() { - this.schedule(); - } - - /** - * Any uncaught exceptions thrown by the command will be reasonably - * handled by the Job Framework. - * @see org.eclipse.core.internal.jobs.Worker#run() - */ - @Override - protected IStatus run(IProgressMonitor monitor) { - return this.command.execute(monitor); - } - - /** - * Prevent the job from running again and wait for the current - * execution, if there is any, to end before returning. - */ - void stop() { - if ( ! this.shouldSchedule) { - throw new IllegalStateException("The Synchronizer was not started."); //$NON-NLS-1$ - } - // this will prevent the job from being scheduled to run again - this.shouldSchedule = false; - // this will cancel the job if it has already been scheduled, but is currently WAITING - this.cancel(); - try { - // if the job is currently RUNNING, wait until it is done before returning - this.join(); - } catch (InterruptedException ex) { - // the thread that called #stop() was interrupted while waiting to - // join the synchronization job - ignore; - // 'shouldSchedule' is still set to 'false', so the job loop will still stop - we - // just won't wait around for it... - } - } - - /** - * This is part of the normal {@link Job} behavior. By default, it is - * not used (i.e. it always returns <code>true</code>). - * We implement it here. - */ - @Override - public boolean shouldSchedule() { - return this.shouldSchedule; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/PlatformTools.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/PlatformTools.java deleted file mode 100644 index 462ccd18c3..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/PlatformTools.java +++ /dev/null @@ -1,115 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2012 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.common.core.internal.utility; - -import java.io.IOException; -import java.io.InputStream; -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.core.runtime.content.IContentTypeManager; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; - -/** - * A collection of utilities for dealing with the Eclipse platform API. - */ -public class PlatformTools { - /** - * Add some Generic Goodness to the method signature. - * @see org.eclipse.core.runtime.IAdapterManager#getAdapter(Object, Class) - */ - @SuppressWarnings("unchecked") - public static <A> A getAdapter(Object o, Class<A> adapterType) { - return (A) Platform.getAdapterManager().getAdapter(o, adapterType); - } - - /** - * Return the {@link IContainer} with the workspace relative "full" path - */ - public static IContainer getContainer(IPath fullContainerPath) { - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - // changed to handle non-workspace projects - String projectName = fullContainerPath.segment(0).toString(); - IPath projectRelativePath = fullContainerPath.removeFirstSegments(1); - IProject project = root.getProject(projectName); - if (projectRelativePath.isEmpty()) { - return project; - } - return project.getFolder(projectRelativePath); - } - - /** - * Return the {@link IFile} with the workspace relative "full" path - */ - public static IFile getFile(IPath fullFilePath) { - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - // changed to handle non-workspace projects - String projectName = fullFilePath.segment(0).toString(); - IPath projectRelativePath = fullFilePath.removeFirstSegments(1); - IProject project = root.getProject(projectName); - return project.getFile(projectRelativePath); - } - - /** - * Return the specified file's content type, - * using the Eclipse platform's content type manager. - */ - public static IContentType getContentType(IFile file) { - String fileName = file.getName(); - InputStream fileContents = null; - try { - fileContents = file.getContents(); - } catch (CoreException ex) { - // seems like we can ignore any exception that might occur here; - // e.g. we get a FNFE if the workspace is out of sync with the O/S file system - // JptCorePlugin.log(ex); - - // look for content type based on the file name only(?) - return findContentTypeFor(fileName); - } - - IContentType contentType = null; - try { - contentType = findContentTypeFor(fileContents, fileName); - } catch (IOException ex) { - JptCommonCorePlugin.log(ex); - } finally { - try { - fileContents.close(); - } catch (IOException ex) { - JptCommonCorePlugin.log(ex); - } - } - return contentType; - } - - private static IContentType findContentTypeFor(InputStream fileContents, String fileName) throws IOException { - return getContentTypeManager().findContentTypeFor(fileContents, fileName); - } - - private static IContentType findContentTypeFor(String fileName) { - return getContentTypeManager().findContentTypeFor(fileName); - } - - private static IContentTypeManager getContentTypeManager() { - return Platform.getContentTypeManager(); - } - - private PlatformTools() { - super(); - throw new UnsupportedOperationException(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/SimpleSchedulingRule.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/SimpleSchedulingRule.java deleted file mode 100644 index ca5915ac96..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/SimpleSchedulingRule.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2012 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.common.core.internal.utility; - -import java.io.Serializable; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A job scheduling rule that conflicts only with itself. - */ -public final class SimpleSchedulingRule - implements ISchedulingRule, Serializable -{ - private static final long serialVersionUID = 1L; - - public SimpleSchedulingRule() { - super(); - } - - public boolean contains(ISchedulingRule rule) { - return rule == this; - } - - public boolean isConflicting(ISchedulingRule rule) { - return rule == this; - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/SimpleTextRange.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/SimpleTextRange.java deleted file mode 100644 index 2164e3348e..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/SimpleTextRange.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2011 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.common.core.internal.utility; - -import org.eclipse.jpt.common.core.utility.AbstractTextRange; - -/** - * Straightforward implementation of - * {@link org.eclipse.jpt.common.core.utility.TextRange TextRange}. - */ -public class SimpleTextRange - extends AbstractTextRange -{ - private final int offset; - private final int length; - private final int lineNumber; - - - public SimpleTextRange(int offset, int length, int lineNumber) { - super(); - this.offset = offset; - this.length = length; - this.lineNumber = lineNumber; - } - - public int getOffset() { - return this.offset; - } - - public int getLength() { - return this.length; - } - - public int getLineNumber() { - return this.lineNumber; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/WorkspaceRunnableAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/WorkspaceRunnableAdapter.java deleted file mode 100644 index 2958fe42aa..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/WorkspaceRunnableAdapter.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.utility; - -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Convenience implementation of {@link IWorkspaceRunnable}. - */ -public class WorkspaceRunnableAdapter - implements IWorkspaceRunnable -{ - public void run(IProgressMonitor monitor) throws CoreException { - // NOP - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/XPointTools.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/XPointTools.java deleted file mode 100644 index 5942fb531f..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/XPointTools.java +++ /dev/null @@ -1,139 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.internal.utility; - -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.internal.JptCommonCoreMessages; -import org.eclipse.osgi.util.NLS; -import org.osgi.framework.Bundle; - -/** - * Utilities for extension point management, validation, etc. - */ -public class XPointTools { - - public static String findRequiredAttribute( - IConfigurationElement configElement, String attributeName) - throws XPointException { - - String val = configElement.getAttribute(attributeName); - if (val == null) { - logMissingAttribute(configElement, attributeName); - throw new XPointException(); - } - return val; - } - - public static <T> T instantiate(String pluginId, String extensionPoint, String className, Class<T> interfaze) { - Class<T> clazz = loadClass(pluginId, extensionPoint, className, interfaze); - return (clazz == null) ? null : instantiate(pluginId, extensionPoint, clazz); - } - - /** - * Instantiate the specified class. - */ - public static <T> T instantiate(String pluginId, String extensionPoint, Class<T> clazz) { - try { - return clazz.newInstance(); - } catch (Exception ex) { - logFailedInstantiation(ex, pluginId, extensionPoint, clazz.getName()); - return null; - } - } - - /** - * Load the specified class and cast it to the specified interface. - */ - private static <T> Class<T> loadClass(String pluginId, String extensionPoint, String className, Class<T> interfaze) { - Bundle bundle = Platform.getBundle(pluginId); - - Class<?> clazz; - try { - clazz = bundle.loadClass(className); - } catch (Exception ex) { - logFailedClassLoad(ex, pluginId, extensionPoint, className); - return null; - } - - if (interfaze.isAssignableFrom(clazz)) { - @SuppressWarnings("unchecked") - Class<T> clazzT = (Class<T>) clazz; - return clazzT; - } - - logFailedInterfaceAssignment(pluginId, extensionPoint, className, interfaze.getName()); - return null; - } - - public static void logDuplicateExtension(String extensionPoint, String nodeName, String value) { - log(JptCommonCoreMessages.REGISTRY_DUPLICATE, extensionPoint, nodeName, value); - } - - public static void logMissingAttribute(IConfigurationElement configElement, String attributeName) { - log(JptCommonCoreMessages.REGISTRY_MISSING_ATTRIBUTE, - attributeName, - configElement.getName(), - configElement.getDeclaringExtension().getExtensionPointUniqueIdentifier(), - configElement.getContributor().getName()); - } - - public static void logInvalidValue( - IConfigurationElement configElement, String nodeName, String invalidValue) { - - log(JptCommonCoreMessages.REGISTRY_INVALID_VALUE, - invalidValue, - nodeName, - configElement.getDeclaringExtension().getExtensionPointUniqueIdentifier(), - configElement.getContributor().getName()); - } - - private static void logFailedClassLoad(Exception ex, String pluginId, String extensionPoint, String className) { - log(ex, JptCommonCoreMessages.REGISTRY_FAILED_CLASS_LOAD, - className, - extensionPoint, - pluginId); - } - - private static void logFailedInterfaceAssignment( - String pluginId, String extensionPoint, String className, String interfaceName) { - - log(JptCommonCoreMessages.REGISTRY_FAILED_INTERFACE_ASSIGNMENT, - className, - extensionPoint, - pluginId, - interfaceName); - } - - private static void logFailedInstantiation(Exception ex, String pluginId, String extensionPoint, String className) { - log(ex, JptCommonCoreMessages.REGISTRY_FAILED_INSTANTIATION, - className, - extensionPoint, - pluginId); - } - - public static void log(String msg, String... bindings) { - JptCommonCorePlugin.log(NLS.bind(msg, bindings)); - } - - public static void log(Throwable ex, String msg, String... bindings) { - JptCommonCorePlugin.log(NLS.bind(msg, bindings), ex); - } - - public static void log(Throwable ex) { - JptCommonCorePlugin.log(ex); - } - - - public static final class XPointException extends Exception { - private static final long serialVersionUID = 1L; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/AbstractSingleUseQueueingJobCommandExecutor.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/AbstractSingleUseQueueingJobCommandExecutor.java deleted file mode 100644 index ef298557aa..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/AbstractSingleUseQueueingJobCommandExecutor.java +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.utility.command; - -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.jpt.common.core.utility.command.CombinedCommandExecutor; -import org.eclipse.jpt.common.core.utility.command.JobCommand; -import org.eclipse.jpt.common.utility.command.Command; -import org.eclipse.jpt.common.utility.command.StatefulCommandExecutor; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.command.AbstractSingleUseQueueingCommandExecutor; - -/** - * This job command executor wraps and extends an - * {@link AbstractSingleUseQueueingCommandExecutor}, - * adding support for executing {@link JobCommand}s. - * <p> - * <strong>NB:</strong> This executor <em>ignores</em> any - * {@link ISchedulingRule scheduling rules}. - */ -public abstract class AbstractSingleUseQueueingJobCommandExecutor<E1 extends AbstractSingleUseQueueingCommandExecutor<E2>, E2 extends StatefulCommandExecutor> - implements CombinedCommandExecutor, StatefulCommandExecutor -{ - /** - * Since the {@link JobCommand}s are simply converted into {@link Command}s, - * we can delegate to an {@link AbstractSingleUseQueueingCommandExecutor}. - */ - protected final E1 commandExecutor; - - - protected AbstractSingleUseQueueingJobCommandExecutor(E1 commandExecutor) { - super(); - this.commandExecutor = commandExecutor; - } - - /** - * @see AbstractSingleUseQueueingCommandExecutor#start() - */ - public void start() { - this.commandExecutor.start(); - } - - /** - * @see AbstractSingleUseQueueingCommandExecutor#execute(Command) - */ - public void execute(Command command) { - this.commandExecutor.execute(command); - } - - /** - * @see AbstractSingleUseQueueingCommandExecutor#execute(Command) - */ - public void execute(JobCommand command) { - this.commandExecutor.execute(new JobCommandCommandAdapter(command)); - } - - /** - * @see AbstractSingleUseQueueingCommandExecutor#execute(Command) - */ - public void execute(JobCommand command, String jobName) { - // ignore 'jobName' - this.commandExecutor.execute(new JobCommandCommandAdapter(command)); - } - - /** - * @see AbstractSingleUseQueueingCommandExecutor#execute(Command) - */ - public void execute(JobCommand command, String jobName, ISchedulingRule rule) { - // ignore 'jobName' and 'rule' - this.commandExecutor.execute(new JobCommandCommandAdapter(command)); - } - - /** - * @see AbstractSingleUseQueueingCommandExecutor#suspend() - */ - public void suspend() { - this.commandExecutor.suspend(); - } - - /** - * @see AbstractSingleUseQueueingCommandExecutor#resume() - */ - public void resume() { - this.commandExecutor.resume(); - } - - /** - * @see AbstractSingleUseQueueingCommandExecutor#stop() - */ - public void stop() throws InterruptedException { - this.commandExecutor.stop(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.commandExecutor); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/CommandJobCommandAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/CommandJobCommandAdapter.java deleted file mode 100644 index 97c52316e3..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/CommandJobCommandAdapter.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.utility.command; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jpt.common.core.utility.command.JobCommand; -import org.eclipse.jpt.common.utility.command.Command; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Adapt a {@link Command} to the {@link JobCommand} interface. - * Necessarily, the progress monitor is ignored and a status of - * OK is returned. - */ -public class CommandJobCommandAdapter - implements JobCommand -{ - private final Command command; - - - public CommandJobCommandAdapter(Command command) { - super(); - if (command == null) { - throw new NullPointerException(); - } - this.command = command; - } - - public IStatus execute(IProgressMonitor monitor) { - this.command.execute(); - return Status.OK_STATUS; - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.command); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/JobCommandCommandAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/JobCommandCommandAdapter.java deleted file mode 100644 index ac69a5b03b..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/JobCommandCommandAdapter.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.utility.command; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jpt.common.core.utility.command.JobCommand; -import org.eclipse.jpt.common.utility.command.Command; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Adapt a {@link JobCommand} to the {@link Command} interface. - * Necessarily passing in a <em>null</em> progress monitor - * and ignoring the returned status. - */ -public class JobCommandCommandAdapter - implements Command -{ - private final JobCommand jobCommand; - - - public JobCommandCommandAdapter(JobCommand jobCommand) { - super(); - if (jobCommand == null) { - throw new NullPointerException(); - } - this.jobCommand = jobCommand; - } - - public void execute() { - this.jobCommand.execute(new NullProgressMonitor()); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.jobCommand); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/JobCommandJob.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/JobCommandJob.java deleted file mode 100644 index 70318e1df2..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/JobCommandJob.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.utility.command; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jpt.common.core.utility.command.JobCommand; -import org.eclipse.jpt.common.utility.command.Command; - -/** - * A job that executes a {@link JobCommand job command} or - * {@link Command command}. - */ -public class JobCommandJob - extends Job -{ - private final JobCommand command; - - - public JobCommandJob(String name, Command command) { - this(name, new CommandJobCommandAdapter(command)); - } - - public JobCommandJob(String name, JobCommand command) { - super(name); - if (command == null) { - throw new NullPointerException(); - } - this.command = command; - } - - @Override - protected IStatus run(IProgressMonitor monitor) { - return this.command.execute(monitor); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/NotifyingRepeatingJobCommandWrapper.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/NotifyingRepeatingJobCommandWrapper.java deleted file mode 100644 index 1e49f6b18f..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/NotifyingRepeatingJobCommandWrapper.java +++ /dev/null @@ -1,95 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.utility.command; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.jpt.common.core.utility.command.NotifyingRepeatingJobCommand; -import org.eclipse.jpt.common.core.utility.command.JobCommand; -import org.eclipse.jpt.common.core.utility.command.JobCommandExecutor; -import org.eclipse.jpt.common.utility.ExceptionHandler; -import org.eclipse.jpt.common.utility.internal.ListenerList; - -/** - * @see org.eclipse.jpt.common.utility.internal.command.NotifyingRepeatingCommandWrapper - */ -public class NotifyingRepeatingJobCommandWrapper - extends RepeatingJobCommandWrapper - implements NotifyingRepeatingJobCommand -{ - private final ListenerList<Listener> listenerList = new ListenerList<Listener>(Listener.class); - - - // ********** construction ********** - - /** - * Construct a notifying repeating command wrapper that executes the - * specified command. Any exceptions thrown by the command or listener - * will be handled by the specified exception handler. - */ - public NotifyingRepeatingJobCommandWrapper(JobCommand command, ExceptionHandler exceptionHandler) { - super(command, exceptionHandler); - } - - /** - * Construct a notifying repeating command wrapper that executes the - * specified command and uses the specified command executor to execute the - * wrapped command whenever it is not already executing. - * Any exceptions thrown by the command or listener will be handled by the - * specified exception handler. - */ - public NotifyingRepeatingJobCommandWrapper(JobCommand command, JobCommandExecutor startCommandExecutor, ExceptionHandler exceptionHandler) { - super(command, startCommandExecutor, exceptionHandler); - } - - - // ********** listeners ********** - - public void addListener(Listener listener) { - this.listenerList.add(listener); - } - - public void removeListener(Listener listener) { - this.listenerList.remove(listener); - } - - - // ********** override ********** - - @Override - /* private protected */ IStatus executeCommand(IProgressMonitor monitor) { - IStatus status = super.executeCommand(monitor); - if (this.state.isQuiesced()) { - // hmmm - we will notify listeners even when we are "stopped"; that seems OK... - this.executionQuiesced(monitor); - } - return status; - } - - /** - * Notify our listeners. - */ - private void executionQuiesced(IProgressMonitor monitor) { - for (Listener listener : this.listenerList.getListeners()) { - this.notifyListener(listener, monitor); - } - } - - private void notifyListener(Listener listener, IProgressMonitor monitor) { - try { - listener.executionQuiesced(this, monitor); - } catch (OperationCanceledException ex) { - throw ex; // seems reasonable... - } catch (Throwable ex) { - this.exceptionHandler.handleException(ex); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/RepeatingJobCommandWrapper.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/RepeatingJobCommandWrapper.java deleted file mode 100644 index ce34a4765c..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/RepeatingJobCommandWrapper.java +++ /dev/null @@ -1,220 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.utility.command; - -import java.util.ArrayList; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Status; -import org.eclipse.jpt.common.core.JptCommonCorePlugin; -import org.eclipse.jpt.common.core.utility.command.JobCommand; -import org.eclipse.jpt.common.core.utility.command.JobCommandExecutor; -import org.eclipse.jpt.common.core.utility.command.RepeatingJobCommand; -import org.eclipse.jpt.common.utility.ExceptionHandler; -import org.eclipse.jpt.common.utility.internal.StackTrace; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.command.RepeatingCommandState; - -/** - * Wrap a repeating {@link JobCommand}. - * <p> - * <strong>NB:</strong> The {@link IProgressMonitor progress monitor} passed to - * the job command wrapper is <em>ignored</em>. The {@link IProgressMonitor - * progress monitor} passed to the <em>wrapped</em> job command is determined by - * the {@link #startCommandExecutor start command executor}. That same - * {@link IProgressMonitor progress monitor} is passed to the <em>wrapped</em> - * job command for every execution during an execution "cycle". It is - * <em>not</em> reset with each execution; so several - * executions may take place before a new progress monitor is passed to the - * command. - * @see org.eclipse.jpt.common.utility.internal.command.RepeatingCommandWrapper - */ -public class RepeatingJobCommandWrapper - implements RepeatingJobCommand -{ - /** - * The client-supplied command that performs the execution. It may - * trigger further calls to {@link #execute(IProgressMonitor)} - * (i.e. the <em>wrapped</em> - * command's execution may recurse back to the client code that executes the - * <em>wrapper</em> command). - */ - /* CU private */ final JobCommand command; - - /** - * The command executed whenever the wrapped {@link #command} must be - * executed and it is not already executing. If the wrapped {@link #command} - * is already executing, it will simply be re-executed directly (once it has - * completed its current execution), as opposed to calling the start - * command. - */ - private final JobCommand startCommand; - - /** - * The client-supplied command executor that provides the context for the - * {@link #startCommand start command}. By default, the start command is - * executed directly; but this executor provides a hook for executing the - * {@link #startCommand start command} asynchronously; after which, - * subsequent overlapping executions are executed synchronously. - */ - private final JobCommandExecutor startCommandExecutor; - - /** - * This handles the exceptions thrown by the <em>wrapped</em> command. - */ - final ExceptionHandler exceptionHandler; - - /** - * The command wrapper's state. - */ - final RepeatingCommandState state; - - /** - * List of stack traces for each (repeating) invocation of the command, - * starting with the initial invocation. The list is cleared with each - * initial invocation of the command. - */ - private final ArrayList<StackTrace> stackTraces = debug() ? new ArrayList<StackTrace>() : null; - - private static boolean debug() { - return JptCommonCorePlugin.instance().isDebugging(); - } - - - // ********** construction ********** - - /** - * Construct a repeating command wrapper that executes the specified - * command. Any exceptions thrown by the command will be handled by the - * specified exception handler. - */ - public RepeatingJobCommandWrapper(JobCommand command, ExceptionHandler exceptionHandler) { - this(command, JobCommandExecutor.Default.instance(), exceptionHandler); - } - - /** - * Construct a repeating command wrapper that executes the specified - * command and uses the specified command executor to execute the wrapped - * command whenever it is not already executing. - * Any exceptions thrown by the command will be handled by the - * specified exception handler. - */ - public RepeatingJobCommandWrapper(JobCommand command, JobCommandExecutor startCommandExecutor, ExceptionHandler exceptionHandler) { - super(); - if ((command == null) || (startCommandExecutor == null) || (exceptionHandler == null)) { - throw new NullPointerException(); - } - this.command = command; - this.startCommandExecutor = startCommandExecutor; - this.startCommand = this.buildStartJobCommand(); - this.exceptionHandler = exceptionHandler; - this.state = this.buildState(); - } - - private JobCommand buildStartJobCommand() { - return new StartJobCommand(); - } - - private RepeatingCommandState buildState() { - return new RepeatingCommandState(); - } - - - // ********** RepeatingJobCommand implementation ********** - - public void start() { - this.state.start(); - } - - /** - * It is possible to come back here if the wrapped command recurses - * to the client and triggers another execution. - */ - public synchronized IStatus execute(IProgressMonitor monitor) { - if (this.state.isReadyToStartExecutionCycle()) { - if (debug()) { - this.stackTraces.clear(); - this.stackTraces.add(new StackTrace()); - } - this.executeStartCommand(); - } else { - if (debug()) { - this.stackTraces.add(new StackTrace()); - } - } - return Status.OK_STATUS; - } - - /* private protected */ void executeStartCommand() { - this.startCommandExecutor.execute(this.startCommand); - } - - public void stop() throws InterruptedException { - this.state.stop(); - } - - /** - * The start command. - * @see #startCommandExecutor - */ - /* CU private */ class StartJobCommand - implements JobCommand - { - public IStatus execute(IProgressMonitor monitor) { - return RepeatingJobCommandWrapper.this.execute_(monitor); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this, RepeatingJobCommandWrapper.this.command); - } - } - - /** - * This method will be called only once per execution cycle. - * Any further calls to {@link #execute(IProgressMonitor)} will - * simply set the {@link #state} to "repeat", - * causing the command to execute again. - */ - /* CU private */ IStatus execute_(IProgressMonitor monitor) { - if (this.state.wasStoppedBeforeFirstExecutionCouldStart()) { - return Status.OK_STATUS; - } - - do { - IStatus status = this.executeCommand(monitor); - if (status.getSeverity() == IStatus.CANCEL) { - return status; // seems reasonable... - } - } while (this.state.isRepeat()); - return Status.OK_STATUS; - } - - /** - * Execute the client-supplied command. Do not allow any unhandled - * exceptions to kill the wrapper. Pass to the exception handler. - * @see NotifyingRepeatingJobCommandWrapper - */ - /* private protected */ IStatus executeCommand(IProgressMonitor monitor) { - try { - return this.command.execute(monitor); - } catch (OperationCanceledException ex) { - return Status.CANCEL_STATUS; // seems reasonable... - } catch (Throwable ex) { - this.exceptionHandler.handleException(ex); - return Status.OK_STATUS; - } - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.command); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/SimpleJobCommandExecutor.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/SimpleJobCommandExecutor.java deleted file mode 100644 index 96c858b752..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/SimpleJobCommandExecutor.java +++ /dev/null @@ -1,209 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.utility.command; - -import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.jpt.common.core.utility.command.CombinedExtendedCommandExecutor; -import org.eclipse.jpt.common.core.utility.command.JobCommand; -import org.eclipse.jpt.common.utility.command.Command; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.SynchronizedBoolean; - -/** - * A command executor that schedules a {@link org.eclipse.core.runtime.jobs.Job - * job} to [asynchronously] execute each {@link JobCommand job command} or - * {@link Command command}. - * Synchronous command executions are coordinated with the job via a - * {@link LocalJobChangeListener job listener}. - */ -public class SimpleJobCommandExecutor - implements CombinedExtendedCommandExecutor -{ - private final String defaultJobName; - private final ISchedulingRule defaultJobSchedulingRule; - - - /** - * Construct a job command executor with no default job name and no - * default scheduling rule. - */ - public SimpleJobCommandExecutor() { - this(null); - } - - /** - * Construct a job command executor with the specified default job name and - * no default scheduling rule. - */ - public SimpleJobCommandExecutor(String defaultJobName) { - this(defaultJobName, null); - } - - /** - * Construct a job command executor with the specified default job name and - * default scheduling rule. - */ - public SimpleJobCommandExecutor(String defaultJobName, ISchedulingRule defaultJobSchedulingRule) { - super(); - this.defaultJobName = defaultJobName; - this.defaultJobSchedulingRule = defaultJobSchedulingRule; - } - - public void execute(Command command) { - this.execute(new CommandJobCommandAdapter(command)); - } - - public void waitToExecute(Command command) throws InterruptedException { - this.waitToExecute(new CommandJobCommandAdapter(command)); - } - - public boolean waitToExecute(Command command, long timeout) throws InterruptedException { - return this.waitToExecute(new CommandJobCommandAdapter(command), timeout); - } - - /** - * Assign the resulting {@link Job} the default name and scheduling rule. - */ - public void execute(JobCommand command) { - this.execute(command, null); - } - - /** - * Assign the resulting {@link Job} the default scheduling rule. - */ - public void execute(JobCommand command, String jobName) { - this.execute(command, jobName, this.defaultJobSchedulingRule); - } - - public void execute(JobCommand command, String jobName, ISchedulingRule rule) { - this.execute_(command, this.buildJobName(jobName, command), rule); - } - - /** - * Pre-condition: the job name must not be <code>null</code>. - */ - private void execute_(JobCommand command, String jobName, ISchedulingRule rule) { - Job job = new JobCommandJob(jobName, command); - job.setRule(rule); - job.schedule(); - } - - /** - * Assign the resulting {@link Job} the default name and scheduling rule. - */ - public void waitToExecute(JobCommand command) throws InterruptedException { - this.waitToExecute(command, null); - } - - /** - * Assign the resulting {@link Job} the default name and scheduling rule. - */ - public boolean waitToExecute(JobCommand command, long timeout) throws InterruptedException { - return this.waitToExecute(command, null, timeout); - } - - /** - * Assign the resulting {@link Job} the specified name and the default - * scheduling rule. - */ - public void waitToExecute(JobCommand command, String jobName) throws InterruptedException { - this.waitToExecute(command, jobName, this.defaultJobSchedulingRule); - } - - /** - * Assign the resulting {@link Job} the specified name and the default - * scheduling rule. - */ - public boolean waitToExecute(JobCommand command, String jobName, long timeout) throws InterruptedException { - return this.waitToExecute(command, jobName, this.defaultJobSchedulingRule, timeout); - } - - /** - * Assign the resulting {@link Job} the specified name and scheduling rule. - */ - public void waitToExecute(JobCommand command, String jobName, ISchedulingRule rule) throws InterruptedException { - this.waitToExecute_(command, this.buildJobName(jobName, command), rule, 0); - } - - /** - * Assign the resulting {@link Job} the specified name and scheduling rule. - */ - public boolean waitToExecute(JobCommand command, String jobName, ISchedulingRule rule, long timeout) throws InterruptedException { - return this.waitToExecute_(command, this.buildJobName(jobName, command), rule, timeout); - } - - /** - * Pre-condition: the job name must not be <code>null</code>. - * <p> - * Schedule a job that will notify us when it is finished. - * The current thread will suspend until the job is finished. - */ - private boolean waitToExecute_(JobCommand command, String jobName, ISchedulingRule rule, long timeout) throws InterruptedException { - if ((timeout == 0L) && Job.getJobManager().isSuspended()) { - // the job manager is suspended during workbench start-up; - // so this method will lock up accordingly, which is not a Good Thing - // if it is called from the Eclipse Main thread during start-up - // (i.e. deadlock!) - return false; - } - - Job job = new JobCommandJob(jobName, command); - LocalJobChangeListener listener = new LocalJobChangeListener(); - job.addJobChangeListener(listener); - job.setRule(rule); - job.schedule(); - try { - return listener.waitUntilDone(timeout); - } finally { - job.removeJobChangeListener(listener); - } - } - - private String buildJobName(String jobName, Object command) { - if (jobName != null) { - return jobName; - } - if (this.defaultJobName != null) { - return this.defaultJobName; - } - return StringTools.buildToStringClassName(command.getClass()); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - - - // ********** job listener ********** - - /** - * This job listener notifies any interested threads when the - * {@link Job job} is done. - */ - /* CU private */ class LocalJobChangeListener - extends JobChangeAdapter - { - private final SynchronizedBoolean done = new SynchronizedBoolean(false); - - @Override - public void done(IJobChangeEvent event) { - super.done(event); - this.done.setTrue(); - } - - boolean waitUntilDone(long timeout) throws InterruptedException { - return this.done.waitUntilTrue(timeout); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/SingleUseQueueingExtendedJobCommandExecutor.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/SingleUseQueueingExtendedJobCommandExecutor.java deleted file mode 100644 index 5957e3e4b4..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/SingleUseQueueingExtendedJobCommandExecutor.java +++ /dev/null @@ -1,103 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.utility.command; - -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.jpt.common.core.utility.command.CombinedExtendedCommandExecutor; -import org.eclipse.jpt.common.core.utility.command.JobCommand; -import org.eclipse.jpt.common.utility.command.Command; -import org.eclipse.jpt.common.utility.command.ExtendedCommandExecutor; -import org.eclipse.jpt.common.utility.command.StatefulExtendedCommandExecutor; -import org.eclipse.jpt.common.utility.internal.command.SingleUseQueueingExtendedCommandExecutor; - -/** - * This command executor wraps and extends a {@link SingleUseQueueingExtendedCommandExecutor}, - * adding support for executing {@link JobCommand}s. - */ -public class SingleUseQueueingExtendedJobCommandExecutor - extends AbstractSingleUseQueueingJobCommandExecutor<SingleUseQueueingExtendedCommandExecutor, StatefulExtendedCommandExecutor> - implements CombinedExtendedCommandExecutor, StatefulExtendedCommandExecutor -{ - public SingleUseQueueingExtendedJobCommandExecutor() { - this(new SingleUseQueueingExtendedCommandExecutor()); - } - - public SingleUseQueueingExtendedJobCommandExecutor(ExtendedCommandExecutor commandExecutor) { - this(new SingleUseQueueingExtendedCommandExecutor(commandExecutor)); - } - - public SingleUseQueueingExtendedJobCommandExecutor(StatefulExtendedCommandExecutor commandExecutor) { - this(new SingleUseQueueingExtendedCommandExecutor(commandExecutor)); - } - - public SingleUseQueueingExtendedJobCommandExecutor(SingleUseQueueingExtendedCommandExecutor commandExecutor) { - super(commandExecutor); - } - - /** - * @see SingleUseQueueingExtendedCommandExecutor#waitToExecute(Command) - */ - public void waitToExecute(Command command) throws InterruptedException { - this.commandExecutor.waitToExecute(command); - } - - /** - * @see SingleUseQueueingExtendedCommandExecutor#waitToExecute(Command, long) - */ - public boolean waitToExecute(Command command, long timeout) throws InterruptedException { - return this.commandExecutor.waitToExecute(command, timeout); - } - - /** - * @see SingleUseQueueingExtendedCommandExecutor#waitToExecute(Command) - */ - public void waitToExecute(JobCommand command) throws InterruptedException { - this.commandExecutor.waitToExecute(new JobCommandCommandAdapter(command)); - } - - /** - * @see SingleUseQueueingExtendedCommandExecutor#waitToExecute(Command, long) - */ - public boolean waitToExecute(JobCommand command, long timeout) throws InterruptedException { - return this.commandExecutor.waitToExecute(new JobCommandCommandAdapter(command), timeout); - } - - /** - * @see SingleUseQueueingExtendedCommandExecutor#waitToExecute(Command) - */ - public void waitToExecute(JobCommand command, String jobName) throws InterruptedException { - // ignore 'jobName' - this.commandExecutor.waitToExecute(new JobCommandCommandAdapter(command)); - } - - /** - * @see SingleUseQueueingExtendedCommandExecutor#waitToExecute(Command, long) - */ - public boolean waitToExecute(JobCommand command, String jobName, long timeout) throws InterruptedException { - // ignore 'jobName' - return this.commandExecutor.waitToExecute(new JobCommandCommandAdapter(command), timeout); - } - - /** - * @see SingleUseQueueingExtendedCommandExecutor#waitToExecute(Command) - */ - public void waitToExecute(JobCommand command, String jobName, ISchedulingRule rule) throws InterruptedException { - // ignore 'jobName' and 'rule' - this.commandExecutor.waitToExecute(new JobCommandCommandAdapter(command)); - } - - /** - * @see SingleUseQueueingExtendedCommandExecutor#waitToExecute(Command, long) - */ - public boolean waitToExecute(JobCommand command, String jobName, ISchedulingRule rule, long timeout) throws InterruptedException { - // ignore 'jobName' and 'rule' - return this.commandExecutor.waitToExecute(new JobCommandCommandAdapter(command), timeout); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/SingleUseQueueingJobCommandExecutor.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/SingleUseQueueingJobCommandExecutor.java deleted file mode 100644 index 3b25de6625..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/command/SingleUseQueueingJobCommandExecutor.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.internal.utility.command; - -import org.eclipse.jpt.common.core.utility.command.JobCommand; -import org.eclipse.jpt.common.utility.command.CommandExecutor; -import org.eclipse.jpt.common.utility.command.StatefulCommandExecutor; -import org.eclipse.jpt.common.utility.internal.command.SingleUseQueueingCommandExecutor; - -/** - * This command executor wraps and extends a {@link SingleUseQueueingCommandExecutor}, - * adding support for executing {@link JobCommand}s. - */ -public class SingleUseQueueingJobCommandExecutor - extends AbstractSingleUseQueueingJobCommandExecutor<SingleUseQueueingCommandExecutor, StatefulCommandExecutor> -{ - public SingleUseQueueingJobCommandExecutor() { - this(new SingleUseQueueingCommandExecutor()); - } - - public SingleUseQueueingJobCommandExecutor(CommandExecutor commandExecutor) { - this(new SingleUseQueueingCommandExecutor(commandExecutor)); - } - - public SingleUseQueueingJobCommandExecutor(StatefulCommandExecutor commandExecutor) { - this(new SingleUseQueueingCommandExecutor(commandExecutor)); - } - - public SingleUseQueueingJobCommandExecutor(SingleUseQueueingCommandExecutor commandExecutor) { - super(commandExecutor); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ASTTools.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ASTTools.java deleted file mode 100644 index cafdf479a8..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ASTTools.java +++ /dev/null @@ -1,296 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2012 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.common.core.internal.utility.jdt; - -import java.util.HashSet; -import java.util.List; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.ASTParser; -import org.eclipse.jdt.core.dom.ArrayInitializer; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.IBinding; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jdt.core.dom.IVariableBinding; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jdt.core.dom.Name; -import org.eclipse.jdt.core.dom.SingleVariableDeclaration; -import org.eclipse.jdt.core.dom.TypeLiteral; -import org.eclipse.jpt.common.core.internal.utility.SimpleTextRange; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.utility.JavaType; -import org.eclipse.jpt.common.utility.MethodSignature; -import org.eclipse.jpt.common.utility.internal.SimpleJavaType; -import org.eclipse.jpt.common.utility.internal.SimpleMethodSignature; -import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; -import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; - -/** - * Convenience methods for dealing with JDT ASTs. - */ -public class ASTTools { - - /** - * Build an AST without method bodies for the specified compilation unit - * with its bindings resolved (and the resultant performance hit). - */ - public static CompilationUnit buildASTRoot(ICompilationUnit compilationUnit) { - ASTParser parser = ASTParser.newParser(AST.JLS3); - parser.setSource(compilationUnit); - parser.setIgnoreMethodBodies(true); // we don't need method bodies - parser.setResolveBindings(true); - parser.setBindingsRecovery(true); // see bugs 196200, 222735 - return (CompilationUnit) parser.createAST(null); - } - - - // ********** JDT DOM ********** - - public static String resolveEnum(Expression expression) { - if (expression == null) { - return null; - } - switch (expression.getNodeType()) { - case ASTNode.QUALIFIED_NAME: - case ASTNode.SIMPLE_NAME: - return resolveEnum((Name) expression); - default: - return null; - } - } - - public static String resolveEnum(Name enumExpression) { - IBinding binding = enumExpression.resolveBinding(); - if (binding == null) { - return null; // TODO figure out why this is null sometimes - } - if (binding.getKind() != IBinding.VARIABLE) { - return null; - } - IVariableBinding variableBinding = (IVariableBinding) binding; - return variableBinding.getType().getQualifiedName() + '.' + variableBinding.getName(); - } - - /** - * If the specified expression is a type literal, return the type's fully- - * qualified name. Return null otherwise. - */ - public static String resolveFullyQualifiedName(Expression expression) { - ITypeBinding resolvedTypeBinding = resolveTypeBinding(expression); - return (resolvedTypeBinding == null) ? null : resolvedTypeBinding.getQualifiedName(); - } - - /** - * If the specified expression is an array initializer, return an an iterable - * on the types' fully qualfified names. - * The results may include nulls. - */ - public static Iterable<String> resolveFullyQualifiedNames(Expression expression) { - return new TransformationIterable<ITypeBinding, String>(resolveTypeBindings(expression)) { - @Override - protected String transform(ITypeBinding o) { - return (o == null) ? null : o.getQualifiedName(); - } - }; - } - - /** - * If the specified expression is a type literal, return the corresponding - * type binding. - */ - public static ITypeBinding resolveTypeBinding(Expression expression) { - if (expression != null && expression.getNodeType() == ASTNode.TYPE_LITERAL) { - return ((TypeLiteral) expression).getType().resolveBinding(); - } - return null; - } - - /** - * If the specified expression is an array initializer, return an iterable of - * the corresponding type bindings for each sub-expression. - * The result may include <code>null</code> elements. - */ - public static Iterable<ITypeBinding> resolveTypeBindings(Expression expression) { - return (expression != null && expression.getNodeType() == ASTNode.ARRAY_INITIALIZER) ? - resolveTypeBindings((ArrayInitializer) expression) : - EmptyIterable.<ITypeBinding>instance(); - } - - private static Iterable<ITypeBinding> resolveTypeBindings(ArrayInitializer arrayExpression) { - @SuppressWarnings("unchecked") - Iterable<Expression> expressions = arrayExpression.expressions(); - return new TransformationIterable<Expression, ITypeBinding>(expressions) { - @Override - protected ITypeBinding transform(Expression expression) { - return resolveTypeBinding(expression); - } - }; - } - - public static MethodSignature buildMethodSignature(MethodDeclaration methodDeclaration) { - return new SimpleMethodSignature( - methodDeclaration.getName().getFullyQualifiedName(), - buildParameterTypes(methodDeclaration) - ); - } - - public static JavaType[] buildParameterTypes(MethodDeclaration methodDeclaration) { - List<SingleVariableDeclaration> parameters = parameters(methodDeclaration); - int len = parameters.size(); - JavaType[] parameterTypes = new JavaType[len]; - for (int i = 0; i < len; i++) { - ITypeBinding type = parameters.get(i).getType().resolveBinding(); - parameterTypes[i] = SimpleJavaType.buildSimpleJavaType(type.getQualifiedName(), type.getDimensions()); - } - return parameterTypes; - } - - // minimize scope of suppressed warnings - @SuppressWarnings("unchecked") - private static List<SingleVariableDeclaration> parameters(MethodDeclaration methodDeclaration) { - return methodDeclaration.parameters(); - } - - /** - * Return whether the specified expression is a type literal and the type binding - * corresponding to the specified type name exists in the type - * literal's inheritance hierarchy (superclasses and interfaces). - * Return null otherwise. - */ - public static boolean typeIsSubTypeOf(Expression expression, String searchTypeName) { - return findTypeInHierarchy(expression, searchTypeName) != null; - } - - /** - * If the specified expression is a type literal, return the type binding - * corresponding to the specified type name if it exists in the type - * literal's inheritance hierarchy (superclasses and interfaces). - * Return null otherwise. - */ - public static ITypeBinding findTypeInHierarchy(Expression expression, String searchTypeName) { - ITypeBinding typeBinding = resolveTypeBinding(expression); - return (typeBinding == null) ? null : findTypeInHierarchy(typeBinding, searchTypeName); - } - - /** - * Return whether a type binding with the specified type name exists in - * the specified type binding's inheritance hierarchy (superclasses - * and interfaces). - */ - public static boolean typeIsSubTypeOf(ITypeBinding typeBinding, String searchTypeName) { - return findTypeInHierarchy(typeBinding, searchTypeName) != null; - } - - /** - * Return the type binding corresponding to the specified type name if it - * exists in the specified type binding's inheritance hierarchy (superclasses - * and interfaces). Return null otherwise. - */ - public static ITypeBinding findTypeInHierarchy(ITypeBinding typeBinding, String searchTypeName) { - return findTypeInHierarchy(typeBinding, searchTypeName, new HashSet<String>()); - } - - private static ITypeBinding findTypeInHierarchy(ITypeBinding typeBinding, String searchTypeName, HashSet<String> visited) { - String typeName = typeBinding.getTypeDeclaration().getQualifiedName(); - if (visited.contains(typeName)) { - return null; - } - if (typeName.equals(searchTypeName)) { - return typeBinding; - } - visited.add(typeName); - - ITypeBinding interfaceBinding = findTypeInInterfaces(typeBinding, searchTypeName, visited); - if (interfaceBinding != null) { - return interfaceBinding; - } - - return findTypeInSuperclasses(typeBinding, searchTypeName, visited); - } - - private static ITypeBinding findTypeInInterfaces(ITypeBinding typeBinding, String searchTypeName, HashSet<String> visited) { - ITypeBinding[] interfaceBindings = typeBinding.getInterfaces(); - for (ITypeBinding interfaceBinding : interfaceBindings) { // recurse up interfaces - ITypeBinding result = findTypeInHierarchy(interfaceBinding, searchTypeName, visited); - if (result != null) { - return result; - } - } - return null; - } - - private static ITypeBinding findTypeInSuperclasses(ITypeBinding typeBinding, String searchTypeName, HashSet<String> visited) { - ITypeBinding superBinding = typeBinding.getSuperclass(); - if (superBinding != null) { // recurse up superclasses - ITypeBinding result = findTypeInHierarchy(superBinding, searchTypeName, visited); - if (result != null) { - return result; - } - } - return null; - } - /** - * Return whether the specified expression is a type literal and the type binding - * corresponding to the specified interface name exists in the type - * literal's inheritance hierarchy (superclasses and interfaces). - * Return null otherwise. - */ - public static boolean typeImplementsInterface(Expression expression, String searchInterfaceName) { - ITypeBinding typeBinding = resolveTypeBinding(expression); - if (typeBinding == null) { - return false; - } - return findInterfaceInHierarchy(typeBinding, searchInterfaceName) != null; - } - - /** - * Return whether a type binding with the specified interface name exists in - * the specified type binding's inheritance hierarchy (superclasses - * and interfaces). - */ - public static boolean typeImplementsInterface(ITypeBinding typeBinding, String searchInterfaceName) { - return findInterfaceInHierarchy(typeBinding, searchInterfaceName) != null; - } - - private static ITypeBinding findInterfaceInHierarchy(ITypeBinding typeBinding, String searchInterfaceName) { - HashSet<String> visited = new HashSet<String>(); - ITypeBinding interfaceBinding = findTypeInInterfaces(typeBinding, searchInterfaceName, visited); - if (interfaceBinding != null) { - return interfaceBinding; - } - - return findTypeInSuperclasses(typeBinding, searchInterfaceName, visited); - - } - - /** - * Build and return a text range for the specified AST node. - */ - public static TextRange buildTextRange(ASTNode astNode) { - return buildTextRange(astNode, null); - } - - /** - * Build and return a text range for the specified AST node if it differs - * from the specified text range or the specified text range is - * <code>null</code>. If the AST node already matches the - * specified text range, simply return the text range unchanged. - */ - public static TextRange buildTextRange(ASTNode astNode, TextRange textRange) { - int offset = astNode.getStartPosition(); - int length = astNode.getLength(); - int lineNumber = ((CompilationUnit) astNode.getRoot()).getLineNumber(offset); - return (textRange == null) ? - new SimpleTextRange(offset, length, lineNumber) : - textRange.buildTextRange(offset, length, lineNumber); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractAnnotationAdapter.java deleted file mode 100644 index 7333322d48..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractAnnotationAdapter.java +++ /dev/null @@ -1,165 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2010 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Annotation; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Adapt an annotated element and a declaration annotation adapter. - */ -public abstract class AbstractAnnotationAdapter implements AnnotationAdapter { - private final AnnotatedElement annotatedElement; - private final DeclarationAnnotationAdapter daa; - - - // ********** constructor ********** - - public AbstractAnnotationAdapter(AnnotatedElement annotatedElement, DeclarationAnnotationAdapter daa) { - super(); - this.annotatedElement = annotatedElement; - this.daa = daa; - } - - - // ********** AnnotationAdapter implementation ********** - - public Annotation getAnnotation(CompilationUnit astRoot) { - return this.daa.getAnnotation(this.annotatedElement.getModifiedDeclaration(astRoot)); - } - - public void newMarkerAnnotation() { - this.edit(this.buildNewMarkerAnnotationEditor()); - } - - public void newSingleMemberAnnotation() { - this.edit(this.buildNewSingleMemberAnnotationEditor()); - } - - public void newNormalAnnotation() { - this.edit(this.buildNewNormalAnnotationEditor()); - } - - public void removeAnnotation() { - this.edit(this.buildRemoveAnnotationEditor()); - } - - public ASTNode getAstNode(CompilationUnit astRoot) { - return this.daa.getAstNode(this.annotatedElement.getModifiedDeclaration(astRoot)); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.daa); - } - - - // ********** internal methods ********** - - protected void edit(AnnotatedElement.Editor editor) { - this.annotatedElement.edit(editor); - } - - - // ********** factory methods ********** - - protected AnnotatedElement.Editor buildNewMarkerAnnotationEditor() { - return new NewMarkerAnnotationEditor(this.daa); - } - - protected AnnotatedElement.Editor buildNewSingleMemberAnnotationEditor() { - return new NewSingleMemberAnnotationEditor(this.daa); - } - - protected AnnotatedElement.Editor buildNewNormalAnnotationEditor() { - return new NewNormalAnnotationEditor(this.daa); - } - - protected AnnotatedElement.Editor buildRemoveAnnotationEditor() { - return new RemoveAnnotationEditor(this.daa); - } - - - // ********** member classes ********** - - protected static class NewMarkerAnnotationEditor implements AnnotatedElement.Editor { - private final DeclarationAnnotationAdapter daa; - - NewMarkerAnnotationEditor(DeclarationAnnotationAdapter daa) { - super(); - this.daa = daa; - } - public void edit(ModifiedDeclaration declaration) { - this.daa.newMarkerAnnotation(declaration); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - } - - - protected static class NewSingleMemberAnnotationEditor implements AnnotatedElement.Editor { - private final DeclarationAnnotationAdapter daa; - - NewSingleMemberAnnotationEditor(DeclarationAnnotationAdapter daa) { - super(); - this.daa = daa; - } - public void edit(ModifiedDeclaration declaration) { - this.daa.newSingleMemberAnnotation(declaration); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - } - - - protected static class NewNormalAnnotationEditor implements AnnotatedElement.Editor { - private final DeclarationAnnotationAdapter daa; - - NewNormalAnnotationEditor(DeclarationAnnotationAdapter daa) { - super(); - this.daa = daa; - } - public void edit(ModifiedDeclaration declaration) { - this.daa.newNormalAnnotation(declaration); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - } - - - protected static class RemoveAnnotationEditor implements AnnotatedElement.Editor { - private final DeclarationAnnotationAdapter daa; - - RemoveAnnotationEditor(DeclarationAnnotationAdapter daa) { - super(); - this.daa = daa; - } - public void edit(ModifiedDeclaration declaration) { - this.daa.removeAnnotation(declaration); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractDeclarationAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractDeclarationAnnotationAdapter.java deleted file mode 100644 index 821c4ed618..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractDeclarationAnnotationAdapter.java +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import java.util.List; -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.Annotation; -import org.eclipse.jdt.core.dom.MarkerAnnotation; -import org.eclipse.jdt.core.dom.MemberValuePair; -import org.eclipse.jdt.core.dom.NormalAnnotation; -import org.eclipse.jdt.core.dom.SingleMemberAnnotation; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * - */ -public abstract class AbstractDeclarationAnnotationAdapter implements DeclarationAnnotationAdapter { - private final String annotationName; - - - // ********** constructors ********** - - protected AbstractDeclarationAnnotationAdapter(String annotationName) { - super(); - this.annotationName = annotationName; - } - - - // ********** DeclarationAnnotationAdapter implementation ********** - - public MarkerAnnotation newMarkerAnnotation(ModifiedDeclaration declaration) { - MarkerAnnotation annotation = this.newMarkerAnnotation(declaration.getAst()); - this.addAnnotationAndImport(declaration, annotation); - return annotation; - } - - public SingleMemberAnnotation newSingleMemberAnnotation(ModifiedDeclaration declaration) { - SingleMemberAnnotation annotation = this.newSingleMemberAnnotation(declaration.getAst()); - this.addAnnotationAndImport(declaration, annotation); - return annotation; - } - - public NormalAnnotation newNormalAnnotation(ModifiedDeclaration declaration) { - NormalAnnotation annotation = this.newNormalAnnotation(declaration.getAst()); - this.addAnnotationAndImport(declaration, annotation); - return annotation; - } - - /** - * Add the appropriate import statement, then shorten the annotation's - * name before adding it to the declaration. - */ - protected void addAnnotationAndImport(ModifiedDeclaration declaration, Annotation annotation) { - annotation.setTypeName(declaration.getAst().newName(this.getSourceCodeAnnotationName(declaration))); - this.addAnnotation(declaration, annotation); - } - - /** - * Return the annotation's name as it can be used in source code; - * i.e. if we can add it to the compilation unit's imports, return the short - * name; if we can't (because of a collision), return the fully-qualified name. - * NB: an import may be added as a side-effect :-( - */ - protected String getSourceCodeAnnotationName(ModifiedDeclaration declaration) { - return declaration.addImport(this.annotationName) ? this.getShortAnnotationName() : this.annotationName; - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.annotationName); - } - - /** - * Add the specified annotation to the specified declaration, - * replacing the original annotation if present. - */ - protected abstract void addAnnotation(ModifiedDeclaration declaration, Annotation annotation); - - - // ********** public methods ********** - - /** - * This is 'public' because we use it in CombinationIndexedDeclarationAnnotationAdapter - * to get the annotation name from a NestedIndexedDeclarationAnnotationAdapter. - */ - public String getAnnotationName() { - return this.annotationName; - } - - - // ********** helper methods ********** - - protected boolean nameMatches(ModifiedDeclaration declaration, Annotation annotation) { - return this.nameMatches(declaration, annotation, this.annotationName); - } - - protected boolean nameMatches(ModifiedDeclaration declaration, Annotation annotation, String name) { - return declaration.annotationIsNamed(annotation, name); - } - - protected MarkerAnnotation newMarkerAnnotation(AST ast) { - return this.newMarkerAnnotation(ast, this.annotationName); - } - - protected MarkerAnnotation newMarkerAnnotation(AST ast, String name) { - MarkerAnnotation annotation = ast.newMarkerAnnotation(); - annotation.setTypeName(ast.newName(name)); - return annotation; - } - - protected SingleMemberAnnotation newSingleMemberAnnotation(AST ast) { - return this.newSingleMemberAnnotation(ast, this.annotationName); - } - - protected SingleMemberAnnotation newSingleMemberAnnotation(AST ast, String name) { - SingleMemberAnnotation annotation = ast.newSingleMemberAnnotation(); - annotation.setTypeName(ast.newName(name)); - return annotation; - } - - protected NormalAnnotation newNormalAnnotation(AST ast) { - return this.newNormalAnnotation(ast, this.annotationName); - } - - protected NormalAnnotation newNormalAnnotation(AST ast, String name) { - NormalAnnotation annotation = ast.newNormalAnnotation(); - annotation.setTypeName(ast.newName(name)); - return annotation; - } - - protected String getShortAnnotationName() { - return convertToShortName(this.annotationName); - } - - protected static String convertToShortName(String name) { - return name.substring(name.lastIndexOf('.') + 1); - } - - @SuppressWarnings("unchecked") - protected List<MemberValuePair> values(NormalAnnotation na) { - return na.values(); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractExpressionConverter.java deleted file mode 100644 index 6fd4d1d99a..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractExpressionConverter.java +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2012 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Gather together the common implementation behavior. - * - * We're still figuring out Java Generics here.... The methods in this abstract - * class work fine with any subclass of Expression E; but a ClassCastException - * will occur as soon as we call any method implemented by a subclass - * (e.g. StringExpressionConverter) that expects a particular subclass of - * Expression (e.g. StringLiteral). - * - * @param <T> the type of the object to be converted to and from an expression - */ -public abstract class AbstractExpressionConverter<T> - implements ExpressionConverter<T> -{ - protected AbstractExpressionConverter() { - super(); - } - - - // ********** object -> expression ********** - - public Expression convert(T object, AST ast) { - return (object == null) ? this.convertNull(ast) : this.convertObject(object, ast); - } - - /** - * Return the expression for a <code>null</code> object. - * By default, a <code>null</code> object will - * be converted into a <code>null</code> expression. - */ - protected Expression convertNull(@SuppressWarnings("unused") AST ast) { - return null; - } - - /** - * The specified object is not <code>null</code>. - * @see #convert(Object, AST) - */ - protected abstract Expression convertObject(T object, AST ast); - - - // ********** expression -> object ********** - - public T convert(Expression expression) { - return (expression == null) ? this.convertNull() : this.convertExpression(expression); - } - - /** - * Return the object for a <code>null</code> expression. - * By default, a <code>null</code> expression will - * be converted into a <code>null</code> object. - */ - protected T convertNull() { - return null; - } - - /** - * The specified expression is not <code>null</code>. - * @see #convert(Expression) - */ - protected abstract T convertExpression(Expression expression); - - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractJDTType.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractJDTType.java deleted file mode 100644 index 9a264f76d2..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractJDTType.java +++ /dev/null @@ -1,199 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2012 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.common.core.internal.utility.jdt; - -import java.util.Iterator; -import java.util.List; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; -import org.eclipse.jdt.core.dom.BodyDeclaration; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.EnumDeclaration; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.core.utility.jdt.AbstractType; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.core.utility.jdt.Type; -import org.eclipse.jpt.common.utility.command.CommandExecutor; - -/** - * Adapt and extend a JDT abstract type. - */ -public abstract class AbstractJDTType - extends JDTMember - implements AbstractType -{ - - /** - * constructor for the compilation unit's primary type - */ - protected AbstractJDTType( - AbstractTypeDeclaration typeDeclaration, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - this(typeDeclaration, compilationUnit, modifySharedDocumentCommandExecutor, DefaultAnnotationEditFormatter.instance()); - } - - /** - * constructor for the compilation unit's primary type - */ - protected AbstractJDTType( - AbstractTypeDeclaration typeDeclaration, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - this(null, typeDeclaration, 1, compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - } - - /** - * constructor for nested types - */ - protected AbstractJDTType( - Type declaringType, - AbstractTypeDeclaration typeDeclaration, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - this(declaringType, typeDeclaration, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, DefaultAnnotationEditFormatter.instance()); - } - - /** - * constructor for nested types - */ - protected AbstractJDTType( - Type declaringType, - AbstractTypeDeclaration typeDeclaration, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - super(declaringType, typeDeclaration.getName().getFullyQualifiedName(), occurrence, compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - } - - /** - * constructor for testing - */ - protected AbstractJDTType(Type declaringType, String name, int occurrence, ICompilationUnit compilationUnit) { - super(declaringType, name, occurrence, compilationUnit, CommandExecutor.Default.instance(), DefaultAnnotationEditFormatter.instance()); - } - - @Override - protected Type getDeclaringType() { - return (Type) super.getDeclaringType(); - } - - // ********** Member/Type implementation ********** - - public ITypeBinding getBinding(CompilationUnit astRoot) { - AbstractTypeDeclaration td = this.getBodyDeclaration(astRoot); - return (td == null) ? null : td.resolveBinding(); - } - - /** - * find the type's body declaration in the specified AST - */ - @Override - public AbstractTypeDeclaration getBodyDeclaration(CompilationUnit astRoot) { - Type declaringType = this.getDeclaringType(); - if (declaringType == null) { - return this.getTopLevelTypeDeclaration(astRoot); - } - TypeDeclaration typeDeclaration = declaringType.getBodyDeclaration(astRoot); - // the type declaration can be null when the source is completely hosed - return (typeDeclaration == null) ? null : this.getNestedTypeDeclaration(typeDeclaration); - } - - public TextRange getNameTextRange(CompilationUnit astRoot) { - AbstractTypeDeclaration bodyDeclaration = this.getBodyDeclaration(astRoot); - // the declaration can be null if the resource is out of sync with the file system - return (bodyDeclaration) == null ? null : ASTTools.buildTextRange(bodyDeclaration.getName()); - } - - - // ********** internal ********** - - /** - * return the first top-level type in the specified AST with a matching name - */ - protected AbstractTypeDeclaration getTopLevelTypeDeclaration(CompilationUnit astRoot) { - return this.getTypeDeclaration(types(astRoot)); - } - - protected AbstractTypeDeclaration getTypeDeclaration(List<AbstractTypeDeclaration> typeDeclarations) { - return this.getTypeDeclaration(typeDeclarations.toArray(new AbstractTypeDeclaration[typeDeclarations.size()])); - } - - /** - * Return the nested type declaration with matching name and occurrence within the declaring type - */ - protected abstract AbstractTypeDeclaration getNestedTypeDeclaration(TypeDeclaration declaringTypeDeclaration); - - /** - * return the type declaration corresponding to the type from the specified - * set of type declarations (match name and occurrence). - * Only return type or enum declarations - */ - protected AbstractTypeDeclaration getTypeDeclaration(AbstractTypeDeclaration[] typeDeclarations) { - String name = this.getName(); - int occurrence = this.getOccurrence(); - int count = 0; - for (AbstractTypeDeclaration typeDeclaration : typeDeclarations) { - if (typeDeclaration.getName().getFullyQualifiedName().equals(name)) { - count++; - if (count == occurrence) { - return (typeDeclaration.getNodeType() == this.getASTNodeType()) ? typeDeclaration : null; - } - } - } - // return null if the type is no longer in the source code; - // this can happen when the context model has not yet - // been synchronized with the resource model but is still - // asking for an ASTNode (e.g. during a selection event) - return null; - } - - protected abstract int getASTNodeType(); - - /** - * we only instantiate a single top-level, non-annotation - * type per compilation unit (i.e. a class, enum, or interface) - */ - // minimize scope of suppressed warnings - @SuppressWarnings("unchecked") - protected static List<AbstractTypeDeclaration> types(CompilationUnit astRoot) { - return astRoot.types(); - } - - protected static EnumDeclaration[] getEnums(TypeDeclaration declaringTypeDeclaration) { - List<BodyDeclaration> bd = bodyDeclarations(declaringTypeDeclaration); - int typeCount = 0; - for (Iterator<BodyDeclaration> it = bd.listIterator(); it.hasNext(); ) { - if (it.next().getNodeType() == ASTNode.ENUM_DECLARATION) { - typeCount++; - } - } - EnumDeclaration[] memberEnums = new EnumDeclaration[typeCount]; - int next = 0; - for (Iterator<BodyDeclaration> it = bd.listIterator(); it.hasNext(); ) { - BodyDeclaration decl = it.next(); - if (decl.getNodeType() == ASTNode.ENUM_DECLARATION) { - memberEnums[next++] = (EnumDeclaration) decl; - } - } - return memberEnums; - } - - @SuppressWarnings("unchecked") - protected static List<BodyDeclaration> bodyDeclarations(TypeDeclaration typeDeclaration) { - return typeDeclaration.bodyDeclarations(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractNestedDeclarationAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractNestedDeclarationAnnotationAdapter.java deleted file mode 100644 index 1e12f713b0..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AbstractNestedDeclarationAnnotationAdapter.java +++ /dev/null @@ -1,403 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2010 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.common.core.internal.utility.jdt; - -import java.util.Iterator; -import java.util.List; -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.Expression; -import org.eclipse.jdt.core.dom.MarkerAnnotation; -import org.eclipse.jdt.core.dom.MemberValuePair; -import org.eclipse.jdt.core.dom.NormalAnnotation; -import org.eclipse.jdt.core.dom.SingleMemberAnnotation; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; - -/** - * Pull together some of the behavior common to - * {@link NestedDeclarationAnnotationAdapter} - * and {@link NestedIndexedDeclarationAnnotationAdapter} - */ -public abstract class AbstractNestedDeclarationAnnotationAdapter - extends AbstractDeclarationAnnotationAdapter -{ - private final DeclarationAnnotationAdapter outerAnnotationAdapter; - private final String elementName; - - // reduce NLS checks - protected static final String VALUE = "value"; //$NON-NLS-1$ - - - // ********** constructors ********** - - /** - * The default element name is <code>value</code>. - */ - protected AbstractNestedDeclarationAnnotationAdapter(DeclarationAnnotationAdapter outerAnnotationAdapter, String annotationName) { - this(outerAnnotationAdapter, VALUE, annotationName); - } - - protected AbstractNestedDeclarationAnnotationAdapter(DeclarationAnnotationAdapter outerAnnotationAdapter, String elementName, String annotationName) { - super(annotationName); - this.outerAnnotationAdapter = outerAnnotationAdapter; - this.elementName = elementName; - } - - - // ********** DeclarationAnnotationAdapter implementation ********** - - public Annotation getAnnotation(ModifiedDeclaration declaration) { - Annotation outer = this.outerAnnotationAdapter.getAnnotation(declaration); - if (outer == null) { - return null; - } - Expression value = this.elementValue(outer); - if (value == null) { - return null; - } - Annotation inner = this.getAnnotation(value); - if (inner == null) { - return null; - } - // return the annotation only if it has a matching name(?) - return this.nameMatches(declaration, inner) ? inner : null; - } - - public void removeAnnotation(ModifiedDeclaration declaration) { - Annotation outer = this.outerAnnotationAdapter.getAnnotation(declaration); - if (outer == null) { - return; - } - Expression value = this.elementValue(outer); - if (value == null) { - return; - } - // hack to allow short-circuit when the value is an array initializer - if (this.removeAnnotation(declaration, outer, value)) { - return; - } - Annotation inner = this.annotationValue(value); - if (inner == null) { - return; - } - // remove the annotation only if it has a matching name(?) - if (this.nameMatches(declaration, inner)) { - this.removeElementAndNormalize(declaration, outer); - } - } - - public ASTNode getAstNode(ModifiedDeclaration declaration) { - // if the annotation is missing, return the outer annotation's node - Annotation annotation = this.getAnnotation(declaration); - return (annotation != null) ? annotation : this.outerAnnotationAdapter.getAstNode(declaration); - } - - @Override - protected void addAnnotation(ModifiedDeclaration declaration, Annotation inner) { - Annotation outer = this.outerAnnotationAdapter.getAnnotation(declaration); - if (outer == null) { - this.buildNewOuterAnnotation(declaration, inner); - } else if (outer.isMarkerAnnotation()) { - this.modifyAnnotation(declaration, (MarkerAnnotation) outer, inner); - } else if (outer.isSingleMemberAnnotation()) { - this.modifyAnnotation(declaration, (SingleMemberAnnotation) outer, inner); - } else if (outer.isNormalAnnotation()) { - this.modifyAnnotation(declaration, (NormalAnnotation) outer, inner); - } else { - throw new IllegalStateException("unknown annotation type: " + outer); //$NON-NLS-1$ - } - } - - - // ********** abstract methods ********** - - /** - * Return an annotation extracted from the specified expression, - * which is the value of the adapter's element. - */ - protected abstract Annotation getAnnotation(Expression value); - - /** - * Remove the annotation from the specified expression, - * which is the value of the adapter's element. - * Return whether the removal was successful. - */ - protected abstract boolean removeAnnotation(ModifiedDeclaration declaration, Annotation outer, Expression value); - - /** - * Set the value of the specified outer annotation to the - * specified inner annotation. - */ - protected abstract void modifyAnnotationValue(SingleMemberAnnotation outer, Annotation inner); - - /** - * Set the value of the specified member value pair to the - * specified inner annotation. - */ - protected abstract void modifyMemberValuePair(MemberValuePair pair, Annotation inner); - - - // ********** public methods ********** - - public DeclarationAnnotationAdapter getOuterAnnotationAdapter() { - return this.outerAnnotationAdapter; - } - - public String getElementName() { - return this.elementName; - } - - - // ********** internal methods ********** - - /** - * If the specified expression is an annotation, cast it to an annotation; - * otherwise return null. - */ - protected Annotation annotationValue(Expression expression) { - switch (expression.getNodeType()) { - case ASTNode.NORMAL_ANNOTATION: - case ASTNode.SINGLE_MEMBER_ANNOTATION: - case ASTNode.MARKER_ANNOTATION: - return (Annotation) expression; - default: - return null; - } - } - - /** - * Remove the <em>first</em> annotation element with the specified name - * from the specified annotation, converting the annotation as appropriate. - */ - protected void removeElementAndNormalize(ModifiedDeclaration declaration, Annotation outer) { - if (outer.isNormalAnnotation()) { - this.removeElementAndNormalize(declaration, (NormalAnnotation) outer); - } else if (outer.isSingleMemberAnnotation()) { - this.removeElementAndNormalize(declaration, (SingleMemberAnnotation) outer); - } else if (outer.isMarkerAnnotation()) { - this.removeElementAndNormalize(declaration, (MarkerAnnotation) outer); - } else { - throw new IllegalArgumentException("unknown annotation type: " + outer); //$NON-NLS-1$ - } - } - - /** - * Remove the <em>first</em> annotation element with the adapter's element - * name from the specified annotation. Convert the annotation to - * a marker annotation or single member annotation if appropriate. - * <pre> - * @Outer(name="Fred", foo=@Inner) => @Outer(name="Fred") - * @Outer(foo=@Inner) => @Outer - * </pre> - */ - protected void removeElementAndNormalize(ModifiedDeclaration declaration, NormalAnnotation outer) { - this.removeElement(outer); - this.normalizeAnnotation(declaration, outer); - } - - /** - * Remove from the specified annotation the element with - * the adapter's element name. - */ - protected void removeElement(NormalAnnotation annotation) { - for (Iterator<MemberValuePair> stream = this.values(annotation).iterator(); stream.hasNext(); ) { - MemberValuePair pair = stream.next(); - if (pair.getName().getFullyQualifiedName().equals(this.elementName)) { - stream.remove(); - break; - } - } - } - - /** - * Convert the specified normal annotation to a marker annotation or - * single member annotation if appropriate. - */ - protected void normalizeAnnotation(ModifiedDeclaration declaration, NormalAnnotation outer) { - List<MemberValuePair> values = this.values(outer); - switch (values.size()) { - case 0: - // if the elements are all gone, convert the annotation to a marker annotation - this.outerAnnotationAdapter.newMarkerAnnotation(declaration); - break; - case 1: - MemberValuePair pair = values.get(0); - if (pair.getName().getFullyQualifiedName().equals(VALUE)) { - // if the last remaining element is 'value', convert the annotation to a single member annotation - Expression vv = pair.getValue(); - vv = (Expression) ASTNode.copySubtree(vv.getAST(), vv); - this.outerAnnotationAdapter.newSingleMemberAnnotation(declaration).setValue(vv); - } - break; - default: - // do nothing - break; - } - } - - /** - * Convert the specified single member annotation to a marker annotation - * if the adapter's element name is <code>value</code>. - */ - protected void removeElementAndNormalize(ModifiedDeclaration declaration, @SuppressWarnings("unused") SingleMemberAnnotation outer) { - if (this.elementName.equals(VALUE)) { - this.outerAnnotationAdapter.newMarkerAnnotation(declaration); - } - } - - protected void removeElementAndNormalize(@SuppressWarnings("unused") ModifiedDeclaration declaration, @SuppressWarnings("unused") MarkerAnnotation outer) { - // NOP - } - - /** - * Return the value of the *first* annotation element - * with the adapter's element name. - * Return null if the annotation has no such element. - * (An element name of "value" will return the value of a single - * member annotation.) - */ - protected Expression elementValue(Annotation annotation) { - if (annotation.isNormalAnnotation()) { - return this.elementValue((NormalAnnotation) annotation); - } - if (annotation.isSingleMemberAnnotation()) { - return this.elementValue((SingleMemberAnnotation) annotation); - } - return null; - } - - protected Expression elementValue(NormalAnnotation annotation) { - MemberValuePair pair = this.memberValuePair(annotation); - return (pair == null) ? null : pair.getValue(); - } - - /** - * If the adapter's element name is "value", return the value of the - * annotation, otherwise return null. - */ - protected Expression elementValue(SingleMemberAnnotation annotation) { - return this.elementName.equals(VALUE) ? annotation.getValue() : null; - } - - /** - * Return the *first* member value pair for the adapter's element name. - * Return null if the specified annotation has no such element. - */ - protected MemberValuePair memberValuePair(NormalAnnotation annotation) { - for (MemberValuePair pair : this.values(annotation)) { - if (pair.getName().getFullyQualifiedName().equals(this.elementName)) { - return pair; - } - } - return null; - } - - /** - * Build a new outer annotation and add the specified - * inner annotation to it: - * <pre> - * @Outer(@Inner) - * </pre> - * or - * <pre> - * @Outer(foo=@Inner) - * </pre> - */ - protected void buildNewOuterAnnotation(ModifiedDeclaration declaration, Annotation inner) { - if (this.elementName.equals(VALUE)) { - this.outerAnnotationAdapter.newSingleMemberAnnotation(declaration).setValue(this.buildNewInnerExpression(inner)); - } else { - List<MemberValuePair> values = this.values(this.outerAnnotationAdapter.newNormalAnnotation(declaration)); - values.add(this.newMemberValuePair(this.buildNewInnerExpression(inner))); - } - } - - /** - * Build an expression to be added to a new outer annotation - * for the specified inner annotation. - */ - protected abstract Expression buildNewInnerExpression(Annotation inner); - - /** - * Build a new member value pair with the specified name and value. - */ - protected MemberValuePair newMemberValuePair(String name, Expression value) { - AST ast = value.getAST(); - MemberValuePair pair = ast.newMemberValuePair(); - pair.setName(ast.newSimpleName(name)); - pair.setValue(value); - return pair; - } - - /** - * Build a new member value pair with the adapter's element name - * and the specified inner annotation. - */ - protected MemberValuePair newMemberValuePair(Expression value) { - return this.newMemberValuePair(this.elementName, value); - } - - /** - * Add the specified inner annotation to the marker annotation. - */ - protected void modifyAnnotation(ModifiedDeclaration declaration, @SuppressWarnings("unused") MarkerAnnotation outer, Annotation inner) { - this.buildNewOuterAnnotation(declaration, inner); - } - - /** - * Add the specified inner annotation to the single member annotation. - */ - protected void modifyAnnotation(ModifiedDeclaration declaration, SingleMemberAnnotation outer, Annotation inner) { - if (this.elementName.equals(VALUE)) { - this.modifyAnnotationValue(outer, inner); - } else { - this.modifyAnnotationNonValue(declaration, outer, inner); - } - } - - /** - * Add the specified inner annotation to the single member annotation, - * converting it to a normal annotation: - * <pre> - * @Outer("lorem ipsum") => @Outer(value="lorem ipsum", foo=@Inner) - * </pre> - */ - protected void modifyAnnotationNonValue(ModifiedDeclaration declaration, SingleMemberAnnotation outer, Annotation inner) { - Expression vv = outer.getValue(); - vv = (Expression) ASTNode.copySubtree(vv.getAST(), vv); - NormalAnnotation newOuter = this.outerAnnotationAdapter.newNormalAnnotation(declaration); - List<MemberValuePair> values = this.values(newOuter); - values.add(this.newMemberValuePair(VALUE, vv)); - values.add(this.newMemberValuePair(this.buildNewInnerExpression(inner))); - } - - /** - * Add the specified inner annotation to the normal annotation: - * <pre> - * @Outer(bar="lorem ipsum") => @Outer(bar="lorem ipsum", foo=@Inner) - * </pre> - * or - * <pre> - * @Outer(foo=@Inner("lorem ipsum")) => @Outer(foo=@Inner) - * </pre> - */ - protected void modifyAnnotation(@SuppressWarnings("unused") ModifiedDeclaration declaration, NormalAnnotation outer, Annotation inner) { - MemberValuePair pair = this.memberValuePair(outer); - if (pair == null) { - List<MemberValuePair> values = this.values(outer); - values.add(this.newMemberValuePair(inner)); - } else { - this.modifyMemberValuePair(pair, inner); - } - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AnnotatedElementAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AnnotatedElementAnnotationElementAdapter.java deleted file mode 100644 index 4419a56f0c..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AnnotatedElementAnnotationElementAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2010 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.internal.StringTools; - - /** - * Adapt an annotated element and a declaration annotation element adapter. - */ -public class AnnotatedElementAnnotationElementAdapter<T> - implements AnnotationElementAdapter<T> -{ - private final AnnotatedElement annotatedElement; - private final DeclarationAnnotationElementAdapter<T> daea; - - - // ********** constructor ********** - - public AnnotatedElementAnnotationElementAdapter(AnnotatedElement annotatedElement, DeclarationAnnotationElementAdapter<T> daea) { - super(); - this.annotatedElement = annotatedElement; - this.daea = daea; - } - - - // ********** AnnotationElementAdapter implementation ********** - - public T getValue() { - return this.daea.getValue(this.annotatedElement.getModifiedDeclaration()); - } - - public T getValue(CompilationUnit astRoot) { - return this.daea.getValue(this.annotatedElement.getModifiedDeclaration(astRoot)); - } - - public void setValue(T value) { - this.edit(this.buildSetValueEditor(value)); - } - - public Expression getExpression(CompilationUnit astRoot) { - return this.daea.getExpression(this.annotatedElement.getModifiedDeclaration(astRoot)); - } - - public ASTNode getAstNode(CompilationUnit astRoot) { - return this.daea.getAstNode(this.annotatedElement.getModifiedDeclaration(astRoot)); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.daea); - } - - - // ********** internal methods ********** - - protected void edit(AnnotatedElement.Editor editor) { - this.annotatedElement.edit(editor); - } - - protected AnnotatedElement.Editor buildSetValueEditor(T value) { - return new SetValueEditor<T>(value, this.daea); - } - - - // ********** member classes ********** - - protected static class SetValueEditor<T> implements AnnotatedElement.Editor { - private final DeclarationAnnotationElementAdapter<T> daea; - private final T value; - - SetValueEditor(T value, DeclarationAnnotationElementAdapter<T> daea) { - super(); - this.value = value; - this.daea = daea; - } - public void edit(ModifiedDeclaration declaration) { - this.daea.setValue(this.value, declaration); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AnnotationStringArrayExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AnnotationStringArrayExpressionConverter.java deleted file mode 100644 index 337a054865..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/AnnotationStringArrayExpressionConverter.java +++ /dev/null @@ -1,131 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.ArrayInitializer; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; -import org.eclipse.jpt.common.core.utility.jdt.IndexedExpressionConverter; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Convert an array initializer or single expression to/from an array of - * strings (e.g. {"text0", "text1"}). - * E is the type of the expressions to be found either stand-alone or - * as elements in the array initializer. - */ -public class AnnotationStringArrayExpressionConverter - extends AbstractExpressionConverter<String[]> - implements IndexedExpressionConverter<String> -{ - private final ExpressionConverter<String> elementConverter; - private final StringArrayExpressionConverter arrayConverter; - - - /** - * The default behavior is to remove the array initializer if it is empty. - */ - public AnnotationStringArrayExpressionConverter(ExpressionConverter<String> elementConverter) { - this(elementConverter, true); - } - - public AnnotationStringArrayExpressionConverter(ExpressionConverter<String> elementConverter, boolean removeArrayInitializerWhenEmpty) { - super(); - this.elementConverter = elementConverter; - this.arrayConverter = new StringArrayExpressionConverter(elementConverter, removeArrayInitializerWhenEmpty); - } - - /** - * if we only have a single string in the array return the single expression, - * without braces, instead of an array initializer - */ - @Override - protected Expression convertObject(String[] strings, AST ast) { - return (strings.length == 1) ? - this.elementConverter.convert(strings[0], ast) : - this.arrayConverter.convertObject(strings, ast); - } - - @Override - protected String[] convertNull() { - return this.arrayConverter.convertNull(); - } - - /** - * check for a single expression with no surrounding braces, implying a - * single-entry array - */ - @Override - protected String[] convertExpression(Expression expression) { - return (expression.getNodeType() == ASTNode.ARRAY_INITIALIZER) ? - this.convertArrayInitializer((ArrayInitializer) expression) : - this.convertNonArrayInitializer(expression); - } - - protected String[] convertArrayInitializer(ArrayInitializer arrayInitializer) { - return this.arrayConverter.convertArrayInitializer(arrayInitializer); - } - - /** - * The specified expression is <em>not</em> an array initializer. - * If we have trouble converting the standalone expression, simply return an - * empty array (as opposed to an array with a <code>null</code> element). - */ - protected String[] convertNonArrayInitializer(Expression expression) { - String element = this.elementConverter.convert(expression); - return (element == null) ? StringTools.EMPTY_STRING_ARRAY : new String[] { element }; - } - - public Expression selectExpression(Expression expression, int index) { - if (expression.getNodeType() == ASTNode.ARRAY_INITIALIZER) { - return this.arrayConverter.selectExpression(expression, index); - } - if (index == 0) { - return expression; - } - throw new ArrayIndexOutOfBoundsException(); - } - - - // ********** factory methods ********** - - /** - * Build an expression converter for an annotation element of type String[]. - * @Foo(bar={"text0", "text1"}) - * or - * @Foo(bar="text0") - */ - public static AnnotationStringArrayExpressionConverter forStrings() { - return new AnnotationStringArrayExpressionConverter(StringExpressionConverter.instance()); - } - - /** - * Build an expression converter for an annotation element of type <enum>[]. - * @Foo(bar={BAZ, BAT}) - * or - * @Foo(bar=BAZ) - */ - public static AnnotationStringArrayExpressionConverter forNames() { - return new AnnotationStringArrayExpressionConverter(NameStringExpressionConverter.instance()); - } - - - /** - * Build an expression converter for an annotation element of type Class[]. - * @Foo(bar={Baz.class, Bat.class}) - * or - * @Foo(bar=Baz.class) - */ - public static AnnotationStringArrayExpressionConverter forTypes() { - return new AnnotationStringArrayExpressionConverter(TypeStringExpressionConverter.instance()); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/BooleanExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/BooleanExpressionConverter.java deleted file mode 100644 index f33a719986..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/BooleanExpressionConverter.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.BooleanLiteral; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; - -/** - * Convert a boolean literal to/from a Boolean - * (e.g. Boolean.TRUE). - */ -public final class BooleanExpressionConverter - extends AbstractExpressionConverter<Boolean> -{ - private static final ExpressionConverter<Boolean> INSTANCE = new BooleanExpressionConverter(); - - /** - * Return the singleton. - */ - public static ExpressionConverter<Boolean> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private BooleanExpressionConverter() { - super(); - } - - @Override - protected BooleanLiteral convertObject(Boolean booleanObject, AST ast) { - return ast.newBooleanLiteral(booleanObject.booleanValue()); - } - - @Override - protected Boolean convertExpression(Expression expression) { - Object value = expression.resolveConstantExpressionValue(); - return (value instanceof Boolean) ? ((Boolean) value) : null; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/CharacterStringExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/CharacterStringExpressionConverter.java deleted file mode 100644 index cfb470581b..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/CharacterStringExpressionConverter.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.CharacterLiteral; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; - -/** - * Convert a character literal to/from a string representation of a character - * (e.g. "A"). - */ -public final class CharacterStringExpressionConverter - extends AbstractExpressionConverter<String> -{ - private static final ExpressionConverter<String> INSTANCE = new CharacterStringExpressionConverter(); - - /** - * Return the singleton. - */ - public static ExpressionConverter<String> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private CharacterStringExpressionConverter() { - super(); - } - - @Override - protected CharacterLiteral convertObject(String string, AST ast) { - CharacterLiteral characterLiteral = ast.newCharacterLiteral(); - characterLiteral.setCharValue(string.charAt(0)); - return characterLiteral; - } - - @Override - protected String convertExpression(Expression expression) { - Object value = expression.resolveConstantExpressionValue(); - return (value instanceof Character) ? ((Character) value).toString() : null; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/CombinationIndexedDeclarationAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/CombinationIndexedDeclarationAnnotationAdapter.java deleted file mode 100644 index dde05b2a59..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/CombinationIndexedDeclarationAnnotationAdapter.java +++ /dev/null @@ -1,500 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import java.util.List; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Annotation; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.MarkerAnnotation; -import org.eclipse.jdt.core.dom.MemberValuePair; -import org.eclipse.jdt.core.dom.NormalAnnotation; -import org.eclipse.jdt.core.dom.SingleMemberAnnotation; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.IndexedDeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Manipulate an annotation that either occurs stand-alone, e.g. - * <pre> - * @Inner("zero") - * private int id; - * </pre> - * - * or is embedded in an element array within another annotation, e.g. - * <pre> - * @Outer(foo={@Inner("zero"), @Inner("one"), @Inner("two")}) - * private int id; - * - * annotationName = "Inner" - * containerAnnotationName = "Outer" - * elementName = "foo" - * index = 0-2 - * </pre> - * - * This is a useful pattern because a declaration cannot have more - * than one annotation of the same type, and allowing the stand-alone - * configuration reduces clutter. - * <br> - * NB: This configuration only makes sense for "top-level" annotations, as - * opposed to "nested" annotations. This is because annotation elements - * can only be declared with a type of a single annotation and annotations - * cannot be part of an inheritance hierarchy. - * For example, the following configurations cannot *both* be supported: - * <pre> - * @Foo(bar=@Outer(...)) - * private int id; - * - * @Foo(bar=@Inner(...)) // not allowed - * private int id; - * </pre> - * - * NB: Behavior is undefined when both the stand-alone and the nested - * configurations annotate the same declaration, e.g. - * <pre> - * // undefined behavior - * @Inner("zero") - * @Outer(foo={@Inner("zero"), @Inner("one"), @Inner("two")}) - * private int id; - * </pre> - */ -public class CombinationIndexedDeclarationAnnotationAdapter - implements IndexedDeclarationAnnotationAdapter -{ - - /** - * this adapter is used when the annotation is "stand-alone": - * <pre> - * @Inner("zero") - * </pre> - * and is only used when the index is 0 or 1 - */ - private final DeclarationAnnotationAdapter standAloneAnnotationAdapter; - - /** - * this adapter is used when the annotation is "nested": - * <pre> - * @Outer(foo={@Inner("zero"), @Inner("one")}) - * </pre> - */ - private final NestedIndexedDeclarationAnnotationAdapter nestedAnnotationAdapter; - - /** - * this adapter is for the "nested" annotation at the zero index; - * and is only used when the index is 1 - */ - private final NestedIndexedDeclarationAnnotationAdapter zeroNestedAnnotationAdapter; - - // reduce NLS checks - protected static final String VALUE = "value"; //$NON-NLS-1$ - - - // ********** constructors ********** - - /** - * default element name is "value" - * <pre> - * @Inner("zero") - * @Outer({@Inner("zero"), @Inner("one")}) - * </pre> - */ - public CombinationIndexedDeclarationAnnotationAdapter(String annotationName, String containerAnnotationName, int index) { - this(annotationName, containerAnnotationName, VALUE, index); - } - - public CombinationIndexedDeclarationAnnotationAdapter(String annotationName, String containerAnnotationName, String elementName, int index) { - this(new SimpleDeclarationAnnotationAdapter(annotationName), new SimpleDeclarationAnnotationAdapter(containerAnnotationName), elementName, index, annotationName); - } - - /** - * default element name is "value" - */ - public CombinationIndexedDeclarationAnnotationAdapter( - DeclarationAnnotationAdapter standAloneAnnotationAdapter, - DeclarationAnnotationAdapter containerAnnotationAdapter, - int index, - String nestedAnnotationName - ) { - this(standAloneAnnotationAdapter, containerAnnotationAdapter, VALUE, index, nestedAnnotationName); - } - - public CombinationIndexedDeclarationAnnotationAdapter( - DeclarationAnnotationAdapter standAloneAnnotationAdapter, - DeclarationAnnotationAdapter containerAnnotationAdapter, - String elementName, - int index, - String nestedAnnotationName - ) { - super(); - this.standAloneAnnotationAdapter = standAloneAnnotationAdapter; - this.nestedAnnotationAdapter = new NestedIndexedDeclarationAnnotationAdapter(containerAnnotationAdapter, elementName, index, nestedAnnotationName); - this.zeroNestedAnnotationAdapter = new NestedIndexedDeclarationAnnotationAdapter(containerAnnotationAdapter, elementName, 0, nestedAnnotationName); - } - - - // ********** DeclarationAnnotationAdapter implementation ********** - - public Annotation getAnnotation(ModifiedDeclaration declaration) { - if (this.getIndex() == 0) { - // check for the stand-alone annotation - Annotation standAloneAnnotation = this.getStandAloneAnnotation(declaration); - if (standAloneAnnotation != null) { - return standAloneAnnotation; - } - } - return this.getNestedAnnotation(declaration); - } - - /** - * <pre> - * [none] => @Inner - * or - * @Inner("lorem ipsum") => @Inner - * or - * @Inner(text="lorem ipsum") => @Inner - * or - * @Outer(foo={@Inner, @Inner}) => @Outer(foo={@Inner, @Inner, @Inner}) - * or - * @Outer(foo=@Inner) => @Outer(foo={@Inner, @Inner}) - * or - * @Inner => @Outer(foo={@Inner, @Inner}) - * etc. - * </pre> - */ - public MarkerAnnotation newMarkerAnnotation(ModifiedDeclaration declaration) { - return (MarkerAnnotation) this.newAnnotation(MARKER_ANNOTATION_FACTORY, declaration); - } - - public SingleMemberAnnotation newSingleMemberAnnotation(ModifiedDeclaration declaration) { - return (SingleMemberAnnotation) this.newAnnotation(SINGLE_MEMBER_ANNOTATION_FACTORY, declaration); - } - - public NormalAnnotation newNormalAnnotation(ModifiedDeclaration declaration) { - return (NormalAnnotation) this.newAnnotation(NORMAL_ANNOTATION_FACTORY, declaration); - } - - public void removeAnnotation(ModifiedDeclaration declaration) { - if (this.getIndex() == 0) { - // check for the stand-alone annotation - if (this.standAloneAnnotationIsPresent(declaration)) { - this.removeStandAloneAnnotation(declaration); - return; - } - } - this.removeNestedAnnotation(declaration); - if (this.nestedElementCanBeConvertedToStandAlone(declaration)) { - this.convertLastElementAnnotationToStandAloneAnnotation(declaration); - } - } - - public ASTNode getAstNode(ModifiedDeclaration declaration) { - // if the annotation is missing, delegate to the nested annotation adapter - Annotation annotation = this.getAnnotation(declaration); - return (annotation != null) ? annotation : this.nestedAnnotationAdapter.getAstNode(declaration); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.getAnnotationName()); - } - - - // ********** IndexedDeclarationAnnotationAdapter implementation ********** - - public int getIndex() { - return this.nestedAnnotationAdapter.getIndex(); - } - - public void moveAnnotation(int newIndex, ModifiedDeclaration declaration) { - int oldIndex = this.getIndex(); - if (newIndex == oldIndex) { - return; - } - - Annotation standAloneAnnotation = this.getStandAloneAnnotation(declaration); - if (standAloneAnnotation == null) { - this.moveNestedAnnotation(newIndex, declaration); - if (this.nestedElementCanBeConvertedToStandAlone(declaration)) { - this.convertLastElementAnnotationToStandAloneAnnotation(declaration); - } - } else { - if ((oldIndex == 0) && (newIndex == 1)) { - // this is one of two situations where we transition from stand-alone to container - this.moveStandAloneAnnotationToContainerAnnotation(standAloneAnnotation, declaration); - this.moveNestedAnnotation(newIndex, declaration); - } else if (newIndex == 0) { - // we are moving a 'null' entry on top of the stand-alone, so remove it - this.removeStandAloneAnnotation(declaration); - } else { - throw new IllegalStateException("old index = " + oldIndex + "; new index = " + newIndex); //$NON-NLS-1$ //$NON-NLS-2$ - } - } - } - - - // ********** internal methods ********** - - /** - * build the appropriate new annotation, - * which may require moving the 0th annotation from "stand-alone" to "nested" - */ - private Annotation newAnnotation(AnnotationFactory annotationFactory, ModifiedDeclaration declaration) { - if (this.getIndex() == 0) { - return this.newZeroAnnotation(annotationFactory, declaration); - } - if (this.zeroNestedAnnotationIsPresent(declaration)) { - // manipulate the container annotation - ignore the stand-alone annotation(?) - // @Outer(foo=@Inner("zero")) => @Outer(foo={@Inner("zero"), @Inner}) - // or - // @Outer(foo={@Inner("zero"), @Inner("one")}) => @Outer(foo={@Inner("zero"), @Inner}) - return annotationFactory.newAnnotation(this.nestedAnnotationAdapter, declaration); - } - - // this is one of two situations where we transition from stand-alone to container - this.moveStandAloneAnnotationToContainerAnnotation(declaration); - // once the stand-alone annotation is moved to index=0, build the new annotation at index=1 - return annotationFactory.newAnnotation(this.nestedAnnotationAdapter, declaration); - } - - /** - * the index is 0 - build the appropriate new annotation, - * which may be either "stand-alone" or "nested" - */ - private Annotation newZeroAnnotation(AnnotationFactory annotationFactory, ModifiedDeclaration declaration) { - if (this.standAloneAnnotationIsPresent(declaration)) { - // replace the stand-alone annotation - ignore the container annotation(?) - // @Inner(text="lorem ipsum") => @Inner - return annotationFactory.newAnnotation(this.standAloneAnnotationAdapter, declaration); - } - if (this.containerAnnotationIsPresent(declaration)) { - // manipulate the container annotation - // @Outer(foo=@Inner(text="lorem ipsum")) => @Outer(foo=@Inner) - return annotationFactory.newAnnotation(this.nestedAnnotationAdapter, declaration); - } - // neither annotation is present - add a new stand-alone annotation - return annotationFactory.newAnnotation(this.standAloneAnnotationAdapter, declaration); - } - - /** - * move the stand-alone annotation to the container annotation at index=0 - */ - private void moveStandAloneAnnotationToContainerAnnotation(ModifiedDeclaration declaration) { - Annotation standAloneAnnotation = this.getStandAloneAnnotation(declaration); - if (standAloneAnnotation == null) { - throw new IllegalStateException("the stand-alone annotation is missing"); //$NON-NLS-1$ - } - this.moveStandAloneAnnotationToContainerAnnotation(standAloneAnnotation, declaration); - } - - /** - * move the specified, non-null, stand-alone annotation to - * the container annotation at index=0 - */ - private void moveStandAloneAnnotationToContainerAnnotation(Annotation standAloneAnnotation, ModifiedDeclaration declaration) { - if (standAloneAnnotation.isMarkerAnnotation()) { - this.zeroNestedAnnotationAdapter.newMarkerAnnotation(declaration); - } else if (standAloneAnnotation.isSingleMemberAnnotation()) { - Expression vv = ((SingleMemberAnnotation) standAloneAnnotation).getValue(); - vv = (Expression) ASTNode.copySubtree(vv.getAST(), vv); - this.zeroNestedAnnotationAdapter.newSingleMemberAnnotation(declaration).setValue(vv); - } else if (standAloneAnnotation.isNormalAnnotation()) { - NormalAnnotation newNA = this.zeroNestedAnnotationAdapter.newNormalAnnotation(declaration); - List<MemberValuePair> values = this.values(newNA); - for (MemberValuePair pair : this.values((NormalAnnotation) standAloneAnnotation)) { - values.add((MemberValuePair) ASTNode.copySubtree(pair.getAST(), pair)); - } - } else { - throw new IllegalStateException("unknown annotation type: " + standAloneAnnotation); //$NON-NLS-1$ - } - this.removeStandAloneAnnotation(declaration); - } - - /** - * return whether the "nested" annotation container has been reduced to - * a single element (and the array initializer is converted to just - * the single remaining element) and can be further converted to the - * "stand-alone" annotation: - * <pre> - * @Outer(foo={@Inner("zero"), @Inner("one")}) => - * @Outer(foo=@Inner("zero")) => - * @Inner("zero") - * </pre> - */ - private boolean nestedElementCanBeConvertedToStandAlone(ModifiedDeclaration declaration) { - Annotation containerAnnotation = this.getContainerAnnotation(declaration); - if (containerAnnotation == null) { - return false; - } - if (containerAnnotation.isMarkerAnnotation()) { - return false; - } - if (containerAnnotation.isSingleMemberAnnotation()) { - if (this.getElementName().equals(VALUE)) { - return (((SingleMemberAnnotation) containerAnnotation).getValue().getNodeType() != ASTNode.ARRAY_INITIALIZER) - && (this.zeroNestedAnnotationAdapter.getAnnotation(declaration) != null); - } - return false; - } - if (containerAnnotation.isNormalAnnotation()) { - NormalAnnotation na = (NormalAnnotation) containerAnnotation; - if (na.values().size() == 0) { - return false; // there are no elements present - } - if (na.values().size() != 1) { - return false; // there are other elements present - leave them all alone - } - MemberValuePair pair = (MemberValuePair) na.values().get(0); - if (this.getElementName().equals(pair.getName().getFullyQualifiedName())) { - return (pair.getValue().getNodeType() != ASTNode.ARRAY_INITIALIZER) - && (this.zeroNestedAnnotationAdapter.getAnnotation(declaration) != null); - } - return false; - } - throw new IllegalStateException("unknown annotation type: " + containerAnnotation); //$NON-NLS-1$ - } - - /** - * move the annotation in the container annotation at index=0 - * to the stand-alone annotation - */ - private void convertLastElementAnnotationToStandAloneAnnotation(ModifiedDeclaration declaration) { - Annotation last = this.zeroNestedAnnotationAdapter.getAnnotation(declaration); - if (last == null) { - throw new IllegalStateException("the last nested annotation is missing"); //$NON-NLS-1$ - } else if (last.isMarkerAnnotation()) { - this.newStandAloneMarkerAnnotation(declaration); - } else if (last.isSingleMemberAnnotation()) { - Expression vv = ((SingleMemberAnnotation) last).getValue(); - vv = (Expression) ASTNode.copySubtree(vv.getAST(), vv); - this.newStandAloneSingleMemberAnnotation(declaration).setValue(vv); - } else if (last.isNormalAnnotation()) { - NormalAnnotation newNA = this.newStandAloneNormalAnnotation(declaration); - List<MemberValuePair> values = this.values(newNA); - for (MemberValuePair pair : this.values((NormalAnnotation) last)) { - values.add((MemberValuePair) ASTNode.copySubtree(pair.getAST(), pair)); - } - } else { - throw new IllegalStateException("unknown annotation type: " + last); //$NON-NLS-1$ - } - this.removeContainerAnnotation(declaration); - } - - private boolean standAloneAnnotationIsPresent(ModifiedDeclaration declaration) { - return this.getStandAloneAnnotation(declaration) != null; - } - - private Annotation getStandAloneAnnotation(ModifiedDeclaration declaration) { - return this.standAloneAnnotationAdapter.getAnnotation(declaration); - } - - private MarkerAnnotation newStandAloneMarkerAnnotation(ModifiedDeclaration declaration) { - return this.standAloneAnnotationAdapter.newMarkerAnnotation(declaration); - } - - private SingleMemberAnnotation newStandAloneSingleMemberAnnotation(ModifiedDeclaration declaration) { - return this.standAloneAnnotationAdapter.newSingleMemberAnnotation(declaration); - } - - private NormalAnnotation newStandAloneNormalAnnotation(ModifiedDeclaration declaration) { - return this.standAloneAnnotationAdapter.newNormalAnnotation(declaration); - } - - private void removeStandAloneAnnotation(ModifiedDeclaration declaration) { - this.standAloneAnnotationAdapter.removeAnnotation(declaration); - } - - private Annotation getNestedAnnotation(ModifiedDeclaration declaration) { - return this.nestedAnnotationAdapter.getAnnotation(declaration); - } - - private void moveNestedAnnotation(int newIndex, ModifiedDeclaration declaration) { - this.nestedAnnotationAdapter.moveAnnotation(newIndex, declaration); - } - - private void removeNestedAnnotation(ModifiedDeclaration declaration) { - this.nestedAnnotationAdapter.removeAnnotation(declaration); - } - - private boolean containerAnnotationIsPresent(ModifiedDeclaration declaration) { - return this.getContainerAnnotation(declaration) != null; - } - - private Annotation getContainerAnnotation(ModifiedDeclaration declaration) { - return this.nestedAnnotationAdapter.getOuterAnnotationAdapter().getAnnotation(declaration); - } - - private void removeContainerAnnotation(ModifiedDeclaration declaration) { - this.nestedAnnotationAdapter.getOuterAnnotationAdapter().removeAnnotation(declaration); - } - - private boolean zeroNestedAnnotationIsPresent(ModifiedDeclaration declaration) { - return this.getZeroNestedAnnotation(declaration) != null; - } - - private Annotation getZeroNestedAnnotation(ModifiedDeclaration declaration) { - return this.zeroNestedAnnotationAdapter.getAnnotation(declaration); - } - - private String getAnnotationName() { - return this.nestedAnnotationAdapter.getAnnotationName(); - } - - private String getElementName() { - return this.nestedAnnotationAdapter.getElementName(); - } - - @SuppressWarnings("unchecked") - protected List<MemberValuePair> values(NormalAnnotation na) { - return na.values(); - } - - - // ********** annotation factories ********** - - /** - * define interface that allows us to "re-use" the nasty code in - * #newAnnotation(AnnotationFactory, ModifiedDeclaration) - */ - private interface AnnotationFactory { - Annotation newAnnotation(DeclarationAnnotationAdapter adapter, ModifiedDeclaration declaration); - } - - private static final AnnotationFactory MARKER_ANNOTATION_FACTORY = new AnnotationFactory() { - public Annotation newAnnotation(DeclarationAnnotationAdapter adapter, ModifiedDeclaration declaration) { - return adapter.newMarkerAnnotation(declaration); - } - @Override - public String toString() { - return "MarkerAnnotationFactory"; //$NON-NLS-1$ - } - }; - - private static final AnnotationFactory SINGLE_MEMBER_ANNOTATION_FACTORY = new AnnotationFactory() { - public Annotation newAnnotation(DeclarationAnnotationAdapter adapter, ModifiedDeclaration declaration) { - return adapter.newSingleMemberAnnotation(declaration); - } - @Override - public String toString() { - return "SingleMemberAnnotationFactory"; //$NON-NLS-1$ - } - }; - - private static final AnnotationFactory NORMAL_ANNOTATION_FACTORY = new AnnotationFactory() { - public Annotation newAnnotation(DeclarationAnnotationAdapter adapter, ModifiedDeclaration declaration) { - return adapter.newNormalAnnotation(declaration); - } - @Override - public String toString() { - return "NormalAnnotationFactory"; //$NON-NLS-1$ - } - }; - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ConversionDeclarationAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ConversionDeclarationAnnotationElementAdapter.java deleted file mode 100644 index fb934f33be..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ConversionDeclarationAnnotationElementAdapter.java +++ /dev/null @@ -1,154 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2012 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Wrap a declaration annotation element adapter that deals with AST - * expressions, converting them to/from various other objects. - * - * @param <T> the type of the object be passed to and returned by the adapter - */ -public class ConversionDeclarationAnnotationElementAdapter<T> - implements DeclarationAnnotationElementAdapter<T> -{ - /** - * The wrapped adapter that returns and takes AST expressions. - */ - protected final DeclarationAnnotationElementAdapter<Expression> adapter; - - /** - * The converter that converts AST expressions to other objects - * (e.g. Strings). - */ - protected final ExpressionConverter<T> converter; - - - // ********** constructors ********** - - /** - * The default element name is <code>value</code>. - */ - public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, ExpressionConverter<T> converter) { - this(new ExpressionDeclarationAnnotationElementAdapter<Expression>(annotationAdapter), converter); - } - - public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, ExpressionConverter<T> converter) { - this(new ExpressionDeclarationAnnotationElementAdapter<Expression>(annotationAdapter, elementName), converter); - } - - public ConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationElementAdapter<Expression> adapter, ExpressionConverter<T> converter) { - super(); - this.adapter = adapter; - this.converter = converter; - } - - - // ********** DeclarationAnnotationElementAdapter implementation ********** - - public T getValue(ModifiedDeclaration declaration) { - Expression expression = this.adapter.getValue(declaration); - return this.converter.convert(expression); - } - - public void setValue(T value, ModifiedDeclaration declaration) { - Expression expression; - try { - expression = this.converter.convert(value, declaration.getAst()); - } catch (IllegalArgumentException ex) { - // if there is a problem converting the 'value' to an Expression we get this exception - return; // don't set the value if it is "illegal" - } - this.adapter.setValue(expression, declaration); - } - - public Expression getExpression(ModifiedDeclaration declaration) { - return this.adapter.getExpression(declaration); - } - - public ASTNode getAstNode(ModifiedDeclaration declaration) { - return this.adapter.getAstNode(declaration); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.adapter); - } - - - // ********** factory static methods ********** - - /** - * The default element name is <code>value</code>; - * the default expression converter expects string constant expressions. - */ - public static ConversionDeclarationAnnotationElementAdapter<String> forStrings(DeclarationAnnotationAdapter annotationAdapter) { - return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, StringExpressionConverter.instance()); - } - - /** - * The default expression converter expects string constant expressions. - */ - public static ConversionDeclarationAnnotationElementAdapter<String> forStrings(DeclarationAnnotationAdapter annotationAdapter, String elementName) { - return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, StringExpressionConverter.instance()); - } - - /** - * The default element name is <code>value</code>; - * the default expression converter expects number constant expressions. - */ - public static ConversionDeclarationAnnotationElementAdapter<Integer> forNumbers(DeclarationAnnotationAdapter annotationAdapter) { - return new ConversionDeclarationAnnotationElementAdapter<Integer>(annotationAdapter, NumberIntegerExpressionConverter.instance()); - } - - /** - * The default expression converter expects number constant expressions. - */ - public static ConversionDeclarationAnnotationElementAdapter<Integer> forNumbers(DeclarationAnnotationAdapter annotationAdapter, String elementName) { - return new ConversionDeclarationAnnotationElementAdapter<Integer>(annotationAdapter, elementName, NumberIntegerExpressionConverter.instance()); - } - - /** - * The default element name is <code>value</code>; - * the default expression converter expects boolean constant expressions. - */ - public static ConversionDeclarationAnnotationElementAdapter<Boolean> forBooleans(DeclarationAnnotationAdapter annotationAdapter) { - return new ConversionDeclarationAnnotationElementAdapter<Boolean>(annotationAdapter, BooleanExpressionConverter.instance()); - } - - /** - * The default expression converter expects boolean constant expressions. - */ - public static ConversionDeclarationAnnotationElementAdapter<Boolean> forBooleans(DeclarationAnnotationAdapter annotationAdapter, String elementName) { - return new ConversionDeclarationAnnotationElementAdapter<Boolean>(annotationAdapter, elementName, BooleanExpressionConverter.instance()); - } - - /** - * The default element name is <code>value</code>; - * the default expression converter expects character constant expressions. - */ - public static ConversionDeclarationAnnotationElementAdapter<String> forCharacters(DeclarationAnnotationAdapter annotationAdapter) { - return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, CharacterStringExpressionConverter.instance()); - } - - /** - * The default expression converter expects character constant expressions. - */ - public static ConversionDeclarationAnnotationElementAdapter<String> forCharacters(DeclarationAnnotationAdapter annotationAdapter, String elementName) { - return new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, CharacterStringExpressionConverter.instance()); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/DefaultAnnotationEditFormatter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/DefaultAnnotationEditFormatter.java deleted file mode 100644 index 97264a9d93..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/DefaultAnnotationEditFormatter.java +++ /dev/null @@ -1,219 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.text.edits.InsertEdit; -import org.eclipse.text.edits.MalformedTreeException; -import org.eclipse.text.edits.MultiTextEdit; -import org.eclipse.text.edits.ReplaceEdit; -import org.eclipse.text.edits.TextEdit; - -/** - * This implementation will clean up some of the nasty Eclipse annotation - * formatting (or lack thereof); e.g. arrays of annotations. - */ -public final class DefaultAnnotationEditFormatter - implements AnnotationEditFormatter -{ - private static final DefaultAnnotationEditFormatter INSTANCE = new DefaultAnnotationEditFormatter(); - - /** - * Return the singleton. - */ - public static DefaultAnnotationEditFormatter instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private DefaultAnnotationEditFormatter() { - super(); - } - - /** - * TODO - */ - public void format(IDocument doc, TextEdit editTree) throws MalformedTreeException, BadLocationException { - TextEdit[] edits = editTree.getChildren(); - int len = edits.length; - if (len == 0) { - return; - } - - MultiTextEdit extraEdits = new MultiTextEdit(); - for (int i = 0; i < len; i++) { - TextEdit edit1 = edits[i]; - if ( ! (edit1 instanceof InsertEdit)) { - continue; // if the edit is not an insert, skip to the next edit - } - InsertEdit insert1 = (InsertEdit) edit1; - int j = i + 1; - if (j < len) { - TextEdit edit2 = edits[j]; - if (edit2 instanceof InsertEdit) { - InsertEdit insert2 = (InsertEdit) edit2; - String text1 = insert1.getText(); - String text2 = insert2.getText(); - int offset1 = insert1.getOffset(); - int offset2 = insert2.getOffset(); - if (this.stringIsAnnotation(text1) && text2.equals(" ")) { //$NON-NLS-1$ - // an annotation was inserted before something on the same line; - // replace the trailing space with a newline and appropriate indent - extraEdits.addChild(new ReplaceEdit(offset2, 1, this.buildCR(doc, offset2))); - i++; // jump the index past 'edit2' - continue; // go to the next edit - } - int comma1Length = this.commaLength(text1); - if ((comma1Length != 0) && this.stringIsAnnotation(text2)) { - // an annotation was inserted in an array initializer on the - // same line as the previous array element; - // replace the preceding space with a newline and appropriate indent - extraEdits.addChild(new ReplaceEdit(offset1 + comma1Length, text1.length() - comma1Length, this.buildCR(doc, offset1))); - i++; // jump the index past 'edit2' - continue; // go to the next edit - } - } - } - this.formatArrayInitializer(doc, insert1, extraEdits); - } - extraEdits.apply(doc, TextEdit.NONE); - } - - /** - * If the insert edit is inserting an annotation containing an array of annotations as - * its value then format them nicely. - */ - private void formatArrayInitializer(IDocument doc, InsertEdit insertEdit, MultiTextEdit extraEdits) throws BadLocationException { - String s = insertEdit.getText(); - if ( ! this.stringIsAnnotation(s)) { - return; - } - int len = s.length(); - int pos = 1; // skip '@' - while (pos < len) { - char c = s.charAt(pos); - pos++; // bump to just past first '(' - if (c == '(') { - break; - } - } - if (pos == len) { - return; // reached end of string - } - while (pos < len) { - char c = s.charAt(pos); - pos++; // bump to just past first '{' - if (c == '{') { - break; - } - if (c != ' ') { - return; - } - } - if (pos == len) { - return; // reached end of string - } - // now look for '@' not inside parentheses and put in - // line delimeter and indent string before each - int offset = insertEdit.getOffset(); - String indent = null; - int parenDepth = 0; - while (pos < len) { - switch (s.charAt(pos)) { - case '(' : - parenDepth++; - break; - case ')' : - parenDepth--; - break; - case '@' : - if (parenDepth == 0) { - if (indent == null) { - indent = this.buildCR(doc, offset, "\t"); // TODO use tab preference? //$NON-NLS-1$ - } - extraEdits.addChild(new InsertEdit(offset + pos, indent)); - } - break; - case '}' : - if (parenDepth == 0) { - extraEdits.addChild(new InsertEdit(offset + pos, this.buildCR(doc, offset))); - } - break; - } - pos++; - } - } - - /** - * Build a string containing a line delimeter and indenting characters - * matching the indent level of the line containing the character offset - * (i.e. the new line's indent matches the current line). - */ - private String buildCR(IDocument doc, int offset) throws BadLocationException { - return this.buildCR(doc, offset, ""); //$NON-NLS-1$ - } - - private String buildCR(IDocument doc, int offset, String suffix) throws BadLocationException { - int line = doc.getLineOfOffset(offset); - StringBuilder sb = new StringBuilder(); - sb.append(doc.getLineDelimiter(line)); // use same CR as current line - - int o = doc.getLineOffset(line); // match the whitespace of the current line - char c = doc.getChar(o++); - while ((c == ' ') || (c == '\t')) { - sb.append(c); - c = doc.getChar(o++); - } - sb.append(suffix); - return sb.toString(); - } - - /** - * Return whether the specified string is an annotation. - */ - private boolean stringIsAnnotation(String string) { - return (string.length() > 1) && string.charAt(0) == '@'; - } - - /** - * If the specified string is a single comma, possibly surrounded by - * spaces, return the length of the substring containing the - * initial spaces and the comma. - */ - private int commaLength(String string) { - boolean comma = false; - int len = string.length(); - int result = 0; - for (int i = 0; i < len; i++) { - switch (string.charAt(i)) { - case ' ' : - if ( ! comma) { - result++; // space preceding comma - } - break; - case ',' : - if (comma) { - return 0; // second comma! - } - comma = true; - result++; - break; - default: - return 0; // non-comma, non-space char - } - } - return result; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ElementAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ElementAnnotationAdapter.java deleted file mode 100644 index 17f14a4b22..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ElementAnnotationAdapter.java +++ /dev/null @@ -1,27 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2010 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.common.core.internal.utility.jdt; - -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; - -/** - * Adapt an annotated element and a declaration annotation adapter. - */ -public class ElementAnnotationAdapter extends AbstractAnnotationAdapter { - - - // ********** constructor ********** - - public ElementAnnotationAdapter(AnnotatedElement annotatedElement, DeclarationAnnotationAdapter daa) { - super(annotatedElement, daa); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ElementIndexedAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ElementIndexedAnnotationAdapter.java deleted file mode 100644 index f3e3467b8b..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ElementIndexedAnnotationAdapter.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2010 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.common.core.internal.utility.jdt; - -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; -import org.eclipse.jpt.common.core.utility.jdt.IndexedAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.IndexedDeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Adapt an annotated element and an indexed declaration annotation adapter. - */ -public class ElementIndexedAnnotationAdapter - extends AbstractAnnotationAdapter - implements IndexedAnnotationAdapter -{ - private final IndexedDeclarationAnnotationAdapter idaa; - - - // ********** constructor ********** - - public ElementIndexedAnnotationAdapter(AnnotatedElement annotatedElement, IndexedDeclarationAnnotationAdapter idaa) { - super(annotatedElement, idaa); - this.idaa = idaa; - } - - - // ********** IndexedAnnotationAdapter implementation ********** - - public int getIndex() { - return this.idaa.getIndex(); - } - - public void moveAnnotation(int newIndex) { - this.edit(this.buildMoveAnnotationEditor(newIndex)); - } - - - // ********** factory methods ********** - - protected AnnotatedElement.Editor buildMoveAnnotationEditor(int newIndex) { - return new MoveAnnotationEditor(this.idaa, newIndex); - } - - - // ********** member classes ********** - - protected static class MoveAnnotationEditor implements AnnotatedElement.Editor { - private final IndexedDeclarationAnnotationAdapter idaa; - private int index; - - MoveAnnotationEditor(IndexedDeclarationAnnotationAdapter idaa, int index) { - super(); - this.idaa = idaa; - this.index = index; - } - public void edit(ModifiedDeclaration declaration) { - this.idaa.moveAnnotation(this.index, declaration); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/EnumArrayDeclarationAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/EnumArrayDeclarationAnnotationElementAdapter.java deleted file mode 100644 index 3b3a74be0d..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/EnumArrayDeclarationAnnotationElementAdapter.java +++ /dev/null @@ -1,150 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.common.core.internal.utility.jdt; - -import java.util.List; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.ArrayInitializer; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Wrap a declaration annotation element adapter and simply - * add an import for the enums when necessary. - */ -public class EnumArrayDeclarationAnnotationElementAdapter - implements DeclarationAnnotationElementAdapter<String[]> -{ - /** - * The wrapped adapter that returns and takes name strings (enums). - */ - private final ConversionDeclarationAnnotationElementAdapter<String[]> adapter; - - - // ********** constructors ********** - - /** - * The default element name is <code>value</code>. - * The default behavior is to remove the array initializer if it is empty. - */ - public EnumArrayDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter) { - this(annotationAdapter, VALUE); - } - - /** - * The default behavior is to remove the array initializer if it is empty. - */ - public EnumArrayDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName) { - this(annotationAdapter, elementName, true); - } - - public EnumArrayDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, boolean removeArrayInitializerWhenEmpty) { - this(new ConversionDeclarationAnnotationElementAdapter<String[]>(annotationAdapter, elementName, buildExpressionConverter(removeArrayInitializerWhenEmpty))); - } - - private static ExpressionConverter<String[]> buildExpressionConverter(boolean removeArrayInitializerWhenEmpty) { - return new AnnotationStringArrayExpressionConverter(NameStringExpressionConverter.instance(), removeArrayInitializerWhenEmpty); - } - - protected EnumArrayDeclarationAnnotationElementAdapter(ConversionDeclarationAnnotationElementAdapter<String[]> adapter) { - super(); - this.adapter = adapter; - } - - - // ********** DeclarationAnnotationElementAdapter implementation ********** - - public String[] getValue(ModifiedDeclaration declaration) { - // ignore the adapter's getValue() - we want the expression - return this.resolve(this.adapter.getExpression(declaration), declaration); - } - - public void setValue(String[] value, ModifiedDeclaration declaration) { - this.adapter.setValue(this.convertToSourceCodeNames(value, declaration), declaration); - } - - public Expression getExpression(ModifiedDeclaration declaration) { - return this.adapter.getExpression(declaration); - } - - public ASTNode getAstNode(ModifiedDeclaration declaration) { - return this.adapter.getAstNode(declaration); - } - - - // ********** internal methods ********** - - /** - * resolve the enums, which can be - * null - * or - * {FOO, BAR, BAZ} - * or - * FOO - */ - protected String[] resolve(Expression expression, ModifiedDeclaration declaration) { - if (expression == null) { - return StringTools.EMPTY_STRING_ARRAY; - } else if (expression.getNodeType() == ASTNode.ARRAY_INITIALIZER) { - return this.resolveArray((ArrayInitializer) expression, declaration); - } else { - return this.resolveSingleElement(expression, declaration); - } - } - - protected String[] resolveArray(ArrayInitializer ai, @SuppressWarnings("unused") ModifiedDeclaration declaration) { - List<Expression> expressions = this.expressions(ai); - int len = expressions.size(); - String[] enums = new String[len]; - for (int i = len; i-- > 0; ) { - enums[i] = this.resolveEnum(expressions.get(i)); - } - return enums; - } - - protected String[] resolveSingleElement(Expression enumExpression, @SuppressWarnings("unused") ModifiedDeclaration declaration) { - return new String[] {this.resolveEnum(enumExpression)}; - } - - protected String resolveEnum(Expression expression) { - return ASTTools.resolveEnum(expression); - } - - // minimize scope of suppressd warnings - @SuppressWarnings("unchecked") - private List<Expression> expressions(ArrayInitializer arrayInitializer) { - return arrayInitializer.expressions(); - } - - /** - * convert the fully-qualified enums to names that can be inserted in source code - * NB: imports may be added as a side-effect :-( - */ - protected String[] convertToSourceCodeNames(String[] enums, ModifiedDeclaration declaration) { - if (enums == null) { - return null; - } - int len = enums.length; - String[] sourceCodeNames = new String[len]; - for (int i = 0; i < len; i++) { - sourceCodeNames[i] = this.convertToSourceCodeName(enums[i], declaration); - } - return sourceCodeNames; - } - - protected String convertToSourceCodeName(String enum_, ModifiedDeclaration declaration) { - return EnumDeclarationAnnotationElementAdapter.convertToSourceCodeName(enum_, declaration); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/EnumDeclarationAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/EnumDeclarationAnnotationElementAdapter.java deleted file mode 100644 index 21cbe29aaa..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/EnumDeclarationAnnotationElementAdapter.java +++ /dev/null @@ -1,119 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2010 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; - -/** - * Wrap a declaration annotation element adapter and simply - * add an import for the enum when necessary. - */ -public class EnumDeclarationAnnotationElementAdapter - implements DeclarationAnnotationElementAdapter<String> -{ - /** - * The wrapped adapter that returns and takes name strings (enums). - */ - private final ConversionDeclarationAnnotationElementAdapter<String> adapter; - - - // ********** constructors ********** - - /** - * The default element name is <code>value</code>. - */ - public EnumDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter) { - this(annotationAdapter, VALUE); - } - - public EnumDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName) { - this(new ConversionDeclarationAnnotationElementAdapter<String>(annotationAdapter, elementName, NameStringExpressionConverter.instance())); - } - - protected EnumDeclarationAnnotationElementAdapter(ConversionDeclarationAnnotationElementAdapter<String> adapter) { - super(); - this.adapter = adapter; - } - - - // ********** DeclarationAnnotationElementAdapter implementation ********** - - public String getValue(ModifiedDeclaration declaration) { - return this.resolve(this.adapter.getExpression(declaration)); - } - - public void setValue(String value, ModifiedDeclaration declaration) { - this.adapter.setValue(convertToSourceCodeName(value, declaration), declaration); - } - - public Expression getExpression(ModifiedDeclaration declaration) { - return this.adapter.getExpression(declaration); - } - - public ASTNode getAstNode(ModifiedDeclaration declaration) { - return this.adapter.getAstNode(declaration); - } - - - // ********** internal methods ********** - - /** - * resolve the enum - */ - protected String resolve(Expression expression) { - return ASTTools.resolveEnum(expression); - } - - /** - * convert the fully-qualified enum constant to a static import and the constant's short name, e.g. - * static import javax.persistence.FetchType.EAGER; - * return "EAGER" - * if that doesn't work, convert to a normal import and the constant's partially-qualified name, e.g. - * import javax.persistence.FetchType; - * return "FetchType.EAGER" - * if that doesn't work, simply return the constant's fully-qualified name, e.g. - * return "javax.persistence.FetchType.EAGER" - * NB: an import may be added as a side-effect :-( - */ - protected static String convertToSourceCodeName(String enumConstantName, ModifiedDeclaration declaration) { - return (enumConstantName == null) ? null : convertToSourceCodeName_(enumConstantName, declaration); - } - - /** - * pre-condition: enum constant name is non-null; - * convert it to its short version if we can add a static import etc. - */ - protected static String convertToSourceCodeName_(String enumConstantName, ModifiedDeclaration declaration) { - if (declaration.addStaticImport(enumConstantName)) { - return convertToShortName(enumConstantName); - } - if (declaration.addImport(convertToTypeName(enumConstantName))) { - return convertToPartiallyQualifiedName(enumConstantName); - } - return enumConstantName; - } - - protected static String convertToShortName(String name) { - return name.substring(name.lastIndexOf('.') + 1); - } - - protected static String convertToTypeName(String name) { - return name.substring(0, name.lastIndexOf('.')); - } - - protected static String convertToPartiallyQualifiedName(String name) { - return name.substring(name.lastIndexOf('.', name.lastIndexOf('.') - 1) + 1); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ExpressionDeclarationAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ExpressionDeclarationAnnotationElementAdapter.java deleted file mode 100644 index d3b0370942..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ExpressionDeclarationAnnotationElementAdapter.java +++ /dev/null @@ -1,327 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2010 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.common.core.internal.utility.jdt; - -import java.util.Iterator; -import java.util.List; -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.Expression; -import org.eclipse.jdt.core.dom.MarkerAnnotation; -import org.eclipse.jdt.core.dom.MemberValuePair; -import org.eclipse.jdt.core.dom.NormalAnnotation; -import org.eclipse.jdt.core.dom.SingleMemberAnnotation; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Most obvious implementation of the interface. - * Assume the element's value is an Expression. - */ -public class ExpressionDeclarationAnnotationElementAdapter<E extends Expression> - implements DeclarationAnnotationElementAdapter<E> -{ - /** - * Adapter used to manipulate the element's annotation. - */ - private final DeclarationAnnotationAdapter annotationAdapter; - - /** - * The name of the relevant annotation element. - */ - private final String elementName; - - - // ********** constructors ********** - - /** - * The default element name is <code>value</code>. - */ - public ExpressionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter) { - this(annotationAdapter, VALUE); - } - - public ExpressionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName) { - this.annotationAdapter = annotationAdapter; - this.elementName = elementName; - } - - - // ********** DeclarationAnnotationElementAdapter implementation ********** - - public E getValue(ModifiedDeclaration declaration) { - // return the expression unmodified - return this.getExpression(declaration); - } - - public void setValue(E value, ModifiedDeclaration declaration) { - this.setValue(value, this.annotationAdapter.getAnnotation(declaration), declaration); - } - - public E getExpression(ModifiedDeclaration declaration) { - return this.expression(this.annotationAdapter.getAnnotation(declaration)); - } - - public ASTNode getAstNode(ModifiedDeclaration declaration) { - Expression exp = this.getExpression(declaration); - return (exp != null) ? exp : this.annotationAdapter.getAstNode(declaration); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.elementName); - } - - - // ********** expression ********** - - /** - * Return the expression value of the *first* annotation element - * with the adapter's element name. - * Return null if the annotation has no such element. - * (An element name of "value" will return the value of a single - * member annotation.) - */ - protected E expression(Annotation annotation) { - if (annotation == null) { - return this.expressionNoAnnotation(); - } - if (annotation.isMarkerAnnotation()) { - return this.expressionMarkerAnnotation((MarkerAnnotation) annotation); - } - if (annotation.isSingleMemberAnnotation()) { - return this.expressionSingleMemberAnnotation((SingleMemberAnnotation) annotation); - } - if (annotation.isNormalAnnotation()) { - return this.expressionNormalAnnotation((NormalAnnotation) annotation); - } - throw new IllegalArgumentException("unknown annotation type: " + annotation); //$NON-NLS-1$ - } - - protected E expressionNoAnnotation() { - return null; - } - - /** - * Return the expression value of the *first* annotation element - * with the adapter's element name. - * Return null if the annotation has no such element. - */ - protected E expressionMarkerAnnotation(@SuppressWarnings("unused") MarkerAnnotation annotation) { - return null; - } - - /** - * Return the expression value of the *first* annotation element - * with the adapter's element name. - * Return null if the annotation has no such element. - */ - protected E expressionSingleMemberAnnotation(SingleMemberAnnotation annotation) { - return this.downcast(this.elementName.equals(VALUE) ? annotation.getValue() : null); - } - - @SuppressWarnings("unchecked") - private E downcast(Expression e) { - return (E) e; - } - - /** - * Return the expression value of the *first* annotation element - * with the adapter's element name. - * Return null if the annotation has no such element. - */ - protected E expressionNormalAnnotation(NormalAnnotation annotation) { - MemberValuePair pair = this.memberValuePair(annotation); - return this.downcast((pair == null) ? null : pair.getValue()); - } - - - // ********** set value ********** - - /** - * set non-null, non-empty value - */ - protected void setValue(Expression value, Annotation annotation, ModifiedDeclaration declaration) { - if (value == null) { - this.removeElement(annotation, declaration); - } - else if (annotation == null) { - this.setValueNoAnnotation(value, declaration); - } - else if (annotation.isMarkerAnnotation()) { - this.setValueMarkerAnnotation(value, (MarkerAnnotation) annotation, declaration); - } - else if (annotation.isSingleMemberAnnotation()) { - this.setValueSingleMemberAnnotation(value, (SingleMemberAnnotation) annotation, declaration); - } - else if (annotation.isNormalAnnotation()) { - this.setValueNormalAnnotation(value, (NormalAnnotation) annotation, declaration); - } - else { - throw new IllegalArgumentException("unknown annotation type: " + annotation); //$NON-NLS-1$ - } - } - - /** - * add non-null, non-empty value - */ - protected void setValueNoAnnotation(Expression value, ModifiedDeclaration declaration) { - if (this.elementName.equals(VALUE)) { - // @Foo("xxx") - this.annotationAdapter.newSingleMemberAnnotation(declaration).setValue(value); - } else { - // @Foo(bar="xxx") - this.addValue(value, this.annotationAdapter.newNormalAnnotation(declaration)); - } - } - - protected void addValue(Expression value, NormalAnnotation annotation) { - this.addValue(value, annotation, this.elementName); - } - - protected void addValue(Expression value, NormalAnnotation annotation, String annotationElementName) { - AST ast = annotation.getAST(); - MemberValuePair pair = ast.newMemberValuePair(); - pair.setName(ast.newSimpleName(annotationElementName)); - pair.setValue(value); - List<MemberValuePair> values = this.values(annotation); - values.add(pair); - } - - protected void setValueMarkerAnnotation(Expression value, @SuppressWarnings("unused") MarkerAnnotation annotation, ModifiedDeclaration declaration) { - // @Foo => @Foo("xxx") - // or - // @Foo => @Foo(bar="xxx") - this.setValueNoAnnotation(value, declaration); - } - - protected void setValueSingleMemberAnnotation(Expression value, SingleMemberAnnotation annotation, ModifiedDeclaration declaration) { - if (this.elementName.equals(VALUE)) { - // @Foo("yyy") => @Foo("xxx") - annotation.setValue(value); - } else { - // @Foo("yyy") => @Foo(value="yyy", bar="xxx") - Expression vv = annotation.getValue(); - vv = (Expression) ASTNode.copySubtree(vv.getAST(), vv); - NormalAnnotation normalAnnotation = this.annotationAdapter.newNormalAnnotation(declaration); - this.addValue(vv, normalAnnotation, VALUE); - this.addValue(value, normalAnnotation); - } - } - - protected void setValueNormalAnnotation(Expression value, NormalAnnotation annotation, @SuppressWarnings("unused") ModifiedDeclaration declaration) { - MemberValuePair pair = this.memberValuePair(annotation); - if (pair == null) { - this.addValue(value, annotation); - } else { - pair.setValue(value); - } - } - - - // ********** remove element ********** - - protected void removeElement(Annotation annotation, ModifiedDeclaration declaration) { - if (annotation == null) { - this.removeElementNoAnnotation(declaration); - } - else if (annotation.isMarkerAnnotation()) { - this.removeElementMarkerAnnotation((MarkerAnnotation) annotation, declaration); - } - else if (annotation.isSingleMemberAnnotation()) { - this.removeElementSingleMemberAnnotation((SingleMemberAnnotation) annotation, declaration); - } - else if (annotation.isNormalAnnotation()) { - this.removeElementNormalAnnotation((NormalAnnotation) annotation, declaration); - } - else { - throw new IllegalArgumentException("unknown annotation type: " + annotation); //$NON-NLS-1$ - } - } - - protected void removeElementNoAnnotation(@SuppressWarnings("unused") ModifiedDeclaration declaration) { - // the element is already gone (?) - } - - protected void removeElementMarkerAnnotation(@SuppressWarnings("unused") MarkerAnnotation annotation, @SuppressWarnings("unused") ModifiedDeclaration declaration) { - // the element is already gone (?) - } - - protected void removeElementSingleMemberAnnotation(@SuppressWarnings("unused") SingleMemberAnnotation annotation, ModifiedDeclaration declaration) { - if (this.elementName.equals(VALUE)) { - // @Foo("xxx") => @Foo - this.annotationAdapter.newMarkerAnnotation(declaration); - } else { - // the [non-'value'] element is already gone (?) - } - } - - protected void removeElementNormalAnnotation(NormalAnnotation annotation, ModifiedDeclaration declaration) { - List<MemberValuePair> values = this.values(annotation); - if ((values.size() == 1) && values.get(0).getName().getFullyQualifiedName().equals(this.elementName)) { - // @Foo(bar="xxx") => @Foo - this.annotationAdapter.newMarkerAnnotation(declaration); - } else { - this.removeElement(annotation); - if (values.size() == 1) { - MemberValuePair pair = values.get(0); - if (pair.getName().getFullyQualifiedName().equals(VALUE)) { - // @Foo(bar="xxx", value="yyy") => @Foo("yyy") - Expression vv = pair.getValue(); - vv = (Expression) ASTNode.copySubtree(vv.getAST(), vv); - this.annotationAdapter.newSingleMemberAnnotation(declaration).setValue(vv); - } else { - // @Foo(bar="xxx", baz="yyy") => @Foo(baz="yyy") - } - } else { - // @Foo(bar="xxx", baz="yyy", joo="xxx") => @Foo(baz="yyy", joo="xxx") - } - } - } - - /** - * Remove the *first* member value pair from the specified annotation element - * with the adapter's element name. - */ - protected void removeElement(NormalAnnotation annotation) { - for (Iterator<MemberValuePair> stream = this.values(annotation).iterator(); stream.hasNext(); ) { - MemberValuePair pair = stream.next(); - if (pair.getName().getFullyQualifiedName().equals(this.elementName)) { - stream.remove(); - } - } - } - - - // ********** convenience methods ********** - - /** - * Return the *first* member value pair for the specified annotation element - * with the adapter's element name. - * Return null if the annotation has no such element. - */ - protected MemberValuePair memberValuePair(NormalAnnotation annotation) { - for (MemberValuePair pair : this.values(annotation)) { - if (pair.getName().getFullyQualifiedName().equals(this.elementName)) { - return pair; - } - } - return null; - } - - @SuppressWarnings("unchecked") - protected List<MemberValuePair> values(NormalAnnotation na) { - return na.values(); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/GenericVisitor.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/GenericVisitor.java deleted file mode 100644 index 92160afdf5..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/GenericVisitor.java +++ /dev/null @@ -1,791 +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.jpt.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.ASTVisitor; -import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration; -import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration; -import org.eclipse.jdt.core.dom.AnonymousClassDeclaration; -import org.eclipse.jdt.core.dom.ArrayAccess; -import org.eclipse.jdt.core.dom.ArrayCreation; -import org.eclipse.jdt.core.dom.ArrayInitializer; -import org.eclipse.jdt.core.dom.ArrayType; -import org.eclipse.jdt.core.dom.AssertStatement; -import org.eclipse.jdt.core.dom.Assignment; -import org.eclipse.jdt.core.dom.Block; -import org.eclipse.jdt.core.dom.BlockComment; -import org.eclipse.jdt.core.dom.BooleanLiteral; -import org.eclipse.jdt.core.dom.BreakStatement; -import org.eclipse.jdt.core.dom.CastExpression; -import org.eclipse.jdt.core.dom.CatchClause; -import org.eclipse.jdt.core.dom.CharacterLiteral; -import org.eclipse.jdt.core.dom.ClassInstanceCreation; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.ConditionalExpression; -import org.eclipse.jdt.core.dom.ConstructorInvocation; -import org.eclipse.jdt.core.dom.ContinueStatement; -import org.eclipse.jdt.core.dom.DoStatement; -import org.eclipse.jdt.core.dom.EmptyStatement; -import org.eclipse.jdt.core.dom.EnhancedForStatement; -import org.eclipse.jdt.core.dom.EnumConstantDeclaration; -import org.eclipse.jdt.core.dom.EnumDeclaration; -import org.eclipse.jdt.core.dom.ExpressionStatement; -import org.eclipse.jdt.core.dom.FieldAccess; -import org.eclipse.jdt.core.dom.FieldDeclaration; -import org.eclipse.jdt.core.dom.ForStatement; -import org.eclipse.jdt.core.dom.IfStatement; -import org.eclipse.jdt.core.dom.ImportDeclaration; -import org.eclipse.jdt.core.dom.InfixExpression; -import org.eclipse.jdt.core.dom.Initializer; -import org.eclipse.jdt.core.dom.InstanceofExpression; -import org.eclipse.jdt.core.dom.Javadoc; -import org.eclipse.jdt.core.dom.LabeledStatement; -import org.eclipse.jdt.core.dom.LineComment; -import org.eclipse.jdt.core.dom.MarkerAnnotation; -import org.eclipse.jdt.core.dom.MemberRef; -import org.eclipse.jdt.core.dom.MemberValuePair; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jdt.core.dom.MethodInvocation; -import org.eclipse.jdt.core.dom.MethodRef; -import org.eclipse.jdt.core.dom.MethodRefParameter; -import org.eclipse.jdt.core.dom.Modifier; -import org.eclipse.jdt.core.dom.NormalAnnotation; -import org.eclipse.jdt.core.dom.NullLiteral; -import org.eclipse.jdt.core.dom.NumberLiteral; -import org.eclipse.jdt.core.dom.PackageDeclaration; -import org.eclipse.jdt.core.dom.ParameterizedType; -import org.eclipse.jdt.core.dom.ParenthesizedExpression; -import org.eclipse.jdt.core.dom.PostfixExpression; -import org.eclipse.jdt.core.dom.PrefixExpression; -import org.eclipse.jdt.core.dom.PrimitiveType; -import org.eclipse.jdt.core.dom.QualifiedName; -import org.eclipse.jdt.core.dom.QualifiedType; -import org.eclipse.jdt.core.dom.ReturnStatement; -import org.eclipse.jdt.core.dom.SimpleName; -import org.eclipse.jdt.core.dom.SimpleType; -import org.eclipse.jdt.core.dom.SingleMemberAnnotation; -import org.eclipse.jdt.core.dom.SingleVariableDeclaration; -import org.eclipse.jdt.core.dom.StringLiteral; -import org.eclipse.jdt.core.dom.SuperConstructorInvocation; -import org.eclipse.jdt.core.dom.SuperFieldAccess; -import org.eclipse.jdt.core.dom.SuperMethodInvocation; -import org.eclipse.jdt.core.dom.SwitchCase; -import org.eclipse.jdt.core.dom.SwitchStatement; -import org.eclipse.jdt.core.dom.SynchronizedStatement; -import org.eclipse.jdt.core.dom.TagElement; -import org.eclipse.jdt.core.dom.TextElement; -import org.eclipse.jdt.core.dom.ThisExpression; -import org.eclipse.jdt.core.dom.ThrowStatement; -import org.eclipse.jdt.core.dom.TryStatement; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jdt.core.dom.TypeDeclarationStatement; -import org.eclipse.jdt.core.dom.TypeLiteral; -import org.eclipse.jdt.core.dom.TypeParameter; -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.WhileStatement; -import org.eclipse.jdt.core.dom.WildcardType; - -/** - * copied from org.eclipse.jdt.internal.corext.dom.GenericVisitor - */ -public class GenericVisitor extends ASTVisitor { - - public GenericVisitor() { - super(); - } - - public GenericVisitor(boolean visitJavadocTags) { - super(visitJavadocTags); - } - - // ********** hooks for subclasses ********** - - protected boolean visit_(@SuppressWarnings("unused") ASTNode node) { - return true; - } - - protected void endVisit_(@SuppressWarnings("unused") ASTNode node) { - // do nothing - } - - // ********** overrides ********** - - @Override - public boolean visit(AnonymousClassDeclaration node) { - return visit_(node); - } - @Override - public boolean visit(ArrayAccess node) { - return visit_(node); - } - @Override - public boolean visit(ArrayCreation node) { - return visit_(node); - } - @Override - public boolean visit(ArrayInitializer node) { - return visit_(node); - } - @Override - public boolean visit(ArrayType node) { - return visit_(node); - } - @Override - public boolean visit(AssertStatement node) { - return visit_(node); - } - @Override - public boolean visit(Assignment node) { - return visit_(node); - } - @Override - public boolean visit(Block node) { - return visit_(node); - } - @Override - public boolean visit(BooleanLiteral node) { - return visit_(node); - } - @Override - public boolean visit(BreakStatement node) { - return visit_(node); - } - @Override - public boolean visit(CastExpression node) { - return visit_(node); - } - @Override - public boolean visit(CatchClause node) { - return visit_(node); - } - @Override - public boolean visit(CharacterLiteral node) { - return visit_(node); - } - @Override - public boolean visit(ClassInstanceCreation node) { - return visit_(node); - } - @Override - public boolean visit(CompilationUnit node) { - return visit_(node); - } - @Override - public boolean visit(ConditionalExpression node) { - return visit_(node); - } - @Override - public boolean visit(ConstructorInvocation node) { - return visit_(node); - } - @Override - public boolean visit(ContinueStatement node) { - return visit_(node); - } - @Override - public boolean visit(DoStatement node) { - return visit_(node); - } - @Override - public boolean visit(EmptyStatement node) { - return visit_(node); - } - @Override - public boolean visit(ExpressionStatement node) { - return visit_(node); - } - @Override - public boolean visit(FieldAccess node) { - return visit_(node); - } - @Override - public boolean visit(FieldDeclaration node) { - return visit_(node); - } - @Override - public boolean visit(ForStatement node) { - return visit_(node); - } - @Override - public boolean visit(IfStatement node) { - return visit_(node); - } - @Override - public boolean visit(ImportDeclaration node) { - return visit_(node); - } - @Override - public boolean visit(InfixExpression node) { - return visit_(node); - } - @Override - public boolean visit(InstanceofExpression node) { - return visit_(node); - } - @Override - public boolean visit(Initializer node) { - return visit_(node); - } - @Override - public boolean visit(Javadoc node) { - return (super.visit(node)) ? visit_(node) : false; - } - @Override - public boolean visit(LabeledStatement node) { - return visit_(node); - } - @Override - public boolean visit(MethodDeclaration node) { - return visit_(node); - } - @Override - public boolean visit(MethodInvocation node) { - return visit_(node); - } - @Override - public boolean visit(NullLiteral node) { - return visit_(node); - } - @Override - public boolean visit(NumberLiteral node) { - return visit_(node); - } - @Override - public boolean visit(PackageDeclaration node) { - return visit_(node); - } - @Override - public boolean visit(ParenthesizedExpression node) { - return visit_(node); - } - @Override - public boolean visit(PostfixExpression node) { - return visit_(node); - } - @Override - public boolean visit(PrefixExpression node) { - return visit_(node); - } - @Override - public boolean visit(PrimitiveType node) { - return visit_(node); - } - @Override - public boolean visit(QualifiedName node) { - return visit_(node); - } - @Override - public boolean visit(ReturnStatement node) { - return visit_(node); - } - @Override - public boolean visit(SimpleName node) { - return visit_(node); - } - @Override - public boolean visit(SimpleType node) { - return visit_(node); - } - @Override - public boolean visit(StringLiteral node) { - return visit_(node); - } - @Override - public boolean visit(SuperConstructorInvocation node) { - return visit_(node); - } - @Override - public boolean visit(SuperFieldAccess node) { - return visit_(node); - } - @Override - public boolean visit(SuperMethodInvocation node) { - return visit_(node); - } - @Override - public boolean visit(SwitchCase node) { - return visit_(node); - } - @Override - public boolean visit(SwitchStatement node) { - return visit_(node); - } - @Override - public boolean visit(SynchronizedStatement node) { - return visit_(node); - } - @Override - public boolean visit(ThisExpression node) { - return visit_(node); - } - @Override - public boolean visit(ThrowStatement node) { - return visit_(node); - } - @Override - public boolean visit(TryStatement node) { - return visit_(node); - } - @Override - public boolean visit(TypeDeclaration node) { - return visit_(node); - } - @Override - public boolean visit(TypeDeclarationStatement node) { - return visit_(node); - } - @Override - public boolean visit(TypeLiteral node) { - return visit_(node); - } - @Override - public boolean visit(SingleVariableDeclaration node) { - return visit_(node); - } - @Override - public boolean visit(VariableDeclarationExpression node) { - return visit_(node); - } - @Override - public boolean visit(VariableDeclarationStatement node) { - return visit_(node); - } - @Override - public boolean visit(VariableDeclarationFragment node) { - return visit_(node); - } - @Override - public boolean visit(WhileStatement node) { - return visit_(node); - } - @Override - public boolean visit(AnnotationTypeDeclaration node) { - return visit_(node); - } - @Override - public boolean visit(AnnotationTypeMemberDeclaration node) { - return visit_(node); - } - @Override - public boolean visit(BlockComment node) { - return visit_(node); - } - @Override - public boolean visit(EnhancedForStatement node) { - return visit_(node); - } - @Override - public boolean visit(EnumConstantDeclaration node) { - return visit_(node); - } - @Override - public boolean visit(EnumDeclaration node) { - return visit_(node); - } - @Override - public boolean visit(LineComment node) { - return visit_(node); - } - @Override - public boolean visit(MarkerAnnotation node) { - return visit_(node); - } - @Override - public boolean visit(MemberRef node) { - return visit_(node); - } - @Override - public boolean visit(MemberValuePair node) { - return visit_(node); - } - @Override - public boolean visit(MethodRef node) { - return visit_(node); - } - @Override - public boolean visit(MethodRefParameter node) { - return visit_(node); - } - @Override - public boolean visit(Modifier node) { - return visit_(node); - } - @Override - public boolean visit(NormalAnnotation node) { - return visit_(node); - } - @Override - public boolean visit(ParameterizedType node) { - return visit_(node); - } - @Override - public boolean visit(QualifiedType node) { - return visit_(node); - } - @Override - public boolean visit(SingleMemberAnnotation node) { - return visit_(node); - } - @Override - public boolean visit(TagElement node) { - return visit_(node); - } - @Override - public boolean visit(TextElement node) { - return visit_(node); - } - @Override - public boolean visit(TypeParameter node) { - return visit_(node); - } - @Override - public boolean visit(WildcardType node) { - return visit_(node); - } - - @Override - public void endVisit(AnonymousClassDeclaration node) { - endVisit_(node); - } - @Override - public void endVisit(ArrayAccess node) { - endVisit_(node); - } - @Override - public void endVisit(ArrayCreation node) { - endVisit_(node); - } - @Override - public void endVisit(ArrayInitializer node) { - endVisit_(node); - } - @Override - public void endVisit(ArrayType node) { - endVisit_(node); - } - @Override - public void endVisit(AssertStatement node) { - endVisit_(node); - } - @Override - public void endVisit(Assignment node) { - endVisit_(node); - } - @Override - public void endVisit(Block node) { - endVisit_(node); - } - @Override - public void endVisit(BooleanLiteral node) { - endVisit_(node); - } - @Override - public void endVisit(BreakStatement node) { - endVisit_(node); - } - @Override - public void endVisit(CastExpression node) { - endVisit_(node); - } - @Override - public void endVisit(CatchClause node) { - endVisit_(node); - } - @Override - public void endVisit(CharacterLiteral node) { - endVisit_(node); - } - @Override - public void endVisit(ClassInstanceCreation node) { - endVisit_(node); - } - @Override - public void endVisit(CompilationUnit node) { - endVisit_(node); - } - @Override - public void endVisit(ConditionalExpression node) { - endVisit_(node); - } - @Override - public void endVisit(ConstructorInvocation node) { - endVisit_(node); - } - @Override - public void endVisit(ContinueStatement node) { - endVisit_(node); - } - @Override - public void endVisit(DoStatement node) { - endVisit_(node); - } - @Override - public void endVisit(EmptyStatement node) { - endVisit_(node); - } - @Override - public void endVisit(ExpressionStatement node) { - endVisit_(node); - } - @Override - public void endVisit(FieldAccess node) { - endVisit_(node); - } - @Override - public void endVisit(FieldDeclaration node) { - endVisit_(node); - } - @Override - public void endVisit(ForStatement node) { - endVisit_(node); - } - @Override - public void endVisit(IfStatement node) { - endVisit_(node); - } - @Override - public void endVisit(ImportDeclaration node) { - endVisit_(node); - } - @Override - public void endVisit(InfixExpression node) { - endVisit_(node); - } - @Override - public void endVisit(InstanceofExpression node) { - endVisit_(node); - } - @Override - public void endVisit(Initializer node) { - endVisit_(node); - } - @Override - public void endVisit(Javadoc node) { - endVisit_(node); - } - @Override - public void endVisit(LabeledStatement node) { - endVisit_(node); - } - @Override - public void endVisit(MethodDeclaration node) { - endVisit_(node); - } - @Override - public void endVisit(MethodInvocation node) { - endVisit_(node); - } - @Override - public void endVisit(NullLiteral node) { - endVisit_(node); - } - @Override - public void endVisit(NumberLiteral node) { - endVisit_(node); - } - @Override - public void endVisit(PackageDeclaration node) { - endVisit_(node); - } - @Override - public void endVisit(ParenthesizedExpression node) { - endVisit_(node); - } - @Override - public void endVisit(PostfixExpression node) { - endVisit_(node); - } - @Override - public void endVisit(PrefixExpression node) { - endVisit_(node); - } - @Override - public void endVisit(PrimitiveType node) { - endVisit_(node); - } - @Override - public void endVisit(QualifiedName node) { - endVisit_(node); - } - @Override - public void endVisit(ReturnStatement node) { - endVisit_(node); - } - @Override - public void endVisit(SimpleName node) { - endVisit_(node); - } - @Override - public void endVisit(SimpleType node) { - endVisit_(node); - } - @Override - public void endVisit(StringLiteral node) { - endVisit_(node); - } - @Override - public void endVisit(SuperConstructorInvocation node) { - endVisit_(node); - } - @Override - public void endVisit(SuperFieldAccess node) { - endVisit_(node); - } - @Override - public void endVisit(SuperMethodInvocation node) { - endVisit_(node); - } - @Override - public void endVisit(SwitchCase node) { - endVisit_(node); - } - @Override - public void endVisit(SwitchStatement node) { - endVisit_(node); - } - @Override - public void endVisit(SynchronizedStatement node) { - endVisit_(node); - } - @Override - public void endVisit(ThisExpression node) { - endVisit_(node); - } - @Override - public void endVisit(ThrowStatement node) { - endVisit_(node); - } - @Override - public void endVisit(TryStatement node) { - endVisit_(node); - } - @Override - public void endVisit(TypeDeclaration node) { - endVisit_(node); - } - @Override - public void endVisit(TypeDeclarationStatement node) { - endVisit_(node); - } - @Override - public void endVisit(TypeLiteral node) { - endVisit_(node); - } - @Override - public void endVisit(SingleVariableDeclaration node) { - endVisit_(node); - } - @Override - public void endVisit(VariableDeclarationExpression node) { - endVisit_(node); - } - @Override - public void endVisit(VariableDeclarationStatement node) { - endVisit_(node); - } - @Override - public void endVisit(VariableDeclarationFragment node) { - endVisit_(node); - } - @Override - public void endVisit(WhileStatement node) { - endVisit_(node); - } - @Override - public void endVisit(AnnotationTypeDeclaration node) { - endVisit_(node); - } - @Override - public void endVisit(AnnotationTypeMemberDeclaration node) { - endVisit_(node); - } - @Override - public void endVisit(BlockComment node) { - endVisit_(node); - } - @Override - public void endVisit(EnhancedForStatement node) { - endVisit_(node); - } - @Override - public void endVisit(EnumConstantDeclaration node) { - endVisit_(node); - } - @Override - public void endVisit(EnumDeclaration node) { - endVisit_(node); - } - @Override - public void endVisit(LineComment node) { - endVisit_(node); - } - @Override - public void endVisit(MarkerAnnotation node) { - endVisit_(node); - } - @Override - public void endVisit(MemberRef node) { - endVisit_(node); - } - @Override - public void endVisit(MemberValuePair node) { - endVisit_(node); - } - @Override - public void endVisit(MethodRef node) { - endVisit_(node); - } - @Override - public void endVisit(MethodRefParameter node) { - endVisit_(node); - } - @Override - public void endVisit(Modifier node) { - endVisit_(node); - } - @Override - public void endVisit(NormalAnnotation node) { - endVisit_(node); - } - @Override - public void endVisit(ParameterizedType node) { - endVisit_(node); - } - @Override - public void endVisit(QualifiedType node) { - endVisit_(node); - } - @Override - public void endVisit(SingleMemberAnnotation node) { - endVisit_(node); - } - @Override - public void endVisit(TagElement node) { - endVisit_(node); - } - @Override - public void endVisit(TextElement node) { - endVisit_(node); - } - @Override - public void endVisit(TypeParameter node) { - endVisit_(node); - } - @Override - public void endVisit(WildcardType node) { - endVisit_(node); - } - -} - diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/IndexedConversionDeclarationAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/IndexedConversionDeclarationAnnotationElementAdapter.java deleted file mode 100644 index fe84b5a40c..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/IndexedConversionDeclarationAnnotationElementAdapter.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011, 2012 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.IndexedDeclarationAnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.IndexedExpressionConverter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; - -/** - * Wrap a declaration annotation element adapter that deals with AST - * array expressions, converting them to/from various other objects. - * - * @param <T> the type of the object in the array to be passed to and - * returned by the adapter - */ -public class IndexedConversionDeclarationAnnotationElementAdapter<T> - extends ConversionDeclarationAnnotationElementAdapter<T[]> - implements IndexedDeclarationAnnotationElementAdapter<T> -{ - public IndexedConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, IndexedExpressionConverter<T> converter) { - super(annotationAdapter, converter); - } - - public IndexedConversionDeclarationAnnotationElementAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, IndexedExpressionConverter<T> converter) { - super(annotationAdapter, elementName, converter); - } - - protected IndexedExpressionConverter<T> getConverter() { - return (IndexedExpressionConverter<T>) this.converter; - } - - public Expression selectExpression(ModifiedDeclaration declaration, int index) { - return this.getConverter().selectExpression(this.getExpression(declaration), index); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTAnnotatedElement.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTAnnotatedElement.java deleted file mode 100644 index 85171fede1..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTAnnotatedElement.java +++ /dev/null @@ -1,202 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.utility.jdt; - -import org.eclipse.core.filebuffers.FileBuffers; -import org.eclipse.core.filebuffers.ITextFileBuffer; -import org.eclipse.core.filebuffers.LocationKind; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.command.Command; -import org.eclipse.jpt.common.utility.command.CommandExecutor; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.text.edits.MalformedTreeException; -import org.eclipse.text.edits.TextEdit; - -/** - * Adapt and extend a JDT member with simplified annotation handling. - */ -public abstract class JDTAnnotatedElement - implements AnnotatedElement -{ - - /** the annotated element's name (duh) */ - private final String name; - - /** - * the compilation unit (file) containing the annotated element; - * used for building an AST when we modify the annotated element - */ - private final ICompilationUnit compilationUnit; - - /** - * this allows clients to provide a way to modify the compilation unit - * (file) when it is open in an editor and should be modified on the UI - * thread - */ - private final CommandExecutor modifySharedDocumentCommandExecutor; - - /** this will format the annotated element's annotations a bit */ - private final AnnotationEditFormatter annotationEditFormatter; - - - // ********** constructors ********** - - protected JDTAnnotatedElement( - String name, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - this(name, compilationUnit, modifySharedDocumentCommandExecutor, DefaultAnnotationEditFormatter.instance()); - } - - protected JDTAnnotatedElement( - String name, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - super(); - this.name = name; - this.compilationUnit = compilationUnit; - this.modifySharedDocumentCommandExecutor = modifySharedDocumentCommandExecutor; - this.annotationEditFormatter = annotationEditFormatter; - } - - - // ********** AnnotatedElement implementation ********** - - public String getName() { - return this.name; - } - - public abstract ModifiedDeclaration getModifiedDeclaration(CompilationUnit astRoot); - - public ModifiedDeclaration getModifiedDeclaration() { - return this.getModifiedDeclaration(this.buildASTRoot()); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.name); - } - - - // ********** editing ********** - - /** - * Edit the member with the specified editor. - * The editor will be invoked once the member's compilation unit - * is in an editable state. - */ - public void edit(Editor editor) { - try { - this.edit_(editor); - } catch (JavaModelException ex) { - throw new RuntimeException(ex); - } catch (BadLocationException ex) { - throw new RuntimeException(ex); - } - } - - /** - * NB: Be careful changing this method. - * Things to look out for: - * - when editing via the JavaEditor there is no need to create a working copy - * - when editing without an editor or via a simple text editor, a "working copy" must be created. - * (at least as far as I can tell ~kfm) - * - sharedDocument is only ever false in tests (headless mode). In the UI, even if the file - * is not open in an editor, sharedDocument is still true (buffer is not null) - * - if a working copy is created, then we must discard it - */ - protected void edit_(Editor editor) throws JavaModelException, BadLocationException { - boolean createWorkingCopy = ! this.compilationUnit.isWorkingCopy(); - if (createWorkingCopy) { - this.compilationUnit.becomeWorkingCopy(null); - } - - ITextFileBuffer buffer = FileBuffers.getTextFileBufferManager().getTextFileBuffer(this.compilationUnit.getResource().getFullPath(), LocationKind.NORMALIZE); - boolean sharedDocument = (buffer != null); // documents are typically shared when they are already open in an editor - IDocument doc = sharedDocument ? - buffer.getDocument() : - new Document(this.compilationUnit.getBuffer().getContents()); - - try { - CompilationUnit astRoot = this.buildASTRoot(); - astRoot.recordModifications(); - - editor.edit(this.getModifiedDeclaration(astRoot)); - - TextEdit edits = astRoot.rewrite(doc, this.compilationUnit.getJavaProject().getOptions(true)); - if (sharedDocument) { - this.modifySharedDocumentCommandExecutor.execute(new ModifySharedDocumentCommand(edits, doc)); - } else { - this.applyEdits(edits, doc); - } - } - finally { - if (createWorkingCopy) { - //discardWorkingCopy must be called every time becomeWorkingCopy is called. - this.compilationUnit.getBuffer().setContents(doc.get()); - this.compilationUnit.commitWorkingCopy(true, null); // true="force" - this.compilationUnit.discardWorkingCopy(); - } - } - } - - /** - * apply the specified edits to the specified document, - * reformatting the document if necessary - */ - protected void applyEdits(TextEdit edits, IDocument doc) throws MalformedTreeException, BadLocationException { - edits.apply(doc, TextEdit.UPDATE_REGIONS); - this.annotationEditFormatter.format(doc, edits); - } - - protected CompilationUnit buildASTRoot() { - return ASTTools.buildASTRoot(this.compilationUnit); - } - - - // ********** modify shared document command class ********** - - /** - * simple command that calls back to the member to apply the edits - * in the same way as if the document were not shared - */ - protected class ModifySharedDocumentCommand - implements Command - { - private final TextEdit edits; - private final IDocument doc; - - protected ModifySharedDocumentCommand(TextEdit edits, IDocument doc) { - super(); - this.edits = edits; - this.doc = doc; - } - - public void execute() { - try { - JDTAnnotatedElement.this.applyEdits(this.edits, this.doc); - } catch (MalformedTreeException ex) { - throw new RuntimeException(ex); - } catch (BadLocationException ex) { - throw new RuntimeException(ex); - } - } - - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTEnum.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTEnum.java deleted file mode 100644 index 47ed58b777..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTEnum.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.utility.jdt; - -import java.util.List; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.EnumConstantDeclaration; -import org.eclipse.jdt.core.dom.EnumDeclaration; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.core.utility.jdt.Enum; -import org.eclipse.jpt.common.core.utility.jdt.Type; -import org.eclipse.jpt.common.utility.command.CommandExecutor; - -/** - * Adapt and extend a JDT enum. - */ -public class JDTEnum - extends AbstractJDTType - implements Enum -{ - - /** - * constructor for the compilation unit's primary type, an enum - */ - public JDTEnum( - EnumDeclaration enumDeclaration, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - this(enumDeclaration, compilationUnit, modifySharedDocumentCommandExecutor, DefaultAnnotationEditFormatter.instance()); - } - - /** - * constructor for the compilation unit's primary type, an enum - */ - public JDTEnum( - EnumDeclaration enumDeclaration, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - super(null, enumDeclaration, 1, compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - } - - /** - * constructor for nested enums - */ - public JDTEnum( - Type declaringType, - EnumDeclaration enumDeclaration, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - this(declaringType, enumDeclaration, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, DefaultAnnotationEditFormatter.instance()); - } - - /** - * constructor for nested enums - */ - public JDTEnum( - Type declaringType, - EnumDeclaration enumDeclaration, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - super(declaringType, enumDeclaration, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - } - - /** - * constructor for testing - */ - public JDTEnum(Type declaringType, String name, int occurrence, ICompilationUnit compilationUnit) { - super(declaringType, name, occurrence, compilationUnit); - } - - @Override - public EnumDeclaration getBodyDeclaration(CompilationUnit astRoot) { - return (EnumDeclaration) super.getBodyDeclaration(astRoot); - } - - public boolean isPersistable(CompilationUnit astRoot) { - return true; - } - - public EnumConstantDeclaration[] getEnumConstants(CompilationUnit astRoot) { - List<EnumConstantDeclaration> enumConstants = enumConstants(getBodyDeclaration(astRoot)); - return enumConstants.toArray(new EnumConstantDeclaration[enumConstants.size()]); - } - - @SuppressWarnings("unchecked") - private static List<EnumConstantDeclaration> enumConstants(EnumDeclaration ed) { - return ed.enumConstants(); - } - - - // ********** internal ********** - - @Override - protected EnumDeclaration getTopLevelTypeDeclaration(CompilationUnit astRoot) { - return (EnumDeclaration) super.getTopLevelTypeDeclaration(astRoot); - } - - @Override - protected EnumDeclaration getTypeDeclaration(List<AbstractTypeDeclaration> typeDeclarations) { - return (EnumDeclaration) super.getTypeDeclaration(typeDeclarations); - } - - @Override - protected EnumDeclaration getNestedTypeDeclaration(TypeDeclaration declaringTypeDeclaration) { - return this.getTypeDeclaration(getEnums(declaringTypeDeclaration)); - } - - @Override - protected EnumDeclaration getTypeDeclaration(AbstractTypeDeclaration[] typeDeclarations) { - return (EnumDeclaration) super.getTypeDeclaration(typeDeclarations); - } - - @Override - protected int getASTNodeType() { - return ASTNode.ENUM_DECLARATION; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTEnumConstant.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTEnumConstant.java deleted file mode 100644 index ea3529597d..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTEnumConstant.java +++ /dev/null @@ -1,123 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.internal.utility.jdt; - -import java.util.List; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.EnumConstantDeclaration; -import org.eclipse.jdt.core.dom.EnumDeclaration; -import org.eclipse.jdt.core.dom.IVariableBinding; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.core.utility.jdt.Enum; -import org.eclipse.jpt.common.core.utility.jdt.EnumConstant; -import org.eclipse.jpt.common.utility.command.CommandExecutor; - -/** - * Adapt and extend a JDT enum constant. - */ -public class JDTEnumConstant - extends JDTMember - implements EnumConstant -{ - - // ********** constructors ********** - - public JDTEnumConstant( - Enum declaringEnum, - String name, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - this(declaringEnum, name, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, DefaultAnnotationEditFormatter.instance()); - } - - public JDTEnumConstant( - Enum declaringEnum, - String name, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - super(declaringEnum, name, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - } - - /** - * constructor for testing - */ - public JDTEnumConstant(Enum declaringEnum, String name, int occurrence, ICompilationUnit compilationUnit) { - this(declaringEnum, name, occurrence, compilationUnit, CommandExecutor.Default.instance(), DefaultAnnotationEditFormatter.instance()); - } - - @Override - protected Enum getDeclaringType() { - return (Enum) super.getDeclaringType(); - } - - // ********** AnnotatedElement/EnumConstant implementation ********** - - public IVariableBinding getBinding(CompilationUnit astRoot) { - return this.getBodyDeclaration(astRoot).resolveVariable(); - } - - @Override - public EnumConstantDeclaration getBodyDeclaration(CompilationUnit astRoot) { - return this.getSelectedDeclaration(astRoot); - } - - public TextRange getNameTextRange(CompilationUnit astRoot) { - EnumConstantDeclaration declaration = this.getBodyDeclaration(astRoot); - // the declaration can be null if the resource is out of sync with the file system - return (declaration == null) ? null : ASTTools.buildTextRange(declaration.getName()); - } - - //As far as I can tell, enum constants are always "persistable", - //there are no modifiers you can add to an enum constant - public boolean isPersistable(CompilationUnit astRoot) { - return true; - } - - - // ********** internal ********** - - protected EnumConstantDeclaration getSelectedDeclaration(CompilationUnit astRoot) { - String name = this.getName(); - int occurrence = this.getOccurrence(); - int count = 0; - for (EnumConstantDeclaration enumConstantDeclaration : this.getDeclaringTypeEnumConstantDeclarations(astRoot)) { - if (enumConstantDeclaration.getName().getFullyQualifiedName().equals(name)) { - count++; - if (count == occurrence) { - return enumConstantDeclaration; - } - } - } - // return null if the field is no longer in the source code; - // this can happen when the context model has not yet - // been synchronized with the resource model but is still - // asking for an ASTNode (e.g. during a selection event) - return null; - } - - protected EnumConstantDeclaration[] getDeclaringTypeEnumConstantDeclarations(CompilationUnit astRoot) { - List<EnumConstantDeclaration> enumConstants = enumConstants(this.getDeclaringTypeDeclaration(astRoot)); - return enumConstants.toArray(new EnumConstantDeclaration[enumConstants.size()]); - } - - @SuppressWarnings("unchecked") - private static List<EnumConstantDeclaration> enumConstants(EnumDeclaration ed) { - return ed.enumConstants(); - } - - protected EnumDeclaration getDeclaringTypeDeclaration(CompilationUnit astRoot) { - return this.getDeclaringType().getBodyDeclaration(astRoot); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTFieldAttribute.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTFieldAttribute.java deleted file mode 100644 index 45668bf042..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTFieldAttribute.java +++ /dev/null @@ -1,220 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2012 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.common.core.internal.utility.jdt; - -import java.util.List; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.FieldDeclaration; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jdt.core.dom.IVariableBinding; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jdt.core.dom.VariableDeclarationFragment; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.core.utility.jdt.FieldAttribute; -import org.eclipse.jpt.common.core.utility.jdt.Type; -import org.eclipse.jpt.common.utility.command.CommandExecutor; - -/** - * Adapt and extend a JDT field. - * Attribute based on a Java field, e.g. - * private int foo; - */ -public class JDTFieldAttribute - extends JDTMember - implements FieldAttribute -{ - - // ********** constructors ********** - - public JDTFieldAttribute( - Type declaringType, - String name, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - this(declaringType, name, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, DefaultAnnotationEditFormatter.instance()); - } - - public JDTFieldAttribute( - Type declaringType, - String name, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - super(declaringType, name, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - } - - /** - * constructor for testing - */ - public JDTFieldAttribute(Type declaringType, String name, int occurrence, ICompilationUnit compilationUnit) { - this(declaringType, name, occurrence, compilationUnit, CommandExecutor.Default.instance(), DefaultAnnotationEditFormatter.instance()); - } - - - // ********** Member/Attribute/FieldAttribute implementation ********** - - @Override - protected Type getDeclaringType() { - return (Type) super.getDeclaringType(); - } - - public IVariableBinding getBinding(CompilationUnit astRoot) { - return this.getFragment(astRoot).resolveBinding(); - } - - @Override - public FieldDeclaration getBodyDeclaration(CompilationUnit astRoot) { - return this.getSelectedDeclaration(astRoot, FIELD_DECLARATION_SELECTOR); - } - - public TextRange getNameTextRange(CompilationUnit astRoot) { - VariableDeclarationFragment fragment = this.getFragment(astRoot); - // the fragment can be null if the resource is out of sync with the file system - return (fragment == null) ? null : ASTTools.buildTextRange(fragment.getName()); - } - - public String getAttributeName() { - return this.getName(); - } - - public ITypeBinding getTypeBinding(CompilationUnit astRoot) { - return this.getBodyDeclaration(astRoot).getType().resolveBinding(); - } - - public boolean isField() { - return true; - } - - public boolean isPersistable(CompilationUnit astRoot) { - IVariableBinding binding = this.getBinding(astRoot); - return (binding == null) ? false : JPTTools.fieldIsPersistable(new JPTToolsAdapter(binding)); - } - - - // ********** internal ********** - - protected TypeDeclaration getDeclaringTypeDeclaration(CompilationUnit astRoot) { - // assume the declaring type is not an enum or annotation - // since they do not have field or method declarations - return this.getDeclaringType().getBodyDeclaration(astRoot); - } - - protected VariableDeclarationFragment getFragment(CompilationUnit astRoot) { - return this.getSelectedDeclaration(astRoot, VARIABLE_DECLARATION_FRAGMENT_SELECTOR); - } - - /** - * return either a FieldDeclaration or a VariableDeclarationFragment, - * depending on the specified selector; - * - * handle multiple fields declared in a single statement: - * private int foo, bar; - */ - protected <T extends ASTNode> T getSelectedDeclaration(CompilationUnit astRoot, Selector<T> selector) { - String name = this.getName(); - int occurrence = this.getOccurrence(); - int count = 0; - for (FieldDeclaration fieldDeclaration : this.getDeclaringTypeFieldDeclarations(astRoot)) { - for (VariableDeclarationFragment fragment : fragments(fieldDeclaration)) { - if (fragment.getName().getFullyQualifiedName().equals(name)) { - count++; - if (count == occurrence) { - return selector.select(fieldDeclaration, fragment); - } - } - } - } - // return null if the field is no longer in the source code; - // this can happen when the context model has not yet - // been synchronized with the resource model but is still - // asking for an ASTNode (e.g. during a selection event) - return null; - } - - protected FieldDeclaration[] getDeclaringTypeFieldDeclarations(CompilationUnit astRoot) { - TypeDeclaration typeDeclaration = this.getDeclaringTypeDeclaration(astRoot); - // the declaration can be null if the resource is out of sync with the file system - return (typeDeclaration == null) ? EMPTY_FIELD_DECLARATION_ARRAY : typeDeclaration.getFields(); - } - protected static final FieldDeclaration[] EMPTY_FIELD_DECLARATION_ARRAY = new FieldDeclaration[0]; - - // minimize scope of suppressed warnings - @SuppressWarnings("unchecked") - protected static List<VariableDeclarationFragment> fragments(FieldDeclaration fd) { - return fd.fragments(); - } - - - // ********** Selector ********** - - // I'm not quite sure this interface is worth the resulting obfuscation, - // but, then, I kept changing both methods, so... ~bjv - protected interface Selector<T extends ASTNode> { - T select(FieldDeclaration fieldDeclaration, VariableDeclarationFragment variableDeclarationFragment); - String getDescription(); - } - - protected static final Selector<FieldDeclaration> FIELD_DECLARATION_SELECTOR = - new Selector<FieldDeclaration>() { - public FieldDeclaration select(FieldDeclaration fieldDeclaration, VariableDeclarationFragment variableDeclarationFragment) { - return fieldDeclaration; - } - public String getDescription() { - return "field declaration"; //$NON-NLS-1$ - } - @Override - public String toString() { - return "FIELD_DECLARATION_SELECTOR"; //$NON-NLS-1$ - } - }; - - protected static final Selector<VariableDeclarationFragment> VARIABLE_DECLARATION_FRAGMENT_SELECTOR = - new Selector<VariableDeclarationFragment>() { - public VariableDeclarationFragment select(FieldDeclaration fieldDeclaration, VariableDeclarationFragment variableDeclarationFragment) { - return variableDeclarationFragment; - } - public String getDescription() { - return "variable declaration fragment"; //$NON-NLS-1$ - } - @Override - public String toString() { - return "VARIABLE_DECLARATION_FRAGMENT_SELECTOR"; //$NON-NLS-1$ - } - }; - - - // ********** JPTTools adapter ********** - - /** - * JPTTools needs an adapter so it can work with either an IField - * or an IVariableBinding etc. - */ - protected static class JPTToolsAdapter implements JPTTools.FieldAdapter { - private final IVariableBinding fieldBinding; - - protected JPTToolsAdapter(IVariableBinding fieldBinding) { - super(); - if (fieldBinding == null) { - throw new NullPointerException(); - } - this.fieldBinding = fieldBinding; - } - - public int getModifiers() { - return this.fieldBinding.getModifiers(); - } - - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTMember.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTMember.java deleted file mode 100644 index 609e79756f..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTMember.java +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2012 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.BodyDeclaration; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.utility.jdt.AbstractType; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.core.utility.jdt.Member; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.command.CommandExecutor; - -/** - * Adapt and extend a JDT member with simplified annotation handling. - */ -public abstract class JDTMember extends JDTAnnotatedElement - implements Member -{ - - /** this will be null for the primary type */ - private final AbstractType declaringType; - - /** - * members can occur more than once in non-compiling source; - * count starts at 1; the primary type will have occurrence 1 - */ - private final int occurrence; - - - // ********** constructors ********** - - protected JDTMember( - AbstractType declaringType, - String name, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - this(declaringType, name, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, DefaultAnnotationEditFormatter.instance()); - } - - protected JDTMember( - AbstractType declaringType, - String name, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - super(name, compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - this.declaringType = declaringType; - this.occurrence = occurrence; - } - - //covariant override - public abstract BodyDeclaration getBodyDeclaration(CompilationUnit astRoot); - - - // ********** Member implementation ********** - - @Override - public ModifiedDeclaration getModifiedDeclaration(CompilationUnit astRoot) { - return new JDTModifiedDeclaration(this.getBodyDeclaration(astRoot)); - } - - public boolean matches(String memberName, int occur) { - return memberName.equals(this.getName()) && (occur == this.occurrence); - } - - - // ********** internal ********** - - protected int getOccurrence() { - return this.occurrence; - } - - /** - * this will return null for a top-level type - */ - protected AbstractType getDeclaringType() { - return this.declaringType; - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTMethodAttribute.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTMethodAttribute.java deleted file mode 100644 index 17d31b430d..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTMethodAttribute.java +++ /dev/null @@ -1,265 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2012 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.common.core.internal.utility.jdt; - -import java.util.Arrays; -import java.util.List; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IMethodBinding; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jdt.core.dom.SingleVariableDeclaration; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.core.utility.jdt.MethodAttribute; -import org.eclipse.jpt.common.core.utility.jdt.Type; -import org.eclipse.jpt.common.utility.JavaType; -import org.eclipse.jpt.common.utility.MethodSignature; -import org.eclipse.jpt.common.utility.command.CommandExecutor; -import org.eclipse.jpt.common.utility.internal.NameTools; -import org.eclipse.jpt.common.utility.internal.SimpleMethodSignature; - -/** - * Adapt and extend a JDT method. - * Attribute based on a Java property, e.g. - * private int getFoo() { - * return foo; - * } - * private void setFoo(int foo) { - * this.foo = foo; - * } - */ -public class JDTMethodAttribute - extends JDTMember - implements MethodAttribute -{ - /** we need the parameter types to build the method signature */ - private final JavaType[] parameterTypes; - - - // ********** constructors ********** - - public static JDTMethodAttribute newInstance( - Type declaringType, - MethodSignature signature, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - return newInstance(declaringType, signature, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, DefaultAnnotationEditFormatter.instance()); - } - - public static JDTMethodAttribute newInstance( - Type declaringType, - MethodSignature signature, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - return new JDTMethodAttribute(declaringType, signature, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - } - - private JDTMethodAttribute( - Type declaringType, - MethodSignature methodSignature, - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - super(declaringType, methodSignature.getName(), occurrence, compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - this.parameterTypes = methodSignature.getParameterTypes(); - } - - /** - * constructor for testing - */ - public JDTMethodAttribute(Type declaringType, String name, String[] parameterTypeNames, int occurrence, ICompilationUnit compilationUnit) { - this(declaringType, new SimpleMethodSignature(name, parameterTypeNames), occurrence, compilationUnit, CommandExecutor.Default.instance(), DefaultAnnotationEditFormatter.instance()); - } - - - // ********** Member/Attribute/MethodAttribute implementation ********** - - @Override - protected Type getDeclaringType() { - return (Type) super.getDeclaringType(); - } - - public boolean isField() { - return false; - } - - public IMethodBinding getBinding(CompilationUnit astRoot) { - return this.getBodyDeclaration(astRoot).resolveBinding(); - } - - @Override - public MethodDeclaration getBodyDeclaration(CompilationUnit astRoot) { - int count = 0; - for (MethodDeclaration methodDeclaration : this.getDeclaringTypeMethodDeclarations(astRoot)) { - if (this.matches(methodDeclaration)) { - count++; - if (count == this.getOccurrence()) { - return methodDeclaration; - } - } - } - // return null if the method is no longer in the source code; - // this can happen when the context model has not yet - // been synchronized with the resource model but is still - // asking for an ASTNode (e.g. during a selection event) - return null; - } - - public boolean matches(MethodSignature signature, int occurrence) { - return this.matches(signature) && (occurrence == this.getOccurrence()); - } - - protected boolean matches(MethodSignature signature) { - return signature.getName().equals(this.getName()) - && Arrays.equals(this.parameterTypes, signature.getParameterTypes()); - } - - protected boolean matches(MethodDeclaration methodDeclaration) { - return this.matches(ASTTools.buildMethodSignature(methodDeclaration)); - } - - // minimize scope of suppressed warnings - @SuppressWarnings("unchecked") - protected static List<SingleVariableDeclaration> parameters(MethodDeclaration methodDeclaration) { - return methodDeclaration.parameters(); - } - - @Override - public boolean matches(String memberName, int occurrence) { - throw new UnsupportedOperationException("Use #matches(MethodSignature, int)."); //$NON-NLS-1$ - } - - public TextRange getNameTextRange(CompilationUnit astRoot) { - MethodDeclaration methodDeclaration = this.getBodyDeclaration(astRoot); - // the declaration can be null if the resource is out of sync with the file system - return (methodDeclaration == null) ? null : ASTTools.buildTextRange(methodDeclaration.getName()); - } - - /** - * return "foo" for a method named "getFoo", "isFoo", "setFoo" - */ - public String getAttributeName() { - return NameTools.convertGetterSetterMethodNameToPropertyName(this.getName()); - } - - public ITypeBinding getTypeBinding(CompilationUnit astRoot) { - IMethodBinding methodBinding = getBodyDeclaration(astRoot).resolveBinding(); - return (methodBinding == null) ? null : methodBinding.getReturnType(); - } - - public boolean isPersistable(CompilationUnit astRoot) { - IMethodBinding binding = this.getBinding(astRoot); - return (binding == null) ? false : JPTTools.methodIsPersistablePropertyGetter(new JPTToolsAdapter(binding)); - } - - - // ********** internal ********** - - protected TypeDeclaration getDeclaringTypeDeclaration(CompilationUnit astRoot) { - // assume the declaring type is not an enum or annotation - // since they do not have field or method declarations - return this.getDeclaringType().getBodyDeclaration(astRoot); - } - - protected MethodDeclaration[] getDeclaringTypeMethodDeclarations(CompilationUnit astRoot) { - TypeDeclaration typeDeclaration = this.getDeclaringTypeDeclaration(astRoot); - // the declaration can be null if the resource is out of sync with the file system - return (typeDeclaration == null) ? EMPTY_METHOD_DECLARATION_ARRAY : typeDeclaration.getMethods(); - } - protected static final MethodDeclaration[] EMPTY_METHOD_DECLARATION_ARRAY = new MethodDeclaration[0]; - - - // ********** JPTTools adapter ********** - - /** - * JPTTools needs an adapter so it can work with either an IMethod - * or an IMethodBinding etc. - */ - protected static class SimpleJPTToolsAdapter - implements JPTTools.SimpleMethodAdapter - { - protected final IMethodBinding methodBinding; - - protected SimpleJPTToolsAdapter(IMethodBinding methodBinding) { - super(); - if (methodBinding == null) { - throw new NullPointerException(); - } - this.methodBinding = methodBinding; - } - - public int getModifiers() { - return this.methodBinding.getModifiers(); - } - - public String getReturnTypeErasureName() { - ITypeBinding returnType = this.methodBinding.getReturnType(); - return (returnType == null) ? null : returnType.getTypeDeclaration().getErasure().getQualifiedName(); - } - - public boolean isConstructor() { - return this.methodBinding.isConstructor(); - } - } - - protected static class JPTToolsAdapter - extends SimpleJPTToolsAdapter - implements JPTTools.MethodAdapter - { - protected JPTToolsAdapter(IMethodBinding methodBinding) { - super(methodBinding); - } - - public String getName() { - return this.methodBinding.getName(); - } - - public int getParametersLength() { - return this.methodBinding.getParameterTypes().length; - } - - public JPTTools.SimpleMethodAdapter getSibling(String name) { - ITypeBinding typeBinding = this.methodBinding.getDeclaringClass(); - if (typeBinding == null) { - return null; - } - for (IMethodBinding sibling : typeBinding.getDeclaredMethods()) { - if ((sibling.getParameterTypes().length == 0) - && sibling.getName().equals(name)) { - return new SimpleJPTToolsAdapter(sibling); - } - } - return null; - } - - public JPTTools.SimpleMethodAdapter getSibling(String name, String parameterTypeErasureName) { - ITypeBinding typeBinding = this.methodBinding.getDeclaringClass(); - if (typeBinding == null) { - return null; - } - for (IMethodBinding sibling : typeBinding.getDeclaredMethods()) { - ITypeBinding[] siblingParmTypes = sibling.getParameterTypes(); - if ((siblingParmTypes.length == 1) - && sibling.getName().equals(name) - && siblingParmTypes[0].getTypeDeclaration().getErasure().getQualifiedName().equals(parameterTypeErasureName)) { - return new SimpleJPTToolsAdapter(sibling); - } - } - return null; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTModifiedDeclaration.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTModifiedDeclaration.java deleted file mode 100644 index 6e67e46fbc..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTModifiedDeclaration.java +++ /dev/null @@ -1,584 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2010 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.common.core.internal.utility.jdt; - -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; -import org.eclipse.jdt.core.IField; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.JavaModelException; -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.PackageDeclaration; -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.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterators.FilteringIterator; -import org.eclipse.jpt.common.utility.internal.iterators.SubIteratorWrapper; - -/** - * Wrap any of the AST nodes that have modifiers (specifically, annotations); - * i.e. BodyDeclaration, SingleVariableDeclaration, VariableDeclarationExpression, - * and VariableDeclarationStatement. - */ -public class JDTModifiedDeclaration - implements ModifiedDeclaration -{ - private final Adapter adapter; - - - // ********** constructors ********** - - public JDTModifiedDeclaration(Adapter adapter) { - super(); - this.adapter = adapter; - } - - public JDTModifiedDeclaration(BodyDeclaration declaration) { - this(new BodyDeclarationAdapter(declaration)); - } - - public JDTModifiedDeclaration(PackageDeclaration declaration) { - this(new PackageDeclarationAdapter(declaration)); - } - - public JDTModifiedDeclaration(SingleVariableDeclaration declaration) { - this(new SingleVariableDeclarationAdapter(declaration)); - } - - public JDTModifiedDeclaration(VariableDeclarationExpression declaration) { - this(new VariableDeclarationExpressionAdapter(declaration)); - } - - public JDTModifiedDeclaration(VariableDeclarationStatement declaration) { - this(new VariableDeclarationStatementAdapter(declaration)); - } - - - // ********** annotations ********** - - 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; - } - - public void removeAnnotationNamed(String annotationName) { - for (Iterator<IExtendedModifier> stream = this.getModifiers().iterator(); stream.hasNext(); ) { - IExtendedModifier modifier = stream.next(); - if (modifier.isAnnotation()) { - if (this.annotationIsNamed((Annotation) modifier, annotationName)) { - stream.remove(); - break; - } - } - } - } - - public void replaceAnnotationNamed(String oldAnnotationName, Annotation newAnnotation) { - List<IExtendedModifier> modifiers = this.getModifiers(); - 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 annotation to the declaration. - * By convention annotations precede the "standard" (JLS2) modifiers; - * though, technically, they can be interspersed. - */ - protected void addAnnotation(Annotation annotation) { - List<IExtendedModifier> modifiers = this.getModifiers(); - 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 - } - - /** - * Return the declaration's annotations. - */ - protected Iterator<Annotation> annotations() { - return new SubIteratorWrapper<IExtendedModifier, Annotation>(this.annotations_()); - } - - protected Iterator<IExtendedModifier> annotations_() { - return new FilteringIterator<IExtendedModifier>(this.getModifiers().iterator()) { - @Override - protected boolean accept(IExtendedModifier next) { - return next.isAnnotation(); - } - }; - } - - - // ********** add import ********** - - public boolean addImport(String className) { - if (className.indexOf('.') == -1) { - return true; // the class is in the default package - no need for import - } - return this.addImport(className, false); - } - - public boolean addStaticImport(String enumConstantName) { - int index1 = enumConstantName.indexOf('.'); - if (index1 == -1) { - throw new IllegalArgumentException(enumConstantName); // shouldn't happen? - } - int index2 = enumConstantName.indexOf('.', index1 + 1); - if (index2 == -1) { - return true; // the enum is in the default package - no need for import - } - return this.addImport(enumConstantName, true); - } - - public boolean addImport(String importName, boolean staticImport) { - Boolean include = this.importsInclude(importName, staticImport); - if (include != null) { - return include.booleanValue(); - } - - ImportDeclaration importDeclaration = this.getAst().newImportDeclaration(); - importDeclaration.setName(this.getAst().newName(importName)); - importDeclaration.setStatic(staticImport); - this.getImports().add(importDeclaration); - return true; - } - - /** - * Just a bit hacky: - * Return Boolean.TRUE if the import is already present. - * Return Boolean.FALSE if a colliding import is already present. - * Return null if a new import may be added. - * This hackery allows us to loop through the imports only once - * (and compose our methods). - * Pre-condition: 'importName' is not in the "default" package (i.e. it *is* qualified) - */ - protected Boolean importsInclude(String importName, boolean staticImport) { - int period = importName.lastIndexOf('.'); // should not be -1 - String importNameQualifier = importName.substring(0, period); - String shortImportName = importName.substring(period + 1); - return this.importsInclude(importName, importNameQualifier, shortImportName, staticImport); - } - - /** - * pre-calculate the qualifier and short name - */ - protected Boolean importsInclude(String importName, String importNameQualifier, String shortImportName, boolean staticImport) { - for (ImportDeclaration importDeclaration : this.getImports()) { - if (importDeclaration.isStatic() == staticImport) { - Boolean match = this.importMatches(importDeclaration, importName, importNameQualifier, shortImportName); - if (match != null) { - return match; - } - } - } - return null; - } - - /** - * we should be able to rely on the JDT model here, since we are looking - * at objects that should not be changing underneath us... - */ - protected Boolean importMatches(ImportDeclaration importDeclaration, String importName, String importNameQualifier, String shortImportName) { - // examples: - // 'importName' is "java.util.Date" - // or - // 'importName' is "java.lang.annotation.ElementType.TYPE" - String idn = importDeclaration.getName().getFullyQualifiedName(); - if (importName.equals(idn)) { - // import java.util.Date; => "Date" will resolve to "java.util.Date" - // import static java.lang.annotation.ElementType.TYPE; => "TYPE" will resolve to "java.lang.annotation.ElementType.TYPE" - return Boolean.TRUE; - } - - String shortIDN = idn.substring(idn.lastIndexOf('.') + 1); - if (shortImportName.equals(shortIDN)) { - // import java.sql.Date; => ambiguous resolution of "Date" - // import static org.foo.Bar.TYPE; => ambiguous resolution of "TYPE" - return Boolean.FALSE; - } - - if (importDeclaration.isOnDemand()) { - if (importNameQualifier.equals(idn)) { - // import java.util.*; => "Date" will resolve to "java.util.Date" - // import static java.lang.annotation.ElementType.*; => "TYPE" will resolve to "java.lang.annotation.ElementType.TYPE" - return Boolean.TRUE; - } - if (importDeclaration.isStatic()) { - if (this.enumResolves(idn, shortImportName)) { - // import static org.foo.Bar.*; => ambiguous resolution of "TYPE" - return Boolean.FALSE; - } - } else { - if (this.typeResolves(idn + '.' + shortImportName)) { - // import java.sql.*; => ambiguous resolution of "Date" - return Boolean.FALSE; - } - } - } - // no matches - OK to add explicit import - return null; - } - - protected boolean enumResolves(String enumTypeName, String enumConstantName) { - try { - return this.enumResolves_(enumTypeName, enumConstantName); - } catch (JavaModelException ex) { - throw new RuntimeException(ex); - } - } - - protected boolean enumResolves_(String enumTypeName, String enumConstantName) throws JavaModelException { - IType jdtType = this.findType_(enumTypeName); - if (jdtType == null) { - return false; - } - if ( ! jdtType.isEnum()) { - return false; - } - for (IField jdtField : jdtType.getFields()) { - if (jdtField.isEnumConstant() && jdtField.getElementName().equals(enumConstantName)) { - return true; - } - } - return false; - } - - protected boolean typeResolves(String name) { - return this.findType(name) != null; - } - - protected IType findType(String name) { - try { - return this.findType_(name); - } catch (JavaModelException ex) { - throw new RuntimeException(ex); - } - } - - protected IType findType_(String name) throws JavaModelException { - return this.getCompilationUnit().getJavaElement().getJavaProject().findType(name); - } - - protected List<ImportDeclaration> getImports() { - return this.imports(this.getCompilationUnit()); - } - - // minimize scope of suppressed warnings - @SuppressWarnings("unchecked") - protected List<ImportDeclaration> imports(CompilationUnit astRoot) { - return astRoot.imports(); - } - - - // ********** annotation name resolution ********** - - public boolean annotationIsNamed(Annotation annotation, String name) { - return this.getQualifiedName(annotation).equals(name); - } - - /** - * Simply return the annotation's unqualified name if we can't "resolve" it. - */ - protected String getQualifiedName(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 (because the parser hasn't had time to run?)... :-( - return this.convertToFullClassName(annotation.getTypeName().getFullyQualifiedName()); - } - - /** - * If necessary, use the declaration's imports to calculate a guess as to - * the specified name's fully-qualified form. - * Simply return the unqualified name if we can't "resolve" it. - */ - protected String convertToFullClassName(String name) { - // check for fully-qualified name - return (name.lastIndexOf('.') != -1) ? name : this.resolveAgainstImports(name, false); - } - - /** - * If necessary, use the declaration's imports to calculate a guess as to - * the specified name's fully-qualified form. - * Simply return the unqualified name if we can't "resolve" it. - */ - protected String convertToFullEnumConstantName(String name) { - int index1 = name.indexOf('.'); - if (index1 == -1) { - // short name, e.g. "TYPE" - // true = look for static import of enum constant - return this.resolveAgainstImports(name, true); - } - - int index2 = name.indexOf('.', index1 + 1); - if (index2 == -1) { - // partially-qualified name, e.g. "ElementType.TYPE" - // false = look regular import of enum class, not static import of enum constant - return this.resolveAgainstImports(name, false); - } - - // fully-qualified name, e.g. "java.lang.annotation.ElementType.TYPE" - return name; - } - - /** - * Attempt to resolve the specified "short" name against the declaration's - * imports. Return the name unchanged if we can't resolve it (perhaps it is - * in the "default" package). - */ - protected String resolveAgainstImports(String shortName, boolean static_) { - for (ImportDeclaration importDeclaration : this.getImports()) { - if (importDeclaration.isStatic() == static_) { - String resolvedName = this.resolveAgainstImport(importDeclaration, shortName); - if (resolvedName != null) { - return resolvedName; - } - } - } - return shortName; // "default" package or unknown - } - - /** - * Attempt to resolve the specified "short" name against the specified - * import. Return the resolved name if the import resolves it; otherwise - * return null. - */ - protected String resolveAgainstImport(ImportDeclaration importDeclaration, String shortName) { - String idn = importDeclaration.getName().getFullyQualifiedName(); - if (importDeclaration.isOnDemand()) { - String candidate = idn + '.' + shortName; - if (importDeclaration.isStatic()) { - if (this.enumResolves(idn, shortName)) { - return candidate; - } - } else { - if (this.typeResolves(candidate)) { - return candidate; - } - } - // no match - return null; - } - - // explicit import - see whether its end matches 'shortName' - int period = idn.length() - shortName.length() - 1; - if (period < 1) { - // something must precede period - return null; - } - if ((idn.charAt(period) == '.') && idn.endsWith(shortName)) { - return idn; // probable exact match - } - return null; - } - - - // ********** miscellaneous methods ********** - - public ASTNode getDeclaration() { - return this.adapter.getDeclaration(); - } - - /** - * Return the declaration's list of modifiers. - * Element type: org.eclipse.jdt.core.dom.IExtendedModifier - */ - protected List<IExtendedModifier> getModifiers() { - return this.adapter.getModifiers(); - } - - public AST getAst() { - return this.getDeclaration().getAST(); - } - - protected CompilationUnit getCompilationUnit() { - return (CompilationUnit) this.getDeclaration().getRoot(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.adapter.toString()); - } - - - // ********** declaration adapter interface and implementations ********** - - /** - * Define common protocol among the various "declarations". - */ - public interface Adapter { - - /** - * Return the adapted "declaration". - */ - ASTNode getDeclaration(); - - /** - * Return the "declaration"'s list of modifiers. - * Element type: org.eclipse.jdt.core.dom.IExtendedModifier - */ - List<IExtendedModifier> getModifiers(); - - } - - public static class BodyDeclarationAdapter implements Adapter { - private final BodyDeclaration declaration; - public BodyDeclarationAdapter(BodyDeclaration declaration) { - super(); - this.declaration = declaration; - } - public ASTNode getDeclaration() { - return this.declaration; - } - @SuppressWarnings("unchecked") - public List<IExtendedModifier> getModifiers() { - return this.declaration.modifiers(); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.declaration.toString()); - } - } - - public static class PackageDeclarationAdapter implements Adapter { - private final PackageDeclaration declaration; - public PackageDeclarationAdapter(PackageDeclaration declaration) { - super(); - this.declaration = declaration; - } - public ASTNode getDeclaration() { - return this.declaration; - } - @SuppressWarnings("unchecked") - public List<IExtendedModifier> getModifiers() { - return this.declaration.annotations(); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.declaration.toString()); - } - } - - /*public static class ASTNodeAdapter implements Adapter { - private final ASTNode declaration; - public ASTNodeAdapter(ASTNode declaration) { - super(); - this.declaration = declaration; - } - public ASTNode getDeclaration() { - return this.declaration; - } - @SuppressWarnings("unchecked") - public List<IExtendedModifier> getModifiers() { - if (declaration instanceof BodyDeclaration) { - return ((BodyDeclaration) declaration).modifiers(); - } else if (declaration instanceof PackageDeclaration) { - return ((PackageDeclaration) declaration).annotations(); - } - return Collections.emptyList(); - } - @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 getDeclaration() { - return this.declaration; - } - @SuppressWarnings("unchecked") - public List<IExtendedModifier> getModifiers() { - 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 getDeclaration() { - return this.declaration; - } - @SuppressWarnings("unchecked") - public List<IExtendedModifier> getModifiers() { - 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 getDeclaration() { - return this.declaration; - } - @SuppressWarnings("unchecked") - public List<IExtendedModifier> getModifiers() { - return this.declaration.modifiers(); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.declaration.toString()); - } - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTPackage.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTPackage.java deleted file mode 100644 index 3057928eaf..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTPackage.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2012 Red Hat, Inc. 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: - * Red Hat, Inc. - initial API and implementation - * Oracle - ******************************************************************************/ -package org.eclipse.jpt.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IPackageBinding; -import org.eclipse.jdt.core.dom.PackageDeclaration; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedPackage; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; -import org.eclipse.jpt.common.utility.command.CommandExecutor; - -public class JDTPackage - extends JDTAnnotatedElement - implements AnnotatedPackage -{ - protected JDTPackage(PackageDeclaration declaringPackage, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - super(declaringPackage.getName().getFullyQualifiedName(), - compilationUnit, - modifySharedDocumentCommandExecutor); - } - - public JDTPackage( - PackageDeclaration declaringPackage, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - super(declaringPackage.getName().getFullyQualifiedName(), - compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - } - - @Override - public ModifiedDeclaration getModifiedDeclaration(CompilationUnit astRoot) { - return new JDTModifiedDeclaration(this.getBodyDeclaration(astRoot)); - } - - public IPackageBinding getBinding(CompilationUnit astRoot) { - PackageDeclaration pd = this.getBodyDeclaration(astRoot); - return (pd == null) ? null : pd.resolveBinding(); - } - - public PackageDeclaration getBodyDeclaration(CompilationUnit astRoot) { - return astRoot.getPackage(); - } - - public TextRange getNameTextRange(CompilationUnit astRoot) { - return ASTTools.buildTextRange(this.getBodyDeclaration(astRoot).getName()); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTType.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTType.java deleted file mode 100644 index 48d3da117e..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JDTType.java +++ /dev/null @@ -1,208 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2012 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.common.core.internal.utility.jdt; - -import java.util.List; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.EnumDeclaration; -import org.eclipse.jdt.core.dom.FieldDeclaration; -import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jdt.core.dom.TypeDeclaration; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.core.utility.jdt.Type; -import org.eclipse.jpt.common.utility.command.CommandExecutor; - -/** - * Adapt and extend a JDT type. - */ -public class JDTType - extends AbstractJDTType - implements Type -{ - - /** - * constructor for the compilation unit's primary type - */ - public JDTType( - TypeDeclaration typeDeclaration, // exclude annotations and enums - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - this(typeDeclaration, compilationUnit, modifySharedDocumentCommandExecutor, DefaultAnnotationEditFormatter.instance()); - } - - /** - * constructor for the compilation unit's primary type - */ - public JDTType( - TypeDeclaration typeDeclaration, // exclude annotations and enums - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - this(null, typeDeclaration, 1, compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - } - - /** - * constructor for nested types - */ - public JDTType( - Type declaringType, - TypeDeclaration typeDeclaration, // exclude annotations and enums - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor) { - this(declaringType, typeDeclaration, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, DefaultAnnotationEditFormatter.instance()); - } - - /** - * constructor for nested types - */ - public JDTType( - Type declaringType, - TypeDeclaration typeDeclaration, // exclude annotations and enums - int occurrence, - ICompilationUnit compilationUnit, - CommandExecutor modifySharedDocumentCommandExecutor, - AnnotationEditFormatter annotationEditFormatter) { - super(declaringType, typeDeclaration, occurrence, compilationUnit, modifySharedDocumentCommandExecutor, annotationEditFormatter); - } - - /** - * constructor for testing - */ - public JDTType(Type declaringType, String name, int occurrence, ICompilationUnit compilationUnit) { - super(declaringType, name, occurrence, compilationUnit); - } - - - // ********** Member/Type implementation ********** - - /** - * find the type's body declaration in the specified AST - */ - @Override - public TypeDeclaration getBodyDeclaration(CompilationUnit astRoot) { - return (TypeDeclaration) super.getBodyDeclaration(astRoot); - } - - public boolean isPersistable(CompilationUnit astRoot) { - ITypeBinding binding = this.getBinding(astRoot); - return (binding == null) ? false : JPTTools.typeIsPersistable(new JPTToolsAdapter(binding)); - } - - public TypeDeclaration[] getTypes(CompilationUnit astRoot) { - return this.getBodyDeclaration(astRoot).getTypes(); - } - - public EnumDeclaration[] getEnums(CompilationUnit astRoot) { - return getEnums(this.getBodyDeclaration(astRoot)); - } - - public FieldDeclaration[] getFields(CompilationUnit astRoot) { - return this.getBodyDeclaration(astRoot).getFields(); - } - - public MethodDeclaration[] getMethods(CompilationUnit astRoot) { - return this.getBodyDeclaration(astRoot).getMethods(); - } - - - // ********** internal ********** - - /** - * return the first top-level type in the specified AST with a matching name - */ - @Override - protected TypeDeclaration getTopLevelTypeDeclaration(CompilationUnit astRoot) { - return (TypeDeclaration) super.getTopLevelTypeDeclaration(astRoot); - } - - @Override - protected TypeDeclaration getTypeDeclaration(List<AbstractTypeDeclaration> typeDeclarations) { - return (TypeDeclaration) super.getTypeDeclaration(typeDeclarations); - } - - /** - * return the nested type with a matching name and occurrence - */ - @Override - protected TypeDeclaration getNestedTypeDeclaration(TypeDeclaration declaringTypeDeclaration) { - return this.getTypeDeclaration(declaringTypeDeclaration.getTypes()); - } - - /** - * return the type declaration corresponding to the type from the specified - * set of type declarations (match name and occurrence) - */ - @Override - protected TypeDeclaration getTypeDeclaration(AbstractTypeDeclaration[] typeDeclarations) { - return (TypeDeclaration) super.getTypeDeclaration(typeDeclarations); - } - - @Override - protected int getASTNodeType() { - return ASTNode.TYPE_DECLARATION; - } - - - // ********** JPT tools adapter ********** - - protected static class JPTToolsAdapter - implements JPTTools.TypeAdapter - { - private final ITypeBinding typeBinding; - protected JPTToolsAdapter(ITypeBinding typeBinding) { - super(); - if (typeBinding == null) { - throw new NullPointerException(); - } - this.typeBinding = typeBinding; - } - - public int getModifiers() { - return this.typeBinding.getModifiers(); - } - - public boolean isAnnotation() { - return this.typeBinding.isAnnotation(); - } - - public boolean isAnonymous() { - return this.typeBinding.isAnonymous(); - } - - public boolean isArray() { - return this.typeBinding.isArray(); - } - - public boolean isEnum() { - return this.typeBinding.isEnum(); - } - - public boolean isInterface() { - return this.typeBinding.isInterface(); - } - - public boolean isLocal() { - return this.typeBinding.isLocal(); - } - - public boolean isMember() { - return this.typeBinding.isMember(); - } - - public boolean isPrimitive() { - return this.typeBinding.isPrimitive(); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JPTTools.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JPTTools.java deleted file mode 100644 index f1930c829c..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/JPTTools.java +++ /dev/null @@ -1,283 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 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.common.core.internal.utility.jdt; - -import java.lang.reflect.Modifier; - -/** - * Convenience methods for JPA-related queries concerning JDT objects. - */ -//TODO this needs to move because it is only used for JPA -public class JPTTools { - - // ********** type ********** - - /** - * Return whether the specified type can be "persisted", i.e. marked as - * Entity, MappedSuperclass, Embeddable - */ - public static boolean typeIsPersistable(TypeAdapter typeAdapter) { - if (typeAdapter.isInterface()) { - return false; - } - if (typeAdapter.isAnnotation()) { - return false; - } - if (typeAdapter.isEnum()) { - return false; - } - if (typeAdapter.isLocal()) { - return false; - } - if (typeAdapter.isAnonymous()) { - return false; - } - if (typeAdapter.isPrimitive()) { - return false; // should never get here(?) - } - if (typeAdapter.isArray()) { - return false; // should never get here(?) - } - return true; - } - - /** - * Queries needed to calculate whether a type is "persistable". - * Adapted to ITypeBinding and IType. - */ - public interface TypeAdapter { - int getModifiers(); - boolean isAnnotation(); - boolean isAnonymous(); - boolean isArray(); - boolean isEnum(); - boolean isInterface(); - boolean isLocal(); - boolean isMember(); - boolean isPrimitive(); - } - - - // ********** field ********** - - /** - * Return whether the specified field may be "persisted". - * According to the spec, "All non-transient instance variables that are not - * annotated with the Transient annotation are persistent." - */ - public static boolean fieldIsPersistable(FieldAdapter fieldAdapter) { - int modifiers = fieldAdapter.getModifiers(); - if (Modifier.isStatic(modifiers)) { - return false; - } - if (Modifier.isTransient(modifiers)) { - return false; - } - return true; - } - - /** - * Queries needed to calculate whether a field is "persistable". - * Adapted to IVariableBinding and IField. - */ - public interface FieldAdapter { - /** - * Return the field's modifiers. We use these to check whether the - * field is static or transient. - */ - int getModifiers(); - } - - - // ********** method ********** - - /** - * Return whether the specified method is a "getter" method that - * represents a property that may be "persisted". - */ - public static boolean methodIsPersistablePropertyGetter(MethodAdapter methodAdapter) { - if (methodHasInvalidModifiers(methodAdapter)) { - return false; - } - if (methodAdapter.isConstructor()) { - return false; - } - - String returnTypeName = methodAdapter.getReturnTypeErasureName(); - if (returnTypeName == null) { - return false; // DOM method bindings can have a null name - } - if (returnTypeName.equals("void")) { //$NON-NLS-1$ - return false; - } - if (methodHasParameters(methodAdapter)) { - return false; - } - - String name = methodAdapter.getName(); - int beginIndex = 0; - boolean booleanGetter = false; - if (name.startsWith("is")) { //$NON-NLS-1$ - if (returnTypeName.equals("boolean")) { //$NON-NLS-1$ - beginIndex = 2; - } else { - return false; - } - } else if (name.startsWith("get")) { //$NON-NLS-1$ - beginIndex = 3; - if (returnTypeName.equals("boolean")) { //$NON-NLS-1$ - booleanGetter = true; - } - } else { - return false; - } - - String capitalizedAttributeName = name.substring(beginIndex); - // if the type has both methods: - // boolean isProperty() - // boolean getProperty() - // then #isProperty() takes precedence and we ignore #getProperty(); - // but only having #getProperty() is OK too - // (see the JavaBeans spec 1.01) - if (booleanGetter && methodHasValidSiblingIsMethod(methodAdapter, capitalizedAttributeName)) { - return false; // since the type also defines #isProperty(), ignore #getProperty() - } - return methodHasValidSiblingSetMethod(methodAdapter, capitalizedAttributeName, returnTypeName); - } - - /** - * Return whether the method's modifiers prevent it - * from being a getter or setter for a "persistent" property. - */ - private static boolean methodHasInvalidModifiers(SimpleMethodAdapter methodAdapter) { - int modifiers = methodAdapter.getModifiers(); - if (Modifier.isStatic(modifiers)) { - return true; - } - return false; - } - - private static boolean methodHasParameters(MethodAdapter methodAdapter) { - return methodAdapter.getParametersLength() != 0; - } - - /** - * Return whether the method has a sibling "is" method for the specified - * property and that method is valid for a "persistable" property. - * Pre-condition: the method is a "boolean getter" (e.g. 'public boolean getProperty()'); - * this prevents us from returning true when the method itself is an - * "is" method. - */ - private static boolean methodHasValidSiblingIsMethod(MethodAdapter methodAdapter, String capitalizedAttributeName) { - SimpleMethodAdapter isMethodAdapter = methodAdapter.getSibling("is" + capitalizedAttributeName); //$NON-NLS-1$ - return methodIsValidSibling(isMethodAdapter, "boolean"); //$NON-NLS-1$ - } - - /** - * Return whether the method has a sibling "set" method - * and that method is valid for a "persistable" property. - */ - private static boolean methodHasValidSiblingSetMethod(MethodAdapter methodAdapter, String capitalizedAttributeName, String parameterTypeErasureName) { - SimpleMethodAdapter setMethodAdapter = methodAdapter.getSibling("set" + capitalizedAttributeName, parameterTypeErasureName); //$NON-NLS-1$ - return methodIsValidSibling(setMethodAdapter, "void"); //$NON-NLS-1$ - } - - /** - * Return whether the specified method is a valid sibling with the - * specified return type. - */ - private static boolean methodIsValidSibling(SimpleMethodAdapter methodAdapter, String returnTypeName) { - if (methodAdapter == null) { - return false; - } - if (methodHasInvalidModifiers(methodAdapter)) { - return false; - } - if (methodAdapter.isConstructor()) { - return false; - } - String rtName = methodAdapter.getReturnTypeErasureName(); - if (rtName == null) { - return false; // DOM method bindings can have a null name - } - return rtName.equals(returnTypeName); - } - - /** - * Queries needed to calculate whether a method is "persistable". - * Adapted to IMethodBinding and IMethod. - */ - public interface SimpleMethodAdapter { - /** - * Return the method's modifiers. - * We use these to check whether the method is static, final, etc. - */ - int getModifiers(); - - /** - * Return the name of the method's return type erasure. - * We use this to check for - * - boolean getters - * - void return types - * - matching getters and setters - */ - String getReturnTypeErasureName(); - - /** - * Return whether the method is a constructor. - */ - boolean isConstructor(); - } - - /** - * Queries needed to calculate whether a method is "persistable". - * Adapted to IMethodBinding and IMethod. - */ - public interface MethodAdapter extends SimpleMethodAdapter { - /** - * Return the method's name. - * We use this to determine - * - whether the method is a "getter" - * - the property name implied by the getter's name - */ - String getName(); - - /** - * Return the number of paramters declared by the method. - * We use this to determine whether the method is a "getter". - */ - int getParametersLength(); - - /** - * Return the method's "sibling" with the specified name and no parameters. - * We use this to find an "is" boolean getter that would take precedence - * over a "get" boolean getter. - */ - SimpleMethodAdapter getSibling(String name); - - /** - * Return the method's "sibling" with the specified name and single parameter. - * We use this to find a matching "setter" for a possible "getter". - */ - SimpleMethodAdapter getSibling(String name, String parameterTypeErasureName); - } - - - // ********** suppressed constructor ********** - - /** - * Suppress default constructor, ensuring non-instantiability. - */ - private JPTTools() { - super(); - throw new UnsupportedOperationException(); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NameStringExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NameStringExpressionConverter.java deleted file mode 100644 index 5c9bc46dde..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NameStringExpressionConverter.java +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.Name; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; - -/** - * Convert a name to/from a string representation of a name/identifier - * (e.g. "com.xxx.Foo.VALUE1" or "value"). - */ -public final class NameStringExpressionConverter - extends AbstractExpressionConverter<String> -{ - private static final ExpressionConverter<String> INSTANCE = new NameStringExpressionConverter(); - - /** - * Return the singleton. - */ - public static ExpressionConverter<String> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private NameStringExpressionConverter() { - super(); - } - - @Override - protected Name convertObject(String string, AST ast) { - return ast.newName(string); - } - - @Override - protected String convertExpression(Expression expression) { - switch (expression.getNodeType()) { - case ASTNode.QUALIFIED_NAME: - case ASTNode.SIMPLE_NAME: - return ((Name) expression).getFullyQualifiedName(); - default: - return null; - } - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NestedDeclarationAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NestedDeclarationAnnotationAdapter.java deleted file mode 100644 index 17eb956055..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NestedDeclarationAnnotationAdapter.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.Annotation; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.MemberValuePair; -import org.eclipse.jdt.core.dom.SingleMemberAnnotation; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; - -/** - * Manipulate an annotation that is embedded as an element within - * another annotation, e.g. - * <pre> - * @Outer(foo=@Inner) - * private int id; - * outerAnnotationAdapter = AnnotationAdapter<@Outer> - * elementName = "foo" - * annotationName = "Inner" - * </pre> - */ -public class NestedDeclarationAnnotationAdapter - extends AbstractNestedDeclarationAnnotationAdapter -{ - // ********** constructors ********** - - /** - * The default element name is <code>value</code>. - */ - public NestedDeclarationAnnotationAdapter(DeclarationAnnotationAdapter outerAnnotationAdapter, String annotationName) { - super(outerAnnotationAdapter, annotationName); - } - - /** - * default behavior is to remove the outer annotation when it is empty - */ - public NestedDeclarationAnnotationAdapter(DeclarationAnnotationAdapter outerAnnotationAdapter, String elementName, String annotationName) { - super(outerAnnotationAdapter, elementName, annotationName); - } - - - // ********** AbstractNestedDeclarationAnnotationAdapter implementation ********** - - @Override - protected Annotation getAnnotation(Expression value) { - return this.annotationValue(value); - } - - @Override - protected Expression buildNewInnerExpression(Annotation inner) { - return inner; - } - - /** - * the annotation is the expression itself, so the annotation cannot be - * "removed" from itself - return 'false' - */ - @Override - protected boolean removeAnnotation(ModifiedDeclaration declaration, Annotation outer, Expression value) { - return false; - } - - /** - * <pre> - * @Outer("lorem ipsum") => @Outer(@Inner) - * </pre> - */ - @Override - protected void modifyAnnotationValue(SingleMemberAnnotation outer, Annotation inner) { - // replace(?) the current element value - outer.setValue(inner); - } - - /** - * Simply set the pair's value. - */ - @Override - protected void modifyMemberValuePair(MemberValuePair pair, Annotation inner) { - pair.setValue(inner); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NestedIndexedDeclarationAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NestedIndexedDeclarationAnnotationAdapter.java deleted file mode 100644 index acfd74372f..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NestedIndexedDeclarationAnnotationAdapter.java +++ /dev/null @@ -1,325 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import java.util.List; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Annotation; -import org.eclipse.jdt.core.dom.ArrayInitializer; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.MemberValuePair; -import org.eclipse.jdt.core.dom.NormalAnnotation; -import org.eclipse.jdt.core.dom.SingleMemberAnnotation; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.IndexedDeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; - -/** - * Manipulate an annotation that is embedded in an element array within - * another annotation, e.g. - * <pre> - * @Outer(foo={@Inner("zero"), @Inner("one"), @Inner("two")}) - * private int id; - * outerAnnotationAdapter = AnnotationAdapter<@Outer> - * elementName = "foo" - * index = 0-2 - * annotationName = "Inner" - * </pre> - */ -public class NestedIndexedDeclarationAnnotationAdapter - extends AbstractNestedDeclarationAnnotationAdapter - implements IndexedDeclarationAnnotationAdapter -{ - private int index; - - - // ********** constructors ********** - - /** - * The default element name is <code>value</code>. - */ - public NestedIndexedDeclarationAnnotationAdapter(DeclarationAnnotationAdapter annotationAdapter, int index, String annotationName) { - super(annotationAdapter, annotationName); - this.index = index; - } - - public NestedIndexedDeclarationAnnotationAdapter(DeclarationAnnotationAdapter annotationAdapter, String elementName, int index, String annotationName) { - super(annotationAdapter, elementName, annotationName); - this.index = index; - } - - - // ********** AbstractNestedDeclarationAnnotationAdapter implementation ********** - - @Override - protected Annotation getAnnotation(Expression value) { - if (value.getNodeType() == ASTNode.ARRAY_INITIALIZER) { - return this.annotation((ArrayInitializer) value); - } - return (this.index == 0) ? this.annotationValue(value) : null; - } - - @Override - protected Expression buildNewInnerExpression(Annotation inner) { - return (this.index == 0) ? inner : (Expression) this.buildNewInnerArrayInitializer(inner); - } - - @Override - protected boolean removeAnnotation(ModifiedDeclaration declaration, Annotation outer, Expression value) { - if (value.getNodeType() == ASTNode.ARRAY_INITIALIZER) { - this.removeAnnotation(declaration, outer, (ArrayInitializer) value); - return true; - } - // if our index is greater than zero, but we don't have an array, - // then the annotation must already be gone - return (this.index != 0); - } - - /** - * <pre> - * @Outer({@Inner(0), @Inner(1)}) => @Outer({@Inner(0), @Inner(1), @Inner(2)}) - * or - * @Outer("lorem ipsum") => @Outer(@Inner(0)) - * or - * @Outer(@Inner(0)) => @Outer({@Inner(0), @Inner(1)}) - * </pre> - */ - @Override - protected void modifyAnnotationValue(SingleMemberAnnotation outer, Annotation inner) { - this.modifyExpression(outer, SINGLE_MEMBER_ANNOTATION_EXPRESSION_PROVIDER, inner); - } - - /** - * <pre> - * @Outer(text="lorem ipsum") => @Outer(text="lorem ipsum", foo=@Inner(0)) - * or - * @Outer(foo={@Inner(0), @Inner(1)}) => @Outer(foo={@Inner(0), @Inner(1), @Inner(2)}) - * or - * @Outer(foo="lorem ipsum") => @Outer(foo=@Inner(0)) - * or - * @Outer(foo=@NotInner) => @Outer(foo=@Inner(0)) - * or - * @Outer(foo=@Inner(0)) => @Outer(foo={@Inner(0), @Inner(1)}) - * </pre> - */ - @Override - protected void modifyMemberValuePair(MemberValuePair pair, Annotation inner) { - this.modifyExpression(pair, MEMBER_VALUE_PAIR_EXPRESSION_PROVIDER, inner); - } - - - // ********** IndexedDeclarationAnnotationAdapter implementation ********** - - public int getIndex() { - return this.index; - } - - /** - * Move the annotation to the specified index, leaving its original - * position cleared out. - */ - public void moveAnnotation(int newIndex, ModifiedDeclaration declaration) { - int oldIndex = this.index; - if (newIndex == oldIndex) { - return; - } - - Annotation original = this.getAnnotation(declaration); - if (original == null) { - this.index = newIndex; - this.removeAnnotation(declaration); // clear out the new location (?) - } else { - Annotation copy = (Annotation) ASTNode.copySubtree(original.getAST(), original); - this.index = newIndex; - this.addAnnotation(declaration, copy); // install the copy in the new location - this.index = oldIndex; - this.removeAnnotation(declaration); // go back and clear out the original location (AFTER the move) - this.index = newIndex; - } - } - - - // ********** internal methods ********** - - /** - * Return the adapter's annotation from the specified array initializer. - */ - private Annotation annotation(ArrayInitializer value) { - List<Expression> expressions = this.expressions(value); - return (this.index >= expressions.size()) ? null : this.annotationValue(expressions.get(this.index)); - } - - /** - * Build a new array initializer to hold the specified annotation, - * padding it with 'null' literals as necessary - */ - private ArrayInitializer buildNewInnerArrayInitializer(Annotation inner) { - ArrayInitializer ai = inner.getAST().newArrayInitializer(); - this.addInnerToExpressions(inner, this.expressions(ai)); - return ai; - } - - /** - * Add the specified annotation to the specified array initializer, - * padding it with 'null' literals as necessary - */ - private void addInnerToExpressions(Annotation inner, List<Expression> expressions) { - if (expressions.size() > this.index) { - throw new IllegalStateException("expressions size is greater than index (size: " + expressions.size() + " index: " + this.index + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - while (expressions.size() < this.index) { - expressions.add(inner.getAST().newNullLiteral()); - } - expressions.add(inner); - } - - /** - * Remove the adapter's annotation from the specified array initializer. - */ - private void removeAnnotation(ModifiedDeclaration declaration, Annotation outer, ArrayInitializer value) { - List<Expression> expressions = this.expressions(value); - if (this.index >= expressions.size()) { - return; // avoid IndexOutOfBoundsException(?) - } - Annotation inner = this.annotationValue(expressions.get(this.index)); - if (inner == null) { - return; - } - if ( ! this.nameMatches(declaration, inner)) { - return; - } - if (this.index == (expressions.size() - 1)) { - expressions.remove(this.index); - } else { - expressions.set(this.index, value.getAST().newNullLiteral()); - } - this.trimExpressions(declaration, outer, expressions); - } - - /** - * Strip all the null literals off the end of the specified list of expressions - * and normalize the specified outer annotation. - */ - private void trimExpressions(ModifiedDeclaration declaration, Annotation outer, List<Expression> expressions) { - // start at the end of the list - for (int i = expressions.size(); i-- > 0; ) { - if (expressions.get(i).getNodeType() == ASTNode.NULL_LITERAL) { - expressions.remove(i); - } else { - break; // stop with the first non-null literal encountered - } - } - switch (expressions.size()) { - case 0: - this.removeElementAndNormalize(declaration, outer); - break; - case 1: - this.convertArrayToLastRemainingExpression(outer, expressions.get(0)); - break; - default: - break; - } - } - - /** - * When there is only a single element in an array initializer, convert the - * expression to be just the single element; e.g. - * <pre> - * @Foo(xxx={"abc"}) => @Foo(xxx="abc") - * or - * @Foo({"abc"}) => @Foo("abc") - * </pre> - */ - private void convertArrayToLastRemainingExpression(Annotation outer, Expression lastValue) { - lastValue = (Expression) ASTNode.copySubtree(lastValue.getAST(), lastValue); - if (outer.isNormalAnnotation()) { - this.memberValuePair((NormalAnnotation) outer).setValue(lastValue); - } else if (outer.isSingleMemberAnnotation()) { - ((SingleMemberAnnotation) outer).setValue(lastValue); - } else { - throw new IllegalArgumentException("unexpected annotation type: " + outer); //$NON-NLS-1$ - } - } - - /** - * Manipulate the specified expression appropriately. - * If it is an array initializer, add the specified annotation to it. - * If it is not, replace the expression or convert it into an array - * initializer. - */ - private void modifyExpression(ASTNode node, ExpressionProvider expProvider, Annotation inner) { - Expression value = expProvider.getExpression(node); - if (value.getNodeType() == ASTNode.ARRAY_INITIALIZER) { - // ignore the other entries in the array initializer(?) - they may not be matching Annotations... - List<Expression> expressions = this.expressions((ArrayInitializer) value); - if (this.index >= expressions.size()) { - this.addInnerToExpressions(inner, expressions); - } else { - expressions.set(this.index, inner); - } - } else { - if (this.index == 0) { - // replace whatever was there before - expProvider.setExpression(node, inner); - } else { - // convert to an array - ArrayInitializer ai = inner.getAST().newArrayInitializer(); - List<Expression> expressions = this.expressions(ai); - expressions.add((Expression) ASTNode.copySubtree(value.getAST(), value)); - this.addInnerToExpressions(inner, expressions); - expProvider.setExpression(node, ai); - } - } - } - - @SuppressWarnings("unchecked") - protected List<Expression> expressions(ArrayInitializer ai) { - return ai.expressions(); - } - - - // ********** expression providers ********** - - /** - * define interface that allows us to "re-use" the code in - * #modifyExpression(ASTNode, ExpressionProvider, Annotation) - */ - private interface ExpressionProvider { - Expression getExpression(ASTNode node); - void setExpression(ASTNode node, Expression expression); - } - - private static final ExpressionProvider MEMBER_VALUE_PAIR_EXPRESSION_PROVIDER = new ExpressionProvider() { - public Expression getExpression(ASTNode node) { - return ((MemberValuePair) node).getValue(); - } - public void setExpression(ASTNode node, Expression expression) { - ((MemberValuePair) node).setValue(expression); - } - @Override - public String toString() { - return "MemberValuePairExpressionProvider"; //$NON-NLS-1$ - } - }; - - private static final ExpressionProvider SINGLE_MEMBER_ANNOTATION_EXPRESSION_PROVIDER = new ExpressionProvider() { - public Expression getExpression(ASTNode node) { - return ((SingleMemberAnnotation) node).getValue(); - } - public void setExpression(ASTNode node, Expression expression) { - ((SingleMemberAnnotation) node).setValue(expression); - } - @Override - public String toString() { - return "SingleMemberAnnotationExpressionProvider"; //$NON-NLS-1$ - } - }; - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullAnnotationEditFormatter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullAnnotationEditFormatter.java deleted file mode 100644 index 284e9379b4..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullAnnotationEditFormatter.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.text.edits.MalformedTreeException; -import org.eclipse.text.edits.TextEdit; - -public final class NullAnnotationEditFormatter - implements AnnotationEditFormatter -{ - - private static final NullAnnotationEditFormatter INSTANCE = new NullAnnotationEditFormatter(); - - /** - * Return the singleton. - */ - public static AnnotationEditFormatter instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private NullAnnotationEditFormatter() { - super(); - } - - public void format(IDocument doc, TextEdit editTree) throws MalformedTreeException, BadLocationException { - // no formatting - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullDeclarationAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullDeclarationAnnotationAdapter.java deleted file mode 100644 index c9fe2d94e4..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullDeclarationAnnotationAdapter.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Annotation; -import org.eclipse.jdt.core.dom.MarkerAnnotation; -import org.eclipse.jdt.core.dom.NormalAnnotation; -import org.eclipse.jdt.core.dom.SingleMemberAnnotation; -import org.eclipse.jpt.common.core.utility.jdt.IndexedDeclarationAnnotationAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; - -/** - * Behaviorless implementation. - */ -public final class NullDeclarationAnnotationAdapter - implements IndexedDeclarationAnnotationAdapter -{ - - // singleton - private static final NullDeclarationAnnotationAdapter INSTANCE = new NullDeclarationAnnotationAdapter(); - - /** - * Return the singleton. - */ - public static IndexedDeclarationAnnotationAdapter instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private NullDeclarationAnnotationAdapter() { - super(); - } - - - // ********** DeclarationAnnotationAdapter implementation ********** - - public Annotation getAnnotation(ModifiedDeclaration declaration) { - return null; - } - - public MarkerAnnotation newMarkerAnnotation(ModifiedDeclaration declaration) { - return null; - } - - public SingleMemberAnnotation newSingleMemberAnnotation(ModifiedDeclaration declaration) { - return null; - } - - public NormalAnnotation newNormalAnnotation(ModifiedDeclaration declaration) { - return null; - } - - public void removeAnnotation(ModifiedDeclaration declaration) { - // do nothing - } - - public ASTNode getAstNode(ModifiedDeclaration declaration) { - return declaration.getDeclaration(); - } - - - // ********** IndexedDeclarationAnnotationAdapter implementation ********** - - public int getIndex() { - return -1; - } - - public void moveAnnotation(int newIndex, ModifiedDeclaration declaration) { - // do nothing - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullDeclarationAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullDeclarationAnnotationElementAdapter.java deleted file mode 100644 index dd3e616a2d..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullDeclarationAnnotationElementAdapter.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; - -/** - * Behaviorless implementation. - */ -public class NullDeclarationAnnotationElementAdapter<T> - implements DeclarationAnnotationElementAdapter<T> -{ - - // singleton - @SuppressWarnings("rawtypes") - private static final DeclarationAnnotationElementAdapter INSTANCE - = new NullDeclarationAnnotationElementAdapter(); - - /** - * Return the singleton. - */ - @SuppressWarnings("unchecked") - public static <S> DeclarationAnnotationElementAdapter<S> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private NullDeclarationAnnotationElementAdapter() { - super(); - } - - public T getValue(ModifiedDeclaration declaration) { - return null; - } - - public void setValue(T value, ModifiedDeclaration declaration) { - // do nothing - } - - public ASTNode getAstNode(ModifiedDeclaration declaration) { - return declaration.getDeclaration(); - } - - public Expression getExpression(ModifiedDeclaration declaration) { - return null; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullExpressionConverter.java deleted file mode 100644 index 8245a74a34..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NullExpressionConverter.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * No conversion. - */ -public final class NullExpressionConverter - implements ExpressionConverter<Expression> -{ - - // singleton - private static final ExpressionConverter<Expression> INSTANCE = new NullExpressionConverter(); - - /** - * Return the singleton. - */ - public static ExpressionConverter<Expression> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private NullExpressionConverter() { - super(); - } - - public Expression convert(Expression expression, AST ast) { - return expression; - } - - public Expression convert(Expression expression) { - return expression; - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NumberIntegerExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NumberIntegerExpressionConverter.java deleted file mode 100644 index 775d2d705a..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/NumberIntegerExpressionConverter.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.NumberLiteral; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; - -/** - * Convert a number literal to/from an Integer - * (e.g. 5). - */ -public final class NumberIntegerExpressionConverter - extends AbstractExpressionConverter<Integer> -{ - private static final ExpressionConverter<Integer> INSTANCE = new NumberIntegerExpressionConverter(); - - /** - * Return the singleton. - */ - public static ExpressionConverter<Integer> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private NumberIntegerExpressionConverter() { - super(); - } - - @Override - protected NumberLiteral convertObject(Integer integer, AST ast) { - return ast.newNumberLiteral(integer.toString()); - } - - @Override - protected Integer convertExpression(Expression expression) { - Object value = expression.resolveConstantExpressionValue(); - return (value instanceof Integer) ? ((Integer) value) : null; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/PrimitiveTypeStringExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/PrimitiveTypeStringExpressionConverter.java deleted file mode 100644 index 7b17501e51..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/PrimitiveTypeStringExpressionConverter.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.PrimitiveType; -import org.eclipse.jdt.core.dom.TypeLiteral; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; - -/** - * Convert a type literal to/from a string representation of a primitive type - * (e.g. "int"). - */ -public final class PrimitiveTypeStringExpressionConverter - extends AbstractExpressionConverter<String> -{ - private static final ExpressionConverter<String> INSTANCE = new PrimitiveTypeStringExpressionConverter(); - - /** - * Return the singleton. - */ - public static ExpressionConverter<String> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private PrimitiveTypeStringExpressionConverter() { - super(); - } - - @Override - protected TypeLiteral convertObject(String string, AST ast) { - org.eclipse.jdt.core.dom.Type type = ast.newPrimitiveType(PrimitiveType.toCode(string)); - TypeLiteral typeLiteral = ast.newTypeLiteral(); - typeLiteral.setType(type); - return typeLiteral; - } - - @Override - protected String convertExpression(Expression expression) { - if (expression.getNodeType() == ASTNode.TYPE_LITERAL) { - org.eclipse.jdt.core.dom.Type type = ((TypeLiteral) expression).getType(); - if (type.getNodeType() == ASTNode.PRIMITIVE_TYPE) { - return ((PrimitiveType) type).getPrimitiveTypeCode().toString(); - } - } - return null; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ShortCircuitAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ShortCircuitAnnotationElementAdapter.java deleted file mode 100644 index c9ee5748c8..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ShortCircuitAnnotationElementAdapter.java +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2010 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Wrap another annotation element adapter and short-circuit the - * #setValue method if the value has not changed. - */ -public class ShortCircuitAnnotationElementAdapter<T> - implements AnnotationElementAdapter<T> -{ - /** the wrapped adapter */ - private final AnnotationElementAdapter<T> adapter; - - - // ********** constructor ********** - - public ShortCircuitAnnotationElementAdapter(AnnotatedElement annotatedElement, DeclarationAnnotationElementAdapter<T> daea) { - this(new AnnotatedElementAnnotationElementAdapter<T>(annotatedElement, daea)); - } - - public ShortCircuitAnnotationElementAdapter(AnnotationElementAdapter<T> adapter) { - super(); - this.adapter = adapter; - } - - - // ********** AnnotationElementAdapter implementation ********** - - public T getValue() { - return this.adapter.getValue(); - } - - public T getValue(CompilationUnit astRoot) { - return this.adapter.getValue(astRoot); - } - - public void setValue(T value) { - this.setValue(this.adapter.getValue(), value); - } - - public Expression getExpression(CompilationUnit astRoot) { - return this.adapter.getExpression(astRoot); - } - - public ASTNode getAstNode(CompilationUnit astRoot) { - return this.adapter.getAstNode(astRoot); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.adapter); - } - - - // ********** internal methods ********** - - /** - * set the adapter's value to the specified new value if it - * is different from the specified old value - */ - protected void setValue(T oldValue, T newValue) { - if (oldValue == null) { - if (newValue == null) { // null => null - // do nothing - } else { // null => object - this.adapter.setValue(newValue); - } - } else { - if (newValue == null) { // object => null - this.adapter.setValue(null); - } else { // object => object - if (this.valuesAreEqual(oldValue, newValue)) { - // do nothing - } else { - this.adapter.setValue(newValue); - } - } - } - } - - /** - * both values are non-null when this method is called - */ - protected boolean valuesAreEqual(T oldValue, T newValue) { - return newValue.equals(oldValue); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ShortCircuitArrayAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ShortCircuitArrayAnnotationElementAdapter.java deleted file mode 100644 index 0676bc2840..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/ShortCircuitArrayAnnotationElementAdapter.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.common.core.internal.utility.jdt; - -import java.util.Arrays; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationElementAdapter; -import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationElementAdapter; - -/** - * Wrap another annotation element adapter and short-circuit the - * #setValue method if the value has not changed. Overrides #valuesAreEqual() - * to check equality on arrays - */ -public class ShortCircuitArrayAnnotationElementAdapter<T> - extends ShortCircuitAnnotationElementAdapter<T[]> -{ - // ********** constructor ********** - - public ShortCircuitArrayAnnotationElementAdapter(AnnotatedElement annotatedElement, DeclarationAnnotationElementAdapter<T[]> daea) { - super(annotatedElement, daea); - } - - public ShortCircuitArrayAnnotationElementAdapter(AnnotationElementAdapter<T[]> adapter) { - super(adapter); - } - - - // ********** AnnotationElementAdapter implementation ********** - - @Override - protected boolean valuesAreEqual(T[] oldValue, T[] newValue) { - return Arrays.equals(newValue, oldValue); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/SimpleDeclarationAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/SimpleDeclarationAnnotationAdapter.java deleted file mode 100644 index 195dc197ec..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/SimpleDeclarationAnnotationAdapter.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Annotation; -import org.eclipse.jpt.common.core.utility.jdt.ModifiedDeclaration; - -/** - * Manipulate an annotation with a specific name, e.g. - * <pre> - * @Foo - * private int id; - * </pre> - * - * NB: - * If the declaration contains more than one annotation with the same - * name, the adapter will correspond to the first annotation with the specified - * name. (Also note that the compiler will not allow a declaration to be - * modified by multiple annotations with the same name, i.e. of the same type; - * so if there *are* multiple annotations of the same type, there are bigger - * problems to worry about than which annotation the adapter manipulates.) - */ -public class SimpleDeclarationAnnotationAdapter extends AbstractDeclarationAnnotationAdapter { - - - // ********** constructors ********** - - public SimpleDeclarationAnnotationAdapter(String annotationName) { - super(annotationName); - } - - - // ********** DeclarationAnnotationAdapter implementation ********** - - public Annotation getAnnotation(ModifiedDeclaration declaration) { - return declaration.getAnnotationNamed(this.getAnnotationName()); - } - - public void removeAnnotation(ModifiedDeclaration declaration) { - declaration.removeAnnotationNamed(this.getAnnotationName()); - } - - @Override - protected void addAnnotation(ModifiedDeclaration declaration, Annotation annotation) { - declaration.replaceAnnotationNamed(this.getAnnotationName(), annotation); - } - - public ASTNode getAstNode(ModifiedDeclaration declaration) { - // if the annotation is missing, return the declaration - Annotation annotation = this.getAnnotation(declaration); - return (annotation != null) ? annotation : declaration.getDeclaration(); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/SimpleTypeStringExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/SimpleTypeStringExpressionConverter.java deleted file mode 100644 index 156dc5fa73..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/SimpleTypeStringExpressionConverter.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.Name; -import org.eclipse.jdt.core.dom.SimpleType; -import org.eclipse.jdt.core.dom.TypeLiteral; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; - -/** - * Convert a type literal to/from a string representation of a simple type - * (e.g. "java.lang.Object"). - */ -public final class SimpleTypeStringExpressionConverter - extends AbstractExpressionConverter<String> -{ - private static final ExpressionConverter<String> INSTANCE = new SimpleTypeStringExpressionConverter(); - - /** - * Return the singleton. - */ - public static ExpressionConverter<String> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private SimpleTypeStringExpressionConverter() { - super(); - } - - @Override - protected TypeLiteral convertObject(String string, AST ast) { - Name name = ast.newName(string); - org.eclipse.jdt.core.dom.Type type = ast.newSimpleType(name); - TypeLiteral typeLiteral = ast.newTypeLiteral(); - typeLiteral.setType(type); - return typeLiteral; - } - - @Override - protected String convertExpression(Expression expression) { - if (expression.getNodeType() == ASTNode.TYPE_LITERAL) { - org.eclipse.jdt.core.dom.Type type = ((TypeLiteral) expression).getType(); - if (type.getNodeType() == ASTNode.SIMPLE_TYPE) { - return ((SimpleType) type).getName().getFullyQualifiedName(); - } - } - return null; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/StringArrayExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/StringArrayExpressionConverter.java deleted file mode 100644 index 060e2cb52d..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/StringArrayExpressionConverter.java +++ /dev/null @@ -1,116 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core.internal.utility.jdt; - -import java.util.List; -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.ArrayInitializer; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; -import org.eclipse.jpt.common.core.utility.jdt.IndexedExpressionConverter; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Convert an array initializer to/from an array of strings - * (e.g. <code>{"text0", "text1"}</code>). - * <p> - * Do <em>not</em> use this class for converting array initializers in - * annotation elements: - * Java5 has a bit of syntactic sugar that allows a single-element array - * initializer to not have curly braces. This converter will return - * an empty array if it encounters anything other than an array initializer. - * Use {@link AnnotationStringArrayExpressionConverter} for converting - * annotation elements. - * <p> - * Invalid entries in the array initializer will result in <code>null</code> - * elements in the resulting string array. This allows clients to manipulate - * elements at the appropriate index. - */ -public class StringArrayExpressionConverter - extends AbstractExpressionConverter<String[]> - implements IndexedExpressionConverter<String> -{ - private final ExpressionConverter<String> elementConverter; - private final boolean removeArrayInitializerWhenEmpty; - - - /** - * The default behavior is to remove the array initializer if it is empty. - */ - public StringArrayExpressionConverter(ExpressionConverter<String> elementConverter) { - this(elementConverter, true); - } - - public StringArrayExpressionConverter(ExpressionConverter<String> elementConverter, boolean removeArrayInitializerWhenEmpty) { - super(); - this.elementConverter = elementConverter; - this.removeArrayInitializerWhenEmpty = removeArrayInitializerWhenEmpty; - } - - /** - * This method is non-<code>private</code> so it can be called by - * {@link AnnotationStringArrayExpressionConverter} - */ - @Override - protected ArrayInitializer convertObject(String[] strings, AST ast) { - if ((strings.length == 0) && this.removeArrayInitializerWhenEmpty) { - return null; - } - ArrayInitializer arrayInitializer = ast.newArrayInitializer(); - List<Expression> expressions = this.expressions(arrayInitializer); - for (String string : strings) { - expressions.add(this.elementConverter.convert(string, ast)); - } - return arrayInitializer; - } - - @SuppressWarnings("unchecked") - private List<Expression> expressions(ArrayInitializer arrayInitializer) { - return arrayInitializer.expressions(); - } - - /** - * This method is non-<code>private</code> so it can be called by - * {@link AnnotationStringArrayExpressionConverter} - */ - @Override - protected String[] convertNull() { - return StringTools.EMPTY_STRING_ARRAY; - } - - @Override - protected String[] convertExpression(Expression expression) { - return (expression.getNodeType() == ASTNode.ARRAY_INITIALIZER) ? - this.convertArrayInitializer((ArrayInitializer) expression) : - StringTools.EMPTY_STRING_ARRAY; - } - - /** - * This method is non-<code>private</code> so it can be called by - * {@link AnnotationStringArrayExpressionConverter} - */ - String[] convertArrayInitializer(ArrayInitializer arrayInitializer) { - List<Expression> expressions = this.expressions(arrayInitializer); - int len = expressions.size(); - String[] strings = new String[len]; - for (int i = len; i-- > 0; ) { - strings[i] = this.elementConverter.convert(expressions.get(i)); - } - return strings; - } - - public Expression selectExpression(Expression expression, int index) { - if (expression.getNodeType() == ASTNode.ARRAY_INITIALIZER) { - return this.expressions((ArrayInitializer) expression).get(index); - } - throw new ArrayIndexOutOfBoundsException(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/StringExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/StringExpressionConverter.java deleted file mode 100644 index f0e88b5331..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/StringExpressionConverter.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.StringLiteral; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; - -/** - * Convert a string literal to/from a string (e.g. "text"). - */ -public final class StringExpressionConverter - extends AbstractExpressionConverter<String> -{ - private static final ExpressionConverter<String> INSTANCE = new StringExpressionConverter(); - - /** - * Return the singleton. - */ - public static ExpressionConverter<String> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private StringExpressionConverter() { - super(); - } - - @Override - protected StringLiteral convertObject(String string, AST ast) { - StringLiteral stringLiteral = ast.newStringLiteral(); - stringLiteral.setLiteralValue(string); - return stringLiteral; - } - - @Override - protected String convertExpression(Expression expression) { - Object value = expression.resolveConstantExpressionValue(); - return (value instanceof String) ? (String) value : null; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/TypeStringExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/TypeStringExpressionConverter.java deleted file mode 100644 index 3ed1b74189..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/jdt/TypeStringExpressionConverter.java +++ /dev/null @@ -1,55 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008 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.common.core.internal.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.Expression; -import org.eclipse.jdt.core.dom.PrimitiveType; -import org.eclipse.jdt.core.dom.TypeLiteral; -import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter; - -/** - * Convert a type literal to/from a string representation of a - * simple type (e.g. "java.lang.Object") or primitive type (e.g. "int"). - */ -public final class TypeStringExpressionConverter - extends AbstractExpressionConverter<String> -{ - private static final ExpressionConverter<String> INSTANCE = new TypeStringExpressionConverter(); - - /** - * Return the singleton. - */ - public static ExpressionConverter<String> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private TypeStringExpressionConverter() { - super(); - } - - @Override - protected TypeLiteral convertObject(String string, AST ast) { - if (PrimitiveType.toCode(string) != null) { - return (TypeLiteral) PrimitiveTypeStringExpressionConverter.instance().convert(string, ast); - } - return (TypeLiteral) SimpleTypeStringExpressionConverter.instance().convert(string, ast); - } - - @Override - protected String convertExpression(Expression expression) { - String name = SimpleTypeStringExpressionConverter.instance().convert(expression); - return name != null ? name : PrimitiveTypeStringExpressionConverter.instance().convert(expression); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/BooleanTranslator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/BooleanTranslator.java deleted file mode 100644 index 7f2825c1a3..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/BooleanTranslator.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2009 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.common.core.internal.utility.translators; - -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.wst.common.internal.emf.resource.Translator; - -public class BooleanTranslator - extends Translator -{ - public BooleanTranslator(String domPathAndNames, EStructuralFeature structuralFeature) { - super(domPathAndNames, structuralFeature, BOOLEAN_FEATURE | BOOLEAN_LOWERCASE); - } - - public BooleanTranslator(String domPathAndNames, EStructuralFeature structuralFeature, int style) { - super(domPathAndNames, structuralFeature, BOOLEAN_FEATURE | BOOLEAN_LOWERCASE | style); - } - - @Override - public Object convertStringToValue(String string, EObject owner) { - return Boolean.valueOf(string); - } - - @Override - public String convertValueToString(Object value, EObject owner) { - return ((Boolean) value).toString(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/EmptyTagBooleanTranslator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/EmptyTagBooleanTranslator.java deleted file mode 100644 index 1d94705cca..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/EmptyTagBooleanTranslator.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2010 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.common.core.internal.utility.translators; - -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.wst.common.internal.emf.resource.Translator; - -/** - * This translator is to be used for empty xml tags that correspond - * to a boolean attribute in the emf model. - * cascade-persist is an example from the orm.xsd: - * - * <persistence-unit-defaults> - * <cascade-persist/> - * </persistence-unit-defaults> ==> cascadePersist == true - * - * vs. - * - * <persistence-unit-defaults> - * </persistence-unit-defaults> ==> cascadePersist == false - * - */ -public class EmptyTagBooleanTranslator - extends Translator -{ - public EmptyTagBooleanTranslator(String domPathAndNames, EStructuralFeature structuralFeature) { - this(domPathAndNames, structuralFeature, NO_STYLE); - } - - public EmptyTagBooleanTranslator(String domPathAndNames, EStructuralFeature structuralFeature, int style) { - super(domPathAndNames, structuralFeature, style | EMPTY_TAG | BOOLEAN_FEATURE); - } - - @Override - public Object getMOFValue(EObject mofObject) { - // I am overriding this method. This is so the tag will be removed when - // the value is false. - // I'm not sure if this is a bug in the ecore or maybe in the translators, - // but I really don't think that we should have to depend on the boolean - // being "unset" to remove the tag. - Boolean value = (Boolean) super.getMOFValue(mofObject); - return (value == null) ? null : value.booleanValue() ? value : null; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/EnumeratedValueTranslator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/EnumeratedValueTranslator.java deleted file mode 100644 index fc74b4a730..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/EnumeratedValueTranslator.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 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.common.core.internal.utility.translators; - -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.wst.common.internal.emf.resource.Translator; - -public abstract class EnumeratedValueTranslator - extends Translator -{ - public EnumeratedValueTranslator(String domPathAndNames, EStructuralFeature structuralFeature) { - super(domPathAndNames, structuralFeature); - } - - public EnumeratedValueTranslator(String domPathAndNames, EStructuralFeature structuralFeature, int style) { - super(domPathAndNames, structuralFeature, style); - } - - - protected abstract Iterable<?> getEnumeratedObjectValues(); - - @Override - public Object convertStringToValue(String string, EObject owner) { - for (Object each : getEnumeratedObjectValues()) { - if (each.toString().equals(string)) { - return each; - } - } - return null; - } - - @Override - public String convertValueToString(Object value, EObject owner) { - return value.toString(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/SimpleRootTranslator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/SimpleRootTranslator.java deleted file mode 100644 index 08c20d3b1d..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/SimpleRootTranslator.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009 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.common.core.internal.utility.translators; - -import org.eclipse.emf.ecore.EClass; -import org.eclipse.jpt.common.utility.internal.ArrayTools; -import org.eclipse.wst.common.internal.emf.resource.RootTranslator; -import org.eclipse.wst.common.internal.emf.resource.Translator; - -/** - * Root translator that contains a list of child translators and no special - * behavior. - */ -public class SimpleRootTranslator - extends RootTranslator -{ - protected Translator[] children; - - public SimpleRootTranslator(String domPathAndNames, EClass eClass) { - super(domPathAndNames, eClass); - } - - public SimpleRootTranslator(String domPathAndNames, EClass eClass, Translator[] children) { - super(domPathAndNames, eClass); - this.children = children; - } - - /** - * Widen method access to 'public'. - */ - @Override - public Translator[] getChildren() { - return this.children; - } - - protected Translator[] getChildren_() { - return (this.children == null) ? EMPTY_TRANSLATOR_ARRAY : this.children; - } - protected static final Translator[] EMPTY_TRANSLATOR_ARRAY = new Translator[0]; - - /** - * Set the translator's children. - * Return the translator. - */ - public void setChildren(Translator[] children) { - this.children = children; - } - - /** - * Add the specified translator to the translator's list of children. - * Return the translator for method chaining. - */ - public SimpleRootTranslator addChild(Translator translator) { - this.children = ArrayTools.add(this.getChildren_(), translator); - return this; - } - - /** - * Add the specified translators to the translator's list of children. - * Return the translator for method chaining. - */ - public SimpleRootTranslator addChildren(Translator[] translators) { - this.children = ArrayTools.addAll(this.getChildren_(), translators); - return this; - } - - /** - * Remove the specified translator from the translator's list of children. - * Return the translator for method chaining. - */ - public SimpleRootTranslator removeChild(Translator translator) { - this.children = ArrayTools.remove(this.children, translator); - return this; - } - - /** - * Remove the specified translators from the translator's list of children. - * Return the translator for method chaining. - */ - public SimpleRootTranslator removeChildren(Translator[] translators) { - this.children = ArrayTools.removeAll(this.children, (Object[]) translators); - return this; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/SimpleTranslator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/SimpleTranslator.java deleted file mode 100644 index 20db025e8a..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/translators/SimpleTranslator.java +++ /dev/null @@ -1,135 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009 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.common.core.internal.utility.translators; - -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.jpt.common.utility.internal.ArrayTools; -import org.eclipse.wst.common.internal.emf.resource.Translator; -import org.eclipse.wst.common.internal.emf.resource.TranslatorPath; - -/** - * Translator that contains a list of child translators and no special - * behavior. - */ -public class SimpleTranslator - extends Translator -{ - protected Translator[] children; - - - // ********** constructors ********** - - public SimpleTranslator(String domPathAndNames, EClass eClass) { - super(domPathAndNames, eClass); - } - - public SimpleTranslator(String domPathAndNames, EStructuralFeature eStructuralFeature) { - super(domPathAndNames, eStructuralFeature); - } - - public SimpleTranslator(String domPathAndNames, EStructuralFeature eStructuralFeature, Translator[] children) { - super(domPathAndNames, eStructuralFeature); - this.children = children; - } - - public SimpleTranslator(String domPathAndNames, EStructuralFeature eStructuralFeature, EClass eClass) { - super(domPathAndNames, eStructuralFeature, eClass); - } - - public SimpleTranslator(String domPathAndNames, EStructuralFeature eStructuralFeature, EClass eClass, Translator[] children) { - super(domPathAndNames, eStructuralFeature, eClass); - this.children = children; - } - - public SimpleTranslator(String domPathAndNames, EStructuralFeature eStructuralFeature, TranslatorPath translatorPath) { - super(domPathAndNames, eStructuralFeature, translatorPath); - } - - public SimpleTranslator(String domPathAndNames, EStructuralFeature eStructuralFeature, TranslatorPath[] translatorPaths) { - super(domPathAndNames, eStructuralFeature, translatorPaths); - } - - public SimpleTranslator(String domPathAndNames, EStructuralFeature eStructuralFeature, int style) { - super(domPathAndNames, eStructuralFeature, style); - } - - public SimpleTranslator(String domPathAndNames, EStructuralFeature aFeature, int style, EClass eClass, Translator[] children) { - this(domPathAndNames, aFeature, style); - setEMFClass(eClass); - this.children = children; - } - - public SimpleTranslator(String domPathAndNames, EStructuralFeature eStructuralFeature, int style, Translator[] children) { - super(domPathAndNames, eStructuralFeature, style); - this.children = children; - } - - - // ********** children ********** - - /** - * Widen method access to 'public'. - */ - @Override - public Translator[] getChildren() { - return this.children; - } - - protected Translator[] getChildren_() { - return (this.children == null) ? EMPTY_TRANSLATOR_ARRAY : this.children; - } - protected static final Translator[] EMPTY_TRANSLATOR_ARRAY = new Translator[0]; - - /** - * Set the translator's children. - * Return the translator. - */ - public void setChildren(Translator[] children) { - this.children = children; - } - - /** - * Add the specified translator to the translator's list of children. - * Return the translator for method chaining. - */ - public SimpleTranslator addChild(Translator translator) { - this.children = ArrayTools.add(this.getChildren_(), translator); - return this; - } - - /** - * Add the specified translators to the translator's list of children. - * Return the translator for method chaining. - */ - public SimpleTranslator addChildren(Translator[] translators) { - this.children = ArrayTools.addAll(this.getChildren_(), translators); - return this; - } - - /** - * Remove the specified translator from the translator's list of children. - * Return the translator for method chaining. - */ - public SimpleTranslator removeChild(Translator translator) { - this.children = ArrayTools.remove(this.children, translator); - return this; - } - - /** - * Remove the specified translators from the translator's list of children. - * Return the translator for method chaining. - */ - public SimpleTranslator removeChildren(Translator[] translators) { - this.children = ArrayTools.removeAll(this.children, (Object[]) translators); - return this; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/libprov/JptLibraryProviderInstallOperationConfig.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/libprov/JptLibraryProviderInstallOperationConfig.java deleted file mode 100644 index 3e524487f7..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/libprov/JptLibraryProviderInstallOperationConfig.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.libprov; - -import org.eclipse.jst.common.project.facet.core.libprov.ILibraryProvider; -import org.eclipse.wst.common.project.facet.core.IFacetedProjectBase; -import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion; - -/** - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface JptLibraryProviderInstallOperationConfig { - - IFacetedProjectBase getFacetedProject(); - - ILibraryProvider getLibraryProvider(); - - IProjectFacetVersion getProjectFacetVersion(); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/libval/LibraryValidator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/libval/LibraryValidator.java deleted file mode 100644 index af15c438ce..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/libval/LibraryValidator.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.libval; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.jpt.common.core.libprov.JptLibraryProviderInstallOperationConfig; - -/** - * Interface for extender-supplied library validators. - * Each library validator must have a zero-arg constructor. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface LibraryValidator { - - IStatus validate(JptLibraryProviderInstallOperationConfig config); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/ProjectResourceLocator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/ProjectResourceLocator.java deleted file mode 100644 index e8c05d6045..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/ProjectResourceLocator.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.resource; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.IPath; - -/** - * Implementations of this interface can be retrieved via the Adapter framework: - * <pre> - * IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("Foo Project"); - * ProjectResourceLocator locator = (ProjectResourceLocator) project.getAdapter(ProjectResourceLocator.class); - * </pre> - * <p> - * See <code>org.eclipse.jpt.common.core/plugin.xml</code>. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.2 - * @since 3.2 - * @see org.eclipse.jpt.common.core.internal.resource.ProjectAdapterFactory - */ -public interface ProjectResourceLocator { - /** - * Return whether the specified container is an acceptable (non-Java) - * resource location for the locator's project. - */ - boolean resourceLocationIsValid(IContainer container); - - /** - * Return the default location in which to create new (non-Java) resources. - */ - IContainer getDefaultResourceLocation(); - - /** - * Return the workspace relative absolute resource path best represented by - * the specified runtime path for the locator's project. - */ - IPath getResourcePath(IPath runtimePath); - - /** - * Return the runtime path best represented by the specified workspace - * relative absolute resource path for the locator's project. - */ - IPath getRuntimePath(IPath resourcePath); - - /** - * Return an {@link IFile} that best represents the specified runtime - * location. - */ - IFile getPlatformFile(IPath runtimePath); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/ResourceLocator.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/ResourceLocator.java deleted file mode 100644 index fcb82ba6c7..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/ResourceLocator.java +++ /dev/null @@ -1,55 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.resource; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IPath; - -/** - * Client-defined resource locator. - * <p> - * See <code>org.eclipse.jpt.common.core/plugin.xml</code>. - * <p> - * See <code>org.eclipse.jpt.common.core/schema/resourceLocators.exsd</code>. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface ResourceLocator { - /** - * Return whether the specified container is an acceptable (non-Java) - * resource location for the specified project. - */ - boolean resourceLocationIsValid(IProject project, IContainer container); - - /** - * Return the default location in which to create new (non-Java) resources. - */ - IContainer getDefaultResourceLocation(IProject project); - - /** - * Return the workspace relative absolute resource path best represented by - * the specified runtime path for the specified project. - */ - IPath getResourcePath(IProject project, IPath runtimePath); - - /** - * Return the runtime path best represented by the specified workspace - * relative absolute resource path for the specified project. - */ - IPath getRuntimePath(IProject project, IPath resourcePath); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/Annotation.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/Annotation.java deleted file mode 100644 index a4cd5e0352..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/Annotation.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.resource.java; - -import org.eclipse.jdt.core.dom.CompilationUnit; - -/** - * Common Java resource annotation behavior - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface Annotation - extends JavaResourceNode -{ - /** - * Return the annotation's fully qualified name, as opposed to the value of - * the annotation's 'name' element. For example: - * @com.foo.Bar(name="Thomas") - * #getAnnotationName() will return "com.foo.Bar". - * In typical subclasses, #getName() would return "Thomas". - */ - String getAnnotationName(); - - /** - * Return the corresponding JDT DOM annotation from the specified - * AST compilation unit. - */ - org.eclipse.jdt.core.dom.Annotation getAstAnnotation(CompilationUnit astRoot); - - /** - * Create and add the corresponding Java annotation to the JDT DOM. - */ - void newAnnotation(); - - /** - * Remove the corresponding Java annotation from the JDT DOM. - */ - void removeAnnotation(); - - /** - * Return whether all the annotation's member values are <code>null</code>; - * implying the annotation can be removed if it has no semantic value as a - * marker annotation. - */ - boolean isUnset(); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/AnnotationDefinition.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/AnnotationDefinition.java deleted file mode 100644 index 9df453ed8a..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/AnnotationDefinition.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 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.common.core.resource.java; - -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; - -/** - * Used to build Annotations discovered in the Java source code. - * To provide new AnnotationDefinitions, create a new JaxbPlatform - * by implementing JaxbPlatformDefinition. - * - * @see Annotation - * @see org.eclipse.jpt.jaxb.core.platform.JaxbPlatformDefinition - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface AnnotationDefinition -{ - /** - * Return the name of the annotation the definition will build in the - * various #build...(...) methods. - */ - String getAnnotationName(); - - /** - * Build and return an annotation for the specified annotated element. - */ - Annotation buildAnnotation(JavaResourceAnnotatedElement parent, AnnotatedElement annotatedElement); - - /** - * Build and return an annotation for the specified JDT annotation - * on the specified annotated element. - */ - Annotation buildAnnotation(JavaResourceAnnotatedElement parent, IAnnotation jdtAnnotation); - - /** - * Build and return a "null" annotation for the specified annotated element. - * Only certain annotations are required to have "null" implementations; - * typically the annotations with reasonably complex default behavior. - * The "null" annotation is used by the corresponding default context model. - * The "null" annotation simplifies the context model code, allowing the - * context model to simply set various bits of state (e.g. 'name') and the - * "null" annotation will create a new "real" annotation and forward the - * new state to it. This reduces the number of null checks in the context - * model (hopefully). - */ - Annotation buildNullAnnotation(JavaResourceAnnotatedElement parent); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceAbstractType.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceAbstractType.java deleted file mode 100644 index c228a6e8c6..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceAbstractType.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.resource.java; - -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; - -/** - * Java source code or binary type. This corresponds to a {@link AbstractTypeDeclaration} - * (which is why the name is somewhat wonky.) - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface JavaResourceAbstractType - extends JavaResourceMember { - - /** - * Property change String for the unqualified (short) type name. - * @see JavaResourceMember#getName() - */ - String NAME_PROPERTY = "name"; //$NON-NLS-1$ - - /** - * Return the fully qualified type name. - */ - String getQualifiedName(); - String QUALIFIED_NAME_PROPERTY = "qualifiedName"; //$NON-NLS-1$ - - /** - * Return the package name. - */ - String getPackageName(); - String PACKAGE_NAME_PROPERTY = "packageName"; //$NON-NLS-1$ - - /** - * Return the name of the type's "declaring type". - * Return <code>null</code> if the type is a top-level type. - */ - String getDeclaringTypeName(); - String DECLARING_TYPE_NAME_PROPERTY = "declaringTypeName"; //$NON-NLS-1$ - - /** - * Return whether the type is a member type. - */ - boolean isMemberType(); - String MEMBER_TYPE_PROPERTY = "memberType"; //$NON-NLS-1$ - - boolean isIn(IPackageFragment packageFragment); - - boolean isIn(IPackageFragmentRoot sourceFolder); - - - /** - * Return the immediately nested types (classes or interfaces, not enums or annotations) (children). - */ - Iterable<JavaResourceType> getTypes(); - String TYPES_COLLECTION = "types"; //$NON-NLS-1$ - - /** - * Return all the types; the type itself, its children, its grandchildren, - * etc. - */ - Iterable<JavaResourceType> getAllTypes(); - - /** - * Return the immediately nested enums (children). - */ - Iterable<JavaResourceEnum> getEnums(); - String ENUMS_COLLECTION = "enums"; //$NON-NLS-1$ - - /** - * Return all the enums; the enum itself, its children, its grandchildren, - * etc. - */ - Iterable<JavaResourceEnum> getAllEnums(); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceAnnotatedElement.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceAnnotatedElement.java deleted file mode 100644 index 5176d120ef..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceAnnotatedElement.java +++ /dev/null @@ -1,233 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.resource.java; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; - -/** - * Java source code or binary annotated element. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface JavaResourceAnnotatedElement - extends JavaResourceNode -{ - // ********** annotations ********** - - /** - * String associated with changes to the "annotations" collection - */ - String ANNOTATIONS_COLLECTION = "annotations"; //$NON-NLS-1$ - - /** - * String associated with changes to the "nestableAnnotations" collection - */ - String NESTABLE_ANNOTATIONS_COLLECTION = "nestableAnnotations"; //$NON-NLS-1$ - - /** - * Return the member's annotations in the order that they appear. - * Do not return duplicate annotations as this error is handled by the Java - * compiler. - */ - Iterable<Annotation> getAnnotations(); - - /** - * Return the number of annotations. - */ - int getAnnotationsSize(); - - /** - * Return the annotation with the specified name. - * Return the first if there are duplicates in the source code. - */ - Annotation getAnnotation(String annotationName); - - /** - * Return the specified annotation. - * Return the first if there are duplicates in the source code. - * Do not return null, but a Null Object instead if no annotation - * with the specified name exists in the source code. - */ - Annotation getNonNullAnnotation(String annotationName); - - /** - * Return the nestable annotations with the specified name in the order that - * they appear. - * If nestable and container annotations are both specified on the - * member directly, the behavior is undefined - */ - // TODO tie the singular and plural annotations together so we can generate - // a validation error when both are specified - ListIterable<NestableAnnotation> getAnnotations(String nestableAnnotationName); - - /** - * Return the number of nestable annotations with the specified name. - * If nestable and container annotations are both specified on the - * member directly, the behavior is undefined - */ - int getAnnotationsSize(String nestableAnnotationName); - - /** - * Return the nestable annotation at the specified index with the specified name. - * If nestable and container annotations are both specified on the - * member directly, the behavior is undefined - */ - NestableAnnotation getAnnotation(int index, String nestableAnnotationName); - - /** - * Add an annotation with the specified name. - * Return the newly-created annotation. - */ - Annotation addAnnotation(String annotationName); - - /** - * Add a new nestable annotation with the specified name. - * Create a new container annotation if necessary and add the nestable - * annotation to it. - * If both the nestable annotation and the container annotation already - * exist, then add to the container annotation, leaving the existing - * nestable annotation alone. - * If only the nestable annotation exists, then create the new container - * annotation and move the existing nestable annotation to it along with - * the new one. If neither annotation exists, then create a new nestable - * annotation. - */ - NestableAnnotation addAnnotation(int index, String nestableAnnotationName); - - /** - * Move the nestable annotation at the specified source index to the specified target index. - */ - void moveAnnotation(int targetIndex, int sourceIndex, String nestableAnnotationName); - - /** - * Remove the specified annotation. - */ - void removeAnnotation(String annotationName); - - /** - * Remove the specified nestable annotation from the container annotation at the specified - * index. - * If there is no container, assume the index is zero and just remove the nestable annotation - */ - void removeAnnotation(int index, String nestableAnnotationName); - - - // ********** queries ********** - - /** - * Return the element's "top level" annotations. - * For "combination" annotations (i.e. a virtual array of annotations that - * can be either a single <em>standalone</em> annotation [representing an - * array of length one] or an array of annotations witin a - * <em>container</em> annotation), only the <em>container</em> annotation is - * included (if it is present) or the single <em>standalone</em> annotation. - */ - Iterable<Annotation> getTopLevelAnnotations(); - - /** - * Return whether the underlying JDT member is currently annotated with any recognized - * annotations. - */ - boolean isAnnotated(); - - /** - * Return whether the underlying JDT member is annotated with any of the given annotations. - */ - boolean isAnnotatedWithAnyOf(Iterable<String> annotationNames); - - /** - * Return the element kind - */ - Kind getKind(); - - /** - * Return the text range for the member's name. - */ - TextRange getNameTextRange(CompilationUnit astRoot); - - /** - * Return the text range for the nestable annotation if it is currently - * unnested. If it is nested, return the text range for the corresponding - * container annotation. - * - * @see AnnotationProvider#getContainerAnnotationName(String) - */ - TextRange getTextRange(String nestableAnnotationName, CompilationUnit astRoot); - - /** - * The kind of java element. - */ - public enum Kind { - - /** - * Represents an annotatable package. - * An {@link JavaResourceAnnotatedElement} of {@link Kind} PACKAGE may safely be cast as a - * {@link JavaResourcePackage} - */ - PACKAGE(ASTNode.PACKAGE_DECLARATION), - - /** - * Represents a class or interface. - * An {@link JavaResourceAnnotatedElement} of {@link Kind} TYPE may safely be cast as a - * {@link JavaResourceType} - */ - TYPE(ASTNode.TYPE_DECLARATION), - - /** - * Represents an enum. - * An {@link JavaResourceAnnotatedElement} of {@link Kind} ENUM may safely be cast as a - * {@link JavaResourceEnum} - */ - ENUM(ASTNode.ENUM_DECLARATION), - - /** - * Represents a method. - * An {@link JavaResourceAnnotatedElement} of {@link Kind} METHOD may safely be cast as a - * {@link JavaResourceMethod} - */ - METHOD(ASTNode.METHOD_DECLARATION), - - /** - * Represents a type field. - * An {@link JavaResourceAnnotatedElement} of {@link Kind} FIELD may safely be cast as a - * {@link JavaResourceField} - */ - FIELD(ASTNode.FIELD_DECLARATION), - - /** - * Represents an enum constant. - * An {@link JavaResourceAnnotatedElement} of {@link Kind} ENUM_CONSTANT may safely be cast as a - * {@link JavaResourceEnumConstant} - */ - ENUM_CONSTANT(ASTNode.ENUM_CONSTANT_DECLARATION); - - - private int astNodeType; - - Kind(int astNodeType) { - this.astNodeType = astNodeType; - } - - public int getAstNodeType() { - return this.astNodeType; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceAttribute.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceAttribute.java deleted file mode 100644 index 565c27ea46..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceAttribute.java +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011 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.common.core.resource.java; - -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; - -/** - * Java source code or binary attribute (field/method) - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface JavaResourceAttribute - extends JavaResourceMember -{ - JavaResourceType getParent(); - - JavaResourceType getResourceType(); - - /** - * Return whether the attribute's type implements or extends the specified - * type. - */ - boolean typeIsSubTypeOf(String typeName); - - /** - * Return whether the attribute's type is a "variable" primitive type - * (i.e. any primitive type except 'void'). - */ - boolean typeIsVariablePrimitive(); - - /** - * @see java.lang.reflect.Modifier - */ - int getModifiers(); - String MODIFIERS_PROPERTY = "modifiers"; //$NON-NLS-1$ - - /** - * Return the resolved, qualified name of the attribute's type - * (e.g. "java.util.Collection" or "byte[]"). - * If the type is an array, this name will include the appropriate number - * of bracket pairs. - * This name will not include the type's generic type arguments - * (e.g. "java.util.Collection<java.lang.String>" will only return - * "java.util.Collection"). - * @see #getTypeTypeArgumentNames() - */ - String getTypeName(); - String TYPE_NAME_PROPERTY = "typeName"; //$NON-NLS-1$ - - /** - * Return whether the attribute type is an interface. - */ - boolean typeIsInterface(); - String TYPE_IS_INTERFACE_PROPERTY = "typeIsInterface"; //$NON-NLS-1$ - - /** - * Return whether the attribute type is an enum. - */ - boolean typeIsEnum(); - String TYPE_IS_ENUM_PROPERTY = "typeIsEnum"; //$NON-NLS-1$ - - /** - * Return whether the attribute type is an array. - */ - boolean typeIsArray(); - String TYPE_IS_ARRAY_PROPERTY = "typeIsArray"; //$NON-NLS-1$ - - /** - * Return the dimensionality of the array, 0 otherwise. - * (String[][] -> 2, Collection<String> -> 0) - */ - int getTypeArrayDimensionality(); - String TYPE_ARRAY_DIMENSIONALITY_PROPERTY = "typeArrayDimensionality"; //$NON-NLS-1$ - - /** - * Return the component type name of the array, null otherwise. - * (String[][] -> "java.lang.String", Collection<String> -> null) - */ - String getTypeArrayComponentTypeName(); - String TYPE_ARRAY_COMPONENT_TYPE_NAME_PROPERTY = "typeArrayComponentTypeName"; //$NON-NLS-1$ - - /** - * Return the names of the attribute type's superclasses. - */ - ListIterable<String> getTypeSuperclassNames(); - String TYPE_SUPERCLASS_NAMES_LIST = "typeSuperclassNames"; //$NON-NLS-1$ - - /** - * Return the names of the attribute type's interfaces. - */ - Iterable<String> getTypeInterfaceNames(); - String TYPE_INTERFACE_NAMES_COLLECTION = "typeInterfaceNames"; //$NON-NLS-1$ - - /** - * Return the names of the attribute type's type arguments. - * The name for any argument that is an array will contain the appropriate - * number of bracket pairs. - * The names will not include any further generic type arguments. - */ - ListIterable<String> getTypeTypeArgumentNames(); - String TYPE_TYPE_ARGUMENT_NAMES_LIST = "typeTypeArgumentNames"; //$NON-NLS-1$ - - int getTypeTypeArgumentNamesSize(); - - String getTypeTypeArgumentName(int index); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceClassFile.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceClassFile.java deleted file mode 100644 index ebda076809..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceClassFile.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.resource.java; - - - -/** - * Java class file - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface JavaResourceClassFile - extends JavaResourceNode -{ - /** - * Return the class file's type. - */ - JavaResourceAbstractType getType(); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceCompilationUnit.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceCompilationUnit.java deleted file mode 100644 index 0a752f4137..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceCompilationUnit.java +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.resource.java; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.utility.jdt.AnnotationEditFormatter; -import org.eclipse.jpt.common.utility.command.CommandExecutor; - -/** - * Dali resource for JDT compilation unit. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface JavaResourceCompilationUnit - extends JavaResourceNode.Root -{ - /** - * Return the corresponding JDT compilation unit. - */ - ICompilationUnit getCompilationUnit(); - - /** - * Return the JPA project's annotation formatter. This is used to make any - * manipulated annotations reasonably readable after being written to the - * Java source file. - */ - AnnotationEditFormatter getAnnotationEditFormatter(); - - /** - * This allows the resource model to modify the Java source code on the - * UI thread when it is executing on another thread. - */ - CommandExecutor getModifySharedDocumentCommandExecutor(); - - /** - * Resolve type information that could be dependent on other files being - * added/removed. - */ - void resolveTypes(); - - /** - * The primary type of the AST compilation unit, can be null. - * This is named the same as the compilation unit. - */ - JavaResourceAbstractType getPrimaryType(); - - /** - * Something in Java has changed (typically either the compilation unit's - * source code or the Java classpath); synchronize the compilation unit's - * state with the Java source code etc. - */ - void synchronizeWithJavaSource(); - - /** - * Build an AST for the compilation unit with its bindings resolved. - */ - CompilationUnit buildASTRoot(); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceEnum.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceEnum.java deleted file mode 100644 index 774d95aa5c..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceEnum.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.resource.java; - - - -/** - * Java source code or binary enum. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface JavaResourceEnum - extends JavaResourceAbstractType -{ - - - // ********** enum constants ********** - - /** - * Return the enum's enum constants. - */ - Iterable<JavaResourceEnumConstant> getEnumConstants(); - String ENUM_CONSTANTS_COLLECTION = "enumConstants"; //$NON-NLS-1$ -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceEnumConstant.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceEnumConstant.java deleted file mode 100644 index c72c4c43bd..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceEnumConstant.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 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.common.core.resource.java; - -/** - * Java source code or binary enum constant - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface JavaResourceEnumConstant - extends JavaResourceMember -{ - /** - * The Java resource enum constant's name does not change. - */ - String getName(); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceField.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceField.java deleted file mode 100644 index 1119f901c9..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceField.java +++ /dev/null @@ -1,27 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.resource.java; - -/** - * Java source code or binary field - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface JavaResourceField - extends JavaResourceAttribute -{ -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceMember.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceMember.java deleted file mode 100644 index 6acbee48d2..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceMember.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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.common.core.resource.java; - -import org.eclipse.jdt.core.dom.CompilationUnit; - -/** - * Java source code or binary persistent member. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 2.0 - */ -public interface JavaResourceMember - extends JavaResourceAnnotatedElement -{ - String getName(); - - // ********** annotations ********** - - /** - * Sets the specified primary annotation as the first annotation, and removes all known - * annotations (i.e. does not remove non-persistence annotations) which are not included - * in the supporting annotations. - */ - Annotation setPrimaryAnnotation(String primaryAnnotationName, Iterable<String> supportingAnnotationNames); - - - - // ********** modifiers ********** - - /** - * Return whether the member is final. - */ - boolean isFinal(); - String FINAL_PROPERTY = "final"; //$NON-NLS-1$ - - boolean isTransient(); - String TRANSIENT_PROPERTY = "transient"; //$NON-NLS-1$ - - boolean isPublic(); - String PUBLIC_PROPERTY = "public"; //$NON-NLS-1$ - - boolean isStatic(); - String STATIC_PROPERTY = "static"; //$NON-NLS-1$ - - boolean isProtected(); - String PROTECTED_PROPERTY = "protected"; //$NON-NLS-1$ - - - // ********** queries ********** - - /** - * Return whether the Java resource member is for the specified - * member. - */ - boolean isFor(String memberName, int occurrence); - - - // ********** behavior ********** - - /** - * Resolve type information that could be dependent on changes elsewhere - * in the workspace. - */ - void resolveTypes(CompilationUnit astRoot); - - /** - * Return whether the Java resource member is public or protected - */ - boolean isPublicOrProtected(); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceMethod.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceMethod.java deleted file mode 100644 index 491a5c3ca6..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceMethod.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.resource.java; - -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jpt.common.utility.MethodSignature; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; - -/** - * Java source code or binary method - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.2 - * @since 3.0 - */ -public interface JavaResourceMethod - extends JavaResourceAttribute { - - // ***** method name ***** - - /** - * The Java resource method's name does not change. - */ - String getMethodName(); - - - // ***** parameter type names ***** - - String PARAMETER_TYPE_NAMES_LIST = "parameterTypeNames"; //$NON-NLS-1$ - - ListIterable<String> getParameterTypeNames(); - - String getParameterTypeName(int index); - - int getParametersSize(); - - - // ***** constructor ***** - - String CONSTRUCTOR_PROPERTY = "constructor"; //$NON-NLS-1$ - - boolean isConstructor(); - - - // ***** misc ***** - - /** - * Return whether the Java resource persistent attribute is for the specified - * method. - */ - boolean isFor(MethodSignature methodSignature, int occurrence); - - /** - * Call this instead of initialize(CompilationUnit) - * TODO remove initialize(CompilationUnit) from the hierarchy - */ - void initialize(MethodDeclaration methodDeclaration); - - /** - * Call this instead of synchronizeWith(CompilationUnit) - * TODO remove synchronizeWith(CompilationUnit) from the hierarchy - */ - void synchronizeWith(MethodDeclaration methodDeclaration); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceNode.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceNode.java deleted file mode 100644 index 21e446ebfd..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceNode.java +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2011 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.common.core.resource.java; - -import org.eclipse.core.resources.IFile; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jpt.common.core.AnnotationProvider; -import org.eclipse.jpt.common.core.JptResourceModel; -import org.eclipse.jpt.common.core.utility.TextRange; -import org.eclipse.jpt.common.utility.model.Model; - -/** - * Common interface for Java resource nodes (source code or binary). - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface JavaResourceNode - extends Model -{ - /** - * Return the node's parent node. - */ - JavaResourceNode getParent(); - - /** - * Return the Eclipse file that contains the Java resource node - * (typically either a Java source code file or a JAR). - */ - IFile getFile(); - - /** - * Return the root of the Java resource containment hierarchy - * (typically either a compilation unit or a package fragment root). - */ - Root getRoot(); - - /** - * Return the [source] node's root (the compilation unit). - */ - // TODO get rid of this method...? - JavaResourceCompilationUnit getJavaResourceCompilationUnit(); - - /** - * Return the [source] node's text range in the compilation unit's file. - */ - TextRange getTextRange(CompilationUnit astRoot); - - /** - * Initialize the [source] node from the specified AST. - */ - void initialize(CompilationUnit astRoot); - - /** - * Synchronize the [source] node with the specified AST. - */ - void synchronizeWith(CompilationUnit astRoot); - - - /** - * Root of Java resource model containment hierarchy. - */ - interface Root - extends JavaResourceNode, JptResourceModel { - - /** - * Return the root's Java resource "abstract" types. - */ - Iterable<JavaResourceAbstractType> getTypes(); - String TYPES_COLLECTION = "types"; //$NON-NLS-1$ - - /** - * Called (via a hook in change notification) whenever anything in the - * Java resource model changes. Forwarded to listeners. - */ - void resourceModelChanged(); - - /** - * Return the annotation provider that supplies the annotations found - * in the Java resource model. - */ - AnnotationProvider getAnnotationProvider(); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackage.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackage.java deleted file mode 100644 index 471b951473..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackage.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Red Hat, Inc. - * Distributed under license by Red Hat, Inc. All rights reserved. - * This program is 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 - * - * Contributor: - * Red Hat, Inc. - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.core.resource.java; - -/** - * @author Dmitry Geraskov - * - * Java source code of package-info - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - */ -public interface JavaResourcePackage - extends JavaResourceAnnotatedElement { - - /** - * The Java resource persistent package's name. - */ - String getName(); - String NAME_PROPERTY = "name"; //$NON-NLS-1$ -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackageFragment.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackageFragment.java deleted file mode 100644 index 87ceb27c66..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackageFragment.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 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.common.core.resource.java; - -import org.eclipse.jpt.common.core.AnnotationProvider; - - - -/** - * Java package fragment - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 2.2 - * @since 2.2 - */ -public interface JavaResourcePackageFragment - extends JavaResourceNode -{ - /** - * Return the package fragment's class files that contain "annotated" types. - * Annotated with the annotations we care about, - * @see AnnotationProvider - */ - Iterable<JavaResourceClassFile> getClassFiles(); - String CLASS_FILES_COLLECTION = "classFiles"; //$NON-NLS-1$ - - /** - * Return the size of the package fragment's class files. - */ - int getClassFilesSize(); - - /** - * Return the package fragment's Java types. - * This is a convenience method that returns the JavaResourceTypes of the classFiles. - */ - Iterable<JavaResourceAbstractType> getTypes(); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackageFragmentRoot.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackageFragmentRoot.java deleted file mode 100644 index 12082c6532..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackageFragmentRoot.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010 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.common.core.resource.java; - - -/** - * Java package fragement root - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 2.2 - * @since 2.2 - */ -public interface JavaResourcePackageFragmentRoot - extends JavaResourceNode.Root -{ - /** - * Return the package fragment root's package fragments. - */ - Iterable<JavaResourcePackageFragment> getPackageFragments(); - String PACKAGE_FRAGMENTS_COLLECTION = "packageFragments"; //$NON-NLS-1$ - - /** - * Return the size of the package fragment root's package fragments. - */ - int getPackageFragmentsSize(); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackageInfoCompilationUnit.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackageInfoCompilationUnit.java deleted file mode 100644 index 9371615344..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourcePackageInfoCompilationUnit.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 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.common.core.resource.java; - -/** - * Dali resource for JDT compilation unit named package-info.java. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface JavaResourcePackageInfoCompilationUnit - extends JavaResourceCompilationUnit -{ - JavaResourcePackage getPackage(); - String PACKAGE = "package"; //$NON-NLS-1$ - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceType.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceType.java deleted file mode 100644 index b4f237120c..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceType.java +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010, 2012 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.common.core.resource.java; - - -/** - * Java source code or binary class or interface. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 2.0 - */ -public interface JavaResourceType - extends JavaResourceAbstractType -{ - - /** - * Return the fully qualified name of the type's superclass. - */ - String getSuperclassQualifiedName(); - String SUPERCLASS_QUALIFIED_NAME_PROPERTY = "superclassQualifiedName"; //$NON-NLS-1$ - - /** - * Return whether the type is abstract. - */ - boolean isAbstract(); - String ABSTRACT_PROPERTY = "abstract"; //$NON-NLS-1$ - - /** - * Return whether the type has a no-arg constructor (private, protected, or public) - */ - boolean hasNoArgConstructor(); - String NO_ARG_CONSTRUCTOR_PROPERTY = "noArgConstructor"; //$NON-NLS-1$ - - /** - * Return whether the type has a private no-arg constructor - */ - boolean hasPrivateNoArgConstructor(); - String PRIVATE_NO_ARG_CONSTRUCTOR_PROPERTY = "privateNoArgConstructor"; //$NON-NLS-1$ - - /** - * Return whether the type has a public or protected no-arg constructor - * <em>or</em> only the default constructor. - */ - boolean hasPublicOrProtectedNoArgConstructor(); - - /** - * Return whether the type has a public no-arg constructor - * <em>or</em> only the default constructor. - */ - boolean hasPublicNoArgConstructor(); - - /** - * Return whether the type has any field that have relevant annotations - * on them (which can be used to infer the type's access type). - */ - boolean hasAnyAnnotatedFields(); - - /** - * Return whether the type has any field that have relevant annotations - * on them (which can be used to infer the type's access type). - */ - boolean hasAnyAnnotatedMethods(); - - /** - * Return whether the type overrides the - * {@link Object#equals(Object)} method. - */ - boolean hasEqualsMethod(); - - /** - * Return whether the type overrides the - * {@link Object#hashCode()} method. - */ - boolean hasHashCodeMethod(); - - // ********** fields ********** - - /** - * Return the type's fields. - */ - Iterable<JavaResourceField> getFields(); - String FIELDS_COLLECTION = "fields"; //$NON-NLS-1$ - - - // ********** methods ********** - - /** - * Return the type's methods. This returns *all* methods from the JDT Type - */ - Iterable<JavaResourceMethod> getMethods(); - String METHODS_COLLECTION = "methods"; //$NON-NLS-1$ - - JavaResourceMethod getMethod(String name); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceTypeCache.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceTypeCache.java deleted file mode 100644 index 59d5e7e883..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/JavaResourceTypeCache.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 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.common.core.resource.java; - -import org.eclipse.core.resources.IFile; -import org.eclipse.jdt.core.IType; - -/** - * Java persistent type cache - used to hold "external" types - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 2.3 - * @since 2.2 - */ -public interface JavaResourceTypeCache - extends JavaResourceNode.Root -{ - - /** - * Return the size of the cache's types. - */ - int getTypesSize(); - - /** - * Add a Java resource type for the specified JDT type to the - * cache. Return the new type. - */ - JavaResourceAbstractType addType(IType jdtType); - - /** - * Remove all the types associated with the specified JAR file. - * Return whether any types were removed. - */ - boolean removeTypes(IFile jarFile); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/NestableAnnotation.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/NestableAnnotation.java deleted file mode 100644 index 68d364bcdd..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/NestableAnnotation.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.common.core.resource.java; - -/** - * Interface for dealing with annotations that can be "nested" within other - * annotations, typically within arrays. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 2.0 - */ -public interface NestableAnnotation - extends Annotation { - - /** - * Move the annotation to the specified index within its container annotation. - * This should only be called when the annotation is actually nested. - */ - void moveAnnotation(int index); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/NestableAnnotationDefinition.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/NestableAnnotationDefinition.java deleted file mode 100644 index eb9784f1d0..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/resource/java/NestableAnnotationDefinition.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 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.common.core.resource.java; - -import org.eclipse.jdt.core.IAnnotation; -import org.eclipse.jpt.common.core.utility.jdt.AnnotatedElement; - -/** - * Used to build NestableAnnotations discovered in the Java source code. - * To provide new NestableAnnotationDefinitions, create a new JaxbPlatform - * by implementing JaxbPlatformDefinition. - * - * @see NestableAnnotation - * @see org.eclipse.jpt.jaxb.core.platform.JaxbPlatformDefinition - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 3.0 - * @since 3.0 - */ -public interface NestableAnnotationDefinition -{ - /** - * Return the name of the annotation the definition will build in the - * various #build...(...) methods. - */ - String getNestableAnnotationName(); - - String getContainerAnnotationName(); - - String getElementName(); - - /** - * Build and return an annotation for the specified annotated element. - */ - NestableAnnotation buildAnnotation(JavaResourceAnnotatedElement parent, AnnotatedElement annotatedElement, int index); - - /** - * Build and return an annotation for the specified JDT annotation - * on the specified annotated element. - */ - NestableAnnotation buildAnnotation(JavaResourceAnnotatedElement parent, IAnnotation jdtAnnotation, int index); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/AbstractTextRange.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/AbstractTextRange.java deleted file mode 100644 index 266e65366a..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/AbstractTextRange.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2011 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.common.core.utility; - -import org.eclipse.jpt.common.core.internal.utility.SimpleTextRange; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Partial implementation of text range. - * - * Provisional API: This class is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @version 2.0 - * @since 2.0 - */ -public abstract class AbstractTextRange - implements TextRange -{ - protected AbstractTextRange() { - super(); - } - - public boolean includes(int index) { - return (this.getOffset() <= index) && (index < this.getEnd()); - } - - public boolean touches(int index) { - return (this.getOffset() <= index) && (index <= this.getEnd()); - } - - /** - * The end offset is <em>exclusive</em>, i.e. the element at the end offset - * is not included in the range. - */ - protected int getEnd() { - return this.getOffset() + this.getLength(); - } - - public TextRange buildTextRange(int offset, int length, int lineNumber) { - return ((offset == this.getOffset()) && - (length == this.getLength()) && - (lineNumber == this.getLineNumber())) ? - this : - new SimpleTextRange(offset, length, lineNumber); - } - - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } - if ( ! (o instanceof TextRange)) { - return false; - } - TextRange other = (TextRange) o; - return (other.getOffset() == this.getOffset()) - && (other.getLength() == this.getLength()) - && (other.getLineNumber() == this.getLineNumber()); - } - - @Override - public int hashCode() { - return this.getOffset() ^ this.getLength() ^ this.getLineNumber(); - } - - @Override - public String toString() { - String start = String.valueOf(this.getOffset()); - String end = String.valueOf(this.getEnd()); - String line = String.valueOf(this.getLineNumber()); - return StringTools.buildToStringFor(this, start + ", " + end + " [" + line + ']'); //$NON-NLS-1$ //$NON-NLS-2$ - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/BodySourceWriter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/BodySourceWriter.java deleted file mode 100644 index 9aabeebdd5..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/BodySourceWriter.java +++ /dev/null @@ -1,303 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010 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.common.core.utility; - -import java.io.Serializable; -import java.io.StringWriter; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.TreeSet; - -import org.eclipse.jpt.common.utility.Filter; -import org.eclipse.jpt.common.utility.IndentingPrintWriter; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.Transformer; -import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; -import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; - -import com.ibm.icu.text.Collator; - -/** - * Extend {@link IndentingPrintWriter} with some methods that facilitate - * building class source code. - */ -@SuppressWarnings("nls") -public class BodySourceWriter - extends IndentingPrintWriter -{ - protected final String packageName; - protected final String className; - // key = short class name; value = import package - protected final HashMap<String, ImportPackage> imports = new HashMap<String, ImportPackage>(); - - public BodySourceWriter(String packageName, String className) { - super(new StringWriter(2000)); - this.packageName = packageName; - this.className = className; - } - - public String getSource() { - return this.out.toString(); - } - - public int getLength() { - return ((StringWriter) this.out).getBuffer().length(); - } - - protected void printVisibility(String visibilityModifier) { - if (visibilityModifier.length() != 0) { - this.print(visibilityModifier); - this.print(' '); - } - } - - public void printAnnotation(String annotationName) { - this.print('@'); - this.printTypeDeclaration(annotationName); - } - - public void printTypeDeclaration(String typeDeclaration) { - this.print(this.buildImportedTypeDeclaration(typeDeclaration)); - } - - protected void printField(String fieldName, String typeDeclaration, String visibility) { - this.printVisibility(visibility); - this.printTypeDeclaration(typeDeclaration); - this.print(' '); - this.print(fieldName); - this.print(';'); - this.println(); - this.println(); - } - - protected void printParameterizedField(String fieldName, String typeDeclaration, String parameterTypeDeclaration, String visibility) { - this.printVisibility(visibility); - this.printTypeDeclaration(typeDeclaration); - this.print('<'); - this.printTypeDeclaration(parameterTypeDeclaration); - this.print('>'); - this.print(' '); - this.print(fieldName); - this.print(';'); - this.println(); - this.println(); - } - - /** - * Convert the specified string to a <em>String Literal</em> and print it, - * adding the surrounding double-quotes and escaping characters - * as necessary. - */ - public void printStringLiteral(String string) { - StringTools.convertToJavaStringLiteralOn(string, this); - } - - - // ********** imports ********** - - // ***** writing - /** - * Return the specified class's "imported" name. - * The class declaration must be of the form: - * "int" - * "int[]" (not "[I") - * "java.lang.Object" - * "java.lang.Object[]" (not "[Ljava.lang.Object;") - * "java.util.Map.Entry" (not "java.util.Map$Entry") - * "java.util.Map.Entry[][]" (not "[[Ljava.util.Map$Entry;") - * - * To really do this right, we would need to gather all the types from - * the "unamed" (default) package that were referenced in the - * compilation unit beforehand. *Any* collisions with one of these - * types would have to be fully qualified (whether it was from - * 'java.lang' or the same package as the current compilation unit). - * In other words, if we have any types from the "unnamed" package, - * results are unpredictable.... - */ - protected String buildImportedTypeDeclaration(String typeDeclaration) { - if (this.typeDeclarationIsMemberClass(typeDeclaration)) { - // no need for an import, just return the partially-qualified name - return this.buildMemberClassTypeDeclaration(typeDeclaration); - } - int last = typeDeclaration.lastIndexOf('.'); - String currentPackageName = (last == -1) ? "" : typeDeclaration.substring(0, last); - String shortTypeDeclaration = typeDeclaration.substring(last + 1); - String shortElementTypeName = shortTypeDeclaration; - while (shortElementTypeName.endsWith("[]")) { - shortElementTypeName = shortElementTypeName.substring(0, shortElementTypeName.length() - 2); - } - ImportPackage prev = this.imports.get(shortElementTypeName); - if (prev == null) { - // this is the first class with this short element type name - this.imports.put(shortElementTypeName, new ImportPackage(currentPackageName)); - return shortTypeDeclaration; - } - if (prev.packageName.equals(currentPackageName)) { - // this element type has already been imported - return shortTypeDeclaration; - } - if (currentPackageName.equals(this.packageName) && - prev.packageName.equals("java.lang")) { - // we force the 'java.lang' class to be explicitly imported - prev.collision = true; - } - // another class with the same short element type name has been - // previously imported, so this one must be used fully-qualified - return typeDeclaration; - } - - /** - * e.g. "foo.bar.Employee.PK" will return true - */ - protected boolean typeDeclarationIsMemberClass(String typeDeclaration) { - return (typeDeclaration.length() > this.className.length()) - && typeDeclaration.startsWith(this.className) - && (typeDeclaration.charAt(this.className.length()) == '.'); - } - - /** - * e.g. "foo.bar.Employee.PK" will return "Employee.PK" - * this prevents collisions with other imported classes (e.g. "joo.jar.PK") - */ - protected String buildMemberClassTypeDeclaration(String typeDeclaration) { - int index = this.packageName.length(); - if (index != 0) { - index++; // bump past the '.' - } - return typeDeclaration.substring(index); - } - - // ***** reading - public Iterable<String> getImports() { - return this.getSortedRequiredImports(); - } - - /** - * transform our map entries to class names - */ - protected Iterable<String> getSortedRequiredImports() { - return new TransformationIterable<Map.Entry<String, ImportPackage>, String>(this.getSortedRequiredImportEntries(), this.buildImportEntriesTransformer()); - } - - protected Transformer<Map.Entry<String, ImportPackage>, String> buildImportEntriesTransformer() { - return IMPORT_ENTRIES_TRANSFORMER; - } - - protected static final Transformer<Map.Entry<String, ImportPackage>, String> IMPORT_ENTRIES_TRANSFORMER = new ImportEntriesTransformer(); - - protected static class ImportEntriesTransformer - implements Transformer<Map.Entry<String, ImportPackage>, String> - { - public String transform(Entry<String, ImportPackage> importEntry) { - String pkg = importEntry.getValue().packageName; - String type = importEntry.getKey(); - StringBuilder sb = new StringBuilder(pkg.length() + 1 + type.length()); - sb.append(pkg); - sb.append('.'); - sb.append(type); - return sb.toString(); - } - } - - /** - * sort by package first, then class (*not* by fully-qualified class name) - */ - protected Iterable<Map.Entry<String, ImportPackage>> getSortedRequiredImportEntries() { - TreeSet<Map.Entry<String, ImportPackage>> sortedEntries = new TreeSet<Map.Entry<String, ImportPackage>>(this.buildImportEntriesComparator()); - CollectionTools.addAll(sortedEntries, this.getRequiredImportEntries()); - return sortedEntries; - } - - protected Comparator<Map.Entry<String, ImportPackage>> buildImportEntriesComparator() { - return IMPORT_ENTRIES_COMPARATOR; - } - - protected static final Comparator<Map.Entry<String, ImportPackage>> IMPORT_ENTRIES_COMPARATOR = new ImportEntriesComparator(); - - protected static class ImportEntriesComparator - implements Comparator<Map.Entry<String, ImportPackage>>, Serializable - { - public int compare(Map.Entry<String, ImportPackage> e1, Map.Entry<String, ImportPackage> e2) { - Collator collator = Collator.getInstance(); - int pkg = collator.compare(e1.getValue().packageName, e2.getValue().packageName); - return (pkg == 0) ? collator.compare(e1.getKey(), e2.getKey()) : pkg; - } - } - - /** - * strip off any non-required imports (e.g. "java.lang.Object') - */ - protected Iterable<Map.Entry<String, ImportPackage>> getRequiredImportEntries() { - return new FilteringIterable<Map.Entry<String, ImportPackage>>(this.imports.entrySet(), this.buildRequiredImportEntriesFilter()); - } - - protected Filter<Map.Entry<String, ImportPackage>> buildRequiredImportEntriesFilter() { - return new RequiredImportEntriesFilter(); - } - - protected class RequiredImportEntriesFilter - implements Filter<Map.Entry<String, ImportPackage>> - { - public boolean accept(Map.Entry<String, ImportPackage> importEntry) { - return this.packageMustBeImported(importEntry.getValue()); - } - - protected boolean packageMustBeImported(ImportPackage importPackage) { - String pkg = importPackage.packageName; - if (pkg.equals("")) { - // cannot import a type from the "unnamed" package - return false; - } - if (pkg.equals("java.lang")) { - // we must import from 'java.lang' if we also have a class in the same package - return importPackage.collision; - } - if (pkg.equals(BodySourceWriter.this.packageName)) { - // we never need to import a class from the same package - return false; - } - return true; - } - } - - /** - * We need a 'collision' flag for when we encounter a class from - * 'java.lang' followed by a class from the current compilation unit's - * package. We will need to include the explicit import of the - * 'java.lang' class and all the references to the other class will - * have to be fully-qualified. - * - * If the classes are encountered in the opposite order (i.e. the class - * from the current compilation unit's package followed by the class - * from 'java.lang'), we do *not* need to import the first class while - * all the references to the 'java.lang' class will be fully-qualified. - * - * Unfortunately, we still have a problem: if we reference a class from - * 'java.lang' and there is a conflicting class from the current - * compilation unit's package (but that class is *not* revealed to us - * here), the simple name will be resolved to the non-'java.lang' class. - * Unless we simply force an import of *all* 'java.lang' classes.... :-( - * - * This shouldn't happen very often. :-) - */ - protected static class ImportPackage { - protected final String packageName; - protected boolean collision = false; - - protected ImportPackage(String packageName) { - super(); - this.packageName = packageName; - } - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/TextRange.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/TextRange.java deleted file mode 100644 index f31dd77adf..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/TextRange.java +++ /dev/null @@ -1,103 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2011 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.common.core.utility; - -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.wst.validation.internal.provisional.core.IMessage; - -/** - * A text range defines the offset into, length of, and line of a piece - * of text. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * <p> - * This interface is not intended to be implemented by clients. - * - * @version 2.0 - * @since 2.0 - */ -public interface TextRange { - - /** - * Return the offset of the text. - */ - int getOffset(); - - /** - * Return the length of the text. - */ - int getLength(); - - /** - * Return whether the range includes the character at the specified index. - */ - boolean includes(int index); - - /** - * Return whether the range touches an insertion cursor at the - * specified index. - */ - boolean touches(int index); - - /** - * Return the line number of the text. - */ - int getLineNumber(); - - /** - * Build and return a new text range for the specified values if they differ - * from the text range. If the specified values match the - * text range, simply return the text range unchanged. - */ - TextRange buildTextRange(int offset, int length, int lineNumber); - - /** - * Return whether the offsets, lengths, and line numbers are the same. - */ - boolean equals(Object obj); - - /** - * Return a hash code that corresponds to the {@link Object#equals(Object)} - * contract. - */ - int hashCode(); - - - /** - * Empty implementation of text range. - */ - final class Empty extends AbstractTextRange { - public static final TextRange INSTANCE = new Empty(); - public static TextRange instance() { - return INSTANCE; - } - // ensure single instance - private Empty() { - super(); - } - public int getLineNumber() { - return IMessage.LINENO_UNSET; - } - public int getOffset() { - return IMessage.OFFSET_UNSET; - } - public int getLength() { - return IMessage.OFFSET_UNSET; - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/CombinedCommandExecutor.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/CombinedCommandExecutor.java deleted file mode 100644 index 982911ad1f..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/CombinedCommandExecutor.java +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.utility.command; - -import java.io.Serializable; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.jpt.common.utility.command.Command; -import org.eclipse.jpt.common.utility.command.CommandExecutor; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Combine the job command executor and command executor interfaces. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - */ -public interface CombinedCommandExecutor - extends JobCommandExecutor, CommandExecutor -{ - /** - * Singleton implementation of the command executor interface - * that simply executes the command without any sort of enhancement. - */ - final class Default - implements CombinedCommandExecutor, Serializable - { - public static final CombinedCommandExecutor INSTANCE = new Default(); - public static CombinedCommandExecutor instance() { - return INSTANCE; - } - // ensure single instance - private Default() { - super(); - } - public void execute(Command command) { - command.execute(); - } - public void execute(JobCommand command) { - command.execute(new NullProgressMonitor()); - } - public void execute(JobCommand command, String jobName) { - this.execute(command); - } - public void execute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - this.execute(command); - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - - /** - * Singleton implementation of the command executor interface - * that ignores any commands. - */ - final class Inactive - implements CombinedCommandExecutor, Serializable - { - public static final CombinedCommandExecutor INSTANCE = new Inactive(); - public static CombinedCommandExecutor instance() { - return INSTANCE; - } - // ensure single instance - private Inactive() { - super(); - } - public void execute(Command command) { - // do nothing - } - public void execute(JobCommand command) { - // do nothing - } - public void execute(JobCommand command, String jobName) { - // do nothing - } - public void execute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - // do nothing - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/CombinedExtendedCommandExecutor.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/CombinedExtendedCommandExecutor.java deleted file mode 100644 index f1a57014b9..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/CombinedExtendedCommandExecutor.java +++ /dev/null @@ -1,164 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.utility.command; - -import java.io.Serializable; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.jpt.common.utility.command.Command; -import org.eclipse.jpt.common.utility.command.ExtendedCommandExecutor; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Combine the synchronouse job command executor and command executor - * interfaces. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - */ -public interface CombinedExtendedCommandExecutor - extends CombinedCommandExecutor, ExtendedJobCommandExecutor, ExtendedCommandExecutor -{ - /** - * Singleton implementation of the command executor interface - * that simply executes the command without any sort of enhancement. - */ - final class Default - implements CombinedExtendedCommandExecutor, Serializable - { - public static final CombinedExtendedCommandExecutor INSTANCE = new Default(); - public static CombinedExtendedCommandExecutor instance() { - return INSTANCE; - } - // ensure single instance - private Default() { - super(); - } - public void execute(Command command) { - command.execute(); - } - public void waitToExecute(Command command) { - command.execute(); - } - public boolean waitToExecute(Command command, long timeout) { - command.execute(); - return true; - } - public void execute(JobCommand command) { - command.execute(new NullProgressMonitor()); - } - public void execute(JobCommand command, String jobName) { - this.execute(command); - } - public void execute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - this.execute(command); - } - public void waitToExecute(JobCommand command) { - this.execute(command); - } - public boolean waitToExecute(JobCommand command, long timeout) { - this.execute(command); - return true; - } - public void waitToExecute(JobCommand command, String jobName) { - this.execute(command); - } - public boolean waitToExecute(JobCommand command, String jobName, long timeout) { - this.execute(command); - return true; - } - public void waitToExecute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - this.execute(command); - } - public boolean waitToExecute(JobCommand command, String jobName, ISchedulingRule schedulingRule, long timeout) { - this.execute(command); - return true; - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - - /** - * Singleton implementation of the command executor interface - * that ignores any commands. - */ - final class Inactive - implements CombinedExtendedCommandExecutor, Serializable - { - public static final CombinedExtendedCommandExecutor INSTANCE = new Inactive(); - public static CombinedExtendedCommandExecutor instance() { - return INSTANCE; - } - // ensure single instance - private Inactive() { - super(); - } - public void execute(Command command) { - // do nothing - } - public void waitToExecute(Command command) { - // do nothing - } - public boolean waitToExecute(Command command, long timeout) { - // do nothing - return true; - } - public void execute(JobCommand command) { - // do nothing - } - public void execute(JobCommand command, String jobName) { - // do nothing - } - public void execute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - // do nothing - } - public void waitToExecute(JobCommand command) { - // do nothing - } - public boolean waitToExecute(JobCommand command, long timeout) throws InterruptedException { - // do nothing - return true; - } - public void waitToExecute(JobCommand command, String jobName) { - // do nothing - } - public boolean waitToExecute(JobCommand command, String jobName, long timeout) throws InterruptedException { - // do nothing - return true; - } - public void waitToExecute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - // do nothing - } - public boolean waitToExecute(JobCommand command, String jobName, ISchedulingRule schedulingRule, long timeout) throws InterruptedException { - // do nothing - return true; - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/ExtendedJobCommandExecutor.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/ExtendedJobCommandExecutor.java deleted file mode 100644 index 15c4b5d0a9..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/ExtendedJobCommandExecutor.java +++ /dev/null @@ -1,225 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.utility.command; - -import java.io.Serializable; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * This interface extends the normal command executor to allow the client - * to control when a command is required to be executed synchronously. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - */ -public interface ExtendedJobCommandExecutor - extends JobCommandExecutor -{ - /** - * Suspend the current thread until the specified command is executed. - * The command itself must be executed <em>after</em> any other commands - * previously passed to the command executor. The command may or may - * not be assigned to a {@link org.eclipse.core.runtime.jobs.Job} - * for execution. - * @see #execute(JobCommand) - */ - void waitToExecute(JobCommand command) throws InterruptedException; - - /** - * Suspend the current thread until the specified command is executed - * or the specified time-out occurs. - * The time-out is specified in milliseconds. Return <code>true</code> if - * the command was executed in the allotted time; - * return <code>false</code> if a time-out occurred and the command was - * <em>not</em> executed. - * If the time-out is zero, wait indefinitely. - * <p> - * The command itself must be executed <em>after</em> any other commands - * previously passed to the command executor. The command may or may - * not be assigned to a {@link org.eclipse.core.runtime.jobs.Job} - * for execution. - * @see #execute(JobCommand) - */ - boolean waitToExecute(JobCommand command, long timeout) throws InterruptedException; - - /** - * Suspend the current thread until the specified command is executed. - * The command itself must be executed <em>after</em> any other commands - * previously passed to the command executor. The command may or may - * not be assigned to a {@link org.eclipse.core.runtime.jobs.Job} - * for execution. - * @see #execute(JobCommand, String) - */ - void waitToExecute(JobCommand command, String jobName) throws InterruptedException; - - /** - * Suspend the current thread until the specified command is executed - * or the specified time-out occurs. - * The time-out is specified in milliseconds. Return <code>true</code> if - * the command was executed in the allotted time; - * return <code>false</code> if a time-out occurred and the command was - * <em>not</em> executed. - * If the time-out is zero, wait indefinitely. - * <p> - * The command itself must be executed <em>after</em> any other commands - * previously passed to the command executor. The command may or may - * not be assigned to a {@link org.eclipse.core.runtime.jobs.Job} - * for execution. - * @see #execute(JobCommand, String) - */ - boolean waitToExecute(JobCommand command, String jobName, long timeout) throws InterruptedException; - - /** - * Suspend the current thread until the specified command is executed. - * The command itself must be executed <em>after</em> any other commands - * previously passed to the command executor. The command may or may - * not be assigned to a {@link org.eclipse.core.runtime.jobs.Job} - * for execution. - * @see #execute(JobCommand, String, ISchedulingRule) - */ - void waitToExecute(JobCommand command, String jobName, ISchedulingRule schedulingRule) throws InterruptedException; - - - /** - * Suspend the current thread until the specified command is executed - * or the specified time-out occurs. - * The time-out is specified in milliseconds. Return <code>true</code> if - * the command was executed in the allotted time; - * return <code>false</code> if a time-out occurred and the command was - * <em>not</em> executed. - * If the time-out is zero, wait indefinitely. - * <p> - * The command itself must be executed <em>after</em> any other commands - * previously passed to the command executor. The command may or may - * not be assigned to a {@link org.eclipse.core.runtime.jobs.Job} - * for execution. - * @see #execute(JobCommand, String, ISchedulingRule) - */ - boolean waitToExecute(JobCommand command, String jobName, ISchedulingRule schedulingRule, long timeout) throws InterruptedException; - - - /** - * Singleton implementation of the command executor interface - * that simply executes the command without any sort of enhancement. - */ - final class Default - implements ExtendedJobCommandExecutor, Serializable - { - public static final ExtendedJobCommandExecutor INSTANCE = new Default(); - public static ExtendedJobCommandExecutor instance() { - return INSTANCE; - } - // ensure single instance - private Default() { - super(); - } - public void execute(JobCommand command) { - command.execute(new NullProgressMonitor()); - } - public void execute(JobCommand command, String jobName) { - this.execute(command); - } - public void execute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - this.execute(command); - } - public void waitToExecute(JobCommand command) { - this.execute(command); - } - public boolean waitToExecute(JobCommand command, long timeout) { - this.execute(command); - return true; - } - public void waitToExecute(JobCommand command, String jobName) { - this.execute(command); - } - public boolean waitToExecute(JobCommand command, String jobName, long timeout) { - this.execute(command); - return true; - } - public void waitToExecute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - this.execute(command); - } - public boolean waitToExecute(JobCommand command, String jobName, ISchedulingRule schedulingRule, long timeout) { - this.execute(command); - return true; - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - - /** - * Singleton implementation of the command executor interface - * that ignores any commands. - */ - final class Inactive - implements ExtendedJobCommandExecutor, Serializable - { - public static final ExtendedJobCommandExecutor INSTANCE = new Inactive(); - public static ExtendedJobCommandExecutor instance() { - return INSTANCE; - } - // ensure single instance - private Inactive() { - super(); - } - public void execute(JobCommand command) { - // do nothing - } - public void execute(JobCommand command, String jobName) { - // do nothing - } - public void execute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - // do nothing - } - public void waitToExecute(JobCommand command) { - // do nothing - } - public boolean waitToExecute(JobCommand command, long timeout) throws InterruptedException { - // do nothing - return true; - } - public void waitToExecute(JobCommand command, String jobName) { - // do nothing - } - public boolean waitToExecute(JobCommand command, String jobName, long timeout) throws InterruptedException { - // do nothing - return true; - } - public void waitToExecute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - // do nothing - } - public boolean waitToExecute(JobCommand command, String jobName, ISchedulingRule schedulingRule, long timeout) throws InterruptedException { - // do nothing - return true; - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/InterruptibleJobCommand.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/InterruptibleJobCommand.java deleted file mode 100644 index 4eb68d4bbb..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/InterruptibleJobCommand.java +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.utility.command; - -import java.io.Serializable; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Simple interface for implementing the GOF Command design pattern - * in an Eclipse job - * and allows for the command to throw an {@link InterruptedException}. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @see org.eclipse.jpt.common.core.utility.command.JobCommand - */ -public interface InterruptibleJobCommand { - - /** - * Execute the command. The semantics of the command - * is determined by the contract between the client and server. - * The command should check, as appropriate, whether the specified progress - * monitor is {@link IProgressMonitor#isCanceled() "canceled"}; if it is, - * the command should return a result - * status of severity {@link IStatus#CANCEL}. The singleton - * cancel status {@link org.eclipse.core.runtime.Status#CANCEL_STATUS} can be used for - * this purpose. - * <p> - * Nested methods can also check the progress monitor - * and, if it is "canceled", throw an - * {@link org.eclipse.core.runtime.OperationCanceledException OperationCanceledException}. - * - * @see IProgressMonitor#isCanceled() - * @see org.eclipse.core.runtime.jobs.Job#run(IProgressMonitor monitor) - */ - IStatus execute(IProgressMonitor monitor) throws InterruptedException; - - - /** - * Singleton implementation of the interruptible job command interface that - * will throw an interrupted exception when executed. - */ - final class Interrupted - implements InterruptibleJobCommand, Serializable - { - public static final InterruptibleJobCommand INSTANCE = new Interrupted(); - public static InterruptibleJobCommand instance() { - return INSTANCE; - } - // ensure single instance - private Interrupted() { - super(); - } - // throw an exception - public IStatus execute(IProgressMonitor monitor) throws InterruptedException { - throw new InterruptedException(); - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/JobCommand.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/JobCommand.java deleted file mode 100644 index b70f49e3dc..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/JobCommand.java +++ /dev/null @@ -1,111 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2012 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.common.core.utility.command; - -import java.io.Serializable; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Simple interface for implementing the GOF Command design pattern in an - * Eclipse job. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - */ -public interface JobCommand - extends InterruptibleJobCommand -{ - /** - * Execute the command. The semantics of the command - * is determined by the contract between the client and server. - * The command should check, as appropriate, whether the specified progress - * monitor is {@link IProgressMonitor#isCanceled() "canceled"}; if it is, - * the command should return a result - * status of severity {@link IStatus#CANCEL}. The singleton - * cancel status {@link Status#CANCEL_STATUS} can be used for - * this purpose. - * <p> - * Nested methods can also check the progress monitor - * and, if it is "canceled", throw an - * {@link org.eclipse.core.runtime.OperationCanceledException OperationCanceledException}. - * - * @see IProgressMonitor#isCanceled() - * @see org.eclipse.core.runtime.jobs.Job#run(IProgressMonitor monitor) - */ - IStatus execute(IProgressMonitor monitor); - - - /** - * Singleton implementation of the job command interface that will do - * nothing when executed. - */ - final class Null - implements JobCommand, Serializable - { - public static final JobCommand INSTANCE = new Null(); - public static JobCommand instance() { - return INSTANCE; - } - // ensure single instance - private Null() { - super(); - } - public IStatus execute(IProgressMonitor monitor) { - return Status.OK_STATUS; - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - - /** - * Singleton implementation of the job command interface that will throw an - * exception when executed. - */ - final class Disabled - implements JobCommand, Serializable - { - public static final JobCommand INSTANCE = new Disabled(); - public static JobCommand instance() { - return INSTANCE; - } - // ensure single instance - private Disabled() { - super(); - } - // throw an exception - public IStatus execute(IProgressMonitor monitor) { - throw new UnsupportedOperationException(); - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/JobCommandExecutor.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/JobCommandExecutor.java deleted file mode 100644 index e2e1bcef8c..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/JobCommandExecutor.java +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.utility.command; - -import java.io.Serializable; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * This interface allows clients to control how a job command is executed. - * This is useful when the server provides the command but the client provides - * the context (e.g. the client would like to execute the command synchronously - * rather than dispatching it to a job queue). - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - */ -public interface JobCommandExecutor { - - /** - * Execute the specified command, synchronously or asynchronously. - * Commands with the same scheduling rule must be executed in the order in - * which they are passed to the command executor. - * The command may or may not be assigned to a - * {@link org.eclipse.core.runtime.jobs.Job} for execution. - */ - void execute(JobCommand command); - - /** - * Execute the specified command, synchronously or asynchronously. - * Commands with the same scheduling rule must be executed in the order in - * which they are passed to the command executor. - * The command may or may not be assigned to a - * {@link org.eclipse.core.runtime.jobs.Job} for execution. - */ - void execute(JobCommand command, String jobName); - - /** - * Execute the specified command, synchronously or asynchronously. - * Commands with the same scheduling rule must be executed in the order in - * which they are passed to the command executor. - * The command may or may not be assigned to a - * {@link org.eclipse.core.runtime.jobs.Job} for execution. - */ - void execute(JobCommand command, String jobName, ISchedulingRule schedulingRule); - - - /** - * Singleton implementation of the command executor interface - * that simply executes the command without any sort of enhancement. - */ - final class Default - implements JobCommandExecutor, Serializable - { - public static final JobCommandExecutor INSTANCE = new Default(); - public static JobCommandExecutor instance() { - return INSTANCE; - } - // ensure single instance - private Default() { - super(); - } - public void execute(JobCommand command) { - command.execute(new NullProgressMonitor()); - } - public void execute(JobCommand command, String jobName) { - this.execute(command); - } - public void execute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - this.execute(command); - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - - /** - * Singleton implementation of the command executor interface - * that ignores any commands. - */ - final class Inactive - implements JobCommandExecutor, Serializable - { - public static final JobCommandExecutor INSTANCE = new Inactive(); - public static JobCommandExecutor instance() { - return INSTANCE; - } - // ensure single instance - private Inactive() { - super(); - } - public void execute(JobCommand command) { - // do nothing - } - public void execute(JobCommand command, String jobName) { - // do nothing - } - public void execute(JobCommand command, String jobName, ISchedulingRule schedulingRule) { - // do nothing - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/NotifyingRepeatingJobCommand.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/NotifyingRepeatingJobCommand.java deleted file mode 100644 index 2710618aa2..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/NotifyingRepeatingJobCommand.java +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.utility.command; - -import java.io.Serializable; -import java.util.EventListener; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Extend the repeating job command to support listeners that are notified - * when an execution "cycle" is complete; i.e. the job command has, - * for the moment, handled every execution request and quiesced. - * This notification is <em>not</em> guaranteed to occur with <em>every</em> - * execution "cycle"; since other, unrelated, executions can be triggered - * concurrently, causing the "cycle" to continue. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - */ -public interface NotifyingRepeatingJobCommand - extends RepeatingJobCommand -{ - /** - * Add the specified listener. - */ - void addListener(Listener listener); - - /** - * Remove the specified listener. - */ - void removeListener(Listener listener); - - - // ********** listener ********** - - /** - * Interface implemented by listeners to be notified whenever the - * job command has quiesced. - */ - public interface Listener - extends EventListener - { - /** - * The specified job command has quiesced. - */ - IStatus executionQuiesced(JobCommand command, IProgressMonitor monitor); - } - - - // ********** null singleton ********** - - /** - * Singleton implementation of the notifying repeating command interface that - * will do nothing when executed. - */ - final class Null - implements NotifyingRepeatingJobCommand, Serializable - { - public static final NotifyingRepeatingJobCommand INSTANCE = new Null(); - public static NotifyingRepeatingJobCommand instance() { - return INSTANCE; - } - // ensure single instance - private Null() { - super(); - } - public void start() { - // do nothing - } - public IStatus execute(IProgressMonitor monitor) { - return Status.OK_STATUS; - } - public void stop() { - // do nothing - } - public void addListener(Listener listener) { - // do nothing - } - public void removeListener(Listener listener) { - // do nothing - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/RepeatingJobCommand.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/RepeatingJobCommand.java deleted file mode 100644 index c9952b5b59..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/command/RepeatingJobCommand.java +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 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.common.core.utility.command; - -import java.io.Serializable; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * This job command will execute repeatedly the minimum - * number of times. The assumption is the job command's effects are - * cumulative(?); i.e. the cumulative result of multiple executions of the - * job command is no different than the result of a single execution of the job - * command. Once the job command is executing, any further requests to execute - * simply trigger a re-execution of the job command once it has finished its - * current execution. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - */ -public interface RepeatingJobCommand - extends JobCommand -{ - /** - * Start the job command, allowing it to begin executing with the next call - * to {@link #execute(IProgressMonitor)}. - * @exception IllegalStateException when the command is not stopped - */ - void start(); - - /** - * Stop the job command; ignore further calls to - * {@link #execute(IProgressMonitor)}. - * @exception IllegalStateException when the command executor is not started - */ - void stop() throws InterruptedException; - - - /** - * Singleton implementation of the repeating job command interface that - * will do nothing when executed. - */ - final class Null - implements RepeatingJobCommand, Serializable - { - public static final RepeatingJobCommand INSTANCE = new Null(); - public static RepeatingJobCommand instance() { - return INSTANCE; - } - // ensure single instance - private Null() { - super(); - } - public void start() { - // do nothing - } - public IStatus execute(IProgressMonitor monitor) { - return Status.OK_STATUS; - } - public void stop() { - // do nothing - } - @Override - public String toString() { - return StringTools.buildSingletonToString(this); - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AbstractType.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AbstractType.java deleted file mode 100644 index 8be7a07d97..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AbstractType.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2010 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.ITypeBinding; - -/** - * AbstractType: just some covariant overrides. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface AbstractType extends Member { - - /** - * Covariant override. - */ - ITypeBinding getBinding(CompilationUnit astRoot); - - /** - * Covariant override. - */ - AbstractTypeDeclaration getBodyDeclaration(CompilationUnit astRoot); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotatedElement.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotatedElement.java deleted file mode 100644 index 8ce99cf49c..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotatedElement.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IBinding; -import org.eclipse.jpt.common.core.utility.TextRange; - -/** - * Dali manipulates annotations on elements (packages, types, fields, and methods). - * This interface simplifies those manipulations. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface AnnotatedElement { - - String getName(); - - /** - * Return the annotated element's body declaration from the specified AST. - * This can be null if the annotated element is no longer present in the AST - * because the source has been changed in another thread. - */ - ASTNode getBodyDeclaration(CompilationUnit astRoot); - - /** - * Return the annotated element's binding from the specified AST. - */ - IBinding getBinding(CompilationUnit astRoot); - - /** - * Return the annotated element's "modified" declaration from the specified AST. - */ - ModifiedDeclaration getModifiedDeclaration(CompilationUnit astRoot); - - /** - * Return the annotated element's "modified" declaration from a newly-generated AST. - */ - ModifiedDeclaration getModifiedDeclaration(); - - /** - * Return the annotated element's name text range from the specified AST. - */ - TextRange getNameTextRange(CompilationUnit astRoot); - - /** - * Edit the annotated element's declaration using the specified editor. - */ - void edit(Editor editor); - - - // ********** "editor" interface ********** - - /** - * This interface defines a callback that is invoked when the annotated element's - * compilation unit/AST is in a state to be manipulated. - */ - public interface Editor { - - /** - * Edit the specified declaration. Any changes made to the declaration - * will be captured and applied to the annotated element's compilation unit. - */ - void edit(ModifiedDeclaration declaration); - - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotatedPackage.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotatedPackage.java deleted file mode 100644 index c0a3ccc098..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotatedPackage.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Red Hat, Inc. - * Distributed under license by Red Hat, Inc. All rights reserved. - * This program is 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 - * - * Contributor: - * Red Hat, Inc. - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IPackageBinding; -import org.eclipse.jdt.core.dom.PackageDeclaration; - -/** - * @author Dmitry Geraskov - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface AnnotatedPackage extends AnnotatedElement { - - /** - * Covariant override. - */ - IPackageBinding getBinding(CompilationUnit astRoot); - - /** - * Covariant override. - */ - PackageDeclaration getBodyDeclaration(CompilationUnit astRoot); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotationAdapter.java deleted file mode 100644 index b0b04c4938..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotationAdapter.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Annotation; -import org.eclipse.jdt.core.dom.CompilationUnit; - -/** - * Adapt a Java annotation with a simple-to-use interface. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface AnnotationAdapter { - - /** - * Given the specified compilation unit, return the value of the - * adapter's annotation. - * @see #getAnnotation() - */ - Annotation getAnnotation(CompilationUnit astRoot); - - /** - * Build a new marker annotation, replacing the original annotation if present. - */ - void newMarkerAnnotation(); - - /** - * Build a new single member annotation, replacing the original annotation if present. - */ - void newSingleMemberAnnotation(); - - /** - * Build a new normal annotation, replacing the original annotation if present. - */ - void newNormalAnnotation(); - - /** - * Remove the annotation. - */ - void removeAnnotation(); - - /** - * Return the AST node corresponding to the annotation. - * If the annotation is missing, return the annotation's parent node. - * @see #getAstNode() - */ - ASTNode getAstNode(CompilationUnit astRoot); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotationEditFormatter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotationEditFormatter.java deleted file mode 100644 index 77b3ac0682..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotationEditFormatter.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2008 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.common.core.utility.jdt; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.text.edits.MalformedTreeException; -import org.eclipse.text.edits.TextEdit; - -/** - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface AnnotationEditFormatter { - - /** - * Review the specified edits and format the specified document as needed. - */ - void format(IDocument doc, TextEdit editTree) throws MalformedTreeException, BadLocationException; - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotationElementAdapter.java deleted file mode 100644 index 3fc6e95434..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/AnnotationElementAdapter.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.Expression; - -/** - * Adapt a Java annotation element with a simple-to-use interface. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface AnnotationElementAdapter<T> { - - /** - * Return the value of the adapter's annotation element. - * Return null if the element is not present. - * If the compilation unit is available, #value(CompilationUnit) - * might be more performant. - * @see #getValue(org.eclipse.jdt.core.dom.CompilationUnit) - */ - T getValue(); - - /** - * Given the specified compilation unit, return the value of the - * adapter's annotation element. - * Return null if the element is not present. - * @see #getValue() - */ - T getValue(CompilationUnit astRoot); - - /** - * Set the value of the adapter's annotation element. - * Setting the value of the element to null will cause - * the element to be removed from its annotation. - */ - void setValue(T value); - - /** - * Given the specified compilation unit, return the expression value of the - * adapter's annotation element. - * Return null if the element is not present. - * @see #getExpression() - */ - Expression getExpression(CompilationUnit astRoot); - - /** - * Return the AST node corresponding to the element. - * If the element is missing, return the annotation's node. - * @see #getAstNode() - */ - ASTNode getAstNode(CompilationUnit astRoot); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Attribute.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Attribute.java deleted file mode 100644 index cce19d5abc..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Attribute.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2009 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.ITypeBinding; - -/** - * Attributes are either represented by fields ('foo') or properties/method - * pairs ('getFoo()'/'setFoo()'). - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface Attribute extends Member { - - /** - * Return the attribute's name, as opposed to the member's name - * (e.g. "getFoo()" returns "foo"). - */ - String getAttributeName(); - - /** - * Return the type binding for the attribute's declared type, - * as opposed to its declaring type. - */ - ITypeBinding getTypeBinding(CompilationUnit astRoot); - - /** - * Return whether the attribute is a field. - */ - boolean isField(); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/DeclarationAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/DeclarationAnnotationAdapter.java deleted file mode 100644 index 9f93a16ffd..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/DeclarationAnnotationAdapter.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Annotation; -import org.eclipse.jdt.core.dom.MarkerAnnotation; -import org.eclipse.jdt.core.dom.NormalAnnotation; -import org.eclipse.jdt.core.dom.SingleMemberAnnotation; - -/** - * Provide clients with a pluggable way to manipulate an - * annotation modifying a "declaration". - * - * TODO specify how multiple annotations with the same name are to be handled - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface DeclarationAnnotationAdapter { - - /** - * Given the specified declaration, return the annotation. - */ - Annotation getAnnotation(ModifiedDeclaration declaration); - - /** - * Given the specified declaration, modify it with - * a new marker annotation, replacing the original annotation if present. - * Return the new annotation. - */ - MarkerAnnotation newMarkerAnnotation(ModifiedDeclaration declaration); - - /** - * Given the specified declaration, modify it with - * a new single member annotation, replacing the original annotation if present. - * Return the new annotation. - */ - SingleMemberAnnotation newSingleMemberAnnotation(ModifiedDeclaration declaration); - - /** - * Given the specified declaration, modify it with - * a new normal annotation, replacing the original annotation if present. - * Return the new annotation. - */ - NormalAnnotation newNormalAnnotation(ModifiedDeclaration declaration); - - /** - * Remove the annotation from the specified declaration. - */ - void removeAnnotation(ModifiedDeclaration declaration); - - /** - * Given the specified declaration, return the AST node - * corresponding to the annotation. - * If the annotation is missing, return its parent node. - */ - ASTNode getAstNode(ModifiedDeclaration declaration); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/DeclarationAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/DeclarationAnnotationElementAdapter.java deleted file mode 100644 index 51ae1a6e33..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/DeclarationAnnotationElementAdapter.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2012 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Expression; - -/** - * Provide clients with a pluggable way to manipulate an - * annotation element modifying a "declaration". - * <p> - * This interface is not intended to be implemented by clients. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @param <T> the type of the object to be passed to and returned by the adapter - */ -public interface DeclarationAnnotationElementAdapter<T> { - - /** - * Reduce the number of NLS warnings. - */ - String VALUE = "value"; //$NON-NLS-1$ - - /** - * Given the specified declaration, return the value of the - * annotation element. Return null or an empty array - * if the element is not present. - */ - T getValue(ModifiedDeclaration declaration); - - /** - * Given the specified declaration, set the value of the - * annotation element. Setting the value of the element - * to null will cause the element to be removed from its - * annotation. - */ - void setValue(T value, ModifiedDeclaration declaration); - - /** - * Given the specified declaration, return the element's value expression. - * Return null if the element is not present. - */ - Expression getExpression(ModifiedDeclaration declaration); - - /** - * Given the specified declaration, return the AST node - * corresponding to the element's value. - * If the element is missing, return the annotation's node. - */ - ASTNode getAstNode(ModifiedDeclaration declaration); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Enum.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Enum.java deleted file mode 100644 index da690b148b..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Enum.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.EnumConstantDeclaration; -import org.eclipse.jdt.core.dom.EnumDeclaration; - -/** - * Enum: some covariant overrides plus enumConstants - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface Enum extends AbstractType { - - /** - * Covariant override. - */ - EnumDeclaration getBodyDeclaration(CompilationUnit astRoot); - - /** - * Return the enum's constants - */ - EnumConstantDeclaration[] getEnumConstants(CompilationUnit astRoot); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/EnumConstant.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/EnumConstant.java deleted file mode 100644 index 88693d415a..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/EnumConstant.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.EnumConstantDeclaration; -import org.eclipse.jdt.core.dom.IVariableBinding; - -/** - * Enum constants are part of Enums - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface EnumConstant extends Member { - - String getName(); - - /** - * Covariant override. - */ - IVariableBinding getBinding(CompilationUnit astRoot); - - /** - * Covariant override. - */ - EnumConstantDeclaration getBodyDeclaration(CompilationUnit astRoot); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/ExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/ExpressionConverter.java deleted file mode 100644 index 3475609361..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/ExpressionConverter.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2012 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.Expression; - -/** - * Define the protocol for converting an AST expression back and forth - * from an arbitrary type (e.g. StringLiteral <=> String). - * <p> - * This interface is not intended to be implemented by clients. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @param <T> the type of the object to be converted to and from an expression - */ -public interface ExpressionConverter<T> { - - /** - * Convert the specified object to an - * expression that is owned by the specified AST. - * The type of the object is determined by the - * contract specified by the client. - */ - Expression convert(T object, AST ast); - - /** - * Convert the specified expression to an object of some - * pre-determined type. - */ - T convert(Expression expression); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/FieldAttribute.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/FieldAttribute.java deleted file mode 100644 index 4e014ac72b..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/FieldAttribute.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.FieldDeclaration; -import org.eclipse.jdt.core.dom.IVariableBinding; - -/** - * Field attribute: just some covariant overrides. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface FieldAttribute extends Attribute { - - /** - * Covariant override. - */ - IVariableBinding getBinding(CompilationUnit astRoot); - - /** - * Covariant override. - */ - FieldDeclaration getBodyDeclaration(CompilationUnit astRoot); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedAnnotationAdapter.java deleted file mode 100644 index a55e9cbc77..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedAnnotationAdapter.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.utility.jdt; - - -/** - * Adapt an indexed Java annotation with a simple-to-use interface. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface IndexedAnnotationAdapter extends AnnotationAdapter { - - /** - * Return the the index at which the annotation is situated. - */ - int getIndex(); - - /** - * Move the annotation to the specified index, leaving its original - * position cleared out. - */ - void moveAnnotation(int newIndex); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedDeclarationAnnotationAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedDeclarationAnnotationAdapter.java deleted file mode 100644 index 438f21e1e6..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedDeclarationAnnotationAdapter.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 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.common.core.utility.jdt; - - -/** - * Allow clients to manipulate an annotation within an array of annotations. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface IndexedDeclarationAnnotationAdapter extends DeclarationAnnotationAdapter { - - /** - * Return the the index at which the annotation is situated. - */ - int getIndex(); - - /** - * Move the annotation to the specified index, leaving its original - * position cleared out. - */ - void moveAnnotation(int newIndex, ModifiedDeclaration declaration); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedDeclarationAnnotationElementAdapter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedDeclarationAnnotationElementAdapter.java deleted file mode 100644 index 202e094ba6..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedDeclarationAnnotationElementAdapter.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011, 2012 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.Expression; - -/** - * Provide clients with a pluggable way to manipulate an <em>indexed</em> - * annotation element modifying a "declaration". - * <p> - * This interface is not intended to be implemented by clients. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * @param <T> the type of the objects in the array to be passed to and returned - * by the adapter - */ -public interface IndexedDeclarationAnnotationElementAdapter<T> - extends DeclarationAnnotationElementAdapter<T[]> -{ - /** - * Given the specified declaration, return the expression at the specified - * index. - * @throws IndexOutOfBoundsException if the index is out of range - */ - Expression selectExpression(ModifiedDeclaration declaration, int index); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedExpressionConverter.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedExpressionConverter.java deleted file mode 100644 index 3589bc60ea..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/IndexedExpressionConverter.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011, 2012 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.Expression; - -/** - * A type of {@link ExpressionConverter} that can further retrieve sub-expressions - * based on indices. - * <p> - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * <p> - * This interface is not intended to be implemented by clients. - */ -public interface IndexedExpressionConverter<T> - extends ExpressionConverter<T[]> -{ - /** - * Return the expression at the specified index of the specified expression. - * @throws ArrayIndexOutOfBoundsException if the index is out of range - */ - Expression selectExpression(Expression expression, int index); -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Member.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Member.java deleted file mode 100644 index 8b9f398ea0..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Member.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2010 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.CompilationUnit; - -/** - * Dali manipulates annotations on members (types, fields, and methods). - * This interface simplifies those manipulations. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface Member extends AnnotatedElement { - - /** - * Return whether the member is persistable. - */ - boolean isPersistable(CompilationUnit astRoot); - - /** - * Return whether the member matches the specified member - * and occurrence. - */ - boolean matches(String memberName, int occurrence); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/MethodAttribute.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/MethodAttribute.java deleted file mode 100644 index 2eca93d773..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/MethodAttribute.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.IMethodBinding; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jpt.common.utility.MethodSignature; - -/** - * Method attribute: just some covariant overrides. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface MethodAttribute extends Attribute { - - /** - * Covariant override. - */ - IMethodBinding getBinding(CompilationUnit astRoot); - - /** - * Covariant override. - */ - MethodDeclaration getBodyDeclaration(CompilationUnit astRoot); - - /** - * This method must be used instead of Member#matches(String, int). - */ - boolean matches(MethodSignature signature, int occurrence); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/ModifiedDeclaration.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/ModifiedDeclaration.java deleted file mode 100644 index 331e5391a0..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/ModifiedDeclaration.java +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.AST; -import org.eclipse.jdt.core.dom.ASTNode; -import org.eclipse.jdt.core.dom.Annotation; - -/** - * 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 - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface ModifiedDeclaration { - - /** - * Return the "declaration" AST node. - */ - ASTNode getDeclaration(); - - /** - * Return the "declaration" AST. - */ - AST getAst(); - - /** - * Return the *first* annotation with the specified name. - * Return null if the declaration has no such annotation. - */ - Annotation getAnnotationNamed(String annotationName); - - /** - * Remove the *first* annotation with the specified name from the declaration. - */ - void removeAnnotationNamed(String annotationName); - - /** - * 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. - */ - void replaceAnnotationNamed(String oldAnnotationName, Annotation newAnnotation); - - /** - * Add the specified import to the declaration's compilation unit. - * Return whether the appropriate import was added to or already present in - * the declaration's compilation unit (i.e. the specified class can be - * subsequently referenced using a "short" name). - * Also return true if an import was unnecessary (i.e. the specified class - * is part of the "default" package). - * This does not support adding a "wildcard" import (e.g. "java.util.*"). - */ - boolean addImport(String className); - - /** - * Add the specified static import to the declaration's compilation unit. - * Return whether the appropriate import was added to or already present in - * the declaration's compilation unit (i.e. the specified constant can be - * subsequently referenced using a "short" name). - * Also return true if an import was unnecessary (i.e. the specified enum - * is part of the "default" package). - * This does not support adding a "wildcard" import (e.g. "java.lang.annotation.ElementType.*"). - */ - boolean addStaticImport(String enumConstantName); - - /** - * Add the specified import to the declaration's compilation unit. - * Return whether the appropriate import was added to or already present in - * the declaration's compilation unit (i.e. the specified name can be - * subsequently referenced using a "short" name). - * Also return true if an import was unnecessary (i.e. the specified class - * or enum is part of the "default" package). - * This does not support adding a "wildcard" import (e.g. "java.util.*"). - */ - boolean addImport(String importName, boolean static_); - - /** - * Return whether the specified annotation has the specified - * (fully-qualified) name within the declaration's context; i.e. attempt - * to resolve the annotation's name (using imports etc.) and return - * whether it matches the specified name. - */ - boolean annotationIsNamed(Annotation annotation, String name); - -} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Type.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Type.java deleted file mode 100644 index 5a3a6a5a98..0000000000 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/utility/jdt/Type.java +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2010 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.common.core.utility.jdt; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.eclipse.jdt.core.dom.EnumDeclaration; -import org.eclipse.jdt.core.dom.FieldDeclaration; -import org.eclipse.jdt.core.dom.MethodDeclaration; -import org.eclipse.jdt.core.dom.TypeDeclaration; - -/** - * Type: nestedTypes, nestedEnums, fields, and methods. - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - * - * This interface is not intended to be implemented by clients. - */ -public interface Type extends AbstractType { - - /** - * Covariant override. - */ - TypeDeclaration getBodyDeclaration(CompilationUnit astRoot); - - /** - * Return the type's nested types (does not include annotations or enums). - */ - TypeDeclaration[] getTypes(CompilationUnit astRoot); - - /** - * Return the type's nested enums. - */ - EnumDeclaration[] getEnums(CompilationUnit astRoot); - - /** - * Return the type's fields. - */ - FieldDeclaration[] getFields(CompilationUnit astRoot); - - /** - * Return the type's methods. - */ - MethodDeclaration[] getMethods(CompilationUnit astRoot); - -} |