blob: aa3e7d4efbc97f2c7b21d62bce53e20d9e2519db [file] [log] [blame]
/* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.xmlbeans.impl.jam;
import org.apache.xmlbeans.impl.jam.visitor.MVisitor;
import org.apache.xmlbeans.impl.jam.visitor.JVisitor;
/**
* <p>The root of the java type object model.</p>
*
* @author Patrick Calahan &lt;email: pcal-at-bea-dot-com&gt;
*/
public abstract interface JElement {
/**
* <p>Returns the parent of this abstraction, or null if this
* annotation represents a root abstraction (i.e. a JPackage). The
* JElement hierarchy looks like this:</p>
*
* <pre>
* JPackage
* JClass
* JConstructor
* JField
* JMethod
* JParameter
* JProperty
* JClass (inner class)...
* </pre>
*
* <p>Additionally, any of the abstractions above may in turn have
* child JAnnotations, which may themselves have child
* JAnnotations.</p>
*/
public JElement getParent();
/**
* <p>Returns a simple name of this abstraction. The exact format
* of the name depends on the particular abstraction (see javadoc).
* Please refer to the JAM package documentation for more details on
* naming conventions.</p>
*/
public String getSimpleName();
/**
* <p>Returns a qualified name for this abstraction. The exact format of
* this name depends on the particular abstraction. Please refer to the
* documentation for each JElement subclass for a detailed description
* of the qualified name formats.</p>
*/
public String getQualifiedName();
/**
* Returns an object describing the source file position of this
* elements, or null if the position is unknown on not applicable.
*/
public JSourcePosition getSourcePosition();
/**
* <p>Accepts the given visitor.</p>
*/
public void accept(JVisitor visitor);
/**
* <p>This is not something you want to mess with. It's here only for the
* benefit of some JAM implementations which need a handle back to the
* actual implementation-specific object which is being proxied by this
* JElement.</p>
* @return
*/
public Object getArtifact();
/**
* <p>Returns the same String as getQualifiedName().</p>
*/
public String toString();
}