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

    public WebkitFlex setWebkitFlexBasis(
            final WebkitFlexBasis webkitFlexBasis) {
        if (webkitFlexBasis == null) {
            throw new InvalidValueException("webkitFlexBasis cannot be null");
        }

        if (Objects.equals(this.webkitFlexBasis, webkitFlexBasis)) {
            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 (webkitFlexShrink == null) {
            webkitFlexShrink = new WebkitFlexShrink(1);
            webkitFlexShrink.setStateChangeInformer(this);
            webkitFlexShrink.setAlreadyInUse(true);
        }

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

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

        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);

}