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 632321d772df..0548d9cc697b 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 @@ public ValueAndType findPropertyValueInternal(String propName, Object val) { 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 ad5ef7d1861d..c2c1f7b5656e 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 @@ private void inspectObjectAndValues0(Class clazz, Object object, String prefix, 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 String objectToString(Object o) { } 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(); }