Merge pull request #6820 from sdedic/gradle/npe-provider-novalue
Avoid null type, derive from provider type params or fallback to Object.
diff --git a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/GradleInternalAdapter.java b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/GradleInternalAdapter.java
index 632321d..0548d9c 100644
--- a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/GradleInternalAdapter.java
+++ b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/GradleInternalAdapter.java
@@ -122,7 +122,12 @@
return new ValueAndType(provided.getType());
}
if (isFixedValue("property " + propName, etv)) {
- return new ValueAndType(provided.getType(), etv.getFixedValue());
+ Object fixed = etv.getFixedValue();
+ Class t = provided.getType();
+ if (t == null && fixed != null) {
+ t = fixed.getClass();
+ }
+ return new ValueAndType(t, fixed);
} else {
return new ValueAndType(provided.getType());
}
diff --git a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
index ad5ef7d..c2c1f7b 100644
--- a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
+++ b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
@@ -718,10 +718,18 @@
if (Provider.class.isAssignableFrom(t)) {
ValueAndType vt = adapter.findPropertyValueInternal(propName, value);
if (vt != null) {
- t = vt.type;
if (vt.value.isPresent()) {
value = vt.value.get();
}
+ if (vt.type != null) {
+ t = vt.type;
+ } else if (typeParameters != null && !typeParameters.isEmpty() && (typeParameters.get(0) instanceof Class)) {
+ // derive the type from the provider's type parameter
+ t = (Class)typeParameters.get(0);
+ } else {
+ // null value with an unspecified type from the provider
+ t = Object.class;
+ }
}
}
} catch (RuntimeException ex) {
@@ -940,6 +948,9 @@
}
private static Class findNonDecoratedClass(Class clazz) {
+ if (clazz == null || clazz.isInterface()) {
+ return clazz;
+ }
while (clazz != Object.class && (clazz.getModifiers() & 0x1000 /* Modifiers.SYNTHETIC */) > 0) {
clazz = clazz.getSuperclass();
}