NetBeans 6.9の変態的新機能 その3

今回は変態的ではないと思う機能が多いけどキニシナイ。

アナライズ スタック ウインドウ

まずは以下のコードを実行したとする。

package javaapplication16;


public class Main {


    public static void main(String[] args) {
        throw new RuntimeException("ほげ");
        
    }

}

こいつのエラーのスタックトレースクリップボードに入れておく。

アナライズスタックウインドウを開いてボタンを押すと以下の画面が出る。
http://shin.cside.com/diary/2010/0321-01.png

あとはリンクをダブルクリックすると該当のソースの該当行が表示される。

お客さんからのエラーログの提供後の修正が容易になるかも。その場合バージョン管理をしっかりしておくというのが必要になると思う。行数が変わっている場合があるから。


ちなみに現時点ではやっつけ実装のようで、該当行がないとエラーが出る。

toString()の生成

equalsやhashCodeは雛形自動生成してくれるのにtoStringが今まで無かった。

というわけで追加されたようだ。
ALT+Insertを押すと以下のように追加されている。
http://shin.cside.com/diary/2010/0321-02.png


選ぶと以下のようなウインドウが表示される。
http://shin.cside.com/diary/2010/0321-03.png


生成されたコードは以下の通り。

package javaapplication16;

public class Main {

    int a = 123;
    String b = "ほげ";

    @Override
    public String toString() {
        return "Main{" + "a=" + a + "b=" + b + '}';
    }

}

もうちっと整形してもらわないときついが、正式版までには直るかな。

実装クラス、実装メソッドを探す

まずインターフェースを作成。

package javaapplication16;

public interface Hello {

    public String hello();
    
}

実装クラスを2つ作成してみる。

package javaapplication16;

public class HelloImpl1 implements Hello{

    @Override
    public String hello() {
        return "hello1";
    }

}
package javaapplication16;

public class HelloImpl2 implements Hello{

    @Override
    public String hello() {
        return "hello1";
    }

}

さらにそのうちの1つを継承してみる。

package javaapplication16;


public class Hello3 extends HelloImpl1 {

}

この状態でインターフェースは以下のように表示されている。
http://shin.cside.com/diary/2010/0321-04.png


クラスのところにあるマークをクリックすると実装クラス一覧が表示される。個々からジャンプすることが可能。
http://shin.cside.com/diary/2010/0321-05.png


メソッドのほうをクリックするとメソッド自体を実装したクラスの一覧が表示される。
http://shin.cside.com/diary/2010/0321-06.png
暮らすとしては実装しているが、メソッド自体を定義していないため、こちらには現れていないのを確認すべし。

クラスファイルからソースを生成

今まではソースがないとまったく開けなかったが、6.9はCTRL+クリックで開けるようになった。

ただし、ソースが解析、生成されるわけではなく、フィールドとかメソッドとかそういうのは展開されるが、中身はない。

Gsonクラスを開いてみたら以下のとおりになった

public final class Gson {

    private static final String NULL_STRING = "null";
    static final boolean DEFAULT_JSON_NON_EXECUTABLE = false;
    static final AnonymousAndLocalClassExclusionStrategy DEFAULT_ANON_LOCAL_CLASS_EXCLUSION_STRATEGY;
    static final SyntheticFieldExclusionStrategy DEFAULT_SYNTHETIC_FIELD_EXCLUSION_STRATEGY;
    static final ModifierBasedExclusionStrategy DEFAULT_MODIFIER_BASED_EXCLUSION_STRATEGY;
    static final JsonFormatter DEFAULT_JSON_FORMATTER;
    static final FieldNamingStrategy DEFAULT_NAMING_POLICY;
    private static final ExclusionStrategy DEFAULT_EXCLUSION_STRATEGY;
    private static final String JSON_NON_EXECUTABLE_PREFIX = ")]}'\n";
    private final ExclusionStrategy serializationStrategy;
    private final ExclusionStrategy deserializationStrategy;
    private final FieldNamingStrategy fieldNamingPolicy;
    private final MappedObjectConstructor objectConstructor;
    private final ParameterizedTypeHandlerMap<JsonSerializer<?>> serializers;
    private final ParameterizedTypeHandlerMap<JsonDeserializer<?>> deserializers;
    private final JsonFormatter formatter;
    private final boolean serializeNulls;
    private final boolean generateNonExecutableJson;

    public Gson() {
        //compiled code
        throw new RuntimeException("Compiled Code");
    }

    private ObjectNavigatorFactory createDefaultObjectNavigatorFactory(ExclusionStrategy strategy) {
        //compiled code
        throw new RuntimeException("Compiled Code");
    }

適当に略


つまり、ソースなしで開いた場合以下のコードで置き換わってる。

//compiled code
throw new RuntimeException("Compiled Code");

まぁ、インターフェースがわかるようになっている分前進はした…と思いたい