class WebkitFlex extends AbstractCssProperty<WebkitFlex> implements StateChangeInformer<CssProperty> {

    public WebkitFlex setWebkitFlexShrink(
            final WebkitFlexShrink webkitFlexShrink) {
        if (webkitFlexShrink == null) {
            throw new InvalidValueException("webkitFlexShrink cannot be null");
        }

        if (Objects.equals(this.webkitFlexShrink, webkitFlexShrink)) {
            return this;
        }

        final StringBuilder cssValueBuilder = new StringBuilder();

        if (webkitFlexGrow == null) {
            webkitFlexGrow = new WebkitFlexGrow(1);
            webkitFlexGrow.setStateChangeInformer(this);
            webkitFlexGrow.setAlreadyInUse(true);
        }

        cssValueBuilder.append(webkitFlexGrow.getCssValue()).append(' ');

        if (this.webkitFlexShrink != null) {
            this.webkitFlexShrink.setCssValue(webkitFlexShrink.getCssValue());
            if (LOGGER.isLoggable(Level.WARNING)) {
                LOGGER.warning(
                        "copied the cssValue from the given webkitFlexShrink to the existing webkitFlexShrink object.");
            }
        } else {
            if (webkitFlexShrink.isAlreadyInUse()) {
                this.webkitFlexShrink = new WebkitFlexShrink(webkitFlexShrink);
                this.webkitFlexShrink.setAlreadyInUse(true);
                this.webkitFlexShrink.setStateChangeInformer(this);
                if (LOGGER.isLoggable(Level.WARNING)) {
                    LOGGER.warning(
                            "created a new object of WebkitFlexShrink as the given webkitFlexShrink object is already used by another object");
                }
            } else {
                this.webkitFlexShrink = webkitFlexShrink;
                this.webkitFlexShrink.setAlreadyInUse(true);
                this.webkitFlexShrink.setStateChangeInformer(this);
            }
        }

        cssValueBuilder.append(webkitFlexShrink.getCssValue()).append(' ');

        if (webkitFlexBasis == null) {
            webkitFlexBasis = new WebkitFlexBasis(0);
            webkitFlexBasis.setStateChangeInformer(this);
            webkitFlexBasis.setAlreadyInUse(true);
        }

        cssValueBuilder.append(webkitFlexBasis.getCssValue());

        cssValue = cssValueBuilder.toString();

        if (getStateChangeInformer() != null) {
            getStateChangeInformer().stateChanged(this);
        }
        return this;
    }

    public  WebkitFlex();
    public  WebkitFlex(final String cssValue);
    public  WebkitFlex(final WebkitFlex webkitFlex);

}