• R/O
  • SSH
  • HTTPS

mergedoc: Commit


Commit MetaInfo

Revision2874 (tree)
Time2022-04-15 17:59:38
Authorcypher256

Log Message

(empty log message)

Change Summary

Incremental Difference

--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/Pleiades.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/Pleiades.java (revision 2874)
@@ -6,10 +6,8 @@
66 */
77 package jp.sourceforge.mergedoc.pleiades;
88
9-import java.io.File;
109 import java.lang.instrument.Instrumentation;
1110
12-import jp.sourceforge.mergedoc.pleiades.log.FileLogger;
1311 import jp.sourceforge.mergedoc.pleiades.log.Logger;
1412 import jp.sourceforge.mergedoc.pleiades.runtime.Applicationz;
1513 import jp.sourceforge.mergedoc.pleiades.runtime.LauncherTransformer;
@@ -25,16 +23,19 @@
2523 /** Pleiades パッケージ名 (プラグイン名) */
2624 public static final String PACKAGE_NAME = Pleiades.class.getPackage().getName();
2725
26+ /** Java アプリケーション起動時の -javaagent 引数 (JUnit や未指定の場合は null) */
27+ private static String javaagentArg;
28+
2829 /** バイトコード変換トランスフォーマーを登録・削除するための Instrumentation */
2930 private static Instrumentation instrumentation;
3031
31- /** Pleiades コンテキスト */
32- private static PleiadesContext pleiadesContext;
33-
3432 /**
35- * 対象 Java アプリケーションの起動前に呼び出されるメソッドです。<br>
36- * 起動時の main スレッドから呼び出されるため、時間がかかる処理は非同期で行います。
37- * @param agentArg -javaagent 引数
33+ * 対象 Java アプリケーションの起動前に呼び出されるメソッドです。
34+ * <ul>
35+ * <li>起動時の main スレッドから呼び出されるため、時間がかかる処理は非同期で行います。
36+ * <li>main スレッドではログも通常は出力しません。
37+ * </ul>
38+ * @param agentArg -javaagent 引数 (未指定の場合は null)
3839 * @param inst トランスフォーマー登録・削除用 Instrumentation
3940 */
4041 public static void premain(final String agentArg, final Instrumentation inst) {
@@ -44,17 +45,15 @@
4445 if (instrumentation != null) {
4546 Logger log = Logger.getLogger(Pleiades.class);
4647 log.info("instrumentation がすでに存在するため premain 処理を実行しません。");
47- pleiadesContext.isRestart = true;
48+ PleiadesContext.getInstance().isRestart = true;
4849 return;
4950 }
51+ javaagentArg = agentArg;
5052 instrumentation = inst;
5153
52- // アプリケーションやロガーの初期化
53- // 高速化: ここは起動時の main スレッドのため、getLogger やログ出力しない
54- pleiadesContext = new PleiadesContext(agentArg);
54+ // アプリケーションの初期化と起動トランスフォーマーの登録
5555 Applicationz.init();
56- File logFile = Applicationz.temp("pleiades.log");
57- Logger.init(FileLogger.class, pleiadesContext.logLevel, logFile);
56+ instrumentation.addTransformer(LauncherTransformer.getInstance());
5857
5958 // Swing L&F 変更 - パフォーマンス以外に下記の理由により廃止
6059 // ・Windows Aptana でファイルタブから「Local Filesystem」を開くと VM クラッシュ
@@ -62,9 +61,6 @@
6261 // ・同期処理でもタイミングによりイベントディスパッチスレッドで NPE が発生する
6362 // ・Fedora6, 7 や CentOS では NPE が発生する
6463
65- // 起動トランスフォーマーの登録
66- instrumentation.addTransformer(LauncherTransformer.getInstance());
67-
6864 } catch (Throwable e) {
6965 abort(e, "Pleiades 初期化時にエラーが発生しました。");
7066 }
@@ -71,25 +67,19 @@
7167 }
7268
7369 /**
74- * AOP バイトコード変換トランスフォーマーを登録・削除するための Instrumentation を取得します。
75- * @return AOP トランスフォーマー登録・削除用 Instrumentation (not null)
70+ * Java アプリケーション起動時の -javaagent 引数を取得します。
71+ * @return -javaagent 引数 (JUnit や 未指定時は null)
7672 */
77- public static Instrumentation getInstrumentation() {
78- return instrumentation;
73+ public static String getJavaagentArg() {
74+ return javaagentArg;
7975 }
8076
8177 /**
82- * Pleiades コンテキストを取得します。
83- * @return Pleiades コンテキスト (not null)
78+ * AOP バイトコード変換トランスフォーマーを登録・削除するための Instrumentation を取得します。
79+ * @return AOP トランスフォーマー登録・削除用 Instrumentation (JUnit は null)
8480 */
85- public static PleiadesContext getPleiadesContext() {
86-
87- if (pleiadesContext == null) {
88- Logger log = Logger.getLogger(Pleiades.class);
89- log.info("[JUnit/Tool] ツール向け PleiadesContext を生成しました。");
90- pleiadesContext = new PleiadesContext();
91- }
92- return pleiadesContext;
81+ public static Instrumentation getInstrumentation() {
82+ return instrumentation;
9383 }
9484
9585 /**
--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/PleiadesContext.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/PleiadesContext.java (revision 2874)
@@ -54,10 +54,32 @@
5454
5555 /** アプリケーション識別名 (デフォルト null) */
5656 public String appName;
57+
58+ // -------------------------------------------------------------------------------------------
59+
60+ /** Pleiades コンテキストのシングルトンインスタンス */
61+ private static final PleiadesContext singleton;
62+ static {
63+ if (Pleiades.getInstrumentation() != null) {
64+ singleton = new PleiadesContext(Pleiades.getJavaagentArg());
65+ } else {
66+ singleton = new PleiadesContext();
67+ System.out.println("JUnit や生成ツール向けの PleiadesContext を生成しました。");
68+ }
69+ }
70+
71+ /**
72+ * Pleiades コンテキストを取得します。<br>
73+ * pleiades-config.xml からも呼び出されていることに注意してください。
74+ * @return Pleiades コンテキスト (not null)
75+ */
76+ public static PleiadesContext getInstance() {
77+ return singleton;
78+ }
5779
5880 /**
5981 * Pleiades コンテキストを構築します。<br>
60- * JUnit やツール用のコンストラクタです。
82+ * JUnit や生成ツール用のコンストラクタです。
6183 */
6284 PleiadesContext() {
6385
--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/resource/TranslationNotFoundProperties.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/resource/TranslationNotFoundProperties.java (revision 2874)
@@ -16,7 +16,7 @@
1616 import java.util.Set;
1717 import java.util.regex.Pattern;
1818
19-import jp.sourceforge.mergedoc.pleiades.Pleiades;
19+import jp.sourceforge.mergedoc.pleiades.PleiadesContext;
2020 import jp.sourceforge.mergedoc.pleiades.log.Logger;
2121 import jp.sourceforge.mergedoc.pleiades.runtime.Applicationz;
2222
@@ -41,7 +41,7 @@
4141
4242 /** 訳無しプロパティーインスタンスの初期化 */
4343 static {
44- if (Pleiades.getPleiadesContext().enabledNotFoundLog) {
44+ if (PleiadesContext.getInstance().enabledNotFoundLog) {
4545 singleton = new TranslationNotFoundProperties();
4646 } else {
4747 singleton = new TranslationNotFoundProperties() {
--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/AbstractTransformer.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/AbstractTransformer.java (revision 2874)
@@ -26,7 +26,6 @@
2626 import javassist.CtBehavior;
2727 import javassist.CtClass;
2828 import javassist.NotFoundException;
29-import jp.sourceforge.mergedoc.pleiades.Pleiades;
3029 import jp.sourceforge.mergedoc.pleiades.PleiadesContext;
3130 import jp.sourceforge.mergedoc.pleiades.log.Logger;
3231 import jp.sourceforge.mergedoc.pleiades.resource.Filez;
@@ -48,7 +47,7 @@
4847 private static final ClassPool javassist = new ClassPool(true);
4948
5049 /** Pleiades コンテキスト */
51- protected static final PleiadesContext pleiadesContext = Pleiades.getPleiadesContext();
50+ protected static final PleiadesContext pleiadesContext = PleiadesContext.getInstance();
5251
5352 // -------------------------------------------------------------------------------------------
5453
--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/Analyses.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/Analyses.java (revision 2874)
@@ -15,6 +15,7 @@
1515 import java.util.function.Function;
1616
1717 import jp.sourceforge.mergedoc.pleiades.Pleiades;
18+import jp.sourceforge.mergedoc.pleiades.PleiadesContext;
1819 import jp.sourceforge.mergedoc.pleiades.log.Logger;
1920 import jp.sourceforge.mergedoc.pleiades.log.Logger.LogLevel;
2021 import jp.sourceforge.mergedoc.pleiades.runtime.resource.CallHierarchyExplorer;
@@ -34,7 +35,7 @@
3435 private static final Logger log = Logger.getLogger(Analyses.class);
3536
3637 /** デバッグ時は true */
37- private static final boolean IS_DEBUG = Pleiades.getPleiadesContext().logLevel == LogLevel.DEBUG;
38+ private static final boolean IS_DEBUG = PleiadesContext.getInstance().logLevel == LogLevel.DEBUG;
3839
3940 /**
4041 * 呼び出し回数時間マップ<br>
--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/Applicationz.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/Applicationz.java (revision 2874)
@@ -15,11 +15,14 @@
1515 import org.apache.commons.lang3.SystemUtils;
1616
1717 import jp.sourceforge.mergedoc.pleiades.Pleiades;
18+import jp.sourceforge.mergedoc.pleiades.PleiadesContext;
19+import jp.sourceforge.mergedoc.pleiades.log.FileLogger;
20+import jp.sourceforge.mergedoc.pleiades.log.Logger;
1821 import jp.sourceforge.mergedoc.pleiades.resource.Filez;
1922 import jp.sourceforge.mergedoc.pleiades.resource.PatternCache;
2023
2124 /**
22- * アプリケーション情報を参照するためのユーティリティクラスです。
25+ * アプリケーションのユーティリティクラスです。
2326 * @author cypher256
2427 */
2528 public class Applicationz {
@@ -31,7 +34,8 @@
3134 private static final Properties configIni = new Properties();
3235
3336 /**
34- * Pleiades のログやキャッシュを保存する一時ディレクトリー
37+ * Pleiades のログやキャッシュを保存する一時ディレクトリー<br>
38+ * 通常は eclipse/configuration/jp.sourceforge.mergedoc.pleiades
3539 */
3640 private static File pleiadesTempDir;
3741
@@ -83,6 +87,10 @@
8387 }
8488 }
8589 pleiadesTempDir.mkdirs();
90+
91+ // ロガーの初期化 (init 前に Logger.getLogger すると System.out が使用されることに注意)
92+ File logFile = new File(pleiadesTempDir, "pleiades.log");
93+ Logger.init(FileLogger.class, PleiadesContext.getInstance().logLevel, logFile);
8694 }
8795
8896 /**
--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/CleanMessage.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/CleanMessage.java (revision 2874)
@@ -20,7 +20,6 @@
2020 import javax.swing.JLabel;
2121 import javax.swing.JWindow;
2222
23-import jp.sourceforge.mergedoc.pleiades.Pleiades;
2423 import jp.sourceforge.mergedoc.pleiades.PleiadesContext;
2524 import jp.sourceforge.mergedoc.pleiades.log.Logger;
2625 import jp.sourceforge.mergedoc.pleiades.resource.Filez;
@@ -44,7 +43,7 @@
4443 */
4544 public static void show(final String splashFilePath) {
4645
47- PleiadesContext pleiadesContext = Pleiades.getPleiadesContext();
46+ PleiadesContext pleiadesContext = PleiadesContext.getInstance();
4847 if (!pleiadesContext.isClean) {
4948 return;
5049 }
--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/LauncherEclipseTransformer.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/LauncherEclipseTransformer.java (revision 2874)
@@ -58,11 +58,11 @@
5858 @Override
5959 protected void init() {
6060
61- File plugins = Applicationz.osgiHome("plugins");
62- File dropins = Applicationz.osgiHome("dropins");
63-
6461 Asyncz.executeLog("プラグインの jar を AOP クラスパスへ追加", () -> {
6562
63+ File plugins = Applicationz.osgiHome("plugins");
64+ File dropins = Applicationz.osgiHome("dropins");
65+
6666 // 直下の plugins
6767 File[] jars = Filez.listBySuffix(plugins, ".jar");
6868
@@ -132,6 +132,9 @@
132132
133133 Asyncz.executeForceClean("Eclipse プラグイン最終更新時刻の判定", () -> {
134134
135+ File plugins = Applicationz.osgiHome("plugins");
136+ File dropins = Applicationz.osgiHome("dropins");
137+
135138 // 更新チェック (明示的な -clean 時でも次回起動時に前回更新日時が必要なため実行する)
136139 if (new UpdateDetector().isUpdated(plugins, dropins)) {
137140
--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/advice/PleiadesConfig.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/advice/PleiadesConfig.java (revision 2874)
@@ -18,6 +18,7 @@
1818 import org.apache.commons.lang3.builder.ToStringStyle;
1919
2020 import jp.sourceforge.mergedoc.pleiades.Pleiades;
21+import jp.sourceforge.mergedoc.pleiades.PleiadesContext;
2122 import jp.sourceforge.mergedoc.pleiades.log.Logger;
2223 import jp.sourceforge.mergedoc.pleiades.resource.Filez;
2324 import jp.sourceforge.mergedoc.pleiades.runtime.Analyses;
@@ -66,7 +67,7 @@
6667 */
6768 private PleiadesConfig() {
6869
69- String configXmlPath = Pleiades.getPleiadesContext().configXmlPath;
70+ String configXmlPath = PleiadesContext.getInstance().configXmlPath;
7071 if (configXmlPath == null) {
7172 log.info("[JUnit/Tool] configXmlPath が null のため Pleiades 構成ファイルをロードしませんでした。");
7273 traceConfig = null;
--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/resource/ExcludePackageProperties.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/resource/ExcludePackageProperties.java (revision 2874)
@@ -15,7 +15,7 @@
1515 import java.util.List;
1616 import java.util.Map;
1717
18-import jp.sourceforge.mergedoc.pleiades.Pleiades;
18+import jp.sourceforge.mergedoc.pleiades.PleiadesContext;
1919 import jp.sourceforge.mergedoc.pleiades.log.Logger;
2020 import jp.sourceforge.mergedoc.pleiades.resource.Filez;
2121 import jp.sourceforge.mergedoc.pleiades.resource.PropertySet;
@@ -48,7 +48,7 @@
4848 */
4949 private ExcludePackageProperties() {
5050
51- String appName = Pleiades.getPleiadesContext().appName;
51+ String appName = PleiadesContext.getInstance().appName;
5252 if (appName == null) {
5353 return;
5454 }
--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/resource/TranslationCache.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/resource/TranslationCache.java (revision 2874)
@@ -4,7 +4,7 @@
44 import java.util.LinkedHashMap;
55 import java.util.Map;
66
7-import jp.sourceforge.mergedoc.pleiades.Pleiades;
7+import jp.sourceforge.mergedoc.pleiades.PleiadesContext;
88 import jp.sourceforge.mergedoc.pleiades.log.Logger;
99 import jp.sourceforge.mergedoc.pleiades.runtime.advice.RuntimeJoinPoint;
1010
@@ -63,7 +63,7 @@
6363
6464 /** このクラスのシングルトンインスタンス */
6565 private static final TranslationCache instance
66- = "idea".equals(Pleiades.getPleiadesContext().appName)
66+ = "idea".equals(PleiadesContext.getInstance().appName)
6767 ? new TranslationIdeaCache()
6868 : new TranslationCache();
6969
--- trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/resource/TranslationDictionary.java (revision 2873)
+++ trunk/Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/resource/TranslationDictionary.java (revision 2874)
@@ -16,7 +16,6 @@
1616
1717 import org.apache.commons.lang3.StringUtils;
1818
19-import jp.sourceforge.mergedoc.pleiades.Pleiades;
2019 import jp.sourceforge.mergedoc.pleiades.PleiadesContext;
2120 import jp.sourceforge.mergedoc.pleiades.log.Logger;
2221 import jp.sourceforge.mergedoc.pleiades.resource.FileNamez;
@@ -59,7 +58,7 @@
5958 private static final char[] GLOBAL_MULTIBYTES_CHARS = "‐‘’“”¤¶\u00A0…⇧⌘⌥⌃⏎→".toCharArray();
6059
6160 /** Pleiades コンテキスト */
62- private static PleiadesContext pleiadesContext = Pleiades.getPleiadesContext();
61+ private static PleiadesContext pleiadesContext = PleiadesContext.getInstance();
6362
6463 /** このクラスのシングルトン・インスタンス */
6564 private static TranslationDictionary instance;
--- trunk/Pleiades/src/main/resources/pleiades-config.xml (revision 2873)
+++ trunk/Pleiades/src/main/resources/pleiades-config.xml (revision 2874)
@@ -139,7 +139,7 @@
139139 <!-- Eclipse 起動時のスプラッシュに表示する clean メッセージ 2021.07.09 -->
140140 <pointCut editPoint="call" timing="around">
141141 <advice><![CDATA[
142- if (?{root}.pleiades.Pleiades.getPleiadesContext().isClean)
142+ if (?{root}.pleiades.PleiadesContext.getInstance().isClean)
143143 $1 = "-clean " + $1;
144144 $_ = $proceed($$);
145145 ]]></advice>
Show on old repository browser