PSI自分メモ
この手の便利系メソッドはOpenAPIで持っていて欲しいものだ.:-(
public static boolean 自分もしくは先祖に指定した型があるかチェック(PsiType type, String fqcn) { if (!(type instanceof PsiClassType)) return false; if (fqcn.equals(type.getCanonicalText())) return true; for (PsiType superType : type.getSuperTypes()) { // やっぱ,再帰しないと先祖の型チェックはできなかった.orz boolean result = isCheckedType(superType, fqcn); if (result) return true; } return false; } public static PsiExpression 指定した位置の引数を取得する(PsiCallExpression expression, int position) { // 存在チェックが結構くどい PsiExpressionList arguments = expression.getArgumentList(); if (arguments != null) { PsiExpression[] argExpressions = arguments.getExpressions(); if (position < argExpressions.length) { return argExpressions[position]; } } // 呼出し側でいちいちnullチェックするのもウザいので,例外飛ばしてる. throw new NullPointerException(); } public static PsiLiteralExpression 指定した型のリテラル式に変換する(PsiExpression arg, Class type) { // これも存在チェックが結構くどい if (arg instanceof PsiLiteralExpression) { PsiType psiType = arg.getType(); // リテラル式は"java.lang.*"で済むので,Classで貰っても平気 if (psiType != null && psiType.equalsToText(type.getName())) { return (PsiLiteralExpression) arg; } } // 呼出し側でいちいちnullチェックするのもウザいので,例外飛ばしてる. throw new NullPointerException(); }
ps.
プラグイン書いてて思ったが,Java5に慣れてないと,JDK1.4時代の書き方と拡張文法がごっちゃになって,かえって読みづらくなるもんだな(特に拡張for文と総称型が顕著だった).