2006-01-01から1年間の記事一覧

Generate Empty Source Code

ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setKind(ASTParser.K_COMPILATION_UNIT); parser.setSource(new char[0]); CompilationUnit unit = (CompilationUnit) parser.createAST(null); // 変更点を保存する設定 unit.recordModification…

CompilationUnit

Eclipse JDTを使う第1段階 <eclipse-userlibraries version="2"> <library name="Eclipse JDT" systemlibrary="false"> <archive path="D:/Software/Eclipse3.2/plugins/org.eclipse.jdt.core_3.2.0.v_671.jar"/> </archive></library></eclipse-userlibraries>

The Java AST Builder

まだ検証中 /** * = a / b * @param a dividend * @param b divider * @throws ArithmeticException */ @Override public int divide(int a, @NotZero int b) throws ArithmeticException { return a / b; }as Method m = AstBuilder .javadoc("= a / b") .t…

Parse Annotations using Eclipse JDT

もっと単純な実装望む… private static Annotation annotation(String str) { Map<String, String> options = new HashMap<String, String>(); options.put(JavaCore.COMPILER_SOURCE, "1.5"); ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setCompilerOptions(options); parse</string,></string,>…

こんなのがほしい

@Compound(type=List.class, typeParam = {"E"}, name="internal", initializer="new java.util.ArrayList<E>()") public class CompoundList<E> { }↓ public class CompoundList<E> { private List<E> internal = new java.util.ArrayList<E>(); public boolean add(E o) {</e></e></e></e></e>…

Skypeとか

Skypeの通信路を使ってプロジェクト管理したらどうなるかなと。 https://developer.skype.com/wiki/Java_APIショートメッセージ、内線電話、P2Pでのネットワーク構築、さらにファイヤーウォール越えられるぽい。

プログラム変換系を書く側として、 class A { int a, b, c; }とか、 class B { int a, b[], c[][]; }とかって言う記法はやっぱりいただけないと思う。 class B { int a; int[] b; int[][] c; }って記法にノーマライズしちゃってもいいんだけど、これはユーザ…

やな文法

int a = (int) + 1.5; Integer b = (Integer) + 1.5;前者は int a = (int) (+ 1.5); // +1.5 (ぷらすいってんご) を int 型にキャストとなり問題ないが、後者は Integer b = Integer + 1.5; // いんてじゃーたすいってんごとなり、Integerという名前のフィー…

invokedynamic

http://jcp.org/en/jsr/detail?id=292 今更ながら。むしろ構文が気になる…。Genericsの上でやるのかしら?

priceless

"0" を解釈するために必要なコンパイラの動作。 Call: parseExpression Call: expression Call: assignmentExpression Call: conditionalExpression Call: conditionalOrExpression Call: conditionalAndExpression Call: inclusiveOrExpression Call: exclu…

Soot

http://www.sable.mcgill.ca/soot/逆コンパイル時に便利げ。 class file -> AST も夢じゃない。

Label-Annotation!?

private void labeled() { HELLO: ; }コンパイルOK.JLS3.0 §14.6, §14.7 ご参照のこと。

業務連絡?

大学のメールサーバ死亡中…orz

java.lang.reflect.Proxy

いまさらですが、 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/reflect/Proxy.html これがすごい便利な気がしてならない。

tuigwaa

急にtuigwaaクローンを作りたくなってしまった件これが現実逃避というものなのですね。

irenka-overview

その2。irenkaは、コンパイルタイム、ランタイム(クラスロード)などに、その読み込み処理に先立ってプログラム構造を調査し、必要であれば生成/ロードされるクラスを書き換えることを最初の目標とする。例として、下記のようなクラスを考える。 @Hoge(Foo.c…

irenka-architecture

そろそろ明文化を始める。irenkaとは「掟」や「法律」を表すアイヌ語で、このプロジェクトはJavaプログラムに構文的/意味的な掟を容易に課すためのフレームワークを提供することを目標とする。 現状のJavaでは、アノテーションとその処理器Aptなどによって実…

variable injection

apt

たぶん発想がアフォすぎて誰も手を出さなかったinjection. public class Hoge { @Injection private static final String[] FOO = {"dummy"}; public static void main(String[] args) { @Injection int bar = 0; System.out.println(FOO[bar]); } }annotati…

Property

同じ日付に2回トラバ送ってもしょうがないので省略。 下の項と同じネタで。書き方はともかくとして、こんな使い方できそうですねぇ annotation ? annotates ?f name Property getter = ?g setter = ?s apply TemplateProcessor.process(?f, ?g, ?s) public c…

id:masataka_k:20060215 からのインスパイア。 public class ClassTmpl { private String _member; public Clazz(String test) { _member = test; } public String template() { return _member != null ? _member : ""; } } public class Mixin { private S…

イレイジャ変換

Aptとreflectionのブリッジ書いてて気づいたんですけど、宣言と型を明確に分けるってのも悪くないですね。 java.lang.Class 宣言:java.lang.Class 型:java.lang.Class つか、これやらないと、どっちかにイレイジャ変換を手書きで入れることになるわけですが……

クラスローダ嫌い

配列型をロードするクラスローダは、そのコンポーネントタイプと同じらしい。 仮にintをロードするクラスローダがあったとして、それをCpと名づけると、 int[].getSuperClass() -> Object より、java.lang.Objectをロードできる。 java.lang.Object.getClass…

殺人スケジュール

人が死ねるスケジュールを何とか乗り切って、とりあえず超apt再開。 JSR199を理解する辺りから開始します。

Kahua

http://www.kahua.org/cgi-bin/kahua.fcgi/kahua-web/ 意外と面白そうだなーと。

value annotation

apt

id:masataka_k:20060106 への回答。java.lang.annotation.Target より抜粋。 このメタ注釈は、宣言された型の使用目的が複雑な注釈型宣言のメンバ型だけであることを示します。これは直接的な注釈には使用できません。 @Target({}) public @interface Member…

なんじゃそりゃ…

Serializable s = new int[10];

Apt wrapper

apt

某所でご馳走になってきました。眠くなる前にアイデアをまとめておきます。親クラスの誰かが "com.example.Required" の名前を持つ注釈を持つ注釈を持っている場合、そのクラスで宣言された全てのメソッドに対して処理を行う。その際、メソッド m と 注釈 a …

Annotation Restricted

apt

「Annotation にも型制約を」ということで、少々考えてみました。AspectをAnnotationでウィービング(?)するのが流行ってますが、そのノリで上位クラスに制約を掛け、これをコンパイルすればいいのではと。ちなみに、java.lang.annotation.AnnotationFormatEr…

パーサコンビネータ

プラガブルなパーサ、及び上位パーサについて考え中。 やっぱりパーサ・ジェネレータで静的なパーサ書くより、Haskell Parsec の Java版 JParsec でも使って動的文法にでも対応させて見ましょうかね…