勉強会レポはこの記事
初心者大歓迎! webアプリを作ってみよう!勉強会に参加してSpring Bootさわってきた!!@ビズリーチ - そこに仁義はあるのか(仮)
で、追加で試してみたのはこの記事!!!
Spring Bootをやってみた — 裏紙
Spring BootのサンプルをGradle化した、けども…… — 裏紙
SpringBoot+Gradleでホットデプロイを使えるように - しおしお(´・ω・`)
このエントリーはしょぼちむ Advent Calendar 2014 - Adventarの25日目(ラスト!!!)の記事です!
24日目はうらがみさんのしょぼつむ #syobochim — 裏紙でした!!!
まさかのAdvent Calendar完走!!!そしてみなさんガチすぎ…!!:(;゙゚'ω゚'):
すごいものつくってくれた人がいたり、テストについて話してくれるひともいれば、チーム運用のはなししてくれるひともいたり、えっ!まさかこの人も書いてくれるの?!というサプライズいっぱいあり。。。
しょぼちむとはなんなのかを考える良い機会になりました(・−・)(真顔)
ネタあり真面目あり、技術ありネタありで、すごくすごく楽しい一ヶ月を
みなさん、私にいろいろなことを教えてくれる!!!うれしいたのしいうれしい!!!!('ω'≡'ω'≡'ω'≡'ω')
そこで。。。。
(このエントリーはKotlin Advent Calendar 2014 - Adventarの21日目の記事です!)
24歳、このままKotlinをやらずに20代後半に足を踏み入れていいのか自問し、
ついにKotlin童貞を捨てる事にしました。
あと、ついでにAndroid童貞も捨てます。
しょぼちむ Advent Calendar 2014 - Adventarの12日目、[twitter:@grimrose]さんの
open build/reports/life/index.html: しょぼちむさんがKotlinをやらない理由を考えてみたの記事に、こう↓かいてあったので、とりあえずGitHub - JetBrains/kotlin: The Kotlin Programming Languageにスターつけるとこから始めた。
よし。いい滑り出しです。
続きを読むIntelliJ IDEA、Jが大文字なの最近知った…。
ブログ書くの相当のんびりしてしまった…。
JJUG CCC 2014 Fall - 日本Javaユーザーグループ | Doorkeeper
のイベントで、サムライズムの@yusukeさんによるIntelliJ IDEAのハンズオンがあったので、参加してきました!!
のんびりと2時からの参加だったよ!!
ハンズオンの資料はこちら!
丁寧に書いてあって、ハンズオン参加しなかった人もやってみると良いのではなかろうか!
yusuke/ideahandson · GitHub
参加レポは別で書くよん
BCELはClassファイルを解析するためのライブラリです!
findBugsでも使われていて、『このclassでこういうmethodを使用しているときにはbugを検知する』っていう解析ができる!
前に仕事で、findBugsの解析クラスを作成したことがあって、そのときにBCELを知りました!
今回のLTでは、クラスファイル名とメソッド名を調べるだけだったけど、
アクセス修飾子(publicなのかprivateなのか)のような、MethodやClassの属性を調べることもできる
ただし、開発自体は2006年でとまってる…(^p^)
LT終わった後に、@miyakawa_takuさんにASM - Home Pageを教えてもらった!
こちらは、今も開発されているので、Java8環境での解析をする場合は、ASMの方がイイ!!らしい
ASMの話はまた別でする!*1
mavenリポジトリがある!
Maven Repository: org.apache.bcel » bcel » 5.2
ので、準備も簡単!
<dependency> <groupId>org.apache.bcel</groupId> <artifactId>bcel</artifactId> <version>5.2</version> </dependency>
Classを取得したいときはこう書けばOK!
JavaClass javaClass = new ClassParser(<<解析したいClassファイルのファイルパス>>).parse();
ClassファイルのMethodを取得して、Listとしてもつときはこう
List<Method> methods = Arrays.asList(javaClass.getMethods());
methodを一つ取得して、アクセス修飾子を調べたい場合はこう書けばいい
methods.get(1).isPrivate()
↓こうかけば、javapしたときに表示される情報が一行ずつ詰まってるStreamができる*2
methods.stream() .map(Method::getCode) .map(code -> Utility.codeToString(code.getCode(), javaClass.getConstantPool(), 0, 1, false)) .flatMap(s -> Arrays.stream(s.split("\n")))
↓この情報が入ってるよ!
173: invokevirtual java.lang.StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
ちなみに
を確認することができるよ!
ちなみに、LTしたときのソースはこんな感じでした!
import org.apache.bcel.classfile.ClassParser; import org.apache.bcel.classfile.JavaClass; import org.apache.bcel.classfile.Method; import org.apache.bcel.classfile.Utility; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.List; public class SyobochimJyoshiryokuDetector { static final String PATH = "/Users/syobochim/dev/gist/build/classes/main/jjugccc2014/"; public static void main(String[] args) { File dir = new File(PATH); List<File> files = Arrays.asList(dir.listFiles()); files.stream() .filter(File::isFile) .forEach(file -> { try { JavaClass javaClass = new ClassParser(file.getPath()).parse(); System.out.print(javaClass.getClassName() + " : "); if (hasJyoshiryoku(javaClass)) { System.out.println("女子力あります"); } else { System.out.println("女子力ないです"); } System.out.println(); } catch (IOException e) { e.printStackTrace(); } }); } private static boolean hasJyoshiryoku(final JavaClass javaClass) { List<Method> methods = Arrays.asList(javaClass.getMethods()); return methods.stream() .map(Method::getCode) .map(code -> Utility.codeToString(code.getCode(), javaClass.getConstantPool(), 0, 1, false)) .flatMap(s -> Arrays.stream(s.split("\n"))) .anyMatch(s -> s.matches(".*Syobochim\\.jyoshiryoku.*")); } }