This is an automated email from the ASF dual-hosted git repository.

thiagohp pushed a commit to branch javax-import-class-hierarchy
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git

commit 983dddc38e83c06189b6e0c7a857cf8a180c4fb6
Author: Thiago H. de Paula Figueiredo <thi...@arsmachina.com.br>
AuthorDate: Sun Nov 24 20:53:27 2024 -0300

    Tests for @Import(stylesheet) in class hierarchies
---
 .../services/ComponentDependencyRegistryImpl.java  | 17 +++++++++++-----
 .../internal/services/PageSourceImpl.java          | 20 ++++++++++---------
 tapestry-core/src/test/app1/css/PageWrapper.css    |  5 +++++
 .../src/test/app1/css/TrainingDocPage.css          |  5 +++++
 .../src/test/app1/css/TrainingWrapper.css          |  5 +++++
 tapestry-core/src/test/app1/css/via-import2.css    |  5 +++++
 tapestry-core/src/test/app1/css/via-import3.css    |  5 +++++
 .../src/test/app1/imports/MessageCatalogue.tml     |  5 +++++
 .../app1/base/imports/ComponentBase.java           |  4 ++++
 .../app1/base/imports/ComponentCommonBase.java     |  4 ++++
 .../integration/app1/base/imports/PageWrapper.java |  7 +++++++
 .../app1/base/imports/TrainingDocPage.java         |  8 ++++++++
 .../app1/components/SubclassWithImport.java        |  2 +-
 .../app1/components/SuperSuperclassWithImport.java |  8 ++++++++
 .../app1/components/SuperclassWithImport.java      |  2 +-
 .../app1/components/SuperclassWithoutImport.java   |  5 +++++
 .../app1/pages/imports/MessageCatalogue.java       |  6 ++++++
 .../app1/pages/imports/TrainingWrapper.java        |  8 ++++++++
 .../java/t5/webresources/base/ComponentBase.java   |  4 ++++
 .../t5/webresources/base/ComponentCommonBase.java  | 16 +++++++++++++++
 .../java/t5/webresources/base/PageWrapper.java     |  7 +++++++
 .../java/t5/webresources/base/TrainingDocPage.java |  9 +++++++++
 .../t5/webresources/pages/MessageCatalogue.java    |  6 ++++++
 .../t5/webresources/pages/TrainingWrapper.java     |  9 +++++++++
 .../resources/META-INF/assets/PageWrapper.less     |  5 +++++
 .../resources/META-INF/assets/TrainingDocPage.less |  5 +++++
 .../resources/META-INF/assets/TrainingWrapper.less |  5 +++++
 .../t5/webresources/pages/MessageCatalogue.tml     | 23 ++++++++++++++++++++++
 28 files changed, 194 insertions(+), 16 deletions(-)

diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
index 24c0b2a89..4d83efd35 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
@@ -707,16 +707,23 @@ public class ComponentDependencyRegistryImpl implements 
ComponentDependencyRegis
             for (String resource : resources) 
             {
                 
-                final Set<String> dependents = getDependents(resource);
-                for (String furtherDependent : dependents) 
+                // Avoid resource invalidations
+                if (!resource.contains(":"))
                 {
-                    if (!resources.contains(furtherDependent) && 
!furtherDependents.contains(furtherDependent))
+                
+                    final Set<String> dependents = getDependents(resource);
+                    for (String furtherDependent : dependents) 
                     {
-                        furtherDependents.add(furtherDependent);
+                        if (!resources.contains(furtherDependent) && 
!furtherDependents.contains(furtherDependent))
+                        {
+                            furtherDependents.add(furtherDependent);
+                        }
                     }
+                    
+                    clear(resource);
+                    
                 }
                 
-                clear(resource);
                 
             }
         }
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java
index c4633cc29..0fc4c5262 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java
@@ -185,15 +185,17 @@ public class PageSourceImpl implements PageSource
             if (multipleClassLoaders)
             {
                 
-                if (canonicalPageName.equals(CURRENT_PAGE.get()))
-                {
-                    throw new IllegalStateException("Infinite method loop 
detected. Bailing out.");
-                }
-                else
-                {
-                    CURRENT_PAGE.set(canonicalPageName);
-                }
-            
+//                final String currentPage = CURRENT_PAGE.get();
+//                if (canonicalPageName.equals(currentPage))
+//                {
+//                    logger.warn("Infinite method loop detected. Bailing 
out.");
+//                    return null;
+//                }
+//                else
+//                {
+//                    CURRENT_PAGE.set(canonicalPageName);
+//                }
+//            
                 // Avoiding problems in PlasticClassPool.createTransformation()
                 // when the class being loaded has a page superclass
                 final List<String> pageDependencies = 
getPageDependencies(className);
diff --git a/tapestry-core/src/test/app1/css/PageWrapper.css 
b/tapestry-core/src/test/app1/css/PageWrapper.css
new file mode 100644
index 000000000..e78bb6bd2
--- /dev/null
+++ b/tapestry-core/src/test/app1/css/PageWrapper.css
@@ -0,0 +1,5 @@
+DIV.via-import2
+{
+  color: red;
+}  
+  
\ No newline at end of file
diff --git a/tapestry-core/src/test/app1/css/TrainingDocPage.css 
b/tapestry-core/src/test/app1/css/TrainingDocPage.css
new file mode 100644
index 000000000..e78bb6bd2
--- /dev/null
+++ b/tapestry-core/src/test/app1/css/TrainingDocPage.css
@@ -0,0 +1,5 @@
+DIV.via-import2
+{
+  color: red;
+}  
+  
\ No newline at end of file
diff --git a/tapestry-core/src/test/app1/css/TrainingWrapper.css 
b/tapestry-core/src/test/app1/css/TrainingWrapper.css
new file mode 100644
index 000000000..e78bb6bd2
--- /dev/null
+++ b/tapestry-core/src/test/app1/css/TrainingWrapper.css
@@ -0,0 +1,5 @@
+DIV.via-import2
+{
+  color: red;
+}  
+  
\ No newline at end of file
diff --git a/tapestry-core/src/test/app1/css/via-import2.css 
b/tapestry-core/src/test/app1/css/via-import2.css
new file mode 100644
index 000000000..e78bb6bd2
--- /dev/null
+++ b/tapestry-core/src/test/app1/css/via-import2.css
@@ -0,0 +1,5 @@
+DIV.via-import2
+{
+  color: red;
+}  
+  
\ No newline at end of file
diff --git a/tapestry-core/src/test/app1/css/via-import3.css 
b/tapestry-core/src/test/app1/css/via-import3.css
new file mode 100644
index 000000000..27610d676
--- /dev/null
+++ b/tapestry-core/src/test/app1/css/via-import3.css
@@ -0,0 +1,5 @@
+DIV.via-import3
+{
+  color: red;
+}  
+  
\ No newline at end of file
diff --git a/tapestry-core/src/test/app1/imports/MessageCatalogue.tml 
b/tapestry-core/src/test/app1/imports/MessageCatalogue.tml
new file mode 100644
index 000000000..2fa120492
--- /dev/null
+++ b/tapestry-core/src/test/app1/imports/MessageCatalogue.tml
@@ -0,0 +1,5 @@
+<html t:type="Border" 
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
+
+    <h1>Message catalogue</h1>
+
+</html>
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/ComponentBase.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/ComponentBase.java
new file mode 100644
index 000000000..90d4678c3
--- /dev/null
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/ComponentBase.java
@@ -0,0 +1,4 @@
+package org.apache.tapestry5.integration.app1.base.imports;
+
+public abstract class ComponentBase {
+}
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/ComponentCommonBase.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/ComponentCommonBase.java
new file mode 100644
index 000000000..f134213a7
--- /dev/null
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/ComponentCommonBase.java
@@ -0,0 +1,4 @@
+package org.apache.tapestry5.integration.app1.base.imports;
+
+public abstract class ComponentCommonBase extends ComponentBase {
+}
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/PageWrapper.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/PageWrapper.java
new file mode 100644
index 000000000..1a9fdbf2a
--- /dev/null
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/PageWrapper.java
@@ -0,0 +1,7 @@
+package org.apache.tapestry5.integration.app1.base.imports;
+
+import org.apache.tapestry5.annotations.Import;
+
+@Import(stylesheet = "context:css/PageWrapper.css")
+public abstract class PageWrapper extends ComponentCommonBase {
+}
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/TrainingDocPage.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/TrainingDocPage.java
new file mode 100644
index 000000000..82aea4fea
--- /dev/null
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/imports/TrainingDocPage.java
@@ -0,0 +1,8 @@
+package org.apache.tapestry5.integration.app1.base.imports;
+
+import org.apache.tapestry5.annotations.Import;
+import org.apache.tapestry5.integration.app1.pages.imports.TrainingWrapper;
+
+@Import(stylesheet = "context:css/TrainingDocPage.css")
+public abstract class TrainingDocPage extends TrainingWrapper {
+}
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SubclassWithImport.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SubclassWithImport.java
index 286afb0d5..f5f8f5bd9 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SubclassWithImport.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SubclassWithImport.java
@@ -8,7 +8,7 @@ import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.corelib.components.Zone;
 
-@Import(stylesheet = "context:css/ie-only.css")
+@Import(stylesheet = {"context:css/ie-only.css", 
"context:css/via-import2.css"})
 public class SubclassWithImport extends SuperclassWithImport {
     
     @Property int getIntCallCount;
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SuperSuperclassWithImport.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SuperSuperclassWithImport.java
new file mode 100644
index 000000000..996dec2c7
--- /dev/null
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SuperSuperclassWithImport.java
@@ -0,0 +1,8 @@
+package org.apache.tapestry5.integration.app1.components;
+
+import org.apache.tapestry5.annotations.Import;
+
+@Import(stylesheet = "context:css/via-import3.css")
+public class SuperSuperclassWithImport {
+    
+}
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SuperclassWithImport.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SuperclassWithImport.java
index a03c1cde3..777549caa 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SuperclassWithImport.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SuperclassWithImport.java
@@ -6,7 +6,7 @@ import org.apache.tapestry5.annotations.Import;
 import org.apache.tapestry5.annotations.Persist;
 
 @Import(stylesheet = "context:css/via-import.css")
-public class SuperclassWithImport {
+public class SuperclassWithImport extends SuperclassWithoutImport {
     
     // Just to test CachedWorker with a watch expression 
     @Persist
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SuperclassWithoutImport.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SuperclassWithoutImport.java
new file mode 100644
index 000000000..658bfe680
--- /dev/null
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/SuperclassWithoutImport.java
@@ -0,0 +1,5 @@
+package org.apache.tapestry5.integration.app1.components;
+
+public class SuperclassWithoutImport extends SuperSuperclassWithImport {
+
+}
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/imports/MessageCatalogue.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/imports/MessageCatalogue.java
new file mode 100644
index 000000000..e501fb522
--- /dev/null
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/imports/MessageCatalogue.java
@@ -0,0 +1,6 @@
+package org.apache.tapestry5.integration.app1.pages.imports;
+
+import org.apache.tapestry5.integration.app1.base.imports.TrainingDocPage;
+
+public class MessageCatalogue extends TrainingDocPage {
+}
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/imports/TrainingWrapper.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/imports/TrainingWrapper.java
new file mode 100644
index 000000000..847a9a893
--- /dev/null
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/imports/TrainingWrapper.java
@@ -0,0 +1,8 @@
+package org.apache.tapestry5.integration.app1.pages.imports;
+
+import org.apache.tapestry5.annotations.Import;
+import org.apache.tapestry5.integration.app1.base.imports.PageWrapper;
+
+@Import(stylesheet = "context:css/TrainingWrapper.css")
+public class TrainingWrapper extends PageWrapper {
+}
diff --git 
a/tapestry-webresources/src/test/java/t5/webresources/base/ComponentBase.java 
b/tapestry-webresources/src/test/java/t5/webresources/base/ComponentBase.java
new file mode 100644
index 000000000..daf81a5e6
--- /dev/null
+++ 
b/tapestry-webresources/src/test/java/t5/webresources/base/ComponentBase.java
@@ -0,0 +1,4 @@
+package t5.webresources.base;
+
+public abstract class ComponentBase {
+}
diff --git 
a/tapestry-webresources/src/test/java/t5/webresources/base/ComponentCommonBase.java
 
b/tapestry-webresources/src/test/java/t5/webresources/base/ComponentCommonBase.java
new file mode 100644
index 000000000..4023087da
--- /dev/null
+++ 
b/tapestry-webresources/src/test/java/t5/webresources/base/ComponentCommonBase.java
@@ -0,0 +1,16 @@
+package t5.webresources.base;
+
+import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.dom.Element;
+
+public abstract class ComponentCommonBase extends ComponentBase {
+    
+//    void afterRender(MarkupWriter writer)
+//    {
+//        final Element body = writer.getDocument().getRootElement();
+//        final Element p = body.element("p", "id", "hi");
+//        p.text("Hi! AAAAAAAAAAAAAAA");
+//        p.moveToBottom(body);
+//    }
+    
+}
diff --git 
a/tapestry-webresources/src/test/java/t5/webresources/base/PageWrapper.java 
b/tapestry-webresources/src/test/java/t5/webresources/base/PageWrapper.java
new file mode 100644
index 000000000..2d60317b2
--- /dev/null
+++ b/tapestry-webresources/src/test/java/t5/webresources/base/PageWrapper.java
@@ -0,0 +1,7 @@
+package t5.webresources.base;
+
+import org.apache.tapestry5.annotations.Import;
+
+@Import(stylesheet = "classpath:/META-INF/assets/PageWrapper.less")
+public abstract class PageWrapper extends ComponentCommonBase {
+}
diff --git 
a/tapestry-webresources/src/test/java/t5/webresources/base/TrainingDocPage.java 
b/tapestry-webresources/src/test/java/t5/webresources/base/TrainingDocPage.java
new file mode 100644
index 000000000..c5ee88920
--- /dev/null
+++ 
b/tapestry-webresources/src/test/java/t5/webresources/base/TrainingDocPage.java
@@ -0,0 +1,9 @@
+package t5.webresources.base;
+
+import org.apache.tapestry5.annotations.Import;
+
+import t5.webresources.pages.TrainingWrapper;
+
+@Import(stylesheet = "classpath:/META-INF/assets/TrainingDocPage.less")
+public abstract class TrainingDocPage extends TrainingWrapper {
+}
diff --git 
a/tapestry-webresources/src/test/java/t5/webresources/pages/MessageCatalogue.java
 
b/tapestry-webresources/src/test/java/t5/webresources/pages/MessageCatalogue.java
new file mode 100644
index 000000000..a0e4b7e53
--- /dev/null
+++ 
b/tapestry-webresources/src/test/java/t5/webresources/pages/MessageCatalogue.java
@@ -0,0 +1,6 @@
+package t5.webresources.pages;
+
+import t5.webresources.base.TrainingDocPage;
+
+public class MessageCatalogue extends TrainingDocPage {
+}
diff --git 
a/tapestry-webresources/src/test/java/t5/webresources/pages/TrainingWrapper.java
 
b/tapestry-webresources/src/test/java/t5/webresources/pages/TrainingWrapper.java
new file mode 100644
index 000000000..295306e13
--- /dev/null
+++ 
b/tapestry-webresources/src/test/java/t5/webresources/pages/TrainingWrapper.java
@@ -0,0 +1,9 @@
+package t5.webresources.pages;
+
+import org.apache.tapestry5.annotations.Import;
+
+import t5.webresources.base.PageWrapper;
+
+@Import(stylesheet = "classpath:/META-INF/assets/TrainingWrapper.less")
+public class TrainingWrapper extends PageWrapper {
+}
diff --git 
a/tapestry-webresources/src/test/resources/META-INF/assets/PageWrapper.less 
b/tapestry-webresources/src/test/resources/META-INF/assets/PageWrapper.less
new file mode 100644
index 000000000..f417b2c50
--- /dev/null
+++ b/tapestry-webresources/src/test/resources/META-INF/assets/PageWrapper.less
@@ -0,0 +1,5 @@
+div.page-wrapper
+{
+  color: red;
+}  
+  
\ No newline at end of file
diff --git 
a/tapestry-webresources/src/test/resources/META-INF/assets/TrainingDocPage.less 
b/tapestry-webresources/src/test/resources/META-INF/assets/TrainingDocPage.less
new file mode 100644
index 000000000..6c310b689
--- /dev/null
+++ 
b/tapestry-webresources/src/test/resources/META-INF/assets/TrainingDocPage.less
@@ -0,0 +1,5 @@
+div.training-doc-page
+{
+  color: red;
+}  
+  
\ No newline at end of file
diff --git 
a/tapestry-webresources/src/test/resources/META-INF/assets/TrainingWrapper.less 
b/tapestry-webresources/src/test/resources/META-INF/assets/TrainingWrapper.less
new file mode 100644
index 000000000..5f5620d1c
--- /dev/null
+++ 
b/tapestry-webresources/src/test/resources/META-INF/assets/TrainingWrapper.less
@@ -0,0 +1,5 @@
+div.training-wrapper
+{
+  color: red;
+}  
+  
\ No newline at end of file
diff --git 
a/tapestry-webresources/src/test/resources/t5/webresources/pages/MessageCatalogue.tml
 
b/tapestry-webresources/src/test/resources/t5/webresources/pages/MessageCatalogue.tml
new file mode 100644
index 000000000..8e4e6bc39
--- /dev/null
+++ 
b/tapestry-webresources/src/test/resources/t5/webresources/pages/MessageCatalogue.tml
@@ -0,0 +1,23 @@
+<t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd";>
+
+    <p>This page is used to demonstrate Less that uses @Import.</p>
+
+       <div class="page-wrapper">
+               <p>
+                       This should be red (page wrapper)
+               </p>
+       </div>
+
+       <div class="training-doc-page">
+               <p>
+                       This should be red (training doc page)
+               </p>
+       </div>
+       
+       <div class="training-wrapper">
+               <p>
+                       This should be red (training wrapper).
+               </p>
+       </div>
+
+</t:layout>

Reply via email to