Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@
* @coverage core.editor
*/
public final class JavaSourceUiDescriber extends TextContentDescriber {
private static final String POINT_ID = DesignerPlugin.PLUGIN_ID + ".designerContentPatterns";

private record Patterns(Pattern include, Pattern exclude, List<IConfigurationElement> includeElements,
List<IConfigurationElement> excludeElements) {
}

private static volatile Patterns cachedPatterns;

////////////////////////////////////////////////////////////////////////////
//
// ITextContentDescriber
Expand Down Expand Up @@ -73,8 +81,9 @@ private static int isGUISource(BufferedReader reader) throws IOException {
return INVALID;
}

Pattern includePatterns = getIncludePatterns();
Pattern excludePatterns = getExcludePatterns();
Patterns patterns = getPatterns();
Pattern includePatterns = patterns.include();
Pattern excludePatterns = patterns.exclude();

int description = INDETERMINATE;

Expand Down Expand Up @@ -112,26 +121,25 @@ private static boolean hasPattern(Pattern pattern, String line) {
//
////////////////////////////////////////////////////////////////////////////
/**
* @return the contributed "include" patterns. If has one of it - consider source as GUI.
* @return the contributed "include" and "exclude" patterns, compiled once
* until the contributions change.
*/
private static Pattern getIncludePatterns() {
return getPatterns("includePattern");
}

/**
* @return the contributed "exclude" patterns. If has one of it - consider source as <em>not</em>
* GUI.
*/
private static Pattern getExcludePatterns() {
return getPatterns("excludePattern");
private static Patterns getPatterns() {
// ExternalFactoriesHelper returns a new list once the contributions change
List<IConfigurationElement> includeElements = ExternalFactoriesHelper.getElements(POINT_ID, "includePattern");
List<IConfigurationElement> excludeElements = ExternalFactoriesHelper.getElements(POINT_ID, "excludePattern");
Patterns result = cachedPatterns;
if (result == null || result.includeElements() != includeElements
|| result.excludeElements() != excludeElements) {
result = new Patterns(compile(includeElements), compile(excludeElements), includeElements,
excludeElements);
cachedPatterns = result;
}
Comment thread
ptziegler marked this conversation as resolved.
return result;
}

private static Pattern getPatterns(String elementName) {
private static Pattern compile(List<IConfigurationElement> elements) {
List<String> patterns = new ArrayList<>();
List<IConfigurationElement> elements =
ExternalFactoriesHelper.getElements(
"org.eclipse.wb.core.designerContentPatterns",
elementName);
for (IConfigurationElement element : elements) {
String pattern = element.getValue();
patterns.add(pattern);
Expand Down
Loading