This is an automated email from the ASF dual-hosted git repository.
yesamer pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie.git
The following commit(s) were added to refs/heads/main by this push:
new 62a85e76475 [incubator-kie#6515] Warning triggered for "correspondance
between package and folder names" which was not triggered before (#7129)
62a85e76475 is described below
commit 62a85e764753372593f9bb5ba487ed6d0b68a174
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Sat Sep 26 01:33:26 2026 +0900
[incubator-kie#6515] Warning triggered for "correspondance between package
and folder names" which was not triggered before (#7129)
---
.../compiler/kie/builder/impl/KieBuilderImpl.java | 8 +-
.../test-compiler-integration/pom.xml | 5 ++
.../builder/impl/KieBuilderPackageFolderTest.java | 94 ++++++++++++++++++++++
3 files changed, 106 insertions(+), 1 deletion(-)
diff --git
a/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java
b/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java
index 2ff17ef2131..c9caa73f70d 100644
---
a/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java
+++
b/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java
@@ -395,7 +395,13 @@ public class KieBuilderImpl
}
private static String packageNameForFile( String fileName, String
folderNameForFile, boolean discoverPackage, Supplier<InternalResource> file ) {
- String packageNameFromFolder =
getRelativePackageName(folderNameForFile.replace( '/', '.' ));
+ int firstNonSeparator = 0;
+ while (firstNonSeparator < folderNameForFile.length()
+ && folderNameForFile.charAt(firstNonSeparator) == '/') {
+ firstNonSeparator++;
+ }
+ String packageNameFromFolder = getRelativePackageName(
+ folderNameForFile.substring(firstNonSeparator).replace('/',
'.'));
if (discoverPackage) {
String packageNameForFile = packageNameFromAsset(fileName,
file.get());
if (packageNameForFile != null) {
diff --git a/drools-test-coverage/test-compiler-integration/pom.xml
b/drools-test-coverage/test-compiler-integration/pom.xml
index 851c320205e..19917ac9411 100644
--- a/drools-test-coverage/test-compiler-integration/pom.xml
+++ b/drools-test-coverage/test-compiler-integration/pom.xml
@@ -116,6 +116,11 @@
<artifactId>slf4j-api</artifactId>
<scope>test</scope>
</dependency>
+ <dependency><!-- For unit test logging: configure in
src/test/resources/logback-test.xml -->
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>net.java.dev.glazedlists</groupId>
<artifactId>glazedlists_java15</artifactId>
diff --git
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/compiler/kie/builder/impl/KieBuilderPackageFolderTest.java
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/compiler/kie/builder/impl/KieBuilderPackageFolderTest.java
new file mode 100644
index 00000000000..671c1dac4be
--- /dev/null
+++
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/compiler/kie/builder/impl/KieBuilderPackageFolderTest.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF 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.
+ */
+package org.drools.mvel.compiler.kie.builder.impl;
+
+import java.io.StringReader;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.read.ListAppender;
+import org.drools.compiler.kie.builder.impl.KieBuilderImpl;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+import org.kie.api.KieServices;
+import org.kie.api.builder.KieBuilder;
+import org.kie.api.builder.KieFileSystem;
+import org.kie.api.builder.Message;
+import org.kie.api.builder.model.KieBaseModel;
+import org.kie.api.builder.model.KieModuleModel;
+import org.kie.api.io.ResourceType;
+import org.kie.api.runtime.KieSession;
+import org.slf4j.LoggerFactory;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class KieBuilderPackageFolderTest {
+
+ // https://github.com/apache/incubator-kie/issues/6515
+ @ParameterizedTest(name = "sourcePath={0}, packageFilter={1}")
+ @CsvSource({
+ "org/example/rules/rules.drl, true",
+ "/org/example/rules/rules.drl, true",
+ "org/example/rules/rules.drl, false",
+ "/org/example/rules/rules.drl, false"
+ })
+ void matchingPackageAndFolderShouldNotWarn(String sourcePath, boolean
packageFilter) {
+ KieServices ks = KieServices.Factory.get();
+ KieModuleModel module = ks.newKieModuleModel();
+ KieBaseModel base = module.newKieBaseModel("rules").setDefault(true);
+ if (packageFilter) {
+ base.addPackage("org.example.rules");
+ }
+ base.newKieSessionModel("session").setDefault(true);
+
+ KieFileSystem kfs = ks.newKieFileSystem();
+ kfs.writeKModuleXML(module.toXML());
+ kfs.write(ks.getResources().newReaderResource(new StringReader(
+ "package org.example.rules;\n" +
+ "rule R when then end\n"))
+ .setResourceType(ResourceType.DRL).setSourcePath(sourcePath));
+
+ Logger logger = (Logger) LoggerFactory.getLogger(KieBuilderImpl.class);
+ Level previousLevel = logger.getLevel();
+ ListAppender<ILoggingEvent> appender = new ListAppender<>();
+ appender.start();
+ logger.addAppender(appender);
+ logger.setLevel(Level.WARN);
+ try {
+ KieBuilder builder = ks.newKieBuilder(kfs).buildAll();
+
assertThat(builder.getResults().getMessages(Message.Level.ERROR)).isEmpty();
+ KieSession session =
ks.newKieContainer(builder.getKieModule().getReleaseId()).newKieSession();
+ try {
+ assertThat(session.fireAllRules()).isEqualTo(1);
+ } finally {
+ session.dispose();
+ }
+ // This warning is logged directly, so builder.getResults() cannot
detect it.
+ assertThat(appender.list)
+ .filteredOn(event -> event.getLevel() == Level.WARN)
+ .extracting(ILoggingEvent::getFormattedMessage)
+ .noneMatch(message -> message.contains("correspondance
between package and folder names"));
+ } finally {
+ logger.detachAppender(appender);
+ appender.stop();
+ logger.setLevel(previousLevel);
+ }
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]