How will the object know that Stapler has completed calling DataBoundSetters 
(that all configuration data has been applied)?

----- Original Message -----
From: [email protected]
To: [email protected]
At: Oct  4 2013 00:38:55

great,

so next step is to be able to directly annotate fields à la hibernate :)


 class Foo {

     @DataBound
      int a,b,c,d;

}


2013/10/4 Kohsuke Kawaguchi <[email protected]>
 
Today, many complex plugins suffer from a massive constructor annotated with 
@DataBoundConstructor.

This is because the form data-binding requires that all the parameters passed 
in through the constructor. See xcode plugin [1] for an example of this. The 
situation was worse with plugins that are used by other plugins, which needed 
to preserve ever-increasing list of constructors to remain backward compatible.

Starting Jenkins 1.535, this problem is no more. Stapler can not only look for 
@DataBoundConstructor, but it'll also perform setter injection on methods 
annotated with @DataBoundSetter.

So whereas you had to write:

    class Foo {
      int a,b,c,d;
      
      @DataBoundConstructor
      public Foo(int a, int b, int c, int d) {
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
      }
    }

You can now write:

    class Foo {
      int a,b,c,d;
      
      @DataBoundConstructor
      public Foo(int a, int b) {
        this.a = a;
        this.b = b;
      }
      
      @DataBoundSetter
      public void setC(int c) { this.c = c; }
      
      @DataBoundSetter
      public void setD(int d) { this.d = d; }
    }

 
Or even:

    class Foo {
      int a,b,c,d;
      
      @DataBoundConstructor
      public Foo() {}

      @DataBoundSetter
      public void setA(int a) { this.a = a; }
      
      @DataBoundSetter
      public void setC(int b) { this.b = b; }
      
      @DataBoundSetter
      public void setC(int c) { this.c = c; }
      
      @DataBoundSetter
      public void setD(int d) { this.d = d; }
    }

This will make it easier to evolve plugins that have a large number of 
configuration options.


[1] 
https://github.com/jenkinsci/xcode-plugin/blob/master/src/main/java/au/com/rayh/XCodeBuilder.java#L165


-- 
Kohsuke Kawaguchi  -- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to