import { CdmAttributeContext, CdmCorpusContext, CdmDocumentDefinition, CdmObject, CdmObjectBase, CdmObjectDefinition, CdmObjectDefinitionBase, CdmObjectReference, CdmTraitCollection, ResolvedAttributeSetBuilder, ResolvedTraitSetBuilder, resolveOptions, VisitCallback } from '../internal';
export declare abstract class CdmObjectReferenceBase extends CdmObjectBase implements CdmObjectReference {
    private TAG;
    /**
     * @internal
     */
    static readonly resAttToken: string;
    readonly appliedTraits: CdmTraitCollection;
    namedReference?: string;
    private _explicitReference;
    get explicitReference(): CdmObjectDefinition;
    set explicitReference(value: CdmObjectDefinition);
    simpleNamedReference?: boolean;
    /**
     * Gets or sets the object's Optional property.
     * This indicates the SDK to not error out in case the definition could not be resolved.
     */
    optional?: boolean;
    /**
     * A portable explicit reference used to manipulate nodes in the attribute context.
     * For more information, refer to the `createPortableReference` method in CdmObjectDef and CdmObjectRef.
     * @internal
     */
    portableReference: CdmObjectDefinitionBase;
    /**
     * @internal
     */
    monikeredDocument?: CdmDocumentDefinition;
    constructor(ctx: CdmCorpusContext, referenceTo: (string | CdmObjectDefinitionBase), simpleReference: boolean);
    /**
     * @internal
     */
    static offsetAttributePromise(ref: string): number;
    /**
     * @internal
     */
    copyToHost(ctx: CdmCorpusContext, refTo: string | CdmObjectDefinitionBase, simpleReference: boolean): CdmObjectReferenceBase;
    /**
     * @deprecated Only for internal use.
     */
    fetchResolvedReference(resOpt?: resolveOptions): CdmObject;
    createSimpleReference(resOpt?: resolveOptions): CdmObjectReference;
    /**
     * @internal
     * Creates a 'portable' reference object to this object. portable means there is no symbolic name set until this reference is placed
     * into some final document.
     */
    createPortableReference(resOpt: resolveOptions): CdmObjectReference;
    /**
     * @internal
     * Creates a 'portable' reference object to this object. portable means there is no symbolic name set until this reference is placed
     * into some final document.
     */
    localizePortableReference(importPath: string): void;
    copy(resOpt?: resolveOptions, host?: CdmObject): CdmObject;
    /**
     * @internal
     */
    abstract copyRefObject(resOpt: resolveOptions, refTo: string | CdmObjectDefinition, simpleReference: boolean, host?: CdmObjectReferenceBase): CdmObjectReferenceBase;
    fetchObjectDefinitionName(): string;
    isDerivedFrom(baseDef: string, resOpt: resolveOptions): boolean;
    fetchObjectDefinition<T extends CdmObjectDefinition>(resOpt?: resolveOptions): T;
    fetchObjectDefinitionAsync<T extends CdmObjectDefinition>(resOpt?: resolveOptions): Promise<T>;
    validate(): boolean;
    visit(pathFrom: string, preChildren: VisitCallback, postChildren: VisitCallback): boolean;
    /**
     * @internal
     */
    abstract visitRef(pathFrom: string, preChildren: VisitCallback, postChildren: VisitCallback): boolean;
    /**
     * @internal
     */
    constructResolvedAttributes(resOpt: resolveOptions, under?: CdmAttributeContext): ResolvedAttributeSetBuilder;
    /**
     * @internal
     */
    constructResolvedTraits(rtsb: ResolvedTraitSetBuilder, resOpt: resolveOptions): void;
}
