S-JIS[2011-09-09] 変更履歴

Modifiersメモ

Scala2.9.1のコンパイラプラグインのModifiers( クラスや変数の修飾子)のメモ。


概要

クラス変数の修飾子(privateとか)は、コンパイラプラグインではModifiersで表現されている。


Modifiersのプロパティー

プロパティー 備考
flags Long 修飾子
privateWithin Name  
annotations List[Tree] アノテーションだが、ClassDefValDefではここには何も入っていない。
typecheckerが削除してSymbol.anntationsに移しているらしい。
(ModifiersのScaladocコメント参照)
positions Map[Long, Position] 修飾子毎のソースファイル内の位置

フラグ(修飾子)を操作するメソッド

メソッド 備考
| (flag: Long) フラグを立てる。
& (flag: Long) 他のフラグをクリアする。
&~ (flag: Long) フラグをクリアする。
is〜 フラグが立っていればtrueを返す。
hasFlag(flag: Long) フラグが立っていればtrueを返す。
hasFlagsToString(mask: Long) 立っているフラグの文字列表現を返す。
toString() 立っているフラグの文字列表現を返す。

フラグ(修飾子)の値

ModifierFlagsやFlagsに定数が定義されている。(Scala2.9.1でModifierFlags/Flagsは非推奨になったようだが、代わりに何を使えばいいのかは不明)
FlagsはModifierFlagsを継承しているので、Flagsだけインポートすればよい。

import scala.reflect.generic.Flags
関連メソッド 備考
IMPLICIT isImplicit  
FINAL isFinal  
PRIVATE isPrivate
isPrivateLocal
 
PROTECTED isProtected
isProtectedLocal
 
  isPublic  
SEALED isSealed  
OVERRIDE isOverride  
CASE isCase  
ABSTRACT hasAbstractFlag
isAbstract
 
DEFERRED isDeferred 抽象メンバーである。
トレイトの場合はvirtualである。
INTERFACE isInterface インターフェース(つまり実装の無いtrait)である。
MUTABLE isMutable var(可変な変数)である。
PARAM isParameter
hasDefault
isByNameParam
メソッドの引数である。
COVARIANT    
BYNAMEPARAM isByNameParam  
CONTRAVARIANT hasContravariantFlag  
ABSOVERRIDE isAbstractOverride  
LOCAL hasLocalFlag
isPrivateLocal
isProtectedLocal
ローカル(this)スコープ、つまりprivate[this]やprotected[this]である。
JAVA isJavaDefined  
STATIC hasStaticFlag  
CASEACCESSOR isCaseAccessor ケースクラスの変数やそのアクセスメソッドである。
TRAIT isTrait
hasTraitFlag
 
DEFAULTPARAM hasDefault
hasDefaultFlag
変数のデフォルト値(初期値)を持っている。
PARAMACCESSOR isParamAccessor 基本コンストラクターによって定義されたフィールドである。
LAZY isLazy lazy valである。
PRESUPER hasPreSuperFlag superが呼ばれる前に値が評価される。
DEFAULTINIT isDefaultInit 型のデフォルト値で初期化される。(-Xcheckinit)
METHOD isLabel  
MODULE hasModuleFlag object
PACKAGE hasPackageFlag  
CAPTURED   ネストされた関数から呼ばれる変数である。
LABEL isLabel  
INCONSTRUCTOR hasInConstructorFlag 自分自身や親クラスによって定義されたコンストラクターである。
SYNTHETIC isSynthetic コンパイラーによって生成されたものである。
STABLE hasStableFlag  
BRIDGE    
ACCESSOR hasAccessorFlag 変数のアクセスメソッド(setterやgetter)である。
SUPERACCESSOR isSuperAccessor  
MODULEVAR   objectの値をキャッシュした変数である。
IS_ERROR    
OVERLOADED    
LIFTED isLifted  
MIXEDIN    
EXISTENTIAL    
EXPANDEDNAME    
IMPLCLASS    
TRANS_FLAG   transient
LOCKED    
SPECIALIZED    
VBRIDGE    
VARARGS   Java形式の可変長引数である。
TRIEDCOOKING   “Cooking”に挑戦するらしいが、何の事やら?(爆)
最適化のこと?

コンパイラプラグインへ戻る / Scala目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま