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

----- Original Message -----
From: jenkinsci-dev@googlegroups.com
To: jenkinsci-dev@googlegroups.com
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 <k...@kohsuke.org>
 
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 jenkinsci-dev+unsubscr...@googlegroups.com.
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 jenkinsci-dev+unsubscr...@googlegroups.com.
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 jenkinsci-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to