33import org .gradle .api .GradleException ;
44import org .gradle .api .Project ;
55import org .gradle .api .file .Directory ;
6+ import org .gradle .api .plugins .ExtraPropertiesExtension ;
67import org .gradle .api .provider .Provider ;
78
89import java .io .File ;
910import java .util .Arrays ;
1011import java .util .List ;
12+ import java .util .Objects ;
1113
1214import static net .neoforged .gradle .dsl .common .util .Constants .SUBSYSTEM_PROPERTY_PREFIX ;
1315
@@ -19,22 +21,22 @@ public WithPropertyLookup(Project project) {
1921 }
2022
2123 protected Provider <String > getStringProperty (String propertyName , String defaultValue ) {
22- final Provider <String > property = this .project . getProviders (). gradleProperty (SUBSYSTEM_PROPERTY_PREFIX + propertyName );
24+ final Provider <String > property = this .getProperty (SUBSYSTEM_PROPERTY_PREFIX + propertyName );
2325 if (defaultValue == null )
2426 return property ;
2527
2628 return property .orElse (defaultValue );
2729 }
2830
2931 protected Provider <Directory > getDirectoryProperty (String propertyName , Provider <Directory > defaultValue ) {
30- return this .project . getProviders (). gradleProperty (SUBSYSTEM_PROPERTY_PREFIX + propertyName )
32+ return this .getProperty (SUBSYSTEM_PROPERTY_PREFIX + propertyName )
3133 .flatMap (path -> project .getLayout ().dir (project .provider (() -> new File (path ))))
3234 .orElse (defaultValue );
3335 }
3436
3537 protected Provider <Boolean > getBooleanProperty (String propertyName , boolean defaultValue , boolean disabledValue ) {
3638 String fullPropertyName = SUBSYSTEM_PROPERTY_PREFIX + propertyName ;
37- return this .project . getProviders (). gradleProperty (fullPropertyName )
39+ return this .getProperty (fullPropertyName )
3840 .map (value -> {
3941 try {
4042 return Boolean .valueOf (value );
@@ -46,7 +48,7 @@ protected Provider<Boolean> getBooleanProperty(String propertyName, boolean defa
4648
4749 protected Provider <Boolean > getBooleanProperty (String propertyName ) {
4850 String fullPropertyName = SUBSYSTEM_PROPERTY_PREFIX + propertyName ;
49- return this .project . getProviders (). gradleProperty (fullPropertyName )
51+ return this .getProperty (fullPropertyName )
5052 .map (value -> {
5153 try {
5254 return Boolean .valueOf (value );
@@ -57,11 +59,29 @@ protected Provider<Boolean> getBooleanProperty(String propertyName) {
5759 }
5860
5961 protected Provider <List <String >> getSpaceSeparatedListProperty (String propertyName , List <String > defaultValue ) {
60- return this .project . getProviders (). gradleProperty (SUBSYSTEM_PROPERTY_PREFIX + propertyName )
62+ return this .getProperty (SUBSYSTEM_PROPERTY_PREFIX + propertyName )
6163 .map (s -> Arrays .asList (s .split ("\\ s+" )))
6264 .orElse (defaultValue );
6365 }
6466
67+ private Provider <String > getProperty (String propertyName ) {
68+ // Take a snapshot of the extra property at configuration as a fallback.
69+ // Extra properties are intended to be provided from other Gradle plugins that are
70+ // applied before this plugin to set default values programmatically.
71+ ExtraPropertiesExtension ext = this .project .getExtensions ().getExtraProperties ();
72+ String extValue ;
73+ if (ext .has (propertyName )) {
74+ extValue = Objects .toString (ext .get (propertyName ));
75+ } else {
76+ extValue = null ;
77+ }
78+
79+ Provider <String > gradleProperty = this .project .getProviders ().gradleProperty (propertyName );
80+ Provider <String > extProperty = this .project .getProviders ().provider (() -> extValue );
81+
82+ return gradleProperty .orElse (extProperty );
83+ }
84+
6585 public Project getProject () {
6686 return project ;
6787 }
0 commit comments