Well here's a how do you do... If I compile BarMain.java with foo/Test2.java using a plain =42, I get:
public class BarMain { public BarMain(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #4 // String AZ 42 5: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return } If I compile BarMain.java with foo/Test2.java using the prevent inlining = null!=null?0:42 I get: public class BarMain { public BarMain(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: new #3 // class java/lang/StringBuilder 6: dup 7: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V 10: ldc #5 // String AZ 12: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 15: getstatic #7 // Field foo/Test2.AZAZ:I 18: invokevirtual #8 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder; 21: invokevirtual #9 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 24: invokevirtual #10 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 27: return } So what I see there is that in the first case javac has inlined the constant and converted it to a string... in the second case it is referencing the field directly On 25 November 2015 at 08:53, Kristian Rosenvold < kristian.rosenv...@gmail.com> wrote: > Let me be more precise here; the dependency:analyze seems to miss a > whole group of references to static fields. Both static imports and > references to fields. In my code sample, I can do the following: > > javap -v bar/BarMain.class > > Classfile bar/BarMain.class > Last modified 25.nov.2015; size 583 bytes > MD5 checksum 02168be555cf779b31a4790f97b202a7 > Compiled from "BarMain.java" > public class bar.BarMain > minor version: 0 > major version: 49 > flags: ACC_PUBLIC, ACC_SUPER > Constant pool: > #1 = Class #23 // foo/Main > #2 = Methodref #9.#24 // java/lang/Object."<init>":()V > #3 = Fieldref #25.#26 // > java/lang/System.out:Ljava/io/PrintStream; > #4 = String #27 // SC compile > #5 = Methodref #28.#29 // > java/io/PrintStream.println:(Ljava/lang/String;)V > #6 = Class #30 // foo/Test2 > #7 = String #31 // AZ 42 > #8 = Class #32 // bar/BarMain > #9 = Class #33 // java/lang/Object > #10 = Utf8 <init> > #11 = Utf8 ()V > #12 = Utf8 Code > #13 = Utf8 LineNumberTable > #14 = Utf8 LocalVariableTable > #15 = Utf8 this > #16 = Utf8 Lbar/BarMain; > #17 = Utf8 main > #18 = Utf8 ([Ljava/lang/String;)V > #19 = Utf8 args > #20 = Utf8 [Ljava/lang/String; > #21 = Utf8 SourceFile > #22 = Utf8 BarMain.java > #23 = Utf8 foo/Main > #24 = NameAndType #10:#11 // "<init>":()V > #25 = Class #34 // java/lang/System > #26 = NameAndType #35:#36 // out:Ljava/io/PrintStream; > #27 = Utf8 SC compile > #28 = Class #37 // java/io/PrintStream > #29 = NameAndType #38:#39 // println:(Ljava/lang/String;)V > #30 = Utf8 foo/Test2 > #31 = Utf8 AZ 42 > #32 = Utf8 bar/BarMain > #33 = Utf8 java/lang/Object > #34 = Utf8 java/lang/System > #35 = Utf8 out > #36 = Utf8 Ljava/io/PrintStream; > #37 = Utf8 java/io/PrintStream > #38 = Utf8 println > #39 = Utf8 (Ljava/lang/String;)V > { > public bar.BarMain(); > descriptor: ()V > flags: ACC_PUBLIC > Code: > stack=1, locals=1, args_size=1 > 0: aload_0 > 1: invokespecial #2 // Method > java/lang/Object."<init>":()V > 4: return > LineNumberTable: > line 25: 0 > LocalVariableTable: > Start Length Slot Name Signature > 0 5 0 this Lbar/BarMain; > > public static void main(java.lang.String[]); > descriptor: ([Ljava/lang/String;)V > flags: ACC_PUBLIC, ACC_STATIC > Code: > stack=2, locals=1, args_size=1 > 0: getstatic #3 // Field > java/lang/System.out:Ljava/io/PrintStream; > 3: ldc #4 // String SC compile > 5: invokevirtual #5 // Method > java/io/PrintStream.println:(Ljava/lang/String;)V > 8: getstatic #3 // Field > java/lang/System.out:Ljava/io/PrintStream; > 11: ldc #7 // String AZ 42 > 13: invokevirtual #5 // Method > java/io/PrintStream.println:(Ljava/lang/String;)V > 16: return > LineNumberTable: > line 28: 0 > line 29: 8 > line 30: 16 > LocalVariableTable: > Start Length Slot Name Signature > 0 17 0 args [Ljava/lang/String; > } > SourceFile: "BarMain.java" > > As we can see the "import" class "foo/Test" is item #6/#30 and > referenced in the constant pool for the BarMain class. The dependency > analyzer does not seem to catch this. I'm a bit of a n00b in this > regard, anyone have any tips on how to do this ? > > Kristian > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org > For additional commands, e-mail: dev-h...@maven.apache.org > >