Skip to content

[2.10.4] Parsing fails #1070

Description

@resah

After updating to version 2.10.4 the enclosed Java file cannot be parsed.

Java File

package id.bare.celprovider.function;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;

import dev.cel.runtime.CelFunctionBinding;
import dev.cel.runtime.CelFunctionOverload;
import id.bare.celprovider.CelRuntimeException;
import java.util.List;
import org.junit.jupiter.api.Test;

class UrlFunctionsTest {

	private final UrlFunctions urlFunctions = new UrlFunctions();

	@Test
	void testUrlEncodeFunctionality() throws Exception {
		var urlEncodeFunc = getFuncBinding("url_encode_string");

		// spaces become %20, reserved characters are percent-encoded
		assertThat(urlEncodeFunc.apply(new Object[] { "a b@c.de" }), is("a%20b%40c.de"));
		// a literal + must not survive as a space
		assertThat(urlEncodeFunc.apply(new Object[] { "1+1=2" }), is("1%2B1%3D2"));
		// already encoded input is encoded again instead of being passed through
		assertThat(urlEncodeFunc.apply(new Object[] { "a%2Fb" }), is("a%252Fb"));
		// non-ASCII is UTF-8 encoded, including characters outside the BMP
		assertThat(urlEncodeFunc.apply(new Object[] { "Müller" }), is("M%C3%BCller"));
		assertThat(urlEncodeFunc.apply(new Object[] { "😀" }), is("%F0%9F%98%80"));
		assertThat(urlEncodeFunc.apply(new Object[] { "" }), is(""));
	}

	@Test
	void testUrlEncodeQueryFunctionality() throws Exception {
		var urlEncodeQueryFunc = getFuncBinding("url_encodeQuery_string");

		// form encoding: spaces become +
		assertThat(urlEncodeQueryFunc.apply(new Object[] { "a b@c.de" }), is("a+b%40c.de"));
		assertThat(urlEncodeQueryFunc.apply(new Object[] { "1+1=2" }), is("1%2B1%3D2"));
		assertThat(urlEncodeQueryFunc.apply(new Object[] { "a%2Fb" }), is("a%252Fb"));
		assertThat(urlEncodeQueryFunc.apply(new Object[] { "Müller" }), is("M%C3%BCller"));
		assertThat(urlEncodeQueryFunc.apply(new Object[] { "😀" }), is("%F0%9F%98%80"));
		assertThat(urlEncodeQueryFunc.apply(new Object[] { "" }), is(""));
	}

	@Test
	void testUrlDecodeFunctionality() throws Exception {
		var urlDecodeFunc = getFuncBinding("url_decode_string");

		assertThat(urlDecodeFunc.apply(new Object[] { "a%20b%40c.de" }), is("a b@c.de"));
		// + is not a space here
		assertThat(urlDecodeFunc.apply(new Object[] { "a+b" }), is("a+b"));
		assertThat(urlDecodeFunc.apply(new Object[] { "M%C3%BCller" }), is("Müller"));
		assertThat(urlDecodeFunc.apply(new Object[] { "%F0%9F%98%80" }), is("😀"));
		// malformed escapes are passed through instead of failing
		assertThat(urlDecodeFunc.apply(new Object[] { "100%ZZ" }), is("100%ZZ"));
	}

	@Test
	void testUrlDecodeQueryFunctionality() throws Exception {
		var urlDecodeQueryFunc = getFuncBinding("url_decodeQuery_string");

		assertThat(urlDecodeQueryFunc.apply(new Object[] { "a+b%40c.de" }), is("a b@c.de"));
		assertThat(urlDecodeQueryFunc.apply(new Object[] { "M%C3%BCller" }), is("Müller"));
		assertThat(urlDecodeQueryFunc.apply(new Object[] { "%F0%9F%98%80" }), is("😀"));

		// error
		assertThrows(CelRuntimeException.class, () -> {
			urlDecodeQueryFunc.apply(new Object[] { "100%ZZ" });
		});
	}

	@Test
	void testUrlEncodeDecodeRoundTrip() throws Exception {
		var urlEncodeFunc = getFuncBinding("url_encode_string");
		var urlDecodeFunc = getFuncBinding("url_decode_string");
		var urlEncodeQueryFunc = getFuncBinding("url_encodeQuery_string");
		var urlDecodeQueryFunc = getFuncBinding("url_decodeQuery_string");

		for (String input : List.of("a b@c.de", "1+1=2", "a%2Fb", "Müller & Söhne", "5€", "😀", "?&=#/")) {
			assertThat(urlDecodeFunc.apply(new Object[] { urlEncodeFunc.apply(new Object[] { input }) }), is(input));
			assertThat(
				urlDecodeQueryFunc.apply(new Object[] { urlEncodeQueryFunc.apply(new Object[] { input }) }),
				is(input)
			);
		}
	}

	private CelFunctionOverload getFuncBinding(String overloadId) {
		CelFunctionBinding funcBinding = urlFunctions
			.stream()
			.map(CelFunctionDefinition::binding)
			.filter(b -> overloadId.equals(b.getOverloadId()))
			.findFirst()
			.orElseThrow();
		return funcBinding.getDefinition();
	}
}

Log

2026-09-24T09:22:00.646458Z 01O Checking formatting...
2026-09-24T09:22:04.114116Z 01E [�[31merror�[39m] celprovider/src/test/java/id/bare/celprovider/function/UrlFunctionsTest.java: Error: Failed to parse: (program (package_declaration (scoped_identifier scope: (scoped_identifier scope: (scoped_identifier scope: (identifier) name: (identifier)) name: (identifier)) name: (identifier))) (import_declaration (scoped_identifier scope: (scoped_identifier scope: (scoped_identifier scope: (identifier) name: (identifier)) name: (identifier)) name: (identifier))) (import_declaration (scoped_identifier scope: (scoped_identifier scope: (scoped_identifier scope: (identifier) name: (identifier)) name: (identifier)) name: (identifier))) (import_declaration (scoped_identifier scope: (scoped_identifier scope: (scoped_identifier scope: (scoped_identifier scope: (scoped_identifier scope: (identifier) name: (identifier)) name: (identifier)) name: (identifier)) name: (identifier)) name: (identifier))) (import_declaration (scoped_identifier scope: (scoped_identifier scope: (scoped_identifier scope: (identifier) name: (identifier)) name: (identifier)) name: (identifier))) (import_declaration (scoped_identifier scope: (scoped_identifier scope: (scoped_identifier scope: (identifier) name: (identifier)) name: (identifier)) name: (identifier))) (import_declaration (scoped_identifier scope: (scoped_identifier scope: (scoped_identifier scope: (identifier) name: (identifier)) name: (identifier)) name: (identifier))) (import_declaration (scoped_identifier scope: (scoped_identifier scope: (identifier) name: (identifier)) name: (identifier))) (import_declaration (scoped_identifier scope: (scoped_identifier scope: (scoped_identifier scope: (scoped_identifier scope: (identifier) name: (identifier)) name: (identifier)) name: (identifier)) name: (identifier))) (class_declaration name: (identifier) body: (class_body (field_declaration (modifiers (visibility) (modifier)) type: (type_identifier) declarator: (variable_declarator name: (identifier) value: (object_creation_expression type: (type_identifier) arguments: (argument_list)))) (method_declaration (modifiers (marker_annotation name: (identifier))) type: (void_type) name: (identifier) parameters: (formal_parameters) (throws (type_identifier)) body: (block (local_variable_declaration type: (type_identifier) declarator: (variable_declarator name: (identifier) value: (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment)))))) (line_comment) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (line_comment) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (line_comment) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (line_comment) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (ERROR (UNEXPECTED 128512))))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal)))))))) (method_declaration (modifiers (marker_annotation name: (identifier))) type: (void_type) name: (identifier) parameters: (formal_parameters) (throws (type_identifier)) body: (block (local_variable_declaration type: (type_identifier) declarator: (variable_declarator name: (identifier) value: (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment)))))) (line_comment) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (ERROR (UNEXPECTED 128512))))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal)))))))) (method_declaration (modifiers (marker_annotation name: (identifier))) type: (void_type) name: (identifier) parameters: (formal_parameters) (throws (type_identifier)) body: (block (local_variable_declaration type: (type_identifier) declarator: (variable_declarator name: (identifier) value: (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment)))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (line_comment) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (ERROR (UNEXPECTED 128512)))))))) (line_comment) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))))) (method_declaration (modifiers (marker_annotation name: (identifier))) type: (void_type) name: (identifier) parameters: (formal_parameters) (throws (type_identifier)) body: (block (local_variable_declaration type: (type_identifier) declarator: (variable_declarator name: (identifier) value: (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment)))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment))))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))) (method_invocation name: (identifier) arguments: (argument_list (string_literal (ERROR (UNEXPECTED 128512)))))))) (line_comment) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (class_literal (type_identifier)) (lambda_expression parameters: (formal_parameters) body: (block (expression_statement (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (string_literal (string_fragment)))))))))))))) (method_declaration (modifiers (marker_annotation name: (identifier))) type: (void_type) name: (identifier) parameters: (formal_parameters) (throws (type_identifier)) body: (block (local_variable_declaration type: (type_identifier) declarator: (variable_declarator name: (identifier) value: (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment)))))) (local_variable_declaration type: (type_identifier) declarator: (variable_declarator name: (identifier) value: (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment)))))) (local_variable_declaration type: (type_identifier) declarator: (variable_declarator name: (identifier) value: (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment)))))) (local_variable_declaration type: (type_identifier) declarator: (variable_declarator name: (identifier) value: (method_invocation name: (identifier) arguments: (argument_list (string_literal (string_fragment)))))) (enhanced_for_statement type: (type_identifier) name: (identifier) value: (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (string_literal (string_fragment)) (string_literal (string_fragment)) (string_literal (string_fragment)) (string_literal (string_fragment)) (string_literal (string_fragment)) (string_literal (ERROR (UNEXPECTED 128512))) (string_literal (string_fragment)))) body: (block (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (identifier))))))))) (method_invocation name: (identifier) arguments: (argument_list (identifier)))))) (expression_statement (method_invocation name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (array_creation_expression type: (type_identifier) dimensions: (dimensions) value: (array_initializer (identifier))))))))) (method_invocation name: (identifier) arguments: (argument_list (identifier)))))))))) (method_declaration (modifiers (visibility)) type: (type_identifier) name: (identifier) parameters: (formal_parameters (formal_parameter type: (type_identifier) name: (identifier))) body: (block (local_variable_declaration type: (type_identifier) declarator: (variable_declarator name: (identifier) value: (method_invocation object: (method_invocation object: (method_invocation object: (method_invocation object: (method_invocation object: (identifier) name: (identifier) arguments: (argument_list)) name: (identifier) arguments: (argument_list (method_reference (identifier) (identifier)))) name: (identifier) arguments: (argument_list (lambda_expression parameters: (identifier) body: (method_invocation object: (identifier) name: (identifier) arguments: (argument_list (method_invocation object: (identifier) name: (identifier) arguments: (argument_list))))))) name: (identifier) arguments: (argument_list)) name: (identifier) arguments: (argument_list)))) (return_statement (method_invocation object: (identifier) name: (identifier) arguments: (argument_list))))))))
2026-09-24T09:22:04.114194Z 01E [�[31merror�[39m]     at Object.parse (file:///builds/.../node_modules/prettier-plugin-java/dist/index.mjs:2366:32)
2026-09-24T09:22:04.114196Z 01E [�[31merror�[39m]     at async parse8 (file:///builds/.../node_modules/prettier/index.mjs:17739:11)
2026-09-24T09:22:04.114201Z 01E [�[31merror�[39m]     at async coreFormat (file:///builds/.../node_modules/prettier/index.mjs:18282:7)
2026-09-24T09:22:04.114202Z 01E [�[31merror�[39m]     at async formatWithCursor (file:///builds/.../node_modules/prettier/index.mjs:18502:14)
2026-09-24T09:22:04.114202Z 01E [�[31merror�[39m]     at async formatFiles (file:///builds/.../node_modules/prettier/internal/legacy-cli.mjs:6661:18)
2026-09-24T09:22:04.114203Z 01E [�[31merror�[39m]     at async main (file:///builds/.../node_modules/prettier/internal/legacy-cli.mjs:7050:5)
2026-09-24T09:22:04.114204Z 01E [�[31merror�[39m]     at async Module.run (file:///builds/.../node_modules/prettier/internal/legacy-cli.mjs:6993:5)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions