-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Introduce Dev only module for relevant extensions #45053
base: main
Are you sure you want to change the base?
Conversation
6300f6b
to
8fd64dc
Compare
/cc @gsmet (hibernate-orm,hibernate-search), @marko-bekhta (hibernate-search), @yrodiere (hibernate-orm,hibernate-search) |
🎊 PR Preview cd1579f has been successfully built and deployed to https://quarkus-pr-main-45053-preview.surge.sh/version/main/guides/
|
This comment has been minimized.
This comment has been minimized.
The changes seem to look good but we need to check the failures |
This comment has been minimized.
This comment has been minimized.
I'll check why this failed |
We need 8583576 for this CI |
Basically, we need to merge #43618 and rebase |
@aloubyansky please have a look at the failures. I rebased on main |
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
…ch extension Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
…nsion Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
@phillip-kruger you keep loosing my changes when you rebase. There are more failures than before. I'll rebase and force push. However, the Gradle failures will be challenging to fix. They are not related to dev mode-only dependencies but conditional dependencies in general. See my previous comment. |
038b2c9
to
6406988
Compare
Status for workflow
|
Status for workflow
|
Status | Name | Step | Failures | Logs | Raw logs | Build scan |
---|---|---|---|---|---|---|
✔️ | Maven Tests - JDK 17 | Logs | Raw logs | 🔍 | ||
✖ | Maven Tests - JDK 17 Windows | Build |
Failures | Logs | Raw logs | 🔍 |
✖ | Gradle Tests - JDK 17 | Build |
Failures | Logs | Raw logs | 🔍 |
✖ | Gradle Tests - JDK 17 Windows | Build |
Failures | Logs | Raw logs | 🚧 |
Full information is available in the Build summary check run.
You can consult the Develocity build scans.
Failures
⚙️ Maven Tests - JDK 17 Windows #
- Failing: integration-tests/maven
📦 integration-tests/maven
✖ io.quarkus.maven.it.RemoteDevMojoIT.testThatApplicationRecoversCompilationIssue
line 166
- History - More details - Source on GitHub
java.lang.RuntimeException: org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.maven.it.RunAndCheckWithAgentMojoTestBase was not fulfilled within 1 minutes.
at io.quarkus.maven.it.RunAndCheckWithAgentMojoTestBase.runAndCheck(RunAndCheckWithAgentMojoTestBase.java:86)
at io.quarkus.maven.it.RemoteDevMojoIT.testThatApplicationRecoversCompilationIssue(RemoteDevMojoIT.java:166)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.maven.it.RunAndCheckWithAgentMojoTestBase was not fulfilled within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
✖ io.quarkus.maven.it.RemoteDevMojoIT.testThatApplicationRecoversCompilationIssue
line 166
- History - More details - Source on GitHub
java.lang.RuntimeException: org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.maven.it.RunAndCheckWithAgentMojoTestBase was not fulfilled within 1 minutes.
at io.quarkus.maven.it.RunAndCheckWithAgentMojoTestBase.runAndCheck(RunAndCheckWithAgentMojoTestBase.java:86)
at io.quarkus.maven.it.RemoteDevMojoIT.testThatApplicationRecoversCompilationIssue(RemoteDevMojoIT.java:166)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.maven.it.RunAndCheckWithAgentMojoTestBase was not fulfilled within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
✖ io.quarkus.maven.it.RemoteDevMojoIT.testThatNewBeanAreDiscovered
line 231
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:164)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:155)
✖ io.quarkus.maven.it.RemoteDevMojoIT.testThatNewBeanAreDiscovered
line 231
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:164)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:155)
✖ io.quarkus.maven.it.RemoteDevMojoIT.testThatTheApplicationIsReloadedOnConfigChange
line 102
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 5 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:97)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:88)
✖ io.quarkus.maven.it.RemoteDevMojoIT.testThatTheApplicationIsReloadedOnConfigChange
line 102
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 5 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:97)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:88)
✖ io.quarkus.maven.it.RemoteDevMojoIT.testThatTheApplicationIsReloadedOnJavaChange
line 44
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:164)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:155)
✖ io.quarkus.maven.it.RemoteDevMojoIT.testThatTheApplicationIsReloadedOnJavaChange
line 44
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:164)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:155)
✖ io.quarkus.maven.it.RemoteDevMojoIT.testThatTheApplicationIsReloadedOnNewResource
line 92
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:164)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:155)
✖ io.quarkus.maven.it.RemoteDevMojoIT.testThatTheApplicationIsReloadedOnNewResource
line 92
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:164)
at io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:155)
⚙️ Gradle Tests - JDK 17 #
- Failing: integration-tests/gradle
📦 integration-tests/gradle
✖ io.quarkus.gradle.devmode.MavenExclusionInExtensionDependencyDevModeTest.main
- History - More details - Source on GitHub
java.lang.AssertionError:
Expecting actual:
"BROKEN: quarkusDev mode has terminated"
to contain:
"Hello"
at app//io.quarkus.gradle.devmode.MavenExclusionInExtensionDependencyDevModeTest.testDevMode(MavenExclusionInExtensionDependencyDevModeTest.java:25)
at app//io.quarkus.gradle.devmode.QuarkusDevGradleTestBase.main(QuarkusDevGradleTestBase.java:60)
at java.base@17.0.13/java.lang.reflect.Method.invoke(Method.java:569)
⚙️ Gradle Tests - JDK 17 Windows #
📦 integration-tests/gradle
✖ io.quarkus.gradle.devmode.BasicCompositeBuildExtensionProjectDevModeTest.main
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 5 minutes.
at app//org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at app//io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:97)
at app//io.quarkus.gradle.devmode.QuarkusDevGradleTestBase.getHttpResponse(QuarkusDevGradleTestBase.java:156)
✖ io.quarkus.gradle.devmode.BasicCompositeBuildProjectDevModeTest.main
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 5 minutes.
at app//org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at app//io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:97)
at app//io.quarkus.gradle.devmode.QuarkusDevGradleTestBase.getHttpResponse(QuarkusDevGradleTestBase.java:156)
✖ io.quarkus.gradle.devmode.BasicJavaLibraryModuleDevModeTest.main
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 5 minutes.
at app//org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at app//io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:97)
at app//io.quarkus.gradle.devmode.QuarkusDevGradleTestBase.getHttpResponse(QuarkusDevGradleTestBase.java:156)
✖ io.quarkus.gradle.devmode.BasicMultiModuleProjectDevModeTest.main
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 5 minutes.
at app//org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at app//io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:97)
at app//io.quarkus.gradle.devmode.QuarkusDevGradleTestBase.getHttpResponse(QuarkusDevGradleTestBase.java:156)
✖ io.quarkus.gradle.devmode.CompileOnlyDependencyDevModeTest.main
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 2 minutes.
at app//org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at app//io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:164)
at app//io.quarkus.gradle.devmode.QuarkusDevGradleTestBase.getHttpResponse(QuarkusDevGradleTestBase.java:164)
✖ io.quarkus.gradle.devmode.JandexKordampMultiModuleProjectDevModeTest.main
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 1 minutes 30 seconds.
at app//org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at app//io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:164)
at app//io.quarkus.gradle.devmode.QuarkusDevGradleTestBase.getHttpResponse(QuarkusDevGradleTestBase.java:164)
✖ io.quarkus.gradle.devmode.JandexVlsiMultiModuleProjectDevModeTest.main
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 1 minutes 30 seconds.
at app//org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at app//io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:164)
at app//io.quarkus.gradle.devmode.QuarkusDevGradleTestBase.getHttpResponse(QuarkusDevGradleTestBase.java:164)
✖ io.quarkus.gradle.devmode.MavenExclusionInExtensionDependencyDevModeTest.main
- History - More details - Source on GitHub
java.lang.AssertionError:
Expecting actual:
"BROKEN: quarkusDev mode has terminated"
to contain:
"Hello"
at app//io.quarkus.gradle.devmode.MavenExclusionInExtensionDependencyDevModeTest.testDevMode(MavenExclusionInExtensionDependencyDevModeTest.java:25)
at app//io.quarkus.gradle.devmode.QuarkusDevGradleTestBase.main(QuarkusDevGradleTestBase.java:60)
at java.base@17.0.13/java.lang.reflect.Method.invoke(Method.java:569)
✖ io.quarkus.gradle.devmode.MultiCompositeBuildExtensionsDevModeTest.main
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 5 minutes.
at app//org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at app//io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:97)
at app//io.quarkus.gradle.devmode.QuarkusDevGradleTestBase.getHttpResponse(QuarkusDevGradleTestBase.java:156)
✖ io.quarkus.gradle.devmode.QuarkusDevDependencyDevModeTest.main
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression in io.quarkus.test.devmode.util.DevModeClient was not fulfilled within 1 minutes 30 seconds.
at app//org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at app//org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1006)
at app//org.awaitility.core.ConditionFactory.until(ConditionFactory.java:975)
at app//io.quarkus.test.devmode.util.DevModeClient.getHttpResponse(DevModeClient.java:164)
at app//io.quarkus.gradle.devmode.QuarkusDevGradleTestBase.getHttpResponse(QuarkusDevGradleTestBase.java:164)
Ai sorry, I keep on forgetting you also made changes. I'll leave this PR to you to get green :) |
hey @phillip-kruger , I think you need to update OIDC-related changes as we added new classes and changed some existing classes related to this PR. Thanks |
This PR is blocked by yet to be fixed bugs in our Gradle plug-in impl. |
This is on top of the work that @aloubyansky did to allow Conditional dependency based on mode (dev mode in this case)
For now I only moved Dev UI Runtime to these new modules.
With some more refactoring we can move other things like HotReload setup and Dev console (I'll try that in another PR)
This PR is fairly big, but there is a commit per extension to make it easier to review. Basically it is the following for each extension:
This means that all bits of dev ui is now removed from a Prod build. Previously the dev ui runtime classes was still part of the final bundle (even though they where not use internally, if users wanted they can create new instances of these classes)