diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/codegen/interop/ExternalMethodGen.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/codegen/interop/ExternalMethodGen.java index c98b888361a4..8e6486c039f7 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/codegen/interop/ExternalMethodGen.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/bir/codegen/interop/ExternalMethodGen.java @@ -240,7 +240,7 @@ public static BIRFunctionWrapper createExternalFunctionWrapper(boolean isEntry, isEntry, jvmPackageGen.symbolTable); } } else { - throw new BLangCompilerException("cannot find full qualified class name for extern function : " + + throw new BLangCompilerException("cannot find fully qualified class name for external function : " + pkgName + birFunc.name.value); } } diff --git a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/javainterop/basic/NegativeValidationTest.java b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/javainterop/basic/NegativeValidationTest.java index 6623c907dc8c..aaf2f0af99bc 100644 --- a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/javainterop/basic/NegativeValidationTest.java +++ b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/javainterop/basic/NegativeValidationTest.java @@ -19,6 +19,7 @@ import io.ballerina.runtime.api.values.BFuture; import io.ballerina.runtime.api.values.BTypedesc; +import org.ballerinalang.compiler.BLangCompilerException; import org.ballerinalang.test.BAssertUtil; import org.ballerinalang.test.BCompileUtil; import org.ballerinalang.test.CompileResult; @@ -558,4 +559,11 @@ public void testAbstractClassInstantiationError() { " ''org.ballerinalang.nativeimpl.jvm.tests.Interface' is abstract, and cannot be instantiated'", 23, 1); } + + @Test(expectedExceptionsMessageRegExp = ".*cannot find fully qualified class name for external function : .*", + expectedExceptions = BLangCompilerException.class) + public void testClassNameForExternalFunctionNotFound() { + String path = "test-src/javainterop/negative/external_function_class_name_not_found.bal"; + BCompileUtil.compile(path); + } } diff --git a/tests/jballerina-unit-test/src/test/resources/test-src/javainterop/negative/external_function_class_name_not_found.bal b/tests/jballerina-unit-test/src/test/resources/test-src/javainterop/negative/external_function_class_name_not_found.bal new file mode 100644 index 000000000000..b0c1cdaf5cbb --- /dev/null +++ b/tests/jballerina-unit-test/src/test/resources/test-src/javainterop/negative/external_function_class_name_not_found.bal @@ -0,0 +1,21 @@ +// Copyright (c) 2023, WSO2 LLC. (https://www.wso2.com). +// +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +function foo() { + function (typedesc x) returns int fn1 = bar; +} + +function bar(typedesc y) returns y = external;