Cannot override protected Java method in build script

I was trying to override a method from some Gson api for custom json parsing. So I ended up stucked in a situation where I cann’t override a protected method from a Java class inside the build.gradle. I have tried running apart only the Groovy script and it works as it should.

For example, I’ve written a groovy script to do some very specific json parsing:



public class DescriptorJsonWriter { 
	def test (){
		def dest = new File("c:/temp/", "descriptor.json")		
		BufferedWriter fileWriter = new BufferedWriter(new FileWriter(dest));		
		JsonWriter jsonWriter = new JsonWriter(fileWriter) {

                    //this is the method not being overrided at all
		    protected void writeDeferredName() throws IOException {
		    	println "custom writeDeferredName"

		Gson gson = new GsonBuilder().create();
	        def descriptor = [ name: "abcbcbcbcbc"]
		gson.toJson(descriptor, HashMap.class, jsonWriter);


Then calling this like that:

task doTheParsing(){
	dependsOn build
	doLast {

def generateDescriptor(){
	DescriptorJsonWriter writer = new DescriptorJsonWriter()

and then:

>gradle doTheParsing

It gives the default implementation result of JsonWriter.writeDeferredName()

I tried to find something in the gradle documentation that explains such behavior, but I couldn’t find any.

The starting point here is that this could be a bug. Please share your thoughts about this issue :smile:

writeDeferredName is private:

Just noticed we are using an internal Gson fork :frowning:

Thanks for helping. Sorry for bothering.