Spec-Zone.ru › Scala 2.13 Reflection

Трейт scala.reflect.macros.Universe.MacroInternalApi

трейт MacroInternalApi extends InternalApi

<invalid inheritdoc annotation>

Тип самого объекта
MacroInternalApi
Источник
Universe.scala
Линейные супертипы
Universe.InternalApi, AnyRef, Any
Известные подклассы
ContextInternalApi

Члены типов

трейтDecoratorApi extends AnyRef

Определяющие классы
InternalApi
См. также

Decorators

абстрактный типDecorators <: MacroDecoratorApi

Синтаксические удобства для дополнительных внутренних API для деревьев, символов и типов

Определяющие классы
MacroInternalApi → InternalApi

трейтMacroDecoratorApi extends DecoratorApi

Абстрактные члены значений

abstract def annotatedType(annotations: List[Universe.Annotation], underlying: Universe.Type): Universe.AnnotatedType

Создатель типов AnnotatedType.

Definition Classes
InternalApi

abstract def asFreeTerm(symbol: Universe.Symbol): Universe.FreeTermSymbol

Преобразование этого символа в символ свободного термина.

Definition Classes
InternalApi
Исключения

ScalaReflectionException если isFreeTerm ложно.

abstract def asFreeType(symbol: Universe.Symbol): Universe.FreeTypeSymbol

Преобразование этого символа в символ свободного типа.

Definition Classes
InternalApi
Исключения

ScalaReflectionException если isFreeType ложно.

abstract def attachments(tree: Universe.Tree): Attachments { type Pos = Universe.this.Position }

abstract def attachments(symbol: Universe.Symbol): Attachments { type Pos = Universe.this.Position }

abstract def boundedWildcardType(bounds: Universe.TypeBounds): Universe.BoundedWildcardType

Создатель типов BoundedWildcardType.

Definition Classes
InternalApi

abstract def captureVariable(vble: Universe.Symbol): Unit

Отметить переменную как захваченную; т.е. принудительно выполнить упаковку в тип *Ref.

abstract def capturedVariableType(vble: Universe.Symbol): Universe.Type

abstract def changeOwner(tree: Universe.Tree, prev: Universe.Symbol, next: Universe.Symbol): tree.type

Собирает все символы, определённые поддеревьями tree, которые принадлежат prev, и затем изменяет их владельца на next.

Это важный инструмент для борьбы с ошибками цепочки владельцев при перемещении деревьев из одного лексического контекста в другой. Всякий раз, когда вы берёте атрибутированное дерево, которое было проверено на тип в контексте, принадлежащем какому-либо символу (назовём его x), и вставляете его в другое место, в контекст, принадлежащий другому символу (назовём его y), крайне важно, либо вызвать untypecheck, или выполнить changeOwner(tree, x, y).

Поскольку в данный момент untypecheck имеет фундаментальную проблему, которая иногда может привести к повреждению дерева, changeOwner становится незаменимым инструментом для построения 100% надёжных макросов. Будущие версии API отражения могут устранить необходимость заботы об этих низкоуровневых деталях, но на данный момент вот что у нас есть.

abstract def classDef(sym: Universe.Symbol, impl: Universe.Template): Universe.ClassDef

Метод-фабрика для узлов ClassDef.

Definition Classes
InternalApi

abstract def classInfoType(parents: List[Universe.Type], decls: Universe.Scope, typeSymbol: Universe.Symbol): Universe.ClassInfoType

Создатель типов ClassInfoType.

Definition Classes
InternalApi

abstract def constantType(value: Universe.Constant): Universe.ConstantType

Создатель для типов ConstantType.

Definition Classes
InternalApi

abstract def createImporter(from0: api.Universe): Universe.Importer { val from: from0.type }

Создает импортер, который перемещает артефакты отражения между вселенными.

Definition Classes
InternalApi
See also

Importer

abstract def deSkolemize(symbol: Universe.Symbol): Universe.Symbol

Если этот символ является склемом, его соответствующий типовой параметр, в противном случае сам символ.

Цитируя Мартина Одерски, склемы — это синтетические типы «констант», которые являются копиями экзистенциально связанных или универсально связанных типовых переменных. Например, если вы находитесь внутри правой части метода:

def foo[T](x: T) = ... foo[List[T]]....

склем с именем T ссылается на неизвестный тип экземпляра T при вызове foo. Он должен отличаться от типового параметра, потому что в рекурсивном вызове, как в примере foo[List[T]] выше, типовой параметр заменяется на List[T], но типовой склем остается тем, что он есть.

Другой формой склема является экзистенциальный склем. Допустим, у вас есть функция

def bar(xs: List[T] forSome { type T }) = xs.head

тогда каждое вхождение xs справа будет иметь тип List[T'], где T' — это свежая копия T.

Definition Classes
InternalApi

abstract val decorators: Decorators

Definition Classes
InternalApi
See also

Decorators

abstract def defDef(sym: Universe.Symbol, rhs: (List[List[Universe.Symbol]]) => Universe.Tree): Universe.DefDef

Фабричный метод для узлов DefDef.

Definition Classes
InternalApi

abstract def defDef(sym: Universe.Symbol, rhs: Universe.Tree): Universe.DefDef

Фабричный метод для узлов DefDef.

Definition Classes
InternalApi

abstract def defDef(sym: Universe.Symbol, mods: Universe.Modifiers, rhs: Universe.Tree): Universe.DefDef

Фабричный метод для узлов DefDef.

Definition Classes
InternalApi

abstract def defDef(sym: Universe.Symbol, vparamss: List[List[Universe.ValDef]], rhs: Universe.Tree): Universe.DefDef

Фабричный метод для узлов DefDef.

Definition Classes
InternalApi

abstract def defDef(sym: Universe.Symbol, mods: Universe.Modifiers, vparamss: List[List[Universe.ValDef]], rhs: Universe.Tree): Universe.DefDef

Фабричный метод для узлов DefDef.

Definition Classes
InternalApi

abstract def defineType(tree: Universe.Tree, tp: Universe.Type): tree.type

Подобно setType, но если это ранее пустой TypeTree, этот факт запоминается, чтобы untypecheck вернулось к исходному состоянию.

\@PP: Попытка уточнить вышесказанное: Если вызов defineType производится на TypeTree, у которого поле type равно null или NoType, это записывается как "wasEmpty = true". Это значение используется в ResetAttrsTraverser, который обнуляет поле type TypeTree, для которых wasEmpty равно true, оставив другие неизменными.

untypecheck (или resetAttrs в терминологии компилятора) используется в ситуациях, когда происходит какая-то спекулятивная типизация дерева, которая терпит неудачу, и дерево нужно вернуть в первоначальное состояние, чтобы попробовать снова. Таким образом, по моему мнению: использование defineType вместо setType – это способ указать, что устанавливаемый тип не зависит от предыдущего состояния, и поэтому должен быть отброшен, если текущий путь поиска типа не удается.

abstract def enter(scope: Universe.Scope, sym: Universe.Symbol): scope.type

abstract def existentialAbstraction(tparams: List[Universe.Symbol], tpe0: Universe.Type): Universe.Type

Создатель для экзистенциальных типов. Это генерирует:

tpe1 where { tparams }

где tpe1 является результатом экстраполяции tpe относительно tparams. Экстраполяция означает, что переменные типа в tparams, встречающиеся в ковариантных позициях, заменяются на верхние границы, (за исключением любых маркеров SingletonClass), переменные типа в tparams, встречающиеся в контравариантных позициях, заменяются на верхние границы, при условии, что полученный тип является законным с точки зрения стабильности и не содержит никаких переменных типа в tparams.

Абстракция отбрасывает все параметры типа, которые не ссылаются непосредственно или косвенно на тип tpe1. Если не осталось параметров типа, просто возвращается тип результата tpe.

Definition Classes
InternalApi

abstract def existentialType(quantified: List[Universe.Symbol], underlying: Universe.Type): Universe.ExistentialType

Создатель для типов ExistentialType.

Definition Classes
InternalApi

abstract def flags(symbol: Universe.Symbol): Universe.FlagSet

Возвращает внутренние флаги, связанные с символом.

Definition Classes
InternalApi

abstract def freeTerms(tree: Universe.Tree): List[Universe.FreeTermSymbol]

Извлекает символы свободных терминов из дерева, которое реифицировано или содержит реифицированные поддеревья.

Definition Classes
InternalApi

abstract def freeTypes(tree: Universe.Tree): List[Universe.FreeTypeSymbol]

Извлекает символы свободных типов из дерева, которое реифицировано или содержит реифицированные поддеревья.

Definition Classes
InternalApi

abstract def fullyInitialize(scope: Universe.Scope): scope.type

Вызывает initialize для всех символов, из которых состоит область видимости.

Definition Classes
InternalApi

abstract def fullyInitialize(tp: Universe.Type): tp.type

Вызывает initialize для всех параметров значения и типа типа.

Definition Classes
InternalApi

abstract def fullyInitialize(symbol: Universe.Symbol): symbol.type

Вызывает initialize для владельца и всех параметров значения и типа символа.

Definition Classes
InternalApi

abstract val gen: TreeGen

абстрактный метод initialize(символ: Universe.Symbol): symbol.type

Принудительно выполняет все ожидающие завершения, связанные с этим символом. После возвращения этого вызова символ становится неизменяемым и потокобезопасным.

Определяющие классы
InternalApi

абстрактный метод intersectionType(tps: Список[Universe.Type], владелец: Universe.Symbol): Universe.Type

Создатель типа пересечения, где пересечения одного типа заменяются самим типом, а повторяющиеся родительские классы объединяются.

!!! Повторяющиеся родительские классы не объединяются - это ошибка в комментарии или в коде?

Определяющие классы
InternalApi

абстрактный метод intersectionType(tps: Список[Universe.Type]): Universe.Type

Создатель типа пересечения, где пересечения одного типа заменяются самим типом.

Определяющие классы
InternalApi

абстрактный метод isErroneous(символ: Universe.Symbol): Boolean

Представляет ли этот символ или его базовый тип ошибку проверки типов?

Определяющие классы
InternalApi

абстрактный метод isFreeTerm(символ: Universe.Symbol): Boolean

Представляет ли этот символ свободный термин, захваченный реификацией? Если да, то isTerm также гарантированно истинно.

Определяющие классы
InternalApi

абстрактный метод isFreeType(символ: Universe.Symbol): Boolean

Представляет ли этот символ свободный тип, захваченный реификацией? Если да, то isType также гарантированно истинно.

Определяющие классы
InternalApi

абстрактный метод isSkolem(символ: Universe.Symbol): Boolean

Представляет ли этот символ определение сколема? Сколемы используются во время проверки типов для представления параметров типа, рассматриваемых изнутри их областей видимости.

Определяющие классы
InternalApi

абстрактный метод labelDef(симв: Universe.Symbol, параметры: Список[Universe.Symbol], правая_часть: Universe.Tree): Universe.LabelDef

Метод-фабрика для узлов LabelDef.

Определяющие классы
InternalApi

абстрактный метод methodType(параметры: Список[Universe.Symbol], тип_результата: Universe.Type): Universe.MethodType

Создатель типов MethodType.

Определяющие классы
InternalApi

абстрактный метод moduleDef(симв: Universe.Symbol, реализация: Universe.Template): Universe.ModuleDef

Метод-фабрика для узлов ModuleDef.

Определяющие классы
InternalApi

абстрактный метод newClassSymbol(владелец: Universe.Symbol, имя: Universe.TypeName, позиция: Universe.Position = NoPosition, флаги: Universe.FlagSet = NoFlags): Universe.ClassSymbol

Definition Classes
InternalApi

abstract def newFreeTerm(name: String, value: => Any, flags: Universe.FlagSet = NoFlags, origin: String = null): Universe.FreeTermSymbol

Definition Classes
InternalApi

abstract def newFreeType(name: String, flags: Universe.FlagSet = NoFlags, origin: String = null): Universe.FreeTypeSymbol

Definition Classes
InternalApi

abstract def newMethodSymbol(owner: Universe.Symbol, name: Universe.TermName, pos: Universe.Position = NoPosition, flags: Universe.FlagSet = NoFlags): Universe.MethodSymbol

Definition Classes
InternalApi

abstract def newModuleAndClassSymbol(owner: Universe.Symbol, name: Universe.Name, pos: Universe.Position = NoPosition, flags: Universe.FlagSet = NoFlags): (Universe.ModuleSymbol, Universe.ClassSymbol)

Definition Classes
InternalApi

abstract def newScopeWith(elems: Universe.Symbol*): Universe.Scope

Создать новый область видимости с заданными начальными элементами.

Definition Classes
InternalApi

abstract def newTermSymbol(owner: Universe.Symbol, name: Universe.TermName, pos: Universe.Position = NoPosition, flags: Universe.FlagSet = NoFlags): Universe.TermSymbol

Definition Classes
InternalApi

abstract def newTypeSymbol(owner: Universe.Symbol, name: Universe.TypeName, pos: Universe.Position = NoPosition, flags: Universe.FlagSet = NoFlags): Universe.TypeSymbol

Definition Classes
InternalApi

abstract def nullaryMethodType(resultType: Universe.Type): Universe.NullaryMethodType

Создатель для типов NullaryMethodType.

Definition Classes
InternalApi

абстрактный def polyType(tparams: List[Universe.Symbol], tpe: Universe.Type): Universe.PolyType

Создатель параметризации типов, удаляющий пустые списки параметров типа. Используйте этот фабричный метод для обозначения того, что тип имеет вид * (это полиморфное значение), пока мы не начнём отслеживать явные виды, эквивалентные typeFun (за исключением того, что последний требует непустого tparams).

Определяющие классы
InternalApi

абстрактный def referenceCapturedVariable(vble: Universe.Symbol): Universe.Tree

абстрактный def refinedType(parents: List[Universe.Type], owner: Universe.Symbol, decls: Universe.Scope, pos: Universe.Position): Universe.Type

Создатель для типов RefinedType.

Определяющие классы
InternalApi

абстрактный def refinedType(parents: List[Universe.Type], owner: Universe.Symbol, decls: Universe.Scope): Universe.Type

Создатель для типов RefinedType.

Определяющие классы
InternalApi

абстрактный def refinedType(parents: List[Universe.Type], owner: Universe.Symbol): Universe.Type

Создатель для типов RefinedType.

Определяющие классы
InternalApi

абстрактный def refinedType(parents: List[Universe.Type], decls: Universe.Scope, clazz: Universe.Symbol): Universe.RefinedType

Создатель для типов RefinedType.

Определяющие классы
InternalApi

абстрактный def refinedType(parents: List[Universe.Type], decls: Universe.Scope): Universe.RefinedType

Создатель для типов RefinedType.

Определяющие классы
InternalApi

абстрактный val reificationSupport: Universe.ReificationSupportApi

Это внутренний модуль реализации.

Определяющие классы
InternalApi

абстрактный def removeAttachment[T](tree: Universe.Tree)(implicit arg0: ClassTag[T]): tree.type

Обновление прикрепления с удалённой полезной нагрузкой заданного класса T. Возвращает сам узел.

абстрактный def removeAttachment[T](symbol: Universe.Symbol)(implicit arg0: ClassTag[T]): symbol.type

Обновление прикрепления с удалённой полезной нагрузкой заданного класса T. Возвращает сам символ.

абстрактный метод resetFlag(символ: Universe.Symbol, флаги: Universe.FlagSet): символ.type

абстрактный метод setAnnotations(символ: Universe.Symbol, аннотации: Universe.Annotation*): символ.type

абстрактный метод setFlag(символ: Universe.Symbol, флаги: Universe.FlagSet): символ.type

абстрактный метод setInfo(символ: Universe.Symbol, тип: Universe.Type): символ.type

абстрактный метод setName(символ: Universe.Symbol, имя: Universe.Name): символ.type

абстрактный метод setOriginal(tt: Universe.TypeTree, оригинал: Universe.Tree): Universe.TypeTree

абстрактный метод setOwner(символ: Universe.Symbol, новый_владелец: Universe.Symbol): символ.type

абстрактный метод setPos(дерево: Universe.Tree, новая_позиция: Universe.Position): дерево.type

Устанавливает pos дерева. Возвращает само дерево.

абстрактный метод setPrivateWithin(символ: Universe.Symbol, символ: Universe.Symbol): символ.type

абстрактный метод setSymbol(дерево: Universe.Tree, символ: Universe.Symbol): дерево.type

Устанавливает symbol дерева. Возвращает само дерево.

абстрактный метод setType(дерево: Universe.Tree, тип: Universe.Type): дерево.type

Устанавливает tpe дерева. Возвращает само дерево.

абстрактный метод singleType(префикс: Universe.Type, символ: Universe.Symbol): Universe.Type

Создатель для SingleType типов.

Definition Classes
InternalApi

абстрактный метод subpatterns(дерево: Universe.Tree): Вариант[Список[Universe.Tree]]

Возвращает неу типизированный список подпаттернов, прикреплённых к селектору-заглушке узла UnApply. Полезно при написании макросов квазицитирования, которые выполняют сопоставление с образцом.

абстрактный метод substituteSymbols(дерево: Universe.Tree, из: Список[Universe.Symbol], в: Список[Universe.Symbol]): Universe.Tree

Заменяет символы в to на соответствующие вхождения ссылок на символы from в этом типе.

Definition Classes
InternalApi

абстрактный метод substituteThis(tree: Universe.Tree, clazz: Universe.Symbol, to: => Universe.Tree): Universe.Tree

Заменить заданное дерево to на вхождения узлов, представляющих C.this, где C относится к заданному классу clazz.

Определение классов
InternalApi

абстрактный метод substituteTypes(tree: Universe.Tree, from: List[Universe.Symbol], to: List[Universe.Type]): Universe.Tree

Заменить типы в to на соответствующие вхождения ссылок на символы from в этом дереве.

Определение классов
InternalApi

абстрактный метод superType(thistpe: Universe.Type, supertpe: Universe.Type): Universe.Type

Создатель для типов SuperType.

Определение классов
InternalApi

абстрактный метод thisType(sym: Universe.Symbol): Universe.Type

Создатель для типов ThisType.

Определение классов
InternalApi

абстрактный метод typeBounds(lo: Universe.Type, hi: Universe.Type): Universe.TypeBounds

Создатель для типов TypeBounds.

Определение классов
InternalApi

абстрактный метод typeDef(sym: Universe.Symbol): Universe.TypeDef

Метод-фабрика для узлов TypeDef.

Определение классов
InternalApi

абстрактный метод typeDef(sym: Universe.Symbol, rhs: Universe.Tree): Universe.TypeDef

Метод-фабрика для узлов TypeDef.

Определение классов
InternalApi

абстрактный метод typeRef(pre: Universe.Type, sym: Universe.Symbol, args: List[Universe.Type]): Universe.Type

Создатель для типов TypeRef.

Определение классов
InternalApi

абстрактный метод unlink(scope: Universe.Scope, sym: Universe.Symbol): scope.type

абстрактный метод updateAttachment[T](tree: Universe.Tree, attachment: T)(неявный arg0: ClassTag[T]): tree.type

Обновляет привязку с помощью слота полезной нагрузки T, добавленного/обновлённого предоставленным значением. Заменяет существующую полезную нагрузку того же типа, если она существует. Возвращает само дерево.

абстрактный метод updateAttachment[T](symbol: Universe.Symbol, attachment: T)(неявный arg0: ClassTag[T]): symbol.type

Обновляет привязку с слотом данных T, добавленным/обновлённым заданным значением. Заменяет существующие данные того же типа, если они есть. Возвращает сам символ.

abstract def valDef(sym: Universe.Symbol): Universe.ValDef

Метод-фабрика для узлов ValDef.

Definition Classes
InternalApi

abstract def valDef(sym: Universe.Symbol, rhs: Universe.Tree): Universe.ValDef

Метод-фабрика для узлов ValDef.

Definition Classes
InternalApi

Члены-значения

final def !=(arg0: Any): Boolean

Определяющие классы
AnyRef → Any

final def ##(): Int

Определяющие классы
AnyRef → Any

def +(other: String): String

Неявный
Этот член добавлен с помощью неявного преобразования из MacroInternalApi вany2stringadd[MacroInternalApi] с помощью метода any2stringadd в scala.Predef.
Определяющие классы
any2stringadd

def ->[B](y: B): (MacroInternalApi, B)

Неявный
Этот член добавлен с помощью неявного преобразования из MacroInternalApi вArrowAssoc[MacroInternalApi] с помощью метода ArrowAssoc в scala.Predef.
Определяющие классы
ArrowAssoc
Аннотации
@inline()

final def ==(arg0: Any): Boolean

Определяющие классы
AnyRef → Any

final def asInstanceOf[T0]: T0

Определяющие классы
Any

def clone(): AnyRef

Атрибуты
protected[java.lang]
Определяющие классы
AnyRef
Аннотации
@throws(classOf[java.lang.CloneNotSupportedException]) @native()

def ensuring(cond: (MacroInternalApi) => Boolean, msg: => Any): MacroInternalApi

Неявный
Этот член добавлен с помощью неявного преобразования из MacroInternalApi вEnsuring[MacroInternalApi] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

def ensuring(cond: (MacroInternalApi) => Boolean): MacroInternalApi

Неявный
Этот член добавлен с помощью неявного преобразования из MacroInternalApi вEnsuring[MacroInternalApi] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

def ensuring(cond: Boolean, msg: => Any): MacroInternalApi

Неявный
Этот член добавлен с помощью неявного преобразования из MacroInternalApi вEnsuring[MacroInternalApi] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

def ensuring(cond: Boolean): MacroInternalApi

Неявный
Этот член добавлен с помощью неявного преобразования из MacroInternalApi вEnsuring[MacroInternalApi] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

final def eq(arg0: AnyRef): Boolean

Определяющие классы
AnyRef

def equals(arg0: AnyRef): Boolean

Определяющие классы
AnyRef → Any

def finalize(): Unit

Атрибуты
protected[java.lang]
Классы-определения
AnyRef
Аннотации
@throws(classOf[java.lang.Throwable])

def formatted(fmtstr: String): String

Неявный
Этот член добавлен с помощью неявного преобразования из MacroInternalApi вStringFormat[MacroInternalApi] с помощью метода StringFormat в scala.Predef.
Классы-определения
StringFormat
Аннотации
@inline()

final def getClass(): Class[_ <: AnyRef]

Классы-определения
AnyRef → Any
Аннотации
@native()

def hashCode(): Int

Классы-определения
AnyRef → Any
Аннотации
@native()

final def isInstanceOf[T0]: Boolean

Классы-определения
Any

def manifestToTypeTag[T](mirror: Any, manifest: Manifest[T]): api.Universe.TypeTag[T]

Преобразование scala.reflect.Manifest в scala.reflect.api.TypeTags#TypeTag.

Компилятор обычно генерирует эти преобразования автоматически, когда манифест для типа T находится в области видимости, и запрашивается неявное значение типа TypeTag[T], но этот метод также можно вызвать вручную. Например:

manifestToTypeTag(scala.reflect.runtime.currentMirror, implicitly[Manifest[String]])
Классы-определения
InternalApi

final def ne(arg0: AnyRef): Boolean

Классы-определения
AnyRef

final def notify(): Unit

Классы-определения
AnyRef
Аннотации
@native()

final def notifyAll(): Unit

Классы-определения
AnyRef
Аннотации
@native()

final def synchronized[T0](arg0: => T0): T0

Классы-определения
AnyRef

def toString(): String

Классы-определения
AnyRef → Any

def typeTagToManifest[T](mirror: Any, tag: api.Universe.TypeTag[T])(implicit arg0: ClassTag[T]): Manifest[T]

Преобразование scala.reflect.api.TypeTags#TypeTag в scala.reflect.Manifest.

Компилятор обычно генерирует эти преобразования автоматически, когда метка типа для типа T находится в области видимости, и запрашивается неявное значение типа Manifest[T], но этот метод также можно вызвать вручную. Например:

typeTagToManifest(scala.reflect.runtime.currentMirror, implicitly[TypeTag[String]])
Классы-определения
InternalApi

final def wait(): Unit

Классы-определения
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long, arg1: Int): Unit

Классы-определения
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long): Unit

Классы-определения
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException]) @native()

© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala-reflect/scala/reflect/macros/Universe$MacroInternalApi.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API