All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alibaba.fastffi.clang.DeclCastingGen Maven / Gradle / Ivy

The newest version!
package com.alibaba.fastffi.clang;

import com.alibaba.fastffi.CXXHead;
import com.alibaba.fastffi.CXXHeads;
import com.alibaba.fastffi.CXXTemplate;
import com.alibaba.fastffi.CXXTemplates;
import com.alibaba.fastffi.FFIGen;
import com.alibaba.fastffi.FFILibrary;
import com.alibaba.fastffi.FFINameAlias;
import com.alibaba.fastffi.FFISkip;
import com.alibaba.fastffi.FFISynthetic;
import com.alibaba.fastffi.FFITypeAlias;

@CXXHeads({
    @CXXHead("clang/AST/Decl.h"),
    @CXXHead("clang/AST/DeclCXX.h"),
    @CXXHead("clang/AST/DeclFriend.h"),
    @CXXHead("clang/AST/DeclTemplate.h")
})
@FFILibrary(
    value = "clang::Decl::Casting",
    namespace = "llvm"
)
@FFIGen
@FFISynthetic("com.alibaba.fastffi.clang.DeclCasting")
public abstract interface DeclCastingGen extends DeclCasting {
  @CXXTemplates({
      @CXXTemplate(cxx = {"clang::Decl", "clang::AccessSpecDecl"}, java = {"Decl", "AccessSpecDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::BindingDecl"}, java = {"Decl", "BindingDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::BlockDecl"}, java = {"Decl", "BlockDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::BuiltinTemplateDecl"}, java = {"Decl", "BuiltinTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CapturedDecl"}, java = {"Decl", "CapturedDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassTemplateDecl"}, java = {"Decl", "ClassTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassTemplateSpecializationDecl"}, java = {"Decl", "ClassTemplateSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassTemplatePartialSpecializationDecl"}, java = {"Decl", "ClassTemplatePartialSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassScopeFunctionSpecializationDecl"}, java = {"Decl", "ClassScopeFunctionSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ConceptDecl"}, java = {"Decl", "ConceptDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ConstructorUsingShadowDecl"}, java = {"Decl", "ConstructorUsingShadowDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXConstructorDecl"}, java = {"Decl", "CXXConstructorDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXConversionDecl"}, java = {"Decl", "CXXConversionDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXDestructorDecl"}, java = {"Decl", "CXXDestructorDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXDeductionGuideDecl"}, java = {"Decl", "CXXDeductionGuideDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXMethodDecl"}, java = {"Decl", "CXXMethodDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXRecordDecl"}, java = {"Decl", "CXXRecordDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::DeclaratorDecl"}, java = {"Decl", "DeclaratorDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::DecompositionDecl"}, java = {"Decl", "DecompositionDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::EmptyDecl"}, java = {"Decl", "EmptyDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::EnumDecl"}, java = {"Decl", "EnumDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::EnumConstantDecl"}, java = {"Decl", "EnumConstantDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ExportDecl"}, java = {"Decl", "ExportDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ExternCContextDecl"}, java = {"Decl", "ExternCContextDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FieldDecl"}, java = {"Decl", "FieldDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FileScopeAsmDecl"}, java = {"Decl", "FileScopeAsmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FriendDecl"}, java = {"Decl", "FriendDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FriendTemplateDecl"}, java = {"Decl", "FriendTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FunctionDecl"}, java = {"Decl", "FunctionDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FunctionTemplateDecl"}, java = {"Decl", "FunctionTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ImplicitParamDecl"}, java = {"Decl", "ImplicitParamDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ImportDecl"}, java = {"Decl", "ImportDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::IndirectFieldDecl"}, java = {"Decl", "IndirectFieldDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::LabelDecl"}, java = {"Decl", "LabelDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::LifetimeExtendedTemporaryDecl"}, java = {"Decl", "LifetimeExtendedTemporaryDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::LinkageSpecDecl"}, java = {"Decl", "LinkageSpecDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::MSGuidDecl"}, java = {"Decl", "MSGuidDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::MSPropertyDecl"}, java = {"Decl", "MSPropertyDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NamedDecl"}, java = {"Decl", "NamedDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NamespaceDecl"}, java = {"Decl", "NamespaceDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NamespaceAliasDecl"}, java = {"Decl", "NamespaceAliasDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NonTypeTemplateParmDecl"}, java = {"Decl", "NonTypeTemplateParmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ParmVarDecl"}, java = {"Decl", "ParmVarDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::PragmaCommentDecl"}, java = {"Decl", "PragmaCommentDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::PragmaDetectMismatchDecl"}, java = {"Decl", "PragmaDetectMismatchDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::RecordDecl"}, java = {"Decl", "RecordDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::RedeclarableTemplateDecl"}, java = {"Decl", "RedeclarableTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::RequiresExprBodyDecl"}, java = {"Decl", "RequiresExprBodyDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::StaticAssertDecl"}, java = {"Decl", "StaticAssertDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TagDecl"}, java = {"Decl", "TagDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TemplateDecl"}, java = {"Decl", "TemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TemplateTypeParmDecl"}, java = {"Decl", "TemplateTypeParmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TemplateTemplateParmDecl"}, java = {"Decl", "TemplateTemplateParmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TranslationUnitDecl"}, java = {"Decl", "TranslationUnitDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypeAliasDecl"}, java = {"Decl", "TypeAliasDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypeAliasTemplateDecl"}, java = {"Decl", "TypeAliasTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypeDecl"}, java = {"Decl", "TypeDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypedefDecl"}, java = {"Decl", "TypedefDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypedefNameDecl"}, java = {"Decl", "TypedefNameDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UnresolvedUsingValueDecl"}, java = {"Decl", "UnresolvedUsingValueDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UnresolvedUsingTypenameDecl"}, java = {"Decl", "UnresolvedUsingTypenameDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingDecl"}, java = {"Decl", "UsingDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingDirectiveDecl"}, java = {"Decl", "UsingDirectiveDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingPackDecl"}, java = {"Decl", "UsingPackDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingShadowDecl"}, java = {"Decl", "UsingShadowDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ValueDecl"}, java = {"Decl", "ValueDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarDecl"}, java = {"Decl", "VarDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarTemplateDecl"}, java = {"Decl", "VarTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarTemplateSpecializationDecl"}, java = {"Decl", "VarTemplateSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarTemplatePartialSpecializationDecl"}, java = {"Decl", "VarTemplatePartialSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::DeclContext", "clang::Decl"}, java = {"DeclContext", "Decl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::DeclContext"}, java = {"Decl", "DeclContext"})
  })
  default  To cast(From from, @FFISkip To unused) {
    if (unused == null) {
      throw new NullPointerException("unused must not be null");
    }
    if (unused instanceof AccessSpecDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.AccessSpecDecl) unused);
    }
    if (unused instanceof BindingDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.BindingDecl) unused);
    }
    if (unused instanceof BlockDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.BlockDecl) unused);
    }
    if (unused instanceof BuiltinTemplateDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.BuiltinTemplateDecl) unused);
    }
    if (unused instanceof CapturedDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CapturedDecl) unused);
    }
    if (unused instanceof ClassTemplateDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassTemplateDecl) unused);
    }
    if (unused instanceof ClassTemplateSpecializationDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassTemplateSpecializationDecl) unused);
    }
    if (unused instanceof ClassTemplatePartialSpecializationDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassTemplatePartialSpecializationDecl) unused);
    }
    if (unused instanceof ClassScopeFunctionSpecializationDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassScopeFunctionSpecializationDecl) unused);
    }
    if (unused instanceof ConceptDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ConceptDecl) unused);
    }
    if (unused instanceof ConstructorUsingShadowDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ConstructorUsingShadowDecl) unused);
    }
    if (unused instanceof CXXConstructorDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXConstructorDecl) unused);
    }
    if (unused instanceof CXXConversionDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXConversionDecl) unused);
    }
    if (unused instanceof CXXDestructorDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXDestructorDecl) unused);
    }
    if (unused instanceof CXXDeductionGuideDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXDeductionGuideDecl) unused);
    }
    if (unused instanceof CXXMethodDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXMethodDecl) unused);
    }
    if (unused instanceof CXXRecordDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXRecordDecl) unused);
    }
    if (unused instanceof DeclaratorDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.DeclaratorDecl) unused);
    }
    if (unused instanceof DecompositionDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.DecompositionDecl) unused);
    }
    if (unused instanceof EmptyDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.EmptyDecl) unused);
    }
    if (unused instanceof EnumDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.EnumDecl) unused);
    }
    if (unused instanceof EnumConstantDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.EnumConstantDecl) unused);
    }
    if (unused instanceof ExportDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ExportDecl) unused);
    }
    if (unused instanceof ExternCContextDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ExternCContextDecl) unused);
    }
    if (unused instanceof FieldDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FieldDecl) unused);
    }
    if (unused instanceof FileScopeAsmDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FileScopeAsmDecl) unused);
    }
    if (unused instanceof FriendDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FriendDecl) unused);
    }
    if (unused instanceof FriendTemplateDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FriendTemplateDecl) unused);
    }
    if (unused instanceof FunctionDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FunctionDecl) unused);
    }
    if (unused instanceof FunctionTemplateDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FunctionTemplateDecl) unused);
    }
    if (unused instanceof ImplicitParamDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ImplicitParamDecl) unused);
    }
    if (unused instanceof ImportDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ImportDecl) unused);
    }
    if (unused instanceof IndirectFieldDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.IndirectFieldDecl) unused);
    }
    if (unused instanceof LabelDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.LabelDecl) unused);
    }
    if (unused instanceof LifetimeExtendedTemporaryDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.LifetimeExtendedTemporaryDecl) unused);
    }
    if (unused instanceof LinkageSpecDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.LinkageSpecDecl) unused);
    }
    if (unused instanceof MSGuidDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.MSGuidDecl) unused);
    }
    if (unused instanceof MSPropertyDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.MSPropertyDecl) unused);
    }
    if (unused instanceof NamedDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NamedDecl) unused);
    }
    if (unused instanceof NamespaceDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NamespaceDecl) unused);
    }
    if (unused instanceof NamespaceAliasDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NamespaceAliasDecl) unused);
    }
    if (unused instanceof NonTypeTemplateParmDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NonTypeTemplateParmDecl) unused);
    }
    if (unused instanceof ParmVarDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ParmVarDecl) unused);
    }
    if (unused instanceof PragmaCommentDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.PragmaCommentDecl) unused);
    }
    if (unused instanceof PragmaDetectMismatchDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.PragmaDetectMismatchDecl) unused);
    }
    if (unused instanceof RecordDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.RecordDecl) unused);
    }
    if (unused instanceof RedeclarableTemplateDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.RedeclarableTemplateDecl) unused);
    }
    if (unused instanceof RequiresExprBodyDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.RequiresExprBodyDecl) unused);
    }
    if (unused instanceof StaticAssertDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.StaticAssertDecl) unused);
    }
    if (unused instanceof TagDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TagDecl) unused);
    }
    if (unused instanceof TemplateDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TemplateDecl) unused);
    }
    if (unused instanceof TemplateTypeParmDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TemplateTypeParmDecl) unused);
    }
    if (unused instanceof TemplateTemplateParmDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TemplateTemplateParmDecl) unused);
    }
    if (unused instanceof TranslationUnitDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TranslationUnitDecl) unused);
    }
    if (unused instanceof TypeAliasDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypeAliasDecl) unused);
    }
    if (unused instanceof TypeAliasTemplateDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypeAliasTemplateDecl) unused);
    }
    if (unused instanceof TypeDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypeDecl) unused);
    }
    if (unused instanceof TypedefDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypedefDecl) unused);
    }
    if (unused instanceof TypedefNameDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypedefNameDecl) unused);
    }
    if (unused instanceof UnresolvedUsingValueDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UnresolvedUsingValueDecl) unused);
    }
    if (unused instanceof UnresolvedUsingTypenameDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UnresolvedUsingTypenameDecl) unused);
    }
    if (unused instanceof UsingDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingDecl) unused);
    }
    if (unused instanceof UsingDirectiveDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingDirectiveDecl) unused);
    }
    if (unused instanceof UsingPackDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingPackDecl) unused);
    }
    if (unused instanceof UsingShadowDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingShadowDecl) unused);
    }
    if (unused instanceof ValueDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ValueDecl) unused);
    }
    if (unused instanceof VarDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarDecl) unused);
    }
    if (unused instanceof VarTemplateDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarTemplateDecl) unused);
    }
    if (unused instanceof VarTemplateSpecializationDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarTemplateSpecializationDecl) unused);
    }
    if (unused instanceof VarTemplatePartialSpecializationDecl)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarTemplatePartialSpecializationDecl) unused);
    }
    if (unused instanceof Decl)  {
      return (To) cast((com.alibaba.fastffi.clang.DeclContext) from, (com.alibaba.fastffi.clang.Decl) unused);
    }
    if (unused instanceof DeclContext)  {
      return (To) cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.DeclContext) unused);
    }
    throw new RuntimeException("Cannot call DeclCastingGen.cast, no template instantiation for the type arguments.");
  }

  @FFITypeAlias("clang::AccessSpecDecl")
  @CXXTemplate(
      cxx = "clang::AccessSpecDecl",
      java = "AccessSpecDecl"
  )
  @FFINameAlias("cast")
  AccessSpecDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::AccessSpecDecl") @FFISkip AccessSpecDecl unused);

  @FFITypeAlias("clang::BindingDecl")
  @CXXTemplate(
      cxx = "clang::BindingDecl",
      java = "BindingDecl"
  )
  @FFINameAlias("cast")
  BindingDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::BindingDecl") @FFISkip BindingDecl unused);

  @FFITypeAlias("clang::BlockDecl")
  @CXXTemplate(
      cxx = "clang::BlockDecl",
      java = "BlockDecl"
  )
  @FFINameAlias("cast")
  BlockDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::BlockDecl") @FFISkip BlockDecl unused);

  @FFITypeAlias("clang::BuiltinTemplateDecl")
  @CXXTemplate(
      cxx = "clang::BuiltinTemplateDecl",
      java = "BuiltinTemplateDecl"
  )
  @FFINameAlias("cast")
  BuiltinTemplateDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::BuiltinTemplateDecl") @FFISkip BuiltinTemplateDecl unused);

  @FFITypeAlias("clang::CapturedDecl")
  @CXXTemplate(
      cxx = "clang::CapturedDecl",
      java = "CapturedDecl"
  )
  @FFINameAlias("cast")
  CapturedDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CapturedDecl") @FFISkip CapturedDecl unused);

  @FFITypeAlias("clang::ClassTemplateDecl")
  @CXXTemplate(
      cxx = "clang::ClassTemplateDecl",
      java = "ClassTemplateDecl"
  )
  @FFINameAlias("cast")
  ClassTemplateDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassTemplateDecl") @FFISkip ClassTemplateDecl unused);

  @FFITypeAlias("clang::ClassTemplateSpecializationDecl")
  @CXXTemplate(
      cxx = "clang::ClassTemplateSpecializationDecl",
      java = "ClassTemplateSpecializationDecl"
  )
  @FFINameAlias("cast")
  ClassTemplateSpecializationDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassTemplateSpecializationDecl") @FFISkip ClassTemplateSpecializationDecl unused);

  @FFITypeAlias("clang::ClassTemplatePartialSpecializationDecl")
  @CXXTemplate(
      cxx = "clang::ClassTemplatePartialSpecializationDecl",
      java = "ClassTemplatePartialSpecializationDecl"
  )
  @FFINameAlias("cast")
  ClassTemplatePartialSpecializationDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassTemplatePartialSpecializationDecl") @FFISkip ClassTemplatePartialSpecializationDecl unused);

  @FFITypeAlias("clang::ClassScopeFunctionSpecializationDecl")
  @CXXTemplate(
      cxx = "clang::ClassScopeFunctionSpecializationDecl",
      java = "ClassScopeFunctionSpecializationDecl"
  )
  @FFINameAlias("cast")
  ClassScopeFunctionSpecializationDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassScopeFunctionSpecializationDecl") @FFISkip ClassScopeFunctionSpecializationDecl unused);

  @FFITypeAlias("clang::ConceptDecl")
  @CXXTemplate(
      cxx = "clang::ConceptDecl",
      java = "ConceptDecl"
  )
  @FFINameAlias("cast")
  ConceptDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ConceptDecl") @FFISkip ConceptDecl unused);

  @FFITypeAlias("clang::ConstructorUsingShadowDecl")
  @CXXTemplate(
      cxx = "clang::ConstructorUsingShadowDecl",
      java = "ConstructorUsingShadowDecl"
  )
  @FFINameAlias("cast")
  ConstructorUsingShadowDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ConstructorUsingShadowDecl") @FFISkip ConstructorUsingShadowDecl unused);

  @FFITypeAlias("clang::CXXConstructorDecl")
  @CXXTemplate(
      cxx = "clang::CXXConstructorDecl",
      java = "CXXConstructorDecl"
  )
  @FFINameAlias("cast")
  CXXConstructorDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXConstructorDecl") @FFISkip CXXConstructorDecl unused);

  @FFITypeAlias("clang::CXXConversionDecl")
  @CXXTemplate(
      cxx = "clang::CXXConversionDecl",
      java = "CXXConversionDecl"
  )
  @FFINameAlias("cast")
  CXXConversionDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXConversionDecl") @FFISkip CXXConversionDecl unused);

  @FFITypeAlias("clang::CXXDestructorDecl")
  @CXXTemplate(
      cxx = "clang::CXXDestructorDecl",
      java = "CXXDestructorDecl"
  )
  @FFINameAlias("cast")
  CXXDestructorDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXDestructorDecl") @FFISkip CXXDestructorDecl unused);

  @FFITypeAlias("clang::CXXDeductionGuideDecl")
  @CXXTemplate(
      cxx = "clang::CXXDeductionGuideDecl",
      java = "CXXDeductionGuideDecl"
  )
  @FFINameAlias("cast")
  CXXDeductionGuideDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXDeductionGuideDecl") @FFISkip CXXDeductionGuideDecl unused);

  @FFITypeAlias("clang::CXXMethodDecl")
  @CXXTemplate(
      cxx = "clang::CXXMethodDecl",
      java = "CXXMethodDecl"
  )
  @FFINameAlias("cast")
  CXXMethodDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXMethodDecl") @FFISkip CXXMethodDecl unused);

  @FFITypeAlias("clang::CXXRecordDecl")
  @CXXTemplate(
      cxx = "clang::CXXRecordDecl",
      java = "CXXRecordDecl"
  )
  @FFINameAlias("cast")
  CXXRecordDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXRecordDecl") @FFISkip CXXRecordDecl unused);

  @FFITypeAlias("clang::DeclaratorDecl")
  @CXXTemplate(
      cxx = "clang::DeclaratorDecl",
      java = "DeclaratorDecl"
  )
  @FFINameAlias("cast")
  DeclaratorDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::DeclaratorDecl") @FFISkip DeclaratorDecl unused);

  @FFITypeAlias("clang::DecompositionDecl")
  @CXXTemplate(
      cxx = "clang::DecompositionDecl",
      java = "DecompositionDecl"
  )
  @FFINameAlias("cast")
  DecompositionDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::DecompositionDecl") @FFISkip DecompositionDecl unused);

  @FFITypeAlias("clang::EmptyDecl")
  @CXXTemplate(
      cxx = "clang::EmptyDecl",
      java = "EmptyDecl"
  )
  @FFINameAlias("cast")
  EmptyDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::EmptyDecl") @FFISkip EmptyDecl unused);

  @FFITypeAlias("clang::EnumDecl")
  @CXXTemplate(
      cxx = "clang::EnumDecl",
      java = "EnumDecl"
  )
  @FFINameAlias("cast")
  EnumDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::EnumDecl") @FFISkip EnumDecl unused);

  @FFITypeAlias("clang::EnumConstantDecl")
  @CXXTemplate(
      cxx = "clang::EnumConstantDecl",
      java = "EnumConstantDecl"
  )
  @FFINameAlias("cast")
  EnumConstantDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::EnumConstantDecl") @FFISkip EnumConstantDecl unused);

  @FFITypeAlias("clang::ExportDecl")
  @CXXTemplate(
      cxx = "clang::ExportDecl",
      java = "ExportDecl"
  )
  @FFINameAlias("cast")
  ExportDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ExportDecl") @FFISkip ExportDecl unused);

  @FFITypeAlias("clang::ExternCContextDecl")
  @CXXTemplate(
      cxx = "clang::ExternCContextDecl",
      java = "ExternCContextDecl"
  )
  @FFINameAlias("cast")
  ExternCContextDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ExternCContextDecl") @FFISkip ExternCContextDecl unused);

  @FFITypeAlias("clang::FieldDecl")
  @CXXTemplate(
      cxx = "clang::FieldDecl",
      java = "FieldDecl"
  )
  @FFINameAlias("cast")
  FieldDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FieldDecl") @FFISkip FieldDecl unused);

  @FFITypeAlias("clang::FileScopeAsmDecl")
  @CXXTemplate(
      cxx = "clang::FileScopeAsmDecl",
      java = "FileScopeAsmDecl"
  )
  @FFINameAlias("cast")
  FileScopeAsmDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FileScopeAsmDecl") @FFISkip FileScopeAsmDecl unused);

  @FFITypeAlias("clang::FriendDecl")
  @CXXTemplate(
      cxx = "clang::FriendDecl",
      java = "FriendDecl"
  )
  @FFINameAlias("cast")
  FriendDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FriendDecl") @FFISkip FriendDecl unused);

  @FFITypeAlias("clang::FriendTemplateDecl")
  @CXXTemplate(
      cxx = "clang::FriendTemplateDecl",
      java = "FriendTemplateDecl"
  )
  @FFINameAlias("cast")
  FriendTemplateDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FriendTemplateDecl") @FFISkip FriendTemplateDecl unused);

  @FFITypeAlias("clang::FunctionDecl")
  @CXXTemplate(
      cxx = "clang::FunctionDecl",
      java = "FunctionDecl"
  )
  @FFINameAlias("cast")
  FunctionDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FunctionDecl") @FFISkip FunctionDecl unused);

  @FFITypeAlias("clang::FunctionTemplateDecl")
  @CXXTemplate(
      cxx = "clang::FunctionTemplateDecl",
      java = "FunctionTemplateDecl"
  )
  @FFINameAlias("cast")
  FunctionTemplateDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FunctionTemplateDecl") @FFISkip FunctionTemplateDecl unused);

  @FFITypeAlias("clang::ImplicitParamDecl")
  @CXXTemplate(
      cxx = "clang::ImplicitParamDecl",
      java = "ImplicitParamDecl"
  )
  @FFINameAlias("cast")
  ImplicitParamDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ImplicitParamDecl") @FFISkip ImplicitParamDecl unused);

  @FFITypeAlias("clang::ImportDecl")
  @CXXTemplate(
      cxx = "clang::ImportDecl",
      java = "ImportDecl"
  )
  @FFINameAlias("cast")
  ImportDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ImportDecl") @FFISkip ImportDecl unused);

  @FFITypeAlias("clang::IndirectFieldDecl")
  @CXXTemplate(
      cxx = "clang::IndirectFieldDecl",
      java = "IndirectFieldDecl"
  )
  @FFINameAlias("cast")
  IndirectFieldDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::IndirectFieldDecl") @FFISkip IndirectFieldDecl unused);

  @FFITypeAlias("clang::LabelDecl")
  @CXXTemplate(
      cxx = "clang::LabelDecl",
      java = "LabelDecl"
  )
  @FFINameAlias("cast")
  LabelDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::LabelDecl") @FFISkip LabelDecl unused);

  @FFITypeAlias("clang::LifetimeExtendedTemporaryDecl")
  @CXXTemplate(
      cxx = "clang::LifetimeExtendedTemporaryDecl",
      java = "LifetimeExtendedTemporaryDecl"
  )
  @FFINameAlias("cast")
  LifetimeExtendedTemporaryDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::LifetimeExtendedTemporaryDecl") @FFISkip LifetimeExtendedTemporaryDecl unused);

  @FFITypeAlias("clang::LinkageSpecDecl")
  @CXXTemplate(
      cxx = "clang::LinkageSpecDecl",
      java = "LinkageSpecDecl"
  )
  @FFINameAlias("cast")
  LinkageSpecDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::LinkageSpecDecl") @FFISkip LinkageSpecDecl unused);

  @FFITypeAlias("clang::MSGuidDecl")
  @CXXTemplate(
      cxx = "clang::MSGuidDecl",
      java = "MSGuidDecl"
  )
  @FFINameAlias("cast")
  MSGuidDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::MSGuidDecl") @FFISkip MSGuidDecl unused);

  @FFITypeAlias("clang::MSPropertyDecl")
  @CXXTemplate(
      cxx = "clang::MSPropertyDecl",
      java = "MSPropertyDecl"
  )
  @FFINameAlias("cast")
  MSPropertyDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::MSPropertyDecl") @FFISkip MSPropertyDecl unused);

  @FFITypeAlias("clang::NamedDecl")
  @CXXTemplate(
      cxx = "clang::NamedDecl",
      java = "NamedDecl"
  )
  @FFINameAlias("cast")
  NamedDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NamedDecl") @FFISkip NamedDecl unused);

  @FFITypeAlias("clang::NamespaceDecl")
  @CXXTemplate(
      cxx = "clang::NamespaceDecl",
      java = "NamespaceDecl"
  )
  @FFINameAlias("cast")
  NamespaceDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NamespaceDecl") @FFISkip NamespaceDecl unused);

  @FFITypeAlias("clang::NamespaceAliasDecl")
  @CXXTemplate(
      cxx = "clang::NamespaceAliasDecl",
      java = "NamespaceAliasDecl"
  )
  @FFINameAlias("cast")
  NamespaceAliasDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NamespaceAliasDecl") @FFISkip NamespaceAliasDecl unused);

  @FFITypeAlias("clang::NonTypeTemplateParmDecl")
  @CXXTemplate(
      cxx = "clang::NonTypeTemplateParmDecl",
      java = "NonTypeTemplateParmDecl"
  )
  @FFINameAlias("cast")
  NonTypeTemplateParmDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NonTypeTemplateParmDecl") @FFISkip NonTypeTemplateParmDecl unused);

  @FFITypeAlias("clang::ParmVarDecl")
  @CXXTemplate(
      cxx = "clang::ParmVarDecl",
      java = "ParmVarDecl"
  )
  @FFINameAlias("cast")
  ParmVarDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ParmVarDecl") @FFISkip ParmVarDecl unused);

  @FFITypeAlias("clang::PragmaCommentDecl")
  @CXXTemplate(
      cxx = "clang::PragmaCommentDecl",
      java = "PragmaCommentDecl"
  )
  @FFINameAlias("cast")
  PragmaCommentDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::PragmaCommentDecl") @FFISkip PragmaCommentDecl unused);

  @FFITypeAlias("clang::PragmaDetectMismatchDecl")
  @CXXTemplate(
      cxx = "clang::PragmaDetectMismatchDecl",
      java = "PragmaDetectMismatchDecl"
  )
  @FFINameAlias("cast")
  PragmaDetectMismatchDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::PragmaDetectMismatchDecl") @FFISkip PragmaDetectMismatchDecl unused);

  @FFITypeAlias("clang::RecordDecl")
  @CXXTemplate(
      cxx = "clang::RecordDecl",
      java = "RecordDecl"
  )
  @FFINameAlias("cast")
  RecordDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::RecordDecl") @FFISkip RecordDecl unused);

  @FFITypeAlias("clang::RedeclarableTemplateDecl")
  @CXXTemplate(
      cxx = "clang::RedeclarableTemplateDecl",
      java = "RedeclarableTemplateDecl"
  )
  @FFINameAlias("cast")
  RedeclarableTemplateDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::RedeclarableTemplateDecl") @FFISkip RedeclarableTemplateDecl unused);

  @FFITypeAlias("clang::RequiresExprBodyDecl")
  @CXXTemplate(
      cxx = "clang::RequiresExprBodyDecl",
      java = "RequiresExprBodyDecl"
  )
  @FFINameAlias("cast")
  RequiresExprBodyDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::RequiresExprBodyDecl") @FFISkip RequiresExprBodyDecl unused);

  @FFITypeAlias("clang::StaticAssertDecl")
  @CXXTemplate(
      cxx = "clang::StaticAssertDecl",
      java = "StaticAssertDecl"
  )
  @FFINameAlias("cast")
  StaticAssertDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::StaticAssertDecl") @FFISkip StaticAssertDecl unused);

  @FFITypeAlias("clang::TagDecl")
  @CXXTemplate(
      cxx = "clang::TagDecl",
      java = "TagDecl"
  )
  @FFINameAlias("cast")
  TagDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TagDecl") @FFISkip TagDecl unused);

  @FFITypeAlias("clang::TemplateDecl")
  @CXXTemplate(
      cxx = "clang::TemplateDecl",
      java = "TemplateDecl"
  )
  @FFINameAlias("cast")
  TemplateDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TemplateDecl") @FFISkip TemplateDecl unused);

  @FFITypeAlias("clang::TemplateTypeParmDecl")
  @CXXTemplate(
      cxx = "clang::TemplateTypeParmDecl",
      java = "TemplateTypeParmDecl"
  )
  @FFINameAlias("cast")
  TemplateTypeParmDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TemplateTypeParmDecl") @FFISkip TemplateTypeParmDecl unused);

  @FFITypeAlias("clang::TemplateTemplateParmDecl")
  @CXXTemplate(
      cxx = "clang::TemplateTemplateParmDecl",
      java = "TemplateTemplateParmDecl"
  )
  @FFINameAlias("cast")
  TemplateTemplateParmDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TemplateTemplateParmDecl") @FFISkip TemplateTemplateParmDecl unused);

  @FFITypeAlias("clang::TranslationUnitDecl")
  @CXXTemplate(
      cxx = "clang::TranslationUnitDecl",
      java = "TranslationUnitDecl"
  )
  @FFINameAlias("cast")
  TranslationUnitDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TranslationUnitDecl") @FFISkip TranslationUnitDecl unused);

  @FFITypeAlias("clang::TypeAliasDecl")
  @CXXTemplate(
      cxx = "clang::TypeAliasDecl",
      java = "TypeAliasDecl"
  )
  @FFINameAlias("cast")
  TypeAliasDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypeAliasDecl") @FFISkip TypeAliasDecl unused);

  @FFITypeAlias("clang::TypeAliasTemplateDecl")
  @CXXTemplate(
      cxx = "clang::TypeAliasTemplateDecl",
      java = "TypeAliasTemplateDecl"
  )
  @FFINameAlias("cast")
  TypeAliasTemplateDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypeAliasTemplateDecl") @FFISkip TypeAliasTemplateDecl unused);

  @FFITypeAlias("clang::TypeDecl")
  @CXXTemplate(
      cxx = "clang::TypeDecl",
      java = "TypeDecl"
  )
  @FFINameAlias("cast")
  TypeDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypeDecl") @FFISkip TypeDecl unused);

  @FFITypeAlias("clang::TypedefDecl")
  @CXXTemplate(
      cxx = "clang::TypedefDecl",
      java = "TypedefDecl"
  )
  @FFINameAlias("cast")
  TypedefDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypedefDecl") @FFISkip TypedefDecl unused);

  @FFITypeAlias("clang::TypedefNameDecl")
  @CXXTemplate(
      cxx = "clang::TypedefNameDecl",
      java = "TypedefNameDecl"
  )
  @FFINameAlias("cast")
  TypedefNameDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypedefNameDecl") @FFISkip TypedefNameDecl unused);

  @FFITypeAlias("clang::UnresolvedUsingValueDecl")
  @CXXTemplate(
      cxx = "clang::UnresolvedUsingValueDecl",
      java = "UnresolvedUsingValueDecl"
  )
  @FFINameAlias("cast")
  UnresolvedUsingValueDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UnresolvedUsingValueDecl") @FFISkip UnresolvedUsingValueDecl unused);

  @FFITypeAlias("clang::UnresolvedUsingTypenameDecl")
  @CXXTemplate(
      cxx = "clang::UnresolvedUsingTypenameDecl",
      java = "UnresolvedUsingTypenameDecl"
  )
  @FFINameAlias("cast")
  UnresolvedUsingTypenameDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UnresolvedUsingTypenameDecl") @FFISkip UnresolvedUsingTypenameDecl unused);

  @FFITypeAlias("clang::UsingDecl")
  @CXXTemplate(
      cxx = "clang::UsingDecl",
      java = "UsingDecl"
  )
  @FFINameAlias("cast")
  UsingDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingDecl") @FFISkip UsingDecl unused);

  @FFITypeAlias("clang::UsingDirectiveDecl")
  @CXXTemplate(
      cxx = "clang::UsingDirectiveDecl",
      java = "UsingDirectiveDecl"
  )
  @FFINameAlias("cast")
  UsingDirectiveDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingDirectiveDecl") @FFISkip UsingDirectiveDecl unused);

  @FFITypeAlias("clang::UsingPackDecl")
  @CXXTemplate(
      cxx = "clang::UsingPackDecl",
      java = "UsingPackDecl"
  )
  @FFINameAlias("cast")
  UsingPackDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingPackDecl") @FFISkip UsingPackDecl unused);

  @FFITypeAlias("clang::UsingShadowDecl")
  @CXXTemplate(
      cxx = "clang::UsingShadowDecl",
      java = "UsingShadowDecl"
  )
  @FFINameAlias("cast")
  UsingShadowDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingShadowDecl") @FFISkip UsingShadowDecl unused);

  @FFITypeAlias("clang::ValueDecl")
  @CXXTemplate(
      cxx = "clang::ValueDecl",
      java = "ValueDecl"
  )
  @FFINameAlias("cast")
  ValueDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ValueDecl") @FFISkip ValueDecl unused);

  @FFITypeAlias("clang::VarDecl")
  @CXXTemplate(
      cxx = "clang::VarDecl",
      java = "VarDecl"
  )
  @FFINameAlias("cast")
  VarDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarDecl") @FFISkip VarDecl unused);

  @FFITypeAlias("clang::VarTemplateDecl")
  @CXXTemplate(
      cxx = "clang::VarTemplateDecl",
      java = "VarTemplateDecl"
  )
  @FFINameAlias("cast")
  VarTemplateDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarTemplateDecl") @FFISkip VarTemplateDecl unused);

  @FFITypeAlias("clang::VarTemplateSpecializationDecl")
  @CXXTemplate(
      cxx = "clang::VarTemplateSpecializationDecl",
      java = "VarTemplateSpecializationDecl"
  )
  @FFINameAlias("cast")
  VarTemplateSpecializationDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarTemplateSpecializationDecl") @FFISkip VarTemplateSpecializationDecl unused);

  @FFITypeAlias("clang::VarTemplatePartialSpecializationDecl")
  @CXXTemplate(
      cxx = "clang::VarTemplatePartialSpecializationDecl",
      java = "VarTemplatePartialSpecializationDecl"
  )
  @FFINameAlias("cast")
  VarTemplatePartialSpecializationDecl cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarTemplatePartialSpecializationDecl") @FFISkip VarTemplatePartialSpecializationDecl unused);

  @FFITypeAlias("clang::Decl")
  @CXXTemplate(
      cxx = "clang::Decl",
      java = "Decl"
  )
  @FFINameAlias("cast")
  Decl cast(@FFITypeAlias("clang::DeclContext") DeclContext from,
      @FFITypeAlias("clang::Decl") @FFISkip Decl unused);

  @FFITypeAlias("clang::DeclContext")
  @CXXTemplate(
      cxx = "clang::DeclContext",
      java = "DeclContext"
  )
  @FFINameAlias("cast")
  DeclContext cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::DeclContext") @FFISkip DeclContext unused);

  @CXXTemplates({
      @CXXTemplate(cxx = {"clang::Decl", "clang::AccessSpecDecl"}, java = {"Decl", "AccessSpecDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::BindingDecl"}, java = {"Decl", "BindingDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::BlockDecl"}, java = {"Decl", "BlockDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::BuiltinTemplateDecl"}, java = {"Decl", "BuiltinTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CapturedDecl"}, java = {"Decl", "CapturedDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassTemplateDecl"}, java = {"Decl", "ClassTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassTemplateSpecializationDecl"}, java = {"Decl", "ClassTemplateSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassTemplatePartialSpecializationDecl"}, java = {"Decl", "ClassTemplatePartialSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassScopeFunctionSpecializationDecl"}, java = {"Decl", "ClassScopeFunctionSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ConceptDecl"}, java = {"Decl", "ConceptDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ConstructorUsingShadowDecl"}, java = {"Decl", "ConstructorUsingShadowDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXConstructorDecl"}, java = {"Decl", "CXXConstructorDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXConversionDecl"}, java = {"Decl", "CXXConversionDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXDestructorDecl"}, java = {"Decl", "CXXDestructorDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXDeductionGuideDecl"}, java = {"Decl", "CXXDeductionGuideDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXMethodDecl"}, java = {"Decl", "CXXMethodDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXRecordDecl"}, java = {"Decl", "CXXRecordDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::DeclaratorDecl"}, java = {"Decl", "DeclaratorDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::DecompositionDecl"}, java = {"Decl", "DecompositionDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::EmptyDecl"}, java = {"Decl", "EmptyDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::EnumDecl"}, java = {"Decl", "EnumDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::EnumConstantDecl"}, java = {"Decl", "EnumConstantDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ExportDecl"}, java = {"Decl", "ExportDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ExternCContextDecl"}, java = {"Decl", "ExternCContextDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FieldDecl"}, java = {"Decl", "FieldDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FileScopeAsmDecl"}, java = {"Decl", "FileScopeAsmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FriendDecl"}, java = {"Decl", "FriendDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FriendTemplateDecl"}, java = {"Decl", "FriendTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FunctionDecl"}, java = {"Decl", "FunctionDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FunctionTemplateDecl"}, java = {"Decl", "FunctionTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ImplicitParamDecl"}, java = {"Decl", "ImplicitParamDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ImportDecl"}, java = {"Decl", "ImportDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::IndirectFieldDecl"}, java = {"Decl", "IndirectFieldDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::LabelDecl"}, java = {"Decl", "LabelDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::LifetimeExtendedTemporaryDecl"}, java = {"Decl", "LifetimeExtendedTemporaryDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::LinkageSpecDecl"}, java = {"Decl", "LinkageSpecDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::MSGuidDecl"}, java = {"Decl", "MSGuidDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::MSPropertyDecl"}, java = {"Decl", "MSPropertyDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NamedDecl"}, java = {"Decl", "NamedDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NamespaceDecl"}, java = {"Decl", "NamespaceDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NamespaceAliasDecl"}, java = {"Decl", "NamespaceAliasDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NonTypeTemplateParmDecl"}, java = {"Decl", "NonTypeTemplateParmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ParmVarDecl"}, java = {"Decl", "ParmVarDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::PragmaCommentDecl"}, java = {"Decl", "PragmaCommentDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::PragmaDetectMismatchDecl"}, java = {"Decl", "PragmaDetectMismatchDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::RecordDecl"}, java = {"Decl", "RecordDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::RedeclarableTemplateDecl"}, java = {"Decl", "RedeclarableTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::RequiresExprBodyDecl"}, java = {"Decl", "RequiresExprBodyDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::StaticAssertDecl"}, java = {"Decl", "StaticAssertDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TagDecl"}, java = {"Decl", "TagDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TemplateDecl"}, java = {"Decl", "TemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TemplateTypeParmDecl"}, java = {"Decl", "TemplateTypeParmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TemplateTemplateParmDecl"}, java = {"Decl", "TemplateTemplateParmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TranslationUnitDecl"}, java = {"Decl", "TranslationUnitDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypeAliasDecl"}, java = {"Decl", "TypeAliasDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypeAliasTemplateDecl"}, java = {"Decl", "TypeAliasTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypeDecl"}, java = {"Decl", "TypeDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypedefDecl"}, java = {"Decl", "TypedefDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypedefNameDecl"}, java = {"Decl", "TypedefNameDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UnresolvedUsingValueDecl"}, java = {"Decl", "UnresolvedUsingValueDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UnresolvedUsingTypenameDecl"}, java = {"Decl", "UnresolvedUsingTypenameDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingDecl"}, java = {"Decl", "UsingDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingDirectiveDecl"}, java = {"Decl", "UsingDirectiveDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingPackDecl"}, java = {"Decl", "UsingPackDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingShadowDecl"}, java = {"Decl", "UsingShadowDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ValueDecl"}, java = {"Decl", "ValueDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarDecl"}, java = {"Decl", "VarDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarTemplateDecl"}, java = {"Decl", "VarTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarTemplateSpecializationDecl"}, java = {"Decl", "VarTemplateSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarTemplatePartialSpecializationDecl"}, java = {"Decl", "VarTemplatePartialSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::DeclContext", "clang::Decl"}, java = {"DeclContext", "Decl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::DeclContext"}, java = {"Decl", "DeclContext"})
  })
  default  To dyn_cast(From from, @FFISkip To unused) {
    if (unused == null) {
      throw new NullPointerException("unused must not be null");
    }
    if (unused instanceof AccessSpecDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.AccessSpecDecl) unused);
    }
    if (unused instanceof BindingDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.BindingDecl) unused);
    }
    if (unused instanceof BlockDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.BlockDecl) unused);
    }
    if (unused instanceof BuiltinTemplateDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.BuiltinTemplateDecl) unused);
    }
    if (unused instanceof CapturedDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CapturedDecl) unused);
    }
    if (unused instanceof ClassTemplateDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassTemplateDecl) unused);
    }
    if (unused instanceof ClassTemplateSpecializationDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassTemplateSpecializationDecl) unused);
    }
    if (unused instanceof ClassTemplatePartialSpecializationDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassTemplatePartialSpecializationDecl) unused);
    }
    if (unused instanceof ClassScopeFunctionSpecializationDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassScopeFunctionSpecializationDecl) unused);
    }
    if (unused instanceof ConceptDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ConceptDecl) unused);
    }
    if (unused instanceof ConstructorUsingShadowDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ConstructorUsingShadowDecl) unused);
    }
    if (unused instanceof CXXConstructorDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXConstructorDecl) unused);
    }
    if (unused instanceof CXXConversionDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXConversionDecl) unused);
    }
    if (unused instanceof CXXDestructorDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXDestructorDecl) unused);
    }
    if (unused instanceof CXXDeductionGuideDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXDeductionGuideDecl) unused);
    }
    if (unused instanceof CXXMethodDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXMethodDecl) unused);
    }
    if (unused instanceof CXXRecordDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXRecordDecl) unused);
    }
    if (unused instanceof DeclaratorDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.DeclaratorDecl) unused);
    }
    if (unused instanceof DecompositionDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.DecompositionDecl) unused);
    }
    if (unused instanceof EmptyDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.EmptyDecl) unused);
    }
    if (unused instanceof EnumDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.EnumDecl) unused);
    }
    if (unused instanceof EnumConstantDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.EnumConstantDecl) unused);
    }
    if (unused instanceof ExportDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ExportDecl) unused);
    }
    if (unused instanceof ExternCContextDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ExternCContextDecl) unused);
    }
    if (unused instanceof FieldDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FieldDecl) unused);
    }
    if (unused instanceof FileScopeAsmDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FileScopeAsmDecl) unused);
    }
    if (unused instanceof FriendDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FriendDecl) unused);
    }
    if (unused instanceof FriendTemplateDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FriendTemplateDecl) unused);
    }
    if (unused instanceof FunctionDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FunctionDecl) unused);
    }
    if (unused instanceof FunctionTemplateDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FunctionTemplateDecl) unused);
    }
    if (unused instanceof ImplicitParamDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ImplicitParamDecl) unused);
    }
    if (unused instanceof ImportDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ImportDecl) unused);
    }
    if (unused instanceof IndirectFieldDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.IndirectFieldDecl) unused);
    }
    if (unused instanceof LabelDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.LabelDecl) unused);
    }
    if (unused instanceof LifetimeExtendedTemporaryDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.LifetimeExtendedTemporaryDecl) unused);
    }
    if (unused instanceof LinkageSpecDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.LinkageSpecDecl) unused);
    }
    if (unused instanceof MSGuidDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.MSGuidDecl) unused);
    }
    if (unused instanceof MSPropertyDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.MSPropertyDecl) unused);
    }
    if (unused instanceof NamedDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NamedDecl) unused);
    }
    if (unused instanceof NamespaceDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NamespaceDecl) unused);
    }
    if (unused instanceof NamespaceAliasDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NamespaceAliasDecl) unused);
    }
    if (unused instanceof NonTypeTemplateParmDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NonTypeTemplateParmDecl) unused);
    }
    if (unused instanceof ParmVarDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ParmVarDecl) unused);
    }
    if (unused instanceof PragmaCommentDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.PragmaCommentDecl) unused);
    }
    if (unused instanceof PragmaDetectMismatchDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.PragmaDetectMismatchDecl) unused);
    }
    if (unused instanceof RecordDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.RecordDecl) unused);
    }
    if (unused instanceof RedeclarableTemplateDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.RedeclarableTemplateDecl) unused);
    }
    if (unused instanceof RequiresExprBodyDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.RequiresExprBodyDecl) unused);
    }
    if (unused instanceof StaticAssertDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.StaticAssertDecl) unused);
    }
    if (unused instanceof TagDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TagDecl) unused);
    }
    if (unused instanceof TemplateDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TemplateDecl) unused);
    }
    if (unused instanceof TemplateTypeParmDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TemplateTypeParmDecl) unused);
    }
    if (unused instanceof TemplateTemplateParmDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TemplateTemplateParmDecl) unused);
    }
    if (unused instanceof TranslationUnitDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TranslationUnitDecl) unused);
    }
    if (unused instanceof TypeAliasDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypeAliasDecl) unused);
    }
    if (unused instanceof TypeAliasTemplateDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypeAliasTemplateDecl) unused);
    }
    if (unused instanceof TypeDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypeDecl) unused);
    }
    if (unused instanceof TypedefDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypedefDecl) unused);
    }
    if (unused instanceof TypedefNameDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypedefNameDecl) unused);
    }
    if (unused instanceof UnresolvedUsingValueDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UnresolvedUsingValueDecl) unused);
    }
    if (unused instanceof UnresolvedUsingTypenameDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UnresolvedUsingTypenameDecl) unused);
    }
    if (unused instanceof UsingDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingDecl) unused);
    }
    if (unused instanceof UsingDirectiveDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingDirectiveDecl) unused);
    }
    if (unused instanceof UsingPackDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingPackDecl) unused);
    }
    if (unused instanceof UsingShadowDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingShadowDecl) unused);
    }
    if (unused instanceof ValueDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ValueDecl) unused);
    }
    if (unused instanceof VarDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarDecl) unused);
    }
    if (unused instanceof VarTemplateDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarTemplateDecl) unused);
    }
    if (unused instanceof VarTemplateSpecializationDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarTemplateSpecializationDecl) unused);
    }
    if (unused instanceof VarTemplatePartialSpecializationDecl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarTemplatePartialSpecializationDecl) unused);
    }
    if (unused instanceof Decl)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.DeclContext) from, (com.alibaba.fastffi.clang.Decl) unused);
    }
    if (unused instanceof DeclContext)  {
      return (To) dyn_cast((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.DeclContext) unused);
    }
    throw new RuntimeException("Cannot call DeclCastingGen.dyn_cast, no template instantiation for the type arguments.");
  }

  @FFITypeAlias("clang::AccessSpecDecl")
  @CXXTemplate(
      cxx = "clang::AccessSpecDecl",
      java = "AccessSpecDecl"
  )
  @FFINameAlias("dyn_cast")
  AccessSpecDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::AccessSpecDecl") @FFISkip AccessSpecDecl unused);

  @FFITypeAlias("clang::BindingDecl")
  @CXXTemplate(
      cxx = "clang::BindingDecl",
      java = "BindingDecl"
  )
  @FFINameAlias("dyn_cast")
  BindingDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::BindingDecl") @FFISkip BindingDecl unused);

  @FFITypeAlias("clang::BlockDecl")
  @CXXTemplate(
      cxx = "clang::BlockDecl",
      java = "BlockDecl"
  )
  @FFINameAlias("dyn_cast")
  BlockDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::BlockDecl") @FFISkip BlockDecl unused);

  @FFITypeAlias("clang::BuiltinTemplateDecl")
  @CXXTemplate(
      cxx = "clang::BuiltinTemplateDecl",
      java = "BuiltinTemplateDecl"
  )
  @FFINameAlias("dyn_cast")
  BuiltinTemplateDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::BuiltinTemplateDecl") @FFISkip BuiltinTemplateDecl unused);

  @FFITypeAlias("clang::CapturedDecl")
  @CXXTemplate(
      cxx = "clang::CapturedDecl",
      java = "CapturedDecl"
  )
  @FFINameAlias("dyn_cast")
  CapturedDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CapturedDecl") @FFISkip CapturedDecl unused);

  @FFITypeAlias("clang::ClassTemplateDecl")
  @CXXTemplate(
      cxx = "clang::ClassTemplateDecl",
      java = "ClassTemplateDecl"
  )
  @FFINameAlias("dyn_cast")
  ClassTemplateDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassTemplateDecl") @FFISkip ClassTemplateDecl unused);

  @FFITypeAlias("clang::ClassTemplateSpecializationDecl")
  @CXXTemplate(
      cxx = "clang::ClassTemplateSpecializationDecl",
      java = "ClassTemplateSpecializationDecl"
  )
  @FFINameAlias("dyn_cast")
  ClassTemplateSpecializationDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassTemplateSpecializationDecl") @FFISkip ClassTemplateSpecializationDecl unused);

  @FFITypeAlias("clang::ClassTemplatePartialSpecializationDecl")
  @CXXTemplate(
      cxx = "clang::ClassTemplatePartialSpecializationDecl",
      java = "ClassTemplatePartialSpecializationDecl"
  )
  @FFINameAlias("dyn_cast")
  ClassTemplatePartialSpecializationDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassTemplatePartialSpecializationDecl") @FFISkip ClassTemplatePartialSpecializationDecl unused);

  @FFITypeAlias("clang::ClassScopeFunctionSpecializationDecl")
  @CXXTemplate(
      cxx = "clang::ClassScopeFunctionSpecializationDecl",
      java = "ClassScopeFunctionSpecializationDecl"
  )
  @FFINameAlias("dyn_cast")
  ClassScopeFunctionSpecializationDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassScopeFunctionSpecializationDecl") @FFISkip ClassScopeFunctionSpecializationDecl unused);

  @FFITypeAlias("clang::ConceptDecl")
  @CXXTemplate(
      cxx = "clang::ConceptDecl",
      java = "ConceptDecl"
  )
  @FFINameAlias("dyn_cast")
  ConceptDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ConceptDecl") @FFISkip ConceptDecl unused);

  @FFITypeAlias("clang::ConstructorUsingShadowDecl")
  @CXXTemplate(
      cxx = "clang::ConstructorUsingShadowDecl",
      java = "ConstructorUsingShadowDecl"
  )
  @FFINameAlias("dyn_cast")
  ConstructorUsingShadowDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ConstructorUsingShadowDecl") @FFISkip ConstructorUsingShadowDecl unused);

  @FFITypeAlias("clang::CXXConstructorDecl")
  @CXXTemplate(
      cxx = "clang::CXXConstructorDecl",
      java = "CXXConstructorDecl"
  )
  @FFINameAlias("dyn_cast")
  CXXConstructorDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXConstructorDecl") @FFISkip CXXConstructorDecl unused);

  @FFITypeAlias("clang::CXXConversionDecl")
  @CXXTemplate(
      cxx = "clang::CXXConversionDecl",
      java = "CXXConversionDecl"
  )
  @FFINameAlias("dyn_cast")
  CXXConversionDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXConversionDecl") @FFISkip CXXConversionDecl unused);

  @FFITypeAlias("clang::CXXDestructorDecl")
  @CXXTemplate(
      cxx = "clang::CXXDestructorDecl",
      java = "CXXDestructorDecl"
  )
  @FFINameAlias("dyn_cast")
  CXXDestructorDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXDestructorDecl") @FFISkip CXXDestructorDecl unused);

  @FFITypeAlias("clang::CXXDeductionGuideDecl")
  @CXXTemplate(
      cxx = "clang::CXXDeductionGuideDecl",
      java = "CXXDeductionGuideDecl"
  )
  @FFINameAlias("dyn_cast")
  CXXDeductionGuideDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXDeductionGuideDecl") @FFISkip CXXDeductionGuideDecl unused);

  @FFITypeAlias("clang::CXXMethodDecl")
  @CXXTemplate(
      cxx = "clang::CXXMethodDecl",
      java = "CXXMethodDecl"
  )
  @FFINameAlias("dyn_cast")
  CXXMethodDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXMethodDecl") @FFISkip CXXMethodDecl unused);

  @FFITypeAlias("clang::CXXRecordDecl")
  @CXXTemplate(
      cxx = "clang::CXXRecordDecl",
      java = "CXXRecordDecl"
  )
  @FFINameAlias("dyn_cast")
  CXXRecordDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXRecordDecl") @FFISkip CXXRecordDecl unused);

  @FFITypeAlias("clang::DeclaratorDecl")
  @CXXTemplate(
      cxx = "clang::DeclaratorDecl",
      java = "DeclaratorDecl"
  )
  @FFINameAlias("dyn_cast")
  DeclaratorDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::DeclaratorDecl") @FFISkip DeclaratorDecl unused);

  @FFITypeAlias("clang::DecompositionDecl")
  @CXXTemplate(
      cxx = "clang::DecompositionDecl",
      java = "DecompositionDecl"
  )
  @FFINameAlias("dyn_cast")
  DecompositionDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::DecompositionDecl") @FFISkip DecompositionDecl unused);

  @FFITypeAlias("clang::EmptyDecl")
  @CXXTemplate(
      cxx = "clang::EmptyDecl",
      java = "EmptyDecl"
  )
  @FFINameAlias("dyn_cast")
  EmptyDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::EmptyDecl") @FFISkip EmptyDecl unused);

  @FFITypeAlias("clang::EnumDecl")
  @CXXTemplate(
      cxx = "clang::EnumDecl",
      java = "EnumDecl"
  )
  @FFINameAlias("dyn_cast")
  EnumDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::EnumDecl") @FFISkip EnumDecl unused);

  @FFITypeAlias("clang::EnumConstantDecl")
  @CXXTemplate(
      cxx = "clang::EnumConstantDecl",
      java = "EnumConstantDecl"
  )
  @FFINameAlias("dyn_cast")
  EnumConstantDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::EnumConstantDecl") @FFISkip EnumConstantDecl unused);

  @FFITypeAlias("clang::ExportDecl")
  @CXXTemplate(
      cxx = "clang::ExportDecl",
      java = "ExportDecl"
  )
  @FFINameAlias("dyn_cast")
  ExportDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ExportDecl") @FFISkip ExportDecl unused);

  @FFITypeAlias("clang::ExternCContextDecl")
  @CXXTemplate(
      cxx = "clang::ExternCContextDecl",
      java = "ExternCContextDecl"
  )
  @FFINameAlias("dyn_cast")
  ExternCContextDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ExternCContextDecl") @FFISkip ExternCContextDecl unused);

  @FFITypeAlias("clang::FieldDecl")
  @CXXTemplate(
      cxx = "clang::FieldDecl",
      java = "FieldDecl"
  )
  @FFINameAlias("dyn_cast")
  FieldDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FieldDecl") @FFISkip FieldDecl unused);

  @FFITypeAlias("clang::FileScopeAsmDecl")
  @CXXTemplate(
      cxx = "clang::FileScopeAsmDecl",
      java = "FileScopeAsmDecl"
  )
  @FFINameAlias("dyn_cast")
  FileScopeAsmDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FileScopeAsmDecl") @FFISkip FileScopeAsmDecl unused);

  @FFITypeAlias("clang::FriendDecl")
  @CXXTemplate(
      cxx = "clang::FriendDecl",
      java = "FriendDecl"
  )
  @FFINameAlias("dyn_cast")
  FriendDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FriendDecl") @FFISkip FriendDecl unused);

  @FFITypeAlias("clang::FriendTemplateDecl")
  @CXXTemplate(
      cxx = "clang::FriendTemplateDecl",
      java = "FriendTemplateDecl"
  )
  @FFINameAlias("dyn_cast")
  FriendTemplateDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FriendTemplateDecl") @FFISkip FriendTemplateDecl unused);

  @FFITypeAlias("clang::FunctionDecl")
  @CXXTemplate(
      cxx = "clang::FunctionDecl",
      java = "FunctionDecl"
  )
  @FFINameAlias("dyn_cast")
  FunctionDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FunctionDecl") @FFISkip FunctionDecl unused);

  @FFITypeAlias("clang::FunctionTemplateDecl")
  @CXXTemplate(
      cxx = "clang::FunctionTemplateDecl",
      java = "FunctionTemplateDecl"
  )
  @FFINameAlias("dyn_cast")
  FunctionTemplateDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FunctionTemplateDecl") @FFISkip FunctionTemplateDecl unused);

  @FFITypeAlias("clang::ImplicitParamDecl")
  @CXXTemplate(
      cxx = "clang::ImplicitParamDecl",
      java = "ImplicitParamDecl"
  )
  @FFINameAlias("dyn_cast")
  ImplicitParamDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ImplicitParamDecl") @FFISkip ImplicitParamDecl unused);

  @FFITypeAlias("clang::ImportDecl")
  @CXXTemplate(
      cxx = "clang::ImportDecl",
      java = "ImportDecl"
  )
  @FFINameAlias("dyn_cast")
  ImportDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ImportDecl") @FFISkip ImportDecl unused);

  @FFITypeAlias("clang::IndirectFieldDecl")
  @CXXTemplate(
      cxx = "clang::IndirectFieldDecl",
      java = "IndirectFieldDecl"
  )
  @FFINameAlias("dyn_cast")
  IndirectFieldDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::IndirectFieldDecl") @FFISkip IndirectFieldDecl unused);

  @FFITypeAlias("clang::LabelDecl")
  @CXXTemplate(
      cxx = "clang::LabelDecl",
      java = "LabelDecl"
  )
  @FFINameAlias("dyn_cast")
  LabelDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::LabelDecl") @FFISkip LabelDecl unused);

  @FFITypeAlias("clang::LifetimeExtendedTemporaryDecl")
  @CXXTemplate(
      cxx = "clang::LifetimeExtendedTemporaryDecl",
      java = "LifetimeExtendedTemporaryDecl"
  )
  @FFINameAlias("dyn_cast")
  LifetimeExtendedTemporaryDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::LifetimeExtendedTemporaryDecl") @FFISkip LifetimeExtendedTemporaryDecl unused);

  @FFITypeAlias("clang::LinkageSpecDecl")
  @CXXTemplate(
      cxx = "clang::LinkageSpecDecl",
      java = "LinkageSpecDecl"
  )
  @FFINameAlias("dyn_cast")
  LinkageSpecDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::LinkageSpecDecl") @FFISkip LinkageSpecDecl unused);

  @FFITypeAlias("clang::MSGuidDecl")
  @CXXTemplate(
      cxx = "clang::MSGuidDecl",
      java = "MSGuidDecl"
  )
  @FFINameAlias("dyn_cast")
  MSGuidDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::MSGuidDecl") @FFISkip MSGuidDecl unused);

  @FFITypeAlias("clang::MSPropertyDecl")
  @CXXTemplate(
      cxx = "clang::MSPropertyDecl",
      java = "MSPropertyDecl"
  )
  @FFINameAlias("dyn_cast")
  MSPropertyDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::MSPropertyDecl") @FFISkip MSPropertyDecl unused);

  @FFITypeAlias("clang::NamedDecl")
  @CXXTemplate(
      cxx = "clang::NamedDecl",
      java = "NamedDecl"
  )
  @FFINameAlias("dyn_cast")
  NamedDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NamedDecl") @FFISkip NamedDecl unused);

  @FFITypeAlias("clang::NamespaceDecl")
  @CXXTemplate(
      cxx = "clang::NamespaceDecl",
      java = "NamespaceDecl"
  )
  @FFINameAlias("dyn_cast")
  NamespaceDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NamespaceDecl") @FFISkip NamespaceDecl unused);

  @FFITypeAlias("clang::NamespaceAliasDecl")
  @CXXTemplate(
      cxx = "clang::NamespaceAliasDecl",
      java = "NamespaceAliasDecl"
  )
  @FFINameAlias("dyn_cast")
  NamespaceAliasDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NamespaceAliasDecl") @FFISkip NamespaceAliasDecl unused);

  @FFITypeAlias("clang::NonTypeTemplateParmDecl")
  @CXXTemplate(
      cxx = "clang::NonTypeTemplateParmDecl",
      java = "NonTypeTemplateParmDecl"
  )
  @FFINameAlias("dyn_cast")
  NonTypeTemplateParmDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NonTypeTemplateParmDecl") @FFISkip NonTypeTemplateParmDecl unused);

  @FFITypeAlias("clang::ParmVarDecl")
  @CXXTemplate(
      cxx = "clang::ParmVarDecl",
      java = "ParmVarDecl"
  )
  @FFINameAlias("dyn_cast")
  ParmVarDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ParmVarDecl") @FFISkip ParmVarDecl unused);

  @FFITypeAlias("clang::PragmaCommentDecl")
  @CXXTemplate(
      cxx = "clang::PragmaCommentDecl",
      java = "PragmaCommentDecl"
  )
  @FFINameAlias("dyn_cast")
  PragmaCommentDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::PragmaCommentDecl") @FFISkip PragmaCommentDecl unused);

  @FFITypeAlias("clang::PragmaDetectMismatchDecl")
  @CXXTemplate(
      cxx = "clang::PragmaDetectMismatchDecl",
      java = "PragmaDetectMismatchDecl"
  )
  @FFINameAlias("dyn_cast")
  PragmaDetectMismatchDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::PragmaDetectMismatchDecl") @FFISkip PragmaDetectMismatchDecl unused);

  @FFITypeAlias("clang::RecordDecl")
  @CXXTemplate(
      cxx = "clang::RecordDecl",
      java = "RecordDecl"
  )
  @FFINameAlias("dyn_cast")
  RecordDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::RecordDecl") @FFISkip RecordDecl unused);

  @FFITypeAlias("clang::RedeclarableTemplateDecl")
  @CXXTemplate(
      cxx = "clang::RedeclarableTemplateDecl",
      java = "RedeclarableTemplateDecl"
  )
  @FFINameAlias("dyn_cast")
  RedeclarableTemplateDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::RedeclarableTemplateDecl") @FFISkip RedeclarableTemplateDecl unused);

  @FFITypeAlias("clang::RequiresExprBodyDecl")
  @CXXTemplate(
      cxx = "clang::RequiresExprBodyDecl",
      java = "RequiresExprBodyDecl"
  )
  @FFINameAlias("dyn_cast")
  RequiresExprBodyDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::RequiresExprBodyDecl") @FFISkip RequiresExprBodyDecl unused);

  @FFITypeAlias("clang::StaticAssertDecl")
  @CXXTemplate(
      cxx = "clang::StaticAssertDecl",
      java = "StaticAssertDecl"
  )
  @FFINameAlias("dyn_cast")
  StaticAssertDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::StaticAssertDecl") @FFISkip StaticAssertDecl unused);

  @FFITypeAlias("clang::TagDecl")
  @CXXTemplate(
      cxx = "clang::TagDecl",
      java = "TagDecl"
  )
  @FFINameAlias("dyn_cast")
  TagDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TagDecl") @FFISkip TagDecl unused);

  @FFITypeAlias("clang::TemplateDecl")
  @CXXTemplate(
      cxx = "clang::TemplateDecl",
      java = "TemplateDecl"
  )
  @FFINameAlias("dyn_cast")
  TemplateDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TemplateDecl") @FFISkip TemplateDecl unused);

  @FFITypeAlias("clang::TemplateTypeParmDecl")
  @CXXTemplate(
      cxx = "clang::TemplateTypeParmDecl",
      java = "TemplateTypeParmDecl"
  )
  @FFINameAlias("dyn_cast")
  TemplateTypeParmDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TemplateTypeParmDecl") @FFISkip TemplateTypeParmDecl unused);

  @FFITypeAlias("clang::TemplateTemplateParmDecl")
  @CXXTemplate(
      cxx = "clang::TemplateTemplateParmDecl",
      java = "TemplateTemplateParmDecl"
  )
  @FFINameAlias("dyn_cast")
  TemplateTemplateParmDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TemplateTemplateParmDecl") @FFISkip TemplateTemplateParmDecl unused);

  @FFITypeAlias("clang::TranslationUnitDecl")
  @CXXTemplate(
      cxx = "clang::TranslationUnitDecl",
      java = "TranslationUnitDecl"
  )
  @FFINameAlias("dyn_cast")
  TranslationUnitDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TranslationUnitDecl") @FFISkip TranslationUnitDecl unused);

  @FFITypeAlias("clang::TypeAliasDecl")
  @CXXTemplate(
      cxx = "clang::TypeAliasDecl",
      java = "TypeAliasDecl"
  )
  @FFINameAlias("dyn_cast")
  TypeAliasDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypeAliasDecl") @FFISkip TypeAliasDecl unused);

  @FFITypeAlias("clang::TypeAliasTemplateDecl")
  @CXXTemplate(
      cxx = "clang::TypeAliasTemplateDecl",
      java = "TypeAliasTemplateDecl"
  )
  @FFINameAlias("dyn_cast")
  TypeAliasTemplateDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypeAliasTemplateDecl") @FFISkip TypeAliasTemplateDecl unused);

  @FFITypeAlias("clang::TypeDecl")
  @CXXTemplate(
      cxx = "clang::TypeDecl",
      java = "TypeDecl"
  )
  @FFINameAlias("dyn_cast")
  TypeDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypeDecl") @FFISkip TypeDecl unused);

  @FFITypeAlias("clang::TypedefDecl")
  @CXXTemplate(
      cxx = "clang::TypedefDecl",
      java = "TypedefDecl"
  )
  @FFINameAlias("dyn_cast")
  TypedefDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypedefDecl") @FFISkip TypedefDecl unused);

  @FFITypeAlias("clang::TypedefNameDecl")
  @CXXTemplate(
      cxx = "clang::TypedefNameDecl",
      java = "TypedefNameDecl"
  )
  @FFINameAlias("dyn_cast")
  TypedefNameDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypedefNameDecl") @FFISkip TypedefNameDecl unused);

  @FFITypeAlias("clang::UnresolvedUsingValueDecl")
  @CXXTemplate(
      cxx = "clang::UnresolvedUsingValueDecl",
      java = "UnresolvedUsingValueDecl"
  )
  @FFINameAlias("dyn_cast")
  UnresolvedUsingValueDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UnresolvedUsingValueDecl") @FFISkip UnresolvedUsingValueDecl unused);

  @FFITypeAlias("clang::UnresolvedUsingTypenameDecl")
  @CXXTemplate(
      cxx = "clang::UnresolvedUsingTypenameDecl",
      java = "UnresolvedUsingTypenameDecl"
  )
  @FFINameAlias("dyn_cast")
  UnresolvedUsingTypenameDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UnresolvedUsingTypenameDecl") @FFISkip UnresolvedUsingTypenameDecl unused);

  @FFITypeAlias("clang::UsingDecl")
  @CXXTemplate(
      cxx = "clang::UsingDecl",
      java = "UsingDecl"
  )
  @FFINameAlias("dyn_cast")
  UsingDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingDecl") @FFISkip UsingDecl unused);

  @FFITypeAlias("clang::UsingDirectiveDecl")
  @CXXTemplate(
      cxx = "clang::UsingDirectiveDecl",
      java = "UsingDirectiveDecl"
  )
  @FFINameAlias("dyn_cast")
  UsingDirectiveDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingDirectiveDecl") @FFISkip UsingDirectiveDecl unused);

  @FFITypeAlias("clang::UsingPackDecl")
  @CXXTemplate(
      cxx = "clang::UsingPackDecl",
      java = "UsingPackDecl"
  )
  @FFINameAlias("dyn_cast")
  UsingPackDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingPackDecl") @FFISkip UsingPackDecl unused);

  @FFITypeAlias("clang::UsingShadowDecl")
  @CXXTemplate(
      cxx = "clang::UsingShadowDecl",
      java = "UsingShadowDecl"
  )
  @FFINameAlias("dyn_cast")
  UsingShadowDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingShadowDecl") @FFISkip UsingShadowDecl unused);

  @FFITypeAlias("clang::ValueDecl")
  @CXXTemplate(
      cxx = "clang::ValueDecl",
      java = "ValueDecl"
  )
  @FFINameAlias("dyn_cast")
  ValueDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ValueDecl") @FFISkip ValueDecl unused);

  @FFITypeAlias("clang::VarDecl")
  @CXXTemplate(
      cxx = "clang::VarDecl",
      java = "VarDecl"
  )
  @FFINameAlias("dyn_cast")
  VarDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarDecl") @FFISkip VarDecl unused);

  @FFITypeAlias("clang::VarTemplateDecl")
  @CXXTemplate(
      cxx = "clang::VarTemplateDecl",
      java = "VarTemplateDecl"
  )
  @FFINameAlias("dyn_cast")
  VarTemplateDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarTemplateDecl") @FFISkip VarTemplateDecl unused);

  @FFITypeAlias("clang::VarTemplateSpecializationDecl")
  @CXXTemplate(
      cxx = "clang::VarTemplateSpecializationDecl",
      java = "VarTemplateSpecializationDecl"
  )
  @FFINameAlias("dyn_cast")
  VarTemplateSpecializationDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarTemplateSpecializationDecl") @FFISkip VarTemplateSpecializationDecl unused);

  @FFITypeAlias("clang::VarTemplatePartialSpecializationDecl")
  @CXXTemplate(
      cxx = "clang::VarTemplatePartialSpecializationDecl",
      java = "VarTemplatePartialSpecializationDecl"
  )
  @FFINameAlias("dyn_cast")
  VarTemplatePartialSpecializationDecl dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarTemplatePartialSpecializationDecl") @FFISkip VarTemplatePartialSpecializationDecl unused);

  @FFITypeAlias("clang::Decl")
  @CXXTemplate(
      cxx = "clang::Decl",
      java = "Decl"
  )
  @FFINameAlias("dyn_cast")
  Decl dyn_cast(@FFITypeAlias("clang::DeclContext") DeclContext from,
      @FFITypeAlias("clang::Decl") @FFISkip Decl unused);

  @FFITypeAlias("clang::DeclContext")
  @CXXTemplate(
      cxx = "clang::DeclContext",
      java = "DeclContext"
  )
  @FFINameAlias("dyn_cast")
  DeclContext dyn_cast(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::DeclContext") @FFISkip DeclContext unused);

  @CXXTemplates({
      @CXXTemplate(cxx = {"clang::Decl", "clang::AccessSpecDecl"}, java = {"Decl", "AccessSpecDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::BindingDecl"}, java = {"Decl", "BindingDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::BlockDecl"}, java = {"Decl", "BlockDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::BuiltinTemplateDecl"}, java = {"Decl", "BuiltinTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CapturedDecl"}, java = {"Decl", "CapturedDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassScopeFunctionSpecializationDecl"}, java = {"Decl", "ClassScopeFunctionSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassTemplateDecl"}, java = {"Decl", "ClassTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassTemplateSpecializationDecl"}, java = {"Decl", "ClassTemplateSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ClassTemplatePartialSpecializationDecl"}, java = {"Decl", "ClassTemplatePartialSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ConceptDecl"}, java = {"Decl", "ConceptDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ConstructorUsingShadowDecl"}, java = {"Decl", "ConstructorUsingShadowDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXConstructorDecl"}, java = {"Decl", "CXXConstructorDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXConversionDecl"}, java = {"Decl", "CXXConversionDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXDestructorDecl"}, java = {"Decl", "CXXDestructorDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXDeductionGuideDecl"}, java = {"Decl", "CXXDeductionGuideDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXMethodDecl"}, java = {"Decl", "CXXMethodDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::CXXRecordDecl"}, java = {"Decl", "CXXRecordDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::DeclaratorDecl"}, java = {"Decl", "DeclaratorDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::DecompositionDecl"}, java = {"Decl", "DecompositionDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::EmptyDecl"}, java = {"Decl", "EmptyDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::EnumDecl"}, java = {"Decl", "EnumDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::EnumConstantDecl"}, java = {"Decl", "EnumConstantDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ExportDecl"}, java = {"Decl", "ExportDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ExternCContextDecl"}, java = {"Decl", "ExternCContextDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FieldDecl"}, java = {"Decl", "FieldDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FileScopeAsmDecl"}, java = {"Decl", "FileScopeAsmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FriendDecl"}, java = {"Decl", "FriendDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FriendTemplateDecl"}, java = {"Decl", "FriendTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FunctionDecl"}, java = {"Decl", "FunctionDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::FunctionTemplateDecl"}, java = {"Decl", "FunctionTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ImplicitParamDecl"}, java = {"Decl", "ImplicitParamDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ImportDecl"}, java = {"Decl", "ImportDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::IndirectFieldDecl"}, java = {"Decl", "IndirectFieldDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::LabelDecl"}, java = {"Decl", "LabelDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::LifetimeExtendedTemporaryDecl"}, java = {"Decl", "LifetimeExtendedTemporaryDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::LinkageSpecDecl"}, java = {"Decl", "LinkageSpecDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::MSGuidDecl"}, java = {"Decl", "MSGuidDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::MSPropertyDecl"}, java = {"Decl", "MSPropertyDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NamedDecl"}, java = {"Decl", "NamedDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NamespaceDecl"}, java = {"Decl", "NamespaceDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NamespaceAliasDecl"}, java = {"Decl", "NamespaceAliasDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::NonTypeTemplateParmDecl"}, java = {"Decl", "NonTypeTemplateParmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ParmVarDecl"}, java = {"Decl", "ParmVarDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::PragmaCommentDecl"}, java = {"Decl", "PragmaCommentDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::PragmaDetectMismatchDecl"}, java = {"Decl", "PragmaDetectMismatchDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::RecordDecl"}, java = {"Decl", "RecordDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::RedeclarableTemplateDecl"}, java = {"Decl", "RedeclarableTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::RequiresExprBodyDecl"}, java = {"Decl", "RequiresExprBodyDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::StaticAssertDecl"}, java = {"Decl", "StaticAssertDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TagDecl"}, java = {"Decl", "TagDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TemplateDecl"}, java = {"Decl", "TemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TemplateTypeParmDecl"}, java = {"Decl", "TemplateTypeParmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TemplateTemplateParmDecl"}, java = {"Decl", "TemplateTemplateParmDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TranslationUnitDecl"}, java = {"Decl", "TranslationUnitDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypeAliasDecl"}, java = {"Decl", "TypeAliasDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypeAliasTemplateDecl"}, java = {"Decl", "TypeAliasTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypeDecl"}, java = {"Decl", "TypeDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypedefDecl"}, java = {"Decl", "TypedefDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::TypedefNameDecl"}, java = {"Decl", "TypedefNameDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UnresolvedUsingValueDecl"}, java = {"Decl", "UnresolvedUsingValueDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UnresolvedUsingTypenameDecl"}, java = {"Decl", "UnresolvedUsingTypenameDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingDecl"}, java = {"Decl", "UsingDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingDirectiveDecl"}, java = {"Decl", "UsingDirectiveDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingPackDecl"}, java = {"Decl", "UsingPackDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::UsingShadowDecl"}, java = {"Decl", "UsingShadowDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::ValueDecl"}, java = {"Decl", "ValueDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarDecl"}, java = {"Decl", "VarDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarTemplateDecl"}, java = {"Decl", "VarTemplateDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarTemplateSpecializationDecl"}, java = {"Decl", "VarTemplateSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::VarTemplatePartialSpecializationDecl"}, java = {"Decl", "VarTemplatePartialSpecializationDecl"}),
      @CXXTemplate(cxx = {"clang::DeclContext", "clang::Decl"}, java = {"DeclContext", "Decl"}),
      @CXXTemplate(cxx = {"clang::Decl", "clang::DeclContext"}, java = {"Decl", "DeclContext"})
  })
  default  boolean isa(From from, @FFISkip To unused) {
    if (unused == null) {
      throw new NullPointerException("unused must not be null");
    }
    if (unused instanceof AccessSpecDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.AccessSpecDecl) unused);
    }
    if (unused instanceof BindingDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.BindingDecl) unused);
    }
    if (unused instanceof BlockDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.BlockDecl) unused);
    }
    if (unused instanceof BuiltinTemplateDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.BuiltinTemplateDecl) unused);
    }
    if (unused instanceof CapturedDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CapturedDecl) unused);
    }
    if (unused instanceof ClassScopeFunctionSpecializationDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassScopeFunctionSpecializationDecl) unused);
    }
    if (unused instanceof ClassTemplateDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassTemplateDecl) unused);
    }
    if (unused instanceof ClassTemplateSpecializationDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassTemplateSpecializationDecl) unused);
    }
    if (unused instanceof ClassTemplatePartialSpecializationDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ClassTemplatePartialSpecializationDecl) unused);
    }
    if (unused instanceof ConceptDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ConceptDecl) unused);
    }
    if (unused instanceof ConstructorUsingShadowDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ConstructorUsingShadowDecl) unused);
    }
    if (unused instanceof CXXConstructorDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXConstructorDecl) unused);
    }
    if (unused instanceof CXXConversionDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXConversionDecl) unused);
    }
    if (unused instanceof CXXDestructorDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXDestructorDecl) unused);
    }
    if (unused instanceof CXXDeductionGuideDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXDeductionGuideDecl) unused);
    }
    if (unused instanceof CXXMethodDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXMethodDecl) unused);
    }
    if (unused instanceof CXXRecordDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.CXXRecordDecl) unused);
    }
    if (unused instanceof DeclaratorDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.DeclaratorDecl) unused);
    }
    if (unused instanceof DecompositionDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.DecompositionDecl) unused);
    }
    if (unused instanceof EmptyDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.EmptyDecl) unused);
    }
    if (unused instanceof EnumDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.EnumDecl) unused);
    }
    if (unused instanceof EnumConstantDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.EnumConstantDecl) unused);
    }
    if (unused instanceof ExportDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ExportDecl) unused);
    }
    if (unused instanceof ExternCContextDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ExternCContextDecl) unused);
    }
    if (unused instanceof FieldDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FieldDecl) unused);
    }
    if (unused instanceof FileScopeAsmDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FileScopeAsmDecl) unused);
    }
    if (unused instanceof FriendDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FriendDecl) unused);
    }
    if (unused instanceof FriendTemplateDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FriendTemplateDecl) unused);
    }
    if (unused instanceof FunctionDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FunctionDecl) unused);
    }
    if (unused instanceof FunctionTemplateDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.FunctionTemplateDecl) unused);
    }
    if (unused instanceof ImplicitParamDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ImplicitParamDecl) unused);
    }
    if (unused instanceof ImportDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ImportDecl) unused);
    }
    if (unused instanceof IndirectFieldDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.IndirectFieldDecl) unused);
    }
    if (unused instanceof LabelDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.LabelDecl) unused);
    }
    if (unused instanceof LifetimeExtendedTemporaryDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.LifetimeExtendedTemporaryDecl) unused);
    }
    if (unused instanceof LinkageSpecDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.LinkageSpecDecl) unused);
    }
    if (unused instanceof MSGuidDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.MSGuidDecl) unused);
    }
    if (unused instanceof MSPropertyDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.MSPropertyDecl) unused);
    }
    if (unused instanceof NamedDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NamedDecl) unused);
    }
    if (unused instanceof NamespaceDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NamespaceDecl) unused);
    }
    if (unused instanceof NamespaceAliasDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NamespaceAliasDecl) unused);
    }
    if (unused instanceof NonTypeTemplateParmDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.NonTypeTemplateParmDecl) unused);
    }
    if (unused instanceof ParmVarDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ParmVarDecl) unused);
    }
    if (unused instanceof PragmaCommentDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.PragmaCommentDecl) unused);
    }
    if (unused instanceof PragmaDetectMismatchDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.PragmaDetectMismatchDecl) unused);
    }
    if (unused instanceof RecordDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.RecordDecl) unused);
    }
    if (unused instanceof RedeclarableTemplateDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.RedeclarableTemplateDecl) unused);
    }
    if (unused instanceof RequiresExprBodyDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.RequiresExprBodyDecl) unused);
    }
    if (unused instanceof StaticAssertDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.StaticAssertDecl) unused);
    }
    if (unused instanceof TagDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TagDecl) unused);
    }
    if (unused instanceof TemplateDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TemplateDecl) unused);
    }
    if (unused instanceof TemplateTypeParmDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TemplateTypeParmDecl) unused);
    }
    if (unused instanceof TemplateTemplateParmDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TemplateTemplateParmDecl) unused);
    }
    if (unused instanceof TranslationUnitDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TranslationUnitDecl) unused);
    }
    if (unused instanceof TypeAliasDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypeAliasDecl) unused);
    }
    if (unused instanceof TypeAliasTemplateDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypeAliasTemplateDecl) unused);
    }
    if (unused instanceof TypeDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypeDecl) unused);
    }
    if (unused instanceof TypedefDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypedefDecl) unused);
    }
    if (unused instanceof TypedefNameDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.TypedefNameDecl) unused);
    }
    if (unused instanceof UnresolvedUsingValueDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UnresolvedUsingValueDecl) unused);
    }
    if (unused instanceof UnresolvedUsingTypenameDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UnresolvedUsingTypenameDecl) unused);
    }
    if (unused instanceof UsingDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingDecl) unused);
    }
    if (unused instanceof UsingDirectiveDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingDirectiveDecl) unused);
    }
    if (unused instanceof UsingPackDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingPackDecl) unused);
    }
    if (unused instanceof UsingShadowDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.UsingShadowDecl) unused);
    }
    if (unused instanceof ValueDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.ValueDecl) unused);
    }
    if (unused instanceof VarDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarDecl) unused);
    }
    if (unused instanceof VarTemplateDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarTemplateDecl) unused);
    }
    if (unused instanceof VarTemplateSpecializationDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarTemplateSpecializationDecl) unused);
    }
    if (unused instanceof VarTemplatePartialSpecializationDecl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.VarTemplatePartialSpecializationDecl) unused);
    }
    if (unused instanceof Decl)  {
      return (boolean) isa((com.alibaba.fastffi.clang.DeclContext) from, (com.alibaba.fastffi.clang.Decl) unused);
    }
    if (unused instanceof DeclContext)  {
      return (boolean) isa((com.alibaba.fastffi.clang.Decl) from, (com.alibaba.fastffi.clang.DeclContext) unused);
    }
    throw new RuntimeException("Cannot call DeclCastingGen.isa, no template instantiation for the type arguments.");
  }

  @CXXTemplate(
      cxx = "clang::AccessSpecDecl",
      java = "AccessSpecDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::AccessSpecDecl") @FFISkip AccessSpecDecl unused);

  @CXXTemplate(
      cxx = "clang::BindingDecl",
      java = "BindingDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::BindingDecl") @FFISkip BindingDecl unused);

  @CXXTemplate(
      cxx = "clang::BlockDecl",
      java = "BlockDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::BlockDecl") @FFISkip BlockDecl unused);

  @CXXTemplate(
      cxx = "clang::BuiltinTemplateDecl",
      java = "BuiltinTemplateDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::BuiltinTemplateDecl") @FFISkip BuiltinTemplateDecl unused);

  @CXXTemplate(
      cxx = "clang::CapturedDecl",
      java = "CapturedDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CapturedDecl") @FFISkip CapturedDecl unused);

  @CXXTemplate(
      cxx = "clang::ClassScopeFunctionSpecializationDecl",
      java = "ClassScopeFunctionSpecializationDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassScopeFunctionSpecializationDecl") @FFISkip ClassScopeFunctionSpecializationDecl unused);

  @CXXTemplate(
      cxx = "clang::ClassTemplateDecl",
      java = "ClassTemplateDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassTemplateDecl") @FFISkip ClassTemplateDecl unused);

  @CXXTemplate(
      cxx = "clang::ClassTemplateSpecializationDecl",
      java = "ClassTemplateSpecializationDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassTemplateSpecializationDecl") @FFISkip ClassTemplateSpecializationDecl unused);

  @CXXTemplate(
      cxx = "clang::ClassTemplatePartialSpecializationDecl",
      java = "ClassTemplatePartialSpecializationDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ClassTemplatePartialSpecializationDecl") @FFISkip ClassTemplatePartialSpecializationDecl unused);

  @CXXTemplate(
      cxx = "clang::ConceptDecl",
      java = "ConceptDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ConceptDecl") @FFISkip ConceptDecl unused);

  @CXXTemplate(
      cxx = "clang::ConstructorUsingShadowDecl",
      java = "ConstructorUsingShadowDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ConstructorUsingShadowDecl") @FFISkip ConstructorUsingShadowDecl unused);

  @CXXTemplate(
      cxx = "clang::CXXConstructorDecl",
      java = "CXXConstructorDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXConstructorDecl") @FFISkip CXXConstructorDecl unused);

  @CXXTemplate(
      cxx = "clang::CXXConversionDecl",
      java = "CXXConversionDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXConversionDecl") @FFISkip CXXConversionDecl unused);

  @CXXTemplate(
      cxx = "clang::CXXDestructorDecl",
      java = "CXXDestructorDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXDestructorDecl") @FFISkip CXXDestructorDecl unused);

  @CXXTemplate(
      cxx = "clang::CXXDeductionGuideDecl",
      java = "CXXDeductionGuideDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXDeductionGuideDecl") @FFISkip CXXDeductionGuideDecl unused);

  @CXXTemplate(
      cxx = "clang::CXXMethodDecl",
      java = "CXXMethodDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXMethodDecl") @FFISkip CXXMethodDecl unused);

  @CXXTemplate(
      cxx = "clang::CXXRecordDecl",
      java = "CXXRecordDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::CXXRecordDecl") @FFISkip CXXRecordDecl unused);

  @CXXTemplate(
      cxx = "clang::DeclaratorDecl",
      java = "DeclaratorDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::DeclaratorDecl") @FFISkip DeclaratorDecl unused);

  @CXXTemplate(
      cxx = "clang::DecompositionDecl",
      java = "DecompositionDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::DecompositionDecl") @FFISkip DecompositionDecl unused);

  @CXXTemplate(
      cxx = "clang::EmptyDecl",
      java = "EmptyDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::EmptyDecl") @FFISkip EmptyDecl unused);

  @CXXTemplate(
      cxx = "clang::EnumDecl",
      java = "EnumDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::EnumDecl") @FFISkip EnumDecl unused);

  @CXXTemplate(
      cxx = "clang::EnumConstantDecl",
      java = "EnumConstantDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::EnumConstantDecl") @FFISkip EnumConstantDecl unused);

  @CXXTemplate(
      cxx = "clang::ExportDecl",
      java = "ExportDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ExportDecl") @FFISkip ExportDecl unused);

  @CXXTemplate(
      cxx = "clang::ExternCContextDecl",
      java = "ExternCContextDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ExternCContextDecl") @FFISkip ExternCContextDecl unused);

  @CXXTemplate(
      cxx = "clang::FieldDecl",
      java = "FieldDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FieldDecl") @FFISkip FieldDecl unused);

  @CXXTemplate(
      cxx = "clang::FileScopeAsmDecl",
      java = "FileScopeAsmDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FileScopeAsmDecl") @FFISkip FileScopeAsmDecl unused);

  @CXXTemplate(
      cxx = "clang::FriendDecl",
      java = "FriendDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FriendDecl") @FFISkip FriendDecl unused);

  @CXXTemplate(
      cxx = "clang::FriendTemplateDecl",
      java = "FriendTemplateDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FriendTemplateDecl") @FFISkip FriendTemplateDecl unused);

  @CXXTemplate(
      cxx = "clang::FunctionDecl",
      java = "FunctionDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FunctionDecl") @FFISkip FunctionDecl unused);

  @CXXTemplate(
      cxx = "clang::FunctionTemplateDecl",
      java = "FunctionTemplateDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::FunctionTemplateDecl") @FFISkip FunctionTemplateDecl unused);

  @CXXTemplate(
      cxx = "clang::ImplicitParamDecl",
      java = "ImplicitParamDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ImplicitParamDecl") @FFISkip ImplicitParamDecl unused);

  @CXXTemplate(
      cxx = "clang::ImportDecl",
      java = "ImportDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ImportDecl") @FFISkip ImportDecl unused);

  @CXXTemplate(
      cxx = "clang::IndirectFieldDecl",
      java = "IndirectFieldDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::IndirectFieldDecl") @FFISkip IndirectFieldDecl unused);

  @CXXTemplate(
      cxx = "clang::LabelDecl",
      java = "LabelDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::LabelDecl") @FFISkip LabelDecl unused);

  @CXXTemplate(
      cxx = "clang::LifetimeExtendedTemporaryDecl",
      java = "LifetimeExtendedTemporaryDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::LifetimeExtendedTemporaryDecl") @FFISkip LifetimeExtendedTemporaryDecl unused);

  @CXXTemplate(
      cxx = "clang::LinkageSpecDecl",
      java = "LinkageSpecDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::LinkageSpecDecl") @FFISkip LinkageSpecDecl unused);

  @CXXTemplate(
      cxx = "clang::MSGuidDecl",
      java = "MSGuidDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::MSGuidDecl") @FFISkip MSGuidDecl unused);

  @CXXTemplate(
      cxx = "clang::MSPropertyDecl",
      java = "MSPropertyDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::MSPropertyDecl") @FFISkip MSPropertyDecl unused);

  @CXXTemplate(
      cxx = "clang::NamedDecl",
      java = "NamedDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NamedDecl") @FFISkip NamedDecl unused);

  @CXXTemplate(
      cxx = "clang::NamespaceDecl",
      java = "NamespaceDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NamespaceDecl") @FFISkip NamespaceDecl unused);

  @CXXTemplate(
      cxx = "clang::NamespaceAliasDecl",
      java = "NamespaceAliasDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NamespaceAliasDecl") @FFISkip NamespaceAliasDecl unused);

  @CXXTemplate(
      cxx = "clang::NonTypeTemplateParmDecl",
      java = "NonTypeTemplateParmDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::NonTypeTemplateParmDecl") @FFISkip NonTypeTemplateParmDecl unused);

  @CXXTemplate(
      cxx = "clang::ParmVarDecl",
      java = "ParmVarDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ParmVarDecl") @FFISkip ParmVarDecl unused);

  @CXXTemplate(
      cxx = "clang::PragmaCommentDecl",
      java = "PragmaCommentDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::PragmaCommentDecl") @FFISkip PragmaCommentDecl unused);

  @CXXTemplate(
      cxx = "clang::PragmaDetectMismatchDecl",
      java = "PragmaDetectMismatchDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::PragmaDetectMismatchDecl") @FFISkip PragmaDetectMismatchDecl unused);

  @CXXTemplate(
      cxx = "clang::RecordDecl",
      java = "RecordDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::RecordDecl") @FFISkip RecordDecl unused);

  @CXXTemplate(
      cxx = "clang::RedeclarableTemplateDecl",
      java = "RedeclarableTemplateDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::RedeclarableTemplateDecl") @FFISkip RedeclarableTemplateDecl unused);

  @CXXTemplate(
      cxx = "clang::RequiresExprBodyDecl",
      java = "RequiresExprBodyDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::RequiresExprBodyDecl") @FFISkip RequiresExprBodyDecl unused);

  @CXXTemplate(
      cxx = "clang::StaticAssertDecl",
      java = "StaticAssertDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::StaticAssertDecl") @FFISkip StaticAssertDecl unused);

  @CXXTemplate(
      cxx = "clang::TagDecl",
      java = "TagDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TagDecl") @FFISkip TagDecl unused);

  @CXXTemplate(
      cxx = "clang::TemplateDecl",
      java = "TemplateDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TemplateDecl") @FFISkip TemplateDecl unused);

  @CXXTemplate(
      cxx = "clang::TemplateTypeParmDecl",
      java = "TemplateTypeParmDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TemplateTypeParmDecl") @FFISkip TemplateTypeParmDecl unused);

  @CXXTemplate(
      cxx = "clang::TemplateTemplateParmDecl",
      java = "TemplateTemplateParmDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TemplateTemplateParmDecl") @FFISkip TemplateTemplateParmDecl unused);

  @CXXTemplate(
      cxx = "clang::TranslationUnitDecl",
      java = "TranslationUnitDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TranslationUnitDecl") @FFISkip TranslationUnitDecl unused);

  @CXXTemplate(
      cxx = "clang::TypeAliasDecl",
      java = "TypeAliasDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypeAliasDecl") @FFISkip TypeAliasDecl unused);

  @CXXTemplate(
      cxx = "clang::TypeAliasTemplateDecl",
      java = "TypeAliasTemplateDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypeAliasTemplateDecl") @FFISkip TypeAliasTemplateDecl unused);

  @CXXTemplate(
      cxx = "clang::TypeDecl",
      java = "TypeDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypeDecl") @FFISkip TypeDecl unused);

  @CXXTemplate(
      cxx = "clang::TypedefDecl",
      java = "TypedefDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypedefDecl") @FFISkip TypedefDecl unused);

  @CXXTemplate(
      cxx = "clang::TypedefNameDecl",
      java = "TypedefNameDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::TypedefNameDecl") @FFISkip TypedefNameDecl unused);

  @CXXTemplate(
      cxx = "clang::UnresolvedUsingValueDecl",
      java = "UnresolvedUsingValueDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UnresolvedUsingValueDecl") @FFISkip UnresolvedUsingValueDecl unused);

  @CXXTemplate(
      cxx = "clang::UnresolvedUsingTypenameDecl",
      java = "UnresolvedUsingTypenameDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UnresolvedUsingTypenameDecl") @FFISkip UnresolvedUsingTypenameDecl unused);

  @CXXTemplate(
      cxx = "clang::UsingDecl",
      java = "UsingDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingDecl") @FFISkip UsingDecl unused);

  @CXXTemplate(
      cxx = "clang::UsingDirectiveDecl",
      java = "UsingDirectiveDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingDirectiveDecl") @FFISkip UsingDirectiveDecl unused);

  @CXXTemplate(
      cxx = "clang::UsingPackDecl",
      java = "UsingPackDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingPackDecl") @FFISkip UsingPackDecl unused);

  @CXXTemplate(
      cxx = "clang::UsingShadowDecl",
      java = "UsingShadowDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::UsingShadowDecl") @FFISkip UsingShadowDecl unused);

  @CXXTemplate(
      cxx = "clang::ValueDecl",
      java = "ValueDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::ValueDecl") @FFISkip ValueDecl unused);

  @CXXTemplate(
      cxx = "clang::VarDecl",
      java = "VarDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarDecl") @FFISkip VarDecl unused);

  @CXXTemplate(
      cxx = "clang::VarTemplateDecl",
      java = "VarTemplateDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarTemplateDecl") @FFISkip VarTemplateDecl unused);

  @CXXTemplate(
      cxx = "clang::VarTemplateSpecializationDecl",
      java = "VarTemplateSpecializationDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarTemplateSpecializationDecl") @FFISkip VarTemplateSpecializationDecl unused);

  @CXXTemplate(
      cxx = "clang::VarTemplatePartialSpecializationDecl",
      java = "VarTemplatePartialSpecializationDecl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::VarTemplatePartialSpecializationDecl") @FFISkip VarTemplatePartialSpecializationDecl unused);

  @CXXTemplate(
      cxx = "clang::Decl",
      java = "Decl"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::DeclContext") DeclContext from,
      @FFITypeAlias("clang::Decl") @FFISkip Decl unused);

  @CXXTemplate(
      cxx = "clang::DeclContext",
      java = "DeclContext"
  )
  @FFINameAlias("isa")
  boolean isa(@FFITypeAlias("clang::Decl") Decl from,
      @FFITypeAlias("clang::DeclContext") @FFISkip DeclContext unused);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy