From 937b4d579840a9c021c06a88fcca89024b94b715 Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Fri, 20 May 2022 11:44:03 -0400 Subject: [PATCH] Bug 579982: More removing of cached Matcher objects This follows on from 1c404b050df1825dfb29252517b58fbecada4211 Change-Id: I764ba6a96aa650f38ef90521b2a67cc87903b2d5 --- .../guide/deprecated_API_removals.html | 13 ++++ .../META-INF/MANIFEST.MF | 2 +- .../cdt/jsoncdb/core/participant/Arglets.java | 64 +++++++++++++------ .../cdt/jsoncdb/nvidia/NvccLangStdArglet.java | 9 +-- 4 files changed, 64 insertions(+), 24 deletions(-) diff --git a/doc/org.eclipse.cdt.doc.isv/guide/deprecated_API_removals.html b/doc/org.eclipse.cdt.doc.isv/guide/deprecated_API_removals.html index d9b94e83247..880f37a6a27 100644 --- a/doc/org.eclipse.cdt.doc.isv/guide/deprecated_API_removals.html +++ b/doc/org.eclipse.cdt.doc.isv/guide/deprecated_API_removals.html @@ -81,6 +81,7 @@

  1. org.eclipse.cdt.ui.newui.AbstractPage reduced visibility of many fields
  2. +
  3. java.util.regex.Matcher use in JSONCDB API will be removed

@@ -580,6 +581,18 @@ See Bug 579666.

+

2. java.util.regex.Matcher use in JSONCDB API will be removed

+

+ The following method will be removed from the API as it encourages non-safe constructs of reusing Matchers instead of Patterns. +

+ +

+ See Bug 579982. +

+ diff --git a/jsoncdb/org.eclipse.cdt.jsoncdb.core/META-INF/MANIFEST.MF b/jsoncdb/org.eclipse.cdt.jsoncdb.core/META-INF/MANIFEST.MF index 5e99851755d..5ebfa03022a 100644 --- a/jsoncdb/org.eclipse.cdt.jsoncdb.core/META-INF/MANIFEST.MF +++ b/jsoncdb/org.eclipse.cdt.jsoncdb.core/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %bundleName Bundle-Description: %bundleDescription Bundle-Copyright: %Bundle-Copyright Bundle-SymbolicName: org.eclipse.cdt.jsoncdb.core;singleton:=true -Bundle-Version: 1.2.100.qualifier +Bundle-Version: 1.3.0.qualifier Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-11 diff --git a/jsoncdb/org.eclipse.cdt.jsoncdb.core/src/org/eclipse/cdt/jsoncdb/core/participant/Arglets.java b/jsoncdb/org.eclipse.cdt.jsoncdb.core/src/org/eclipse/cdt/jsoncdb/core/participant/Arglets.java index 1c76ef26931..4c6fa6f35fb 100644 --- a/jsoncdb/org.eclipse.cdt.jsoncdb.core/src/org/eclipse/cdt/jsoncdb/core/participant/Arglets.java +++ b/jsoncdb/org.eclipse.cdt.jsoncdb.core/src/org/eclipse/cdt/jsoncdb/core/participant/Arglets.java @@ -387,10 +387,30 @@ public final class Arglets { * @since 1.2 */ public static abstract class BuiltinDetectionArgsGeneric extends BuiltinDetctionArgsGeneric { + /** * @see org.eclipse.cdt.jsoncdb.core.participant.IArglet#processArgument(IArgumentCollector, * IPath, String) + * @since 1.3 */ + protected final int processArgument(IArgumentCollector resultCollector, String argsLine, + Pattern[] optionPatterns) { + for (Pattern pattern : optionPatterns) { + Matcher matcher = pattern.matcher(argsLine); + if (matcher.lookingAt()) { + resultCollector.addBuiltinDetectionArgument(matcher.group()); + return matcher.end(); + } + } + return 0;// no input consumed + } + + /** + * @see org.eclipse.cdt.jsoncdb.core.participant.IArglet#processArgument(IArgumentCollector, + * IPath, String) + * @deprecated Use {@link #processArgument(IArgumentCollector, String, Pattern[])} instead. + */ + @Deprecated(forRemoval = true) @Override protected final int processArgument(IArgumentCollector resultCollector, String argsLine, Matcher[] optionMatchers) { @@ -450,24 +470,25 @@ public final class Arglets { */ public static class Sysroot_GCC extends BuiltinDetectionArgsGeneric implements IArglet { @SuppressWarnings("nls") - private static final Matcher[] optionMatchers = { + private static final Pattern[] optionPatterns = { /* "--sysroot=" quoted directory */ - Pattern.compile("--sysroot=" + REGEX_INCLUDEPATH_QUOTED_DIR).matcher(EMPTY_STR), + Pattern.compile("--sysroot=" + REGEX_INCLUDEPATH_QUOTED_DIR), // /* "--sysroot=" unquoted directory */ - Pattern.compile("--sysroot=" + REGEX_INCLUDEPATH_UNQUOTED_DIR).matcher(EMPTY_STR), + Pattern.compile("--sysroot=" + REGEX_INCLUDEPATH_UNQUOTED_DIR), // /* "-isysroot=" quoted directory */ - Pattern.compile("-isysroot=" + REGEX_INCLUDEPATH_QUOTED_DIR).matcher(EMPTY_STR), + Pattern.compile("-isysroot=" + REGEX_INCLUDEPATH_QUOTED_DIR), // /* "-isysroot=" unquoted directory */ - Pattern.compile("-isysroot=" + REGEX_INCLUDEPATH_UNQUOTED_DIR).matcher(EMPTY_STR), + Pattern.compile("-isysroot=" + REGEX_INCLUDEPATH_UNQUOTED_DIR), // /* "--no-sysroot-prefix" */ - Pattern.compile("--no-sysroot-prefix").matcher(EMPTY_STR) }; + Pattern.compile("--no-sysroot-prefix"), // + }; /*- - * @see org.eclipse.cdt.jsoncdb.IArglet#processArgs(java.lang.String) + * @see org.eclipse.cdt.jsoncdb.core.participant.IArglet#processArgs(java.lang.String) */ @Override public int processArgument(IArgumentCollector resultCollector, IPath cwd, String argsLine) { - return processArgument(resultCollector, argsLine, optionMatchers); + return processArgument(resultCollector, argsLine, optionPatterns); } } @@ -477,16 +498,18 @@ public final class Arglets { * @since 1.1 */ public static class Target_Clang extends BuiltinDetectionArgsGeneric implements IArglet { - private static final Matcher[] optionMatchers = { + @SuppressWarnings("nls") + private static final Pattern[] optionPatterns = { /* "--target=" triple */ - Pattern.compile("--target=\\w+(-\\w+)*").matcher(EMPTY_STR) }; //$NON-NLS-1$ + Pattern.compile("--target=\\w+(-\\w+)*") // + }; /*- * @see de.marw.cmake.cdt.lsp.IArglet#processArgs(java.lang.String) */ @Override public int processArgument(IArgumentCollector resultCollector, IPath cwd, String argsLine) { - return processArgument(resultCollector, argsLine, optionMatchers); + return processArgument(resultCollector, argsLine, optionPatterns); } } @@ -497,20 +520,23 @@ public final class Arglets { */ public static class LangStd_GCC extends BuiltinDetectionArgsGeneric implements IArglet { @SuppressWarnings("nls") - private static final Matcher[] optionMatchers = { Pattern.compile("-std=\\S+").matcher(EMPTY_STR), - Pattern.compile("-ansi").matcher(EMPTY_STR), - Pattern.compile("-fPIC", Pattern.CASE_INSENSITIVE).matcher(EMPTY_STR), - Pattern.compile("-fPIE", Pattern.CASE_INSENSITIVE).matcher(EMPTY_STR), - Pattern.compile("-fstack-protector\\S+").matcher(EMPTY_STR), - Pattern.compile("-march=\\\\S+").matcher(EMPTY_STR), Pattern.compile("-mcpu=\\\\S+").matcher(EMPTY_STR), - Pattern.compile("-mtune=\\\\S+").matcher(EMPTY_STR), Pattern.compile("-pthread").matcher(EMPTY_STR), }; + private static final Pattern[] optionPatterns = { // + Pattern.compile("-std=\\S+"), // + Pattern.compile("-ansi"), // + Pattern.compile("-fPIC", Pattern.CASE_INSENSITIVE), // + Pattern.compile("-fPIE", Pattern.CASE_INSENSITIVE), // + Pattern.compile("-fstack-protector\\S+"), // + Pattern.compile("-march=\\\\S+"), // + Pattern.compile("-mcpu=\\\\S+"), // + Pattern.compile("-mtune=\\\\S+"), // + Pattern.compile("-pthread"), }; /*- * @see org.eclipse.cdt.jsoncdb.IArglet#processArgs(java.lang.String) */ @Override public int processArgument(IArgumentCollector resultCollector, IPath cwd, String argsLine) { - return processArgument(resultCollector, argsLine, optionMatchers); + return processArgument(resultCollector, argsLine, optionPatterns); } } diff --git a/jsoncdb/org.eclipse.cdt.jsoncdb.nvidia/src/org/eclipse/cdt/jsoncdb/nvidia/NvccLangStdArglet.java b/jsoncdb/org.eclipse.cdt.jsoncdb.nvidia/src/org/eclipse/cdt/jsoncdb/nvidia/NvccLangStdArglet.java index 5ea509c76a2..d3183e2d88e 100644 --- a/jsoncdb/org.eclipse.cdt.jsoncdb.nvidia/src/org/eclipse/cdt/jsoncdb/nvidia/NvccLangStdArglet.java +++ b/jsoncdb/org.eclipse.cdt.jsoncdb.nvidia/src/org/eclipse/cdt/jsoncdb/nvidia/NvccLangStdArglet.java @@ -9,7 +9,6 @@ package org.eclipse.cdt.jsoncdb.nvidia; -import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.cdt.jsoncdb.core.participant.Arglets.BuiltinDetectionArgsGeneric; @@ -21,14 +20,16 @@ import org.eclipse.core.runtime.IPath; * standard {@code --std=xxx}. */ public class NvccLangStdArglet extends BuiltinDetectionArgsGeneric implements IArglet { - private static final Matcher[] optionMatchers = { Pattern.compile("--std \\S+").matcher(""), //$NON-NLS-1$ //$NON-NLS-2$ - Pattern.compile("-std \\S+").matcher(""), }; //$NON-NLS-1$ //$NON-NLS-2$ + @SuppressWarnings("nls") + private static final Pattern[] optionPatterns = { Pattern.compile("--std \\S+"), // + Pattern.compile("-std \\S+"), // + }; /*- * @see org.eclipse.cdt.jsoncdb.IArglet#processArgs(java.lang.String) */ @Override public int processArgument(IArgumentCollector resultCollector, IPath cwd, String argsLine) { - return processArgument(resultCollector, argsLine, optionMatchers); + return processArgument(resultCollector, argsLine, optionPatterns); } } \ No newline at end of file