org.gradle.api.internal.tasks.properties.AbstractValidatingProperty Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-api Show documentation
Show all versions of gradle-api Show documentation
Gradle 6.9.1 API redistribution.
/*
* Copyright 2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.gradle.api.internal.tasks.properties;
import com.google.common.base.Suppliers;
import org.gradle.api.problems.ProblemSpec;
import org.gradle.api.problems.Severity;
import org.gradle.api.problems.internal.GradleCoreProblemGroup;
import org.gradle.api.provider.HasConfigurableValue;
import org.gradle.api.provider.Provider;
import org.gradle.internal.properties.PropertyValue;
import org.gradle.internal.reflect.validation.TypeValidationContext;
import org.gradle.util.internal.DeferredUtil;
import org.gradle.util.internal.TextUtil;
import javax.annotation.Nullable;
import java.util.function.Supplier;
import static org.gradle.internal.deprecation.Documentation.userManual;
public abstract class AbstractValidatingProperty implements ValidatingProperty {
private final String propertyName;
private final PropertyValue value;
private final boolean optional;
private final ValidationAction validationAction;
public AbstractValidatingProperty(String propertyName, PropertyValue value, boolean optional, ValidationAction validationAction) {
this.propertyName = propertyName;
this.value = value;
this.optional = optional;
this.validationAction = validationAction;
}
private static final String VALUE_NOT_SET = "VALUE_NOT_SET";
public static void reportValueNotSet(String propertyName, TypeValidationContext context, boolean hasConfigurableValue) {
context.visitPropertyProblem(problem -> {
ProblemSpec problemSpec = problem.forProperty(propertyName)
.id(TextUtil.screamingSnakeToKebabCase(VALUE_NOT_SET), "Value not set", GradleCoreProblemGroup.validation().property())
.contextualLabel("doesn't have a configured value")
.documentedAt(userManual("validation_problems", VALUE_NOT_SET.toLowerCase()))
.severity(Severity.ERROR)
.details("This property isn't marked as optional and no value has been configured");
if (hasConfigurableValue) {
problemSpec.solution("Assign a value to '" + propertyName + "'");
} else {
problemSpec.solution("The value of '" + propertyName + "' is calculated, make sure a valid value can be calculated");
}
problemSpec.solution("Mark property '" + propertyName + "' as optional");
});
}
@Override
public void validate(PropertyValidationContext context) {
// unnest callables without resolving deferred values (providers, factories)
Object unnested = DeferredUtil.unpackNestableDeferred(value.call());
if (isPresent(unnested)) {
// only resolve deferred values if actually required by some action
Supplier
© 2015 - 2025 Weber Informatics LLC | Privacy Policy