-
Notifications
You must be signed in to change notification settings - Fork 232
fix: adds <fx:include> elements to controller skeleton when a fxid is assigned (#811) #841
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
Open
Oliver-Loeffler
wants to merge
12
commits into
gluonhq:master
Choose a base branch
from
Oliver-Loeffler:issue-811
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
01f1b3f
fix: Reference fields for <fx:include> elements, which have a 'fxid' …
Oliver-Loeffler f8d6df4
build: updated surefire configuration so that kit module exposes the …
Oliver-Loeffler faf7bd2
fix: Introduced additional assertion to check size of collection bein…
Oliver-Loeffler aaaeb20
feat: Updated type resolution in skeleton context so, that nearest ja…
Oliver-Loeffler d38dcbb
fix: Addressed the problem that the working dir is not set when tryin…
Oliver-Loeffler 86eb099
Added another constraint to force public classes only.
Oliver-Loeffler 1195520
Merge branch 'gluonhq:master' into issue-811
Oliver-Loeffler 399910a
Relocated class into utils package as recommended.
Oliver-Loeffler c06b553
Header updated
Oliver-Loeffler f0f3f27
Inner test class defined as static class.
Oliver-Loeffler 88e4440
Copyright year in header updated.
Oliver-Loeffler 36dcdb8
With moving TypeLookup into com.oracle.javafx.scenebuilder.kit.util, …
Oliver-Loeffler File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
130 changes: 130 additions & 0 deletions
130
kit/src/main/java/com/oracle/javafx/scenebuilder/kit/util/TypeLookup.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,130 @@ | ||
| /* | ||
| * Copyright (c) 2026, Gluon and/or its affiliates. | ||
| * All rights reserved. Use is subject to license terms. | ||
| * | ||
| * This file is available and licensed under the following license: | ||
| * | ||
| * Redistribution and use in source and binary forms, with or without | ||
| * modification, are permitted provided that the following conditions | ||
| * are met: | ||
| * | ||
| * - Redistributions of source code must retain the above copyright | ||
| * notice, this list of conditions and the following disclaimer. | ||
| * - Redistributions in binary form must reproduce the above copyright | ||
| * notice, this list of conditions and the following disclaimer in | ||
| * the documentation and/or other materials provided with the distribution. | ||
| * - Neither the name of Oracle Corporation and Gluon nor the names of its | ||
| * contributors may be used to endorse or promote products derived | ||
| * from this software without specific prior written permission. | ||
| * | ||
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| */ | ||
| package com.oracle.javafx.scenebuilder.kit.util; | ||
|
|
||
| import java.lang.reflect.Modifier; | ||
| import java.util.Optional; | ||
|
|
||
| /** | ||
| * Utility class to provide lookup of Types within a given package name space. | ||
| */ | ||
| public class TypeLookup { | ||
|
|
||
| private final String packageNamePrefix; | ||
|
|
||
| TypeLookup(String packageNamePrefix) { | ||
| this.packageNamePrefix = packageNamePrefix; | ||
| } | ||
|
|
||
| /** | ||
| * Attempts to identify the first public interface in any of the JavaFX | ||
| * packages. If no public interface is found, the first public super class in | ||
| * JavaFX packages will be identified. | ||
| * | ||
| * If the given class itself is already member of any JavaFX package, this class | ||
| * is provided in the result. Exceptions here are Lambdas, which are ignore. For | ||
| * anonymous and inner classes the next public interface or the next public | ||
| * super class in JavaFX package space are looked up. | ||
| * | ||
| * Lambdas are ignored and will yield empty result values. | ||
| * | ||
| * @param source Any object where a related JavaFX type is expected in type | ||
| * hierarchy. | ||
| * @return Optional holding the JavaFX related class (if present). | ||
| */ | ||
| public static Optional<Class<?>> findFXTypes(Object source) { | ||
| if (null == source) { | ||
| return Optional.empty(); | ||
| } | ||
| return new TypeLookup("javafx.").findFirstPublicInterfaceOrSuperclass(source); | ||
| } | ||
|
|
||
| Optional<Class<?>> findFirstPublicInterfaceOrSuperclass(Object obj) { | ||
| if (obj == null || packageNamePrefix == null) { | ||
| return Optional.empty(); | ||
| } | ||
|
|
||
| Class<?> clazz = obj.getClass(); | ||
|
|
||
| /* Lambdas are not usable in FXML documents, hence will be ignored */ | ||
| if (clazz.getName().contains("$$")) { | ||
| return Optional.empty(); | ||
| } | ||
|
|
||
| /* | ||
| * For top level classes, no further investigation is needed as long these | ||
| * classes are already members of the package space. | ||
| */ | ||
| if (clazz.getPackageName().startsWith(packageNamePrefix) | ||
| && !clazz.getName().contains("$") | ||
| && Modifier.isPublic(clazz.getModifiers())) { | ||
| return Optional.of(clazz); | ||
| } | ||
|
|
||
| Class<?> intrface = findFirstPublicInterface(clazz); | ||
| if (intrface != null) { | ||
| return Optional.of(intrface); | ||
| } | ||
|
|
||
| return findFirstPublicSuperclass(clazz); | ||
| } | ||
|
|
||
| private Class<?> findFirstPublicInterface(Class<?> clazz) { | ||
| if (clazz == null || clazz == Object.class) { | ||
| return null; | ||
| } | ||
|
|
||
| for (Class<?> intrface : clazz.getInterfaces()) { | ||
| if (Modifier.isPublic(intrface.getModifiers()) && intrface.getPackageName().startsWith(packageNamePrefix)) { | ||
| return intrface; | ||
| } | ||
|
|
||
| Class<?> found = findFirstPublicInterface(intrface); | ||
| if (found != null) { | ||
| return found; | ||
| } | ||
| } | ||
|
|
||
| return findFirstPublicInterface(clazz.getSuperclass()); | ||
| } | ||
|
|
||
| private Optional<Class<?>> findFirstPublicSuperclass(Class<?> clazz) { | ||
| Class<?> current = clazz.getSuperclass(); | ||
| while (current != null && current != Object.class) { | ||
| if (Modifier.isPublic(current.getModifiers()) && current.getPackageName().startsWith(packageNamePrefix)) { | ||
| return Optional.of(current); | ||
| } | ||
| current = current.getSuperclass(); | ||
| } | ||
| return Optional.of(clazz); | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.