| /******************************************************************************* |
| * 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.jpa.core.resource.java; |
| |
| import org.eclipse.jpt.common.core.utility.jdt.DeclarationAnnotationAdapter; |
| |
| /** |
| * Interface for dealing with annotations that can be "nested" within arrays. |
| * <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.0 |
| * @since 2.0 |
| */ |
| public interface NestableAnnotation |
| extends Annotation |
| { |
| /** |
| * Move the annotation to the specified index within its container array. |
| * This should only be called when the annotation is actually nested |
| * (as opposed to stand-alone). |
| */ |
| void moveAnnotation(int index); |
| |
| /** |
| * Convert the annotation from "stand-alone" to "nested" within the "container" |
| * annotation adapted by the specified adapter at the specified index. |
| * The index may have a value of only <code>0</code> or <code>1</code>. |
| * <p> |
| * This is used to convert an annotation that is part of the "combination" |
| * pattern where a list containing elements of the annotation |
| * (e.g. {@link JoinColumnAnnotation}) can be represented by either the |
| * annotation itself (when there is only a single element in the collection) |
| * or a "container" annotation (e.g. {@link JoinColumnsAnnotation}) that |
| * holds only a single <code>value</code> element that is the array of |
| * "nested" annnotations. |
| * |
| * @see #convertToStandAlone() |
| */ |
| void convertToNested(ContainerAnnotation<? extends NestableAnnotation> containerAnnotation, DeclarationAnnotationAdapter containerAnnotationAdapter, int index); |
| |
| /** |
| * Convert the annotation from "nested" within the "container" annotation |
| * to "stand-alone". |
| * |
| * @see #convertToNested(ContainerAnnotation, DeclarationAnnotationAdapter, int) |
| */ |
| void convertToStandAlone(); |
| } |