お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2019-12-29 08:33:43

udooon
メンバ
登録日: 2012-01-24

pleiades の -Xverify:none オプションを外す

[環境]
eclipse-cpp-2019-12-R-linux-gtk-x86_64
pleiades-2019.11.29 (ダウンロード版)
$ java --version
openjdk 11.0.5 2019-10-15
OpenJDK Runtime Environment (build 11.0.5+10-post-Ubuntu-0ubuntu1.118.04)
OpenJDK 64-Bit Server VM (build 11.0.5+10-post-Ubuntu-0ubuntu1.118.04, mixed mode, sharing)

[症状]
eclipse.ini の
-Xverify:none
オプションを外すと、起動せず。

[eclipse-workspace/.metadata/.log]

コード:

!SESSION 2019-12-28 16:00:02.809 -----------------------------------------------
eclipse.buildId=4.14.0.I20191210-0610
java.version=11.0.5
java.vendor=Private Build
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=ja_JP
Framework arguments:  -product org.eclipse.epp.package.cpp.product
Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.cpp.product -clean

!ENTRY org.eclipse.e4.ui.workbench.swt 4 2 2019-12-28 16:00:16.955
!MESSAGE プラグイン "org.eclipse.e4.ui.workbench.swt" からのコードの起動で問題が発生しました。
!STACK 0
java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    org/eclipse/jface/viewers/StyledString.<init>(Ljava/lang/String;)V @18: invokespecial
  Reason:
    Type uninitializedThis (current frame, stack[7]) is not assignable to 'java/lang/Object'
  Current Frame:
    bci: @18
    flags: { flagThisUninit }
    locals: { uninitializedThis, 'java/lang/String' }
    stack: { 'java/lang/String', uninitialized 1, uninitialized 1, 'jp/sourceforge/mergedoc/pleiades/runtime/advice/JointPoint$EditPoint', 'java/lang/String', 'java/lang/String', 'java/lang/String', uninitializedThis }
  Bytecode:
    0000000: 2bbb 0114 59b2 011a 1301 1c13 011e 1301
    0000010: 1f2a b701 22b8 0128 4c2a 2b01 b700 f2b1
    0000020:

[解決策]
plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config.xml を修正。

[修正パッチ]

コード:

--- a/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config.xml.orig
+++ b/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config.xml
@@ -1153,7 +1153,7 @@
         <jointPoint
             className="org.eclipse.jface.viewers.StyledString"
             methodName="StyledString"
-            descriptor="(Ljava/lang/String;)V">
+            descriptor="(Ljava/lang/Object;)V">
 
             <!-- 呼び出し元による限定 (Buildship 3.0 Gradle タスク・ビュー > グループ名) 2018.12.23 -->
             <!-- → shadow など翻訳しないようほうが良いグループがあるため廃止

修正後、
-Xverify:none オプションを外しても、エラー無く起動。

オフライン

 

#2 2020-01-03 15:24:43

udooon
メンバ
登録日: 2012-01-24

Re: pleiades の -Xverify:none オプションを外す

ついでに、pleiades-config-idea.xmlのエラー

コード:

OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.

Start Failed: Internal error. Please refer to http://jb.gg/ide/critical-startup-errors

java.lang.VerifyError: Expecting a stack map frame
Exception Details:
  Location:
    com/intellij/openapi/util/text/StringUtil.pluralize(Ljava/lang/String;)Ljava/lang/String; @33: athrow
  Reason:
    Expected stackmap frame at this location.
  Bytecode:
    0000000: 2ab0 00a7 ffff 0000 a7ff fe00 0000 0000
    0000010: 0000 0000 a7ff f700 00a7 fffe 0000 a7ff
    0000020: febf 0000 0000 0000 a7ff fa00 0000 0000
    0000030: 0000 0000 0000 0000 0000 0000 0000 0000
    0000040: 0000 00a7 ffe8 0000 a7ff febf 0000 0000
    0000050: 0000 0000 0000 0000 0000 0000 0000 0000
    0000060: 0000 0000 a7ff e800 00a7 fffe bf       
  Stackmap Table:
    same_frame(@2)
    same_frame(@6)
    same_frame(@11)
    same_frame(@23)
    same_frame(@28)
    same_frame(@34)
    same_frame(@43)
    same_frame(@70)
    same_frame(@76)
    same_frame(@103)

    at com.intellij.openapi.util.SystemInfo.<clinit>(SystemInfo.java:42)
    at com.intellij.openapi.application.PathManager.platformPath(PathManager.java:615)
    at com.intellij.openapi.application.PathManager.platformPath(PathManager.java:602)
    at com.intellij.openapi.application.PathManager.getDefaultConfigPathFor(PathManager.java:269)
    at com.intellij.openapi.application.PathManager.getCustomOptionsDirectory(PathManager.java:316)
    at com.intellij.openapi.application.PathManager.getCustomPropertiesFile(PathManager.java:471)
    at com.intellij.openapi.application.PathManager.loadProperties(PathManager.java:442)
    at com.intellij.idea.Main.bootstrap(Main.java:87)
    at com.intellij.idea.Main.main(Main.java:77)

-----
JRE 11.0.5+10-b520.17 amd64 by JetBrains s.r.o

[解決策]
plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config-idea.xml を修正。

[修正パッチ]

コード:

--- a/plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config-idea.xml.orig
+++ b/plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config-idea.xml
@@ -560,7 +560,7 @@
     </pointCut>
     <pointCut editPoint="execution" timing="before">
         <advice><![CDATA[
-            return $1;
+            return $_;
         ]]></advice>
 
         <!-- 複数形変換を無効化 (限定翻訳は around で処理) -->

オフライン

 

#3 2020-12-17 15:24:52

udooon
メンバ
登録日: 2012-01-24

Re: pleiades の -Xverify:none オプションを外す

#1の訂正。


[修正パッチ]

コード:

--- a/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config.xml.orig
+++ b/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config.xml
@@ -1150,8 +1150,13 @@
             <includeTrace className="net.certiv.ntail.dialogs.ViewerDialog"/>
 
         </jointPoint>
-
+    </pointCut>
         <!-- JFace 装飾テキスト -->
+    <pointCut editPoint="execution" timing="before">
+        <advice><![CDATA[
+            $1 = ?{translation.class}.translate($1, null);
+        ]]></advice>
+
         <jointPoint
             className="org.eclipse.jface.viewers.StyledString"
             methodName="StyledString"
@@ -1164,12 +1169,12 @@
             -->
 
             <!-- 呼び出し元による限定 (Kotlin プロジェクトのツリーラベル:Kotlin ランタイム・ライブラリー) 2017.05.26 -->
-            <includeTrace className="org.eclipse.jdt.ui.JavaElementLabels"
-                methodName="getStyledContainerEntryLabel"/>
+            <!--includeTrace className="org.eclipse.jdt.ui.JavaElementLabels"
+                methodName="getStyledContainerEntryLabel"/-->
 
             <!-- 呼び出し元による限定 (インスタ検索ビュー) 2016.07.15 -->
-            <includeTrace className="it.unibz.instasearch.ui.ResultLabelProvider"
-                methodName="getStyledText"/>
+            <!--includeTrace className="it.unibz.instasearch.ui.ResultLabelProvider"
+                methodName="getStyledText"/-->
 
         </jointPoint>

[原因]
#1のエラーログと、ソースコード TranslationEditor.java を見比べると、
$0 が uninitializedThis らしい。

Pleiades/src/main/java/jp/sourceforge/mergedoc/pleiades/runtime/TranslationEditor.java
一部抜粋

コード:

    private String bindArguments(String advice, JointPoint whereJP, JointPoint targetJP) {

        long start = System.nanoTime();

        // ?{JOINT_POINT} を new JointPont(...) に置換
        if (advice.contains("?{JOINT_POINT}")) {
            advice = advice.replaceAll("\\?\\{JOINT_POINT\\}",
                Matcher.quoteReplacement(
                    "new " + RuntimeJointPoint.class.getName() + "(" +
                    EditPoint.class.getName() + "." + whereJP.getEditPoint().name() +
                    ",\"" + whereJP.getClassName() + "\"" +
                    ",\"" + whereJP.getMethodName() + "\"" +
                    ",\"" + whereJP.getDescriptor() + "\"" +
                    ", $0" +
                    ")"
                )
            );
        }

/eclipse/configuration/jp.sourceforge.mergedoc.pleiades/transformed-class.cache 内の
/org.eclipse.jface_3.22.0.v20201106-0834.jar/org.eclipse.jface.viewers.StyledString を
展開して、 StyledString.class にリネーム javap すると
一部抜粋

コード:

  public org.eclipse.jface.viewers.StyledString(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
         0: aload_1
         1: aconst_null
         2: invokestatic  #293                // Method jp/sourceforge/mergedoc/pleiades/runtime/resource/Translations.translate:(Ljava/lang/String;Ljp/sourceforge/mergedoc/pleiades/runtime/advice/RuntimeJointPoint;)Ljava/lang/String;
         5: astore_1
         6: aload_0
         7: aload_1
         8: aconst_null
         9: invokespecial #252                // Method "<init>":(Ljava/lang/String;Lorg/eclipse/jface/viewers/StyledString$Styler;)V
        12: return
      LineNumberTable:
        line 120: 6
        line 121: 12
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      13     0  this   Lorg/eclipse/jface/viewers/StyledString;
            0      13     1 string   Ljava/lang/String;

Method が挿入されているので、これでいいのではないかと思います。
ただ、どこが翻訳されているのかは、よく分かりませんが。

オフライン

 

#4 2020-12-21 23:52:43

udooon
メンバ
登録日: 2012-01-24

Re: pleiades の -Xverify:none オプションを外す

[結論]
#3のように修正すると、プロジェクト・エクスプローラー内のフォルダー名等が翻訳されてしまうため、いらない。

[修正パッチ]

コード:

--- a/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config.xml.orig
+++ b/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config.xml
@@ -1151,28 +1151,6 @@
 
         </jointPoint>
 
-        <!-- JFace 装飾テキスト -->
-        <jointPoint
-            className="org.eclipse.jface.viewers.StyledString"
-            methodName="StyledString"
-            descriptor="(Ljava/lang/String;)V">
-
-            <!-- 呼び出し元による限定 (Buildship 3.0 Gradle タスク・ビュー > グループ名) 2018.12.23 -->
-            <!-- → shadow など翻訳しないようほうが良いグループがあるため廃止
-            <includeTrace className="org.eclipse.buildship.ui.internal.view.task.TaskNameLabelProvider"
-                methodName="getGroupText"/>
-            -->
-
-            <!-- 呼び出し元による限定 (Kotlin プロジェクトのツリーラベル:Kotlin ランタイム・ライブラリー) 2017.05.26 -->
-            <includeTrace className="org.eclipse.jdt.ui.JavaElementLabels"
-                methodName="getStyledContainerEntryLabel"/>
-
-            <!-- 呼び出し元による限定 (インスタ検索ビュー) 2016.07.15 -->
-            <includeTrace className="it.unibz.instasearch.ui.ResultLabelProvider"
-                methodName="getStyledText"/>
-
-        </jointPoint>
-
     </pointCut>
 
     <!-- 通常翻訳 (before・第 1 引数) 退避付き -->

オフライン

 

Board footer

Powered by FluxBB