(empty log message)
@@ -20,7 +20,7 @@ | ||
20 | 20 | public class PleiadesOption { |
21 | 21 | |
22 | 22 | /** Eclipse の -clean (起動時に -clean が指定されている場合は true) */ |
23 | - public boolean isClean; | |
23 | + public volatile boolean isClean; | |
24 | 24 | |
25 | 25 | /** ニーモニック非表示 (表示しない場合は true) */ |
26 | 26 | public final boolean isNoMnemonic; |
@@ -80,10 +80,15 @@ | ||
80 | 80 | throws IllegalClassFormatException { |
81 | 81 | |
82 | 82 | try { |
83 | - // バイトコード変換しないパッケージ | |
84 | - if ( | |
83 | + // バイトコード変換しないパッケージは null を返す | |
84 | + if (vmClassName == null) { | |
85 | 85 | // null の場合がある |
86 | - vmClassName == null || | |
86 | + return null; | |
87 | + } | |
88 | + if (vmClassName.startsWith("org/eclipse/")) { | |
89 | + // eclipse パッケージは対象 (高速化のために先に判定) | |
90 | + } | |
91 | + else if ( | |
87 | 92 | // java. 除外 (awt や javax.swing などは除外しない) |
88 | 93 | (vmClassName.startsWith("java/") && !vmClassName.startsWith("java/awt/")) || |
89 | 94 | // JavaScript Nashorn |
@@ -94,7 +99,8 @@ | ||
94 | 99 | vmClassName.startsWith("org/xml/sax/") || |
95 | 100 | vmClassName.startsWith("javax/xml/") || |
96 | 101 | // Apache Commons (Shadow Jar) |
97 | - vmClassName.startsWith("jp/sourceforge/mergedoc/org/apache/commons/") | |
102 | + vmClassName.startsWith("jp/sourceforge/mergedoc/org/apache/commons/") || | |
103 | + vmClassName.startsWith("jp/sourceforge/mergedoc/javassist/") | |
98 | 104 | ) { |
99 | 105 | return null; |
100 | 106 | } |
@@ -155,7 +161,7 @@ | ||
155 | 161 | |
156 | 162 | } catch (Throwable e) { |
157 | 163 | |
158 | - String msg = "バイトコード変換事前処理に失敗しました。" + vmClassName; | |
164 | + String msg = "プラグインのロケーション取得に失敗しました。" + vmClassName; | |
159 | 165 | log.error(e, msg); |
160 | 166 | throw new IllegalClassFormatException(msg + " 原因:" + e); |
161 | 167 | } |
@@ -258,14 +258,14 @@ | ||
258 | 258 | // 以下、Eclipse に埋め込んだ AOP により呼び出される public static メソッド |
259 | 259 | |
260 | 260 | /** |
261 | - * 翻訳トランスフォーマーを開始します。 | |
262 | - * @param args Eclipse 起動オプション配列 | |
263 | - * @return 起動オプション配列 | |
261 | + * AOP により、main メソッド開始前に呼び出される、翻訳トランスフォーマーの開始処理です。 | |
262 | + * @param mainArgs main メソッド呼び出し前の main 引数 | |
263 | + * @return main に渡す引数 | |
264 | 264 | */ |
265 | - public static String[] start(String... args) { | |
265 | + public static String[] start(String... mainArgs) { | |
266 | 266 | |
267 | 267 | // 翻訳トランスフォーマーの開始 |
268 | - String[] newArgs = LauncherTransformer.startTranslationTransformer(args); | |
268 | + String[] newArgs = LauncherTransformer.startTranslationTransformer(mainArgs); | |
269 | 269 | return newArgs; |
270 | 270 | } |
271 | 271 |
@@ -189,14 +189,11 @@ | ||
189 | 189 | } |
190 | 190 | |
191 | 191 | /** |
192 | - * 翻訳トランスフォーマーを開始します。 | |
192 | + * main メソッドの前に呼び出され、翻訳トランスフォーマーを開始します。 | |
193 | 193 | * @param mainArgs main メソッド呼び出し前の main 引数 |
194 | 194 | * @return main に渡す引数 |
195 | 195 | */ |
196 | 196 | protected static String[] startTranslationTransformer(String... mainArgs) { |
197 | - | |
198 | - // 非同期実行キュー終了待ち (プラグイン更新があれば isClean に true が設定される) | |
199 | - AsyncQueue.awaitTermination(); | |
200 | 197 | |
201 | 198 | long start = System.nanoTime(); |
202 | 199 |
@@ -210,9 +207,11 @@ | ||
210 | 207 | option.isClean = isIncludeArgsClean; |
211 | 208 | } |
212 | 209 | |
210 | + // 非同期実行キュー終了待ち (isUpdated などによる isClean=true 設定待ち) | |
211 | + AsyncQueue.awaitTermination(); | |
212 | + | |
213 | 213 | // キャッシュが無い場合は強制的に -clean を指定 |
214 | 214 | if (!option.isClean) { |
215 | - | |
216 | 215 | File excludeList = Filez.temp(CacheFilez.EXCLUDE_CLASS_LIST); |
217 | 216 | if (!excludeList.exists()) { |
218 | 217 | log.info("変換除外クラス名キャッシュが存在しないため、強制的に -clean モードで起動します。"); |
@@ -286,17 +285,17 @@ | ||
286 | 285 | // 埋め込んだ AOP により呼び出される public static メソッド |
287 | 286 | |
288 | 287 | /** |
289 | - * 翻訳トランスフォーマーを開始します。 | |
290 | - * @param args Eclipse 起動オプション配列 | |
291 | - * @return 起動オプション配列 | |
288 | + * AOP により、main メソッド開始前に呼び出される、翻訳トランスフォーマーの開始処理です。 | |
289 | + * @param mainArgs main メソッド呼び出し前の main 引数 | |
290 | + * @return main に渡す引数 | |
292 | 291 | */ |
293 | - public static String[] start(String... args) { | |
292 | + public static String[] start(String... mainArgs) { | |
294 | 293 | |
295 | 294 | // 翻訳トランスフォーマーの開始 |
296 | - startTranslationTransformer(args); | |
295 | + startTranslationTransformer(mainArgs); | |
297 | 296 | |
298 | 297 | // 引数に -clean がある場合は削除 (IDEA などは起動できなくなるため) |
299 | - String[] newArgs = ArrayUtils.removeElement(args, CLEAN_OPTION_STRING); | |
298 | + String[] newArgs = ArrayUtils.removeElement(mainArgs, CLEAN_OPTION_STRING); | |
300 | 299 | return newArgs; |
301 | 300 | } |
302 | 301 |