diff --git a/config/checkstyle-checks.xml b/config/checkstyle-checks.xml index d4b0830cb..d1f28eef8 100644 --- a/config/checkstyle-checks.xml +++ b/config/checkstyle-checks.xml @@ -657,6 +657,9 @@ SuppressWarnings, FunctionalInterface, NoSuchMethodException, InvocationTargetException, IllegalAccessException"/> + + + diff --git a/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/builder/CheckstyleBuilder.java b/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/builder/CheckstyleBuilder.java index 59e0d730a..6f5c070f9 100644 --- a/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/builder/CheckstyleBuilder.java +++ b/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/builder/CheckstyleBuilder.java @@ -228,59 +228,9 @@ public final void handleBuildSelection(final Collection boolean backgroundFullBuild = CheckstylePluginPrefs .getBoolean(CheckstylePluginPrefs.PREF_BACKGROUND_FULL_BUILD); - List enabledFileSets = configuration.getFileSets().stream() - .filter(FileSet::isEnabled) - .toList(); - - List files = resources.stream() - .filter(resource -> resource instanceof IFile) - .map(resource -> (IFile) resource) - .toList(); - - // - // Build a set of auditors from the file sets of this project - // configuration. - // File sets that share the same check configuration merge into - // one Auditor. - // - Map audits = new HashMap<>(); + Map audits = resolveAudits(resources, configuration, project); try { - for (FileSet fileSet : enabledFileSets) { - ICheckConfiguration checkConfig = fileSet.getCheckConfig(); - if (checkConfig == null) { - throw new CheckstylePluginException( - NLS.bind(Messages.errorNoCheckConfig, project.getName())); - } - - Auditor audit = audits.computeIfAbsent(checkConfig, Auditor::new); - - // check which files belong to the file set - List filesInFileset = files.stream() - .filter(fileSet::includesFile) - .toList(); - - for (IFile file : filesInFileset) { - boolean hasCompileErrors = IMarker.SEVERITY_ERROR == file.findMaxProblemSeverity( - IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_ZERO); - - // remove markers on this file - file.deleteMarkers(CheckstyleMarker.MARKER_ID, false, IResource.DEPTH_ZERO); - - // avoid checkstyle parser errors being shown - if (hasCompileErrors) { - continue; - } - - audit.addFile(file); - - // remove markers from package to prevent - // packagehtml messages from accumulatin - file.getParent().deleteMarkers(CheckstyleMarker.MARKER_ID, false, - IResource.DEPTH_ZERO); - } - } - // run all auditors for (Auditor audit : audits.values()) { if (monitor.isCanceled()) { @@ -288,7 +238,6 @@ public final void handleBuildSelection(final Collection } if (backgroundFullBuild && kind == FULL_BUILD) { - AuditorJob job = new AuditorJob(project, audit); job.schedule(); } else { @@ -302,6 +251,60 @@ public final void handleBuildSelection(final Collection } } + /** + * Build a set of auditors from the file sets of this project + * configuration. + * File sets that share the same check configuration merge into + * one Auditor. + */ + private Map resolveAudits( + Collection resources, IProjectConfiguration configuration, + IProject project) throws CoreException { + List enabledFileSets = configuration.getFileSets().stream() + .filter(FileSet::isEnabled) + .toList(); + + List files = resources.stream() + .filter(resource -> resource instanceof IFile) + .map(resource -> (IFile) resource) + .toList(); + Map audits = new HashMap<>(); + for (FileSet fileSet : enabledFileSets) { + ICheckConfiguration checkConfig = fileSet.getCheckConfig(); + if (checkConfig == null) { + throw new CoreException(new Status(IStatus.ERROR, CheckstylePlugin.PLUGIN_ID, + NLS.bind(Messages.errorNoCheckConfig, project.getName()))); + } + + Auditor audit = audits.computeIfAbsent(checkConfig, Auditor::new); + + // check which files belong to the file set + List filesInFileset = files.stream() + .filter(fileSet::includesFile) + .toList(); + + for (IFile file : filesInFileset) { + boolean hasCompileErrors = IMarker.SEVERITY_ERROR == file.findMaxProblemSeverity( + IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_ZERO); + + // remove markers on this file + file.deleteMarkers(CheckstyleMarker.MARKER_ID, false, IResource.DEPTH_ZERO); + + // avoid checkstyle parser errors being shown + if (hasCompileErrors) { + continue; + } + + audit.addFile(file); + + // remove markers from package to prevent + // packagehtml messages from accumulatin + file.getParent().deleteMarkers(CheckstyleMarker.MARKER_ID, false, IResource.DEPTH_ZERO); + } + } + return audits; + } + /** * Get the files for the build by analyzing the resource delta. * diff --git a/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/config/configtypes/RemoteConfigurationType.java b/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/config/configtypes/RemoteConfigurationType.java index d4e0d1c97..be40dbedb 100644 --- a/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/config/configtypes/RemoteConfigurationType.java +++ b/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/config/configtypes/RemoteConfigurationType.java @@ -37,7 +37,6 @@ import java.util.HashSet; import java.util.Optional; import java.util.Set; - import org.eclipse.core.runtime.IPath; import org.eclipse.equinox.security.storage.EncodingUtils; import org.eclipse.equinox.security.storage.ISecurePreferences; @@ -100,7 +99,6 @@ public CheckstyleConfigurationFile getCheckstyleConfiguration( byte[] configurationFileData = null; try { - System.setProperty(KEY_MAX_REDIRECTS, "3"); final URLConnection connection = data.getResolvedConfigFileURL().openConnection(); @@ -128,15 +126,8 @@ public CheckstyleConfigurationFile getCheckstyleConfiguration( data.setCheckConfigFileBytes(configurationFileData); - // get the properties bundle - Optional additionalPropertiesBytes = Optional.empty(); - if (originalFileSuccess) { - additionalPropertiesBytes = getAdditionPropertiesBundleBytes( - data.getResolvedConfigFileURL()); - } else if (useCacheFile) { - additionalPropertiesBytes = getBytesFromCacheBundleFile(checkConfiguration); - } - + Optional additionalPropertiesBytes = getPropertiesBundle(originalFileSuccess, + useCacheFile, data, checkConfiguration); additionalPropertiesBytes.ifPresent(data::setAdditionalPropertyBundleBytes); // get the property resolver @@ -172,6 +163,17 @@ public CheckstyleConfigurationFile getCheckstyleConfiguration( return data; } + private Optional getPropertiesBundle(boolean originalFileSuccess, boolean useCacheFile, + CheckstyleConfigurationFile data, ICheckConfiguration checkConfiguration) { + if (originalFileSuccess) { + return getAdditionPropertiesBundleBytes(data.getResolvedConfigFileURL()); + } + if (useCacheFile) { + return getBytesFromCacheBundleFile(checkConfiguration); + } + return Optional.empty(); + } + @Override protected URL resolveLocation(ICheckConfiguration checkConfiguration) throws IOException { return new URL(checkConfiguration.getLocation()); diff --git a/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/config/meta/MetadataXmlReader.java b/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/config/meta/MetadataXmlReader.java index dac283f45..474a1bebc 100644 --- a/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/config/meta/MetadataXmlReader.java +++ b/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/config/meta/MetadataXmlReader.java @@ -220,10 +220,9 @@ private static List processProperties(Element moduleElem } // get explicit enumeration option values - for (Element optionEl : enumEl - .elements(XMLTags.PROPERTY_VALUE_OPTIONS_TAG)) { - property.getPropertyEnumeration().add(optionEl.attributeValue(XMLTags.VALUE_TAG)); - } + enumEl.elements(XMLTags.PROPERTY_VALUE_OPTIONS_TAG).stream() + .map(optionEl -> optionEl.attributeValue(XMLTags.VALUE_TAG)) + .forEach(property.getPropertyEnumeration()::add); } } return properties; diff --git a/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/transformer/ctransformerclasses/LeftCurlyTransformer.java b/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/transformer/ctransformerclasses/LeftCurlyTransformer.java index ffc91d57f..840cead09 100644 --- a/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/transformer/ctransformerclasses/LeftCurlyTransformer.java +++ b/net.sf.eclipsecs.core/src/net/sf/eclipsecs/core/transformer/ctransformerclasses/LeftCurlyTransformer.java @@ -20,6 +20,8 @@ package net.sf.eclipsecs.core.transformer.ctransformerclasses; +import java.util.Collections; +import java.util.List; import java.util.StringTokenizer; import net.sf.eclipsecs.core.transformer.AbstractCTransformationClass; @@ -40,36 +42,31 @@ public FormatterConfiguration transformRule() { } final StringTokenizer token = new StringTokenizer(tokens, ", "); - String option = getAttribute("option"); - if (option == null || "eol".equals(option)) { - option = "end_of_line"; - } else if ("nl".equals(option) || "nlow".equals(option)) { - option = "next_line"; - } + String option = switch (getAttribute("option")) { + case null -> "end_of_line"; + case "eol" -> "end_of_line"; + case "nl", "nlow" -> "next_line"; + case String s -> s; + }; while (token.hasMoreTokens()) { - String tok = token.nextToken(); - if ("CLASS_DEF".equals(tok)) { - userFormatterSetting("brace_position_for_anonymous_type_declaration", option); - userFormatterSetting("brace_position_for_enum_constant", option); - userFormatterSetting("brace_position_for_enum_declaration", option); - userFormatterSetting("brace_position_for_type_declaration", option); - userFormatterSetting("brace_position_for_annotation_type_declaration", option); - } else if ("INTERFACE_DEF".equals(tok)) { - userFormatterSetting("brace_position_for_annotation_type_declaration", option); - userFormatterSetting("brace_position_for_type_declaration", option); - } else if ("CTOR_DEF".equals(tok)) { - userFormatterSetting("brace_position_for_constructor_declaration", option); - } else if ("METHOD_DEF".equals(tok)) { - userFormatterSetting("brace_position_for_method_declaration", option); - } else if ("LITERAL_DO".equals(tok) || "LITERAL_ELSE".equals(tok) || "LITERAL_FOR".equals(tok) - || "LITERAL_IF".equals(tok) || "LITERAL_WHILE".equals(tok) - || "LITERAL_CATCH".equals(tok) || "LITERAL_FINALLY".equals(tok) - || "LITERAL_TRY".equals(tok)) { - userFormatterSetting("brace_position_for_block", option); - } else if ("LITERAL_SWITCH".equals(tok)) { - userFormatterSetting("brace_position_for_switch", option); - } + List settings = switch (token.nextToken()) { + case "CLASS_DEF" -> List.of("brace_position_for_anonymous_type_declaration", + "brace_position_for_enum_constant", + "brace_position_for_enum_declaration", + "brace_position_for_type_declaration", + "brace_position_for_annotation_type_declaration"); + case "INTERFACE_DEF" -> List.of( + "brace_position_for_annotation_type_declaration", + "brace_position_for_type_declaration"); + case "CTOR_DEF" -> List.of("brace_position_for_constructor_declaration"); + case "METHOD_DEF" -> List.of("brace_position_for_method_declaration"); + case "LITERAL_DO", "LITERAL_ELSE", "LITERAL_FOR", "LITERAL_IF", "LITERAL_WHILE", "LITERAL_CATCH", + "LITERAL_FINALLY", "LITERAL_TRY" -> List.of("brace_position_for_block"); + case "LITERAL_SWITCH" -> List.of("brace_position_for_switch"); + default -> Collections.emptyList(); + }; + settings.forEach(setting -> userFormatterSetting(setting, option)); } return getFormatterSetting(); } diff --git a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/preferences/CheckstylePreferencePage.java b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/preferences/CheckstylePreferencePage.java index 45439fe04..8cdc87f68 100644 --- a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/preferences/CheckstylePreferencePage.java +++ b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/preferences/CheckstylePreferencePage.java @@ -381,9 +381,7 @@ public void init(IWorkbench workbench) { @Override public boolean performOk() { - try { - // // Save the check configurations. // @@ -408,35 +406,27 @@ public boolean performOk() { // // Include rule names preference. // - boolean includeRuleNamesNow = mIncludeRuleNamesButton.getSelection(); - boolean includeRuleNamesOriginal = CheckstylePluginPrefs - .getBoolean(CheckstylePluginPrefs.PREF_INCLUDE_RULE_NAMES); - CheckstylePluginPrefs.setBoolean(CheckstylePluginPrefs.PREF_INCLUDE_RULE_NAMES, - includeRuleNamesNow); + boolean includeRuleNamesHasChanged = updateBooleanPreference(mIncludeRuleNamesButton, + CheckstylePluginPrefs.PREF_INCLUDE_RULE_NAMES); // // Include module id preference. // - boolean includeModuleIdNow = mIncludeModuleIdButton.getSelection(); - boolean includeModuleIdOriginal = CheckstylePluginPrefs - .getBoolean(CheckstylePluginPrefs.PREF_INCLUDE_MODULE_IDS); - CheckstylePluginPrefs.setBoolean(CheckstylePluginPrefs.PREF_INCLUDE_MODULE_IDS, - includeModuleIdNow); + boolean includeModuleIdHasChanged = updateBooleanPreference(mIncludeModuleIdButton, + CheckstylePluginPrefs.PREF_INCLUDE_MODULE_IDS); // // Limit markers preference // - boolean limitMarkersNow = mLimitCheckstyleMarkers.getSelection(); - boolean limitMarkersOriginal = CheckstylePluginPrefs - .getBoolean(CheckstylePluginPrefs.PREF_LIMIT_MARKERS_PER_RESOURCE); - CheckstylePluginPrefs.setBoolean(CheckstylePluginPrefs.PREF_LIMIT_MARKERS_PER_RESOURCE, - limitMarkersNow); + boolean limitMarkersHasChanged = updateBooleanPreference(mLimitCheckstyleMarkers, + CheckstylePluginPrefs.PREF_LIMIT_MARKERS_PER_RESOURCE); int markerLimitNow = Integer.parseInt(mTxtMarkerLimit.getText()); int markerLimitOriginal = CheckstylePluginPrefs .getInt(CheckstylePluginPrefs.PREF_MARKER_AMOUNT_LIMIT); CheckstylePluginPrefs.setInt(CheckstylePluginPrefs.PREF_MARKER_AMOUNT_LIMIT, markerLimitNow); + boolean markerLimitHasChanged = markerLimitNow != markerLimitOriginal; // // Include background build preference. @@ -446,47 +436,45 @@ public boolean performOk() { runInBackgroundNow); // See if all projects need rebuild - boolean needRebuildAllProjects = (includeRuleNamesNow != includeRuleNamesOriginal) - || (includeModuleIdNow != includeModuleIdOriginal) - || (limitMarkersNow != limitMarkersOriginal) - || (markerLimitNow != markerLimitOriginal) || mRebuildAll; + boolean needRebuildAllProjects = needRebuildAllProjects(includeRuleNamesHasChanged, + includeModuleIdHasChanged, limitMarkersHasChanged, markerLimitHasChanged); // Get projects that need rebuild considering the changes Collection projectsToBuild = mWorkingSet.getAffectedProjects(); - String promptRebuildPref = CheckstyleUIPluginPrefs - .getString(CheckstyleUIPluginPrefs.PREF_ASK_BEFORE_REBUILD); + if (needRebuildAllProjects || !projectsToBuild.isEmpty()) { + String promptRebuildPref = CheckstyleUIPluginPrefs + .getString(CheckstyleUIPluginPrefs.PREF_ASK_BEFORE_REBUILD); - boolean rebuild = MessageDialogWithToggle.ALWAYS.equals(promptRebuildPref) - && (needRebuildAllProjects || !projectsToBuild.isEmpty()); + boolean rebuild = MessageDialogWithToggle.ALWAYS.equals(promptRebuildPref); - // - // Prompt for rebuild - // - if (MessageDialogWithToggle.PROMPT.equals(promptRebuildPref) - && (needRebuildAllProjects || !projectsToBuild.isEmpty())) { + // + // Prompt for rebuild + // + if (MessageDialogWithToggle.PROMPT.equals(promptRebuildPref)) { - MessageDialogWithToggle dialog = MessageDialogWithToggle.openYesNoQuestion(getShell(), - Messages.CheckstylePreferencePage_titleRebuild, - Messages.CheckstylePreferencePage_msgRebuild, - Messages.CheckstylePreferencePage_nagRebuild, false, - CheckstyleUIPlugin.getDefault().getPreferenceStore(), - CheckstyleUIPluginPrefs.PREF_ASK_BEFORE_REBUILD); + MessageDialogWithToggle dialog = MessageDialogWithToggle.openYesNoQuestion(getShell(), + Messages.CheckstylePreferencePage_titleRebuild, + Messages.CheckstylePreferencePage_msgRebuild, + Messages.CheckstylePreferencePage_nagRebuild, false, + CheckstyleUIPlugin.getDefault().getPreferenceStore(), + CheckstyleUIPluginPrefs.PREF_ASK_BEFORE_REBUILD); - rebuild = dialog.getReturnCode() == IDialogConstants.YES_ID; - } + rebuild = dialog.getReturnCode() == IDialogConstants.YES_ID; + } - if (rebuild) { - try { - if (needRebuildAllProjects) { - CheckstyleBuilder.buildAllProjects(); - } else { - CheckstyleBuilder.buildProjects(projectsToBuild); + if (rebuild) { + try { + if (needRebuildAllProjects) { + CheckstyleBuilder.buildAllProjects(); + } else { + CheckstyleBuilder.buildProjects(projectsToBuild); + } + + } catch (CheckstylePluginException ex) { + CheckstyleUIPlugin.errorDialog(getShell(), + NLS.bind(Messages.errorFailedRebuild, ex.getMessage()), ex, true); } - - } catch (CheckstylePluginException ex) { - CheckstyleUIPlugin.errorDialog(getShell(), - NLS.bind(Messages.errorFailedRebuild, ex.getMessage()), ex, true); } } } catch (CheckstylePluginException | BackingStoreException ex) { @@ -497,6 +485,21 @@ public boolean performOk() { return true; } + private static final boolean updateBooleanPreference(Button button, String preference) + throws BackingStoreException { + boolean now = button.getSelection(); + boolean original = CheckstylePluginPrefs.getBoolean(preference); + CheckstylePluginPrefs.setBoolean(preference, now); + return now != original; + } + + private boolean needRebuildAllProjects(boolean includeRuleNamesHasChanged, + boolean includeModuleIdHasChanged, boolean limitMarkersHasChanged, + boolean markerLimitHasChanged) { + return includeRuleNamesHasChanged || includeModuleIdHasChanged || limitMarkersHasChanged + || markerLimitHasChanged || mRebuildAll; + } + /** * Controller for this page. * diff --git a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/CheckstylePropertyApplyOperation.java b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/CheckstylePropertyApplyOperation.java index f53172f7a..32ff27ad1 100644 --- a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/CheckstylePropertyApplyOperation.java +++ b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/CheckstylePropertyApplyOperation.java @@ -54,55 +54,52 @@ public static boolean apply(Shell shell, ProjectConfigurationWorkingCopy project projectConfig.store(); } - boolean needRebuild = projectConfig.isRebuildNeeded(); - // check if checkstyle nature has to be configured/deconfigured if (checkstyleEnabled != checkstyleInitiallyEnabled) { - ConfigureDeconfigureNatureJob configOperation = new ConfigureDeconfigureNatureJob(project, CheckstyleNature.NATURE_ID); configOperation.setRule(ResourcesPlugin.getWorkspace().getRoot()); configOperation.schedule(); - - needRebuild = needRebuild || !checkstyleInitiallyEnabled; - } - - if (checkstyleEnabled && projectConfig.isSyncFormatter()) { - - TransformCheckstyleRulesJob transFormJob = new TransformCheckstyleRulesJob(project); - transFormJob.schedule(); } - // if a rebuild is advised, check/prompt if the rebuild should - // really be done. - if (checkstyleEnabled && needRebuild) { - - String promptRebuildPref = CheckstyleUIPluginPrefs - .getString(CheckstyleUIPluginPrefs.PREF_ASK_BEFORE_REBUILD); - - boolean doRebuild = needRebuild && MessageDialogWithToggle.ALWAYS.equals(promptRebuildPref); + if (checkstyleEnabled) { + boolean needRebuild = !checkstyleInitiallyEnabled || projectConfig.isRebuildNeeded(); - // - // Prompt for rebuild - // - if (needRebuild && MessageDialogWithToggle.PROMPT.equals(promptRebuildPref)) { - MessageDialogWithToggle dialog = MessageDialogWithToggle.openYesNoQuestion(shell, - Messages.CheckstylePropertyPage_titleRebuild, - Messages.CheckstylePropertyPage_msgRebuild, - Messages.CheckstylePropertyPage_nagRebuild, false, - CheckstyleUIPlugin.getDefault().getPreferenceStore(), - CheckstyleUIPluginPrefs.PREF_ASK_BEFORE_REBUILD); - - doRebuild = dialog.getReturnCode() == IDialogConstants.YES_ID; + if (projectConfig.isSyncFormatter()) { + TransformCheckstyleRulesJob transFormJob = new TransformCheckstyleRulesJob(project); + transFormJob.schedule(); } - // check if a rebuild is necessary - if (checkstyleEnabled && doRebuild) { - - BuildProjectJob rebuildOperation = new BuildProjectJob(project, - IncrementalProjectBuilder.FULL_BUILD); - rebuildOperation.setRule(ResourcesPlugin.getWorkspace().getRoot()); - rebuildOperation.schedule(); + // if a rebuild is advised, check/prompt if the rebuild should + // really be done. + if (needRebuild) { + String promptRebuildPref = CheckstyleUIPluginPrefs + .getString(CheckstyleUIPluginPrefs.PREF_ASK_BEFORE_REBUILD); + + boolean doRebuild = MessageDialogWithToggle.ALWAYS.equals(promptRebuildPref); + + // + // Prompt for rebuild + // + if (MessageDialogWithToggle.PROMPT.equals(promptRebuildPref)) { + MessageDialogWithToggle dialog = MessageDialogWithToggle.openYesNoQuestion(shell, + Messages.CheckstylePropertyPage_titleRebuild, + Messages.CheckstylePropertyPage_msgRebuild, + Messages.CheckstylePropertyPage_nagRebuild, false, + CheckstyleUIPlugin.getDefault().getPreferenceStore(), + CheckstyleUIPluginPrefs.PREF_ASK_BEFORE_REBUILD); + + doRebuild = dialog.getReturnCode() == IDialogConstants.YES_ID; + } + + // check if a rebuild is necessary + if (doRebuild) { + + BuildProjectJob rebuildOperation = new BuildProjectJob(project, + IncrementalProjectBuilder.FULL_BUILD); + rebuildOperation.setRule(ResourcesPlugin.getWorkspace().getRoot()); + rebuildOperation.schedule(); + } } } } catch (CheckstylePluginException ex) { diff --git a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/filter/CheckFileOnOpenPartListener.java b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/filter/CheckFileOnOpenPartListener.java index 7c80931d6..5b1c77df2 100644 --- a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/filter/CheckFileOnOpenPartListener.java +++ b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/filter/CheckFileOnOpenPartListener.java @@ -153,9 +153,6 @@ private IFile getEditorFile(IWorkbenchPartReference partRef) { * @return true if the file is affected, false otherwise */ private boolean isFileAffected(IFile file) { - - boolean affected = false; - IProject project = file.getProject(); try { @@ -169,24 +166,22 @@ private boolean isFileAffected(IFile file) { boolean filtered = false; List filters = config.getFilters(); for (IFilter filter : filters) { - - if (filter instanceof UnOpenedFilesFilter && ((UnOpenedFilesFilter) filter).isEnabled()) { - unOpenedFilesFilterActive = true; - } - - // check if the file would be filtered out - if (filter.isEnabled() && !(filter instanceof UnOpenedFilesFilter)) { - filtered = filtered || !filter.accept(file); + if (filter.isEnabled()) { + if (filter instanceof UnOpenedFilesFilter) { + unOpenedFilesFilterActive = true; + } else { + filtered = filtered || !filter.accept(file); + } } } - affected = unOpenedFilesFilterActive && !filtered; + return unOpenedFilesFilterActive && !filtered; } } catch (CoreException | CheckstylePluginException ex) { CheckstyleLog.log(ex); } - return affected; + return false; } private class PartsOpenedJob extends AbstractCheckJob { diff --git a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/filter/PackageFilterEditor.java b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/filter/PackageFilterEditor.java index 143d43b39..e9262067f 100644 --- a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/filter/PackageFilterEditor.java +++ b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/properties/filter/PackageFilterEditor.java @@ -215,38 +215,28 @@ public Object[] getChildren(Object parentElement) { private List handleProject(IProject project) { List children = new ArrayList<>(); - if (project.isAccessible()) { - - try { - - IJavaProject javaProject = JavaCore.create(project); - if (javaProject.exists()) { - + IJavaProject javaProject = JavaCore.create(project); + if (javaProject.exists()) { + try { IPackageFragmentRoot[] packageRoots = javaProject.getAllPackageFragmentRoots(); - - for (int i = 0, size = packageRoots.length; i < size; i++) { - + for (IPackageFragmentRoot packageRoot : packageRoots) { // special case - project itself is package root - if (project.equals(packageRoots[i].getResource())) { - - IResource[] members = project.members(); - for (int j = 0; j < members.length; j++) { - if (members[j].getType() != IResource.FILE) { - children.add(members[j]); - } - } - } else if (!packageRoots[i].isArchive() - && packageRoots[i].getParent().equals(javaProject)) { - children.add(packageRoots[i].getResource()); + if (project.equals(packageRoot.getResource())) { + Arrays.stream(project.members()) + .filter(member -> member.getType() != IResource.FILE) + .forEach(children::add); + } else if (!packageRoot.isArchive() && packageRoot.getParent().equals(javaProject)) { + children.add(packageRoot.getResource()); } } + + } catch (JavaModelException ex) { + CheckstyleLog.log(ex); + } catch (CoreException ex) { + // this should never happen because we call + // #isAccessible before invoking #members } - } catch (JavaModelException ex) { - CheckstyleLog.log(ex); - } catch (CoreException ex) { - // this should never happen because we call - // #isAccessible before invoking #members } } return children; diff --git a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/stats/views/internal/CheckstyleMarkerFilter.java b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/stats/views/internal/CheckstyleMarkerFilter.java index 87264f7b9..f477d1c85 100644 --- a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/stats/views/internal/CheckstyleMarkerFilter.java +++ b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/stats/views/internal/CheckstyleMarkerFilter.java @@ -22,13 +22,12 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; - +import java.util.stream.Stream; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -272,50 +271,29 @@ public static CheckstyleMarkerFilter resetState(IResource[] focusResources) { * @throws CoreException * if the resource does not exist or the project is not open */ - private List findCheckstyleMarkers(IResource[] resources, int depth, IProgressMonitor mon) - throws CoreException { + private List findCheckstyleMarkers(IResource[] resources, int depth, + IProgressMonitor mon) throws CoreException { if (resources == null) { return Collections.emptyList(); } - - List resultList = new ArrayList<>(resources.length * 2); - - for (int i = 0, size = resources.length; i < size; i++) { - if (resources[i].isAccessible()) { - Collection markers = Arrays - .asList(resources[i].findMarkers(CheckstyleMarker.MARKER_ID, true, depth)); - - resultList.addAll(markers); + List markers = new ArrayList<>(); + for (IResource resource : resources) { + if (resource.isAccessible()) { + markers.addAll(Arrays.asList(resource.findMarkers(CheckstyleMarker.MARKER_ID, true, depth))); } } - if (!enabled) { - return resultList; + return markers; } - + Stream filteredMarkers = markers.stream(); if (selectBySeverity) { - // further filter the markers by severity - int size = resultList.size(); - for (int i = size - 1; i >= 0; i--) { - IMarker marker = resultList.get(i); - if (!doSelectBySeverity(marker)) { - resultList.remove(i); - } - } + filteredMarkers = filteredMarkers.filter(this::doSelectBySeverity); } - if (filterByRegex) { - // further filter the markers by regular expressions - int size = resultList.size(); - for (int i = size - 1; i >= 0; i--) { - IMarker marker = resultList.get(i); - if (!selectByRegex(marker)) { - resultList.remove(i); - } - } + filteredMarkers = filteredMarkers.filter(this::selectByRegex); } - return resultList; + return filteredMarkers.toList(); } /** diff --git a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/stats/views/internal/CheckstyleMarkerFilterDialog.java b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/stats/views/internal/CheckstyleMarkerFilterDialog.java index f1609e7e3..037053b5e 100644 --- a/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/stats/views/internal/CheckstyleMarkerFilterDialog.java +++ b/net.sf.eclipsecs.ui/src/net/sf/eclipsecs/ui/stats/views/internal/CheckstyleMarkerFilterDialog.java @@ -154,7 +154,8 @@ protected Control createDialogArea(Composite parent) { mChkFilterEnabled = new Button(dialog, SWT.CHECK); mChkFilterEnabled.setText(Messages.CheckstyleMarkerFilterDialog_btnEnabled); - mChkFilterEnabled.addSelectionListener(mController); + mChkFilterEnabled.addSelectionListener( + SelectionListener.widgetSelectedAdapter(event -> updateControlState())); Group onResourceGroup = new Group(dialog, SWT.NULL); onResourceGroup.setText(Messages.CheckstyleMarkerFilterDialog_groupResourceSetting); @@ -215,7 +216,8 @@ protected Control createDialogArea(Composite parent) { mChkSeverityEnabled = new Button(severityGroup, SWT.CHECK); mChkSeverityEnabled.setText(Messages.CheckstyleMarkerFilterDialog_btnMarkerSeverity); mChkSeverityEnabled.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - mChkSeverityEnabled.addSelectionListener(mController); + mChkSeverityEnabled.addSelectionListener( + SelectionListener.widgetSelectedAdapter(event -> updateControlState())); mChkSeverityError = new Button(severityGroup, SWT.CHECK); mChkSeverityError.setText(Messages.CheckstyleMarkerFilterDialog_btnSeverityError); @@ -318,7 +320,7 @@ private void updateUIFromFilter() { mRegularExpressions = mFilter.filterRegex(); initRegexLabel(); - mController.updateControlState(); + updateControlState(); } /** @@ -388,6 +390,35 @@ private void initRegexLabel() { mLblRegexFilter.setText(buf.toString()); } + /** + * updates the enablement state of the controls. + */ + private void updateControlState() { + + mFilterComposite.setEnabled(mChkFilterEnabled.getSelection()); + mRadioOnAnyResource.setEnabled(mChkFilterEnabled.getSelection()); + mRadioAnyResourceInSameProject.setEnabled(mChkFilterEnabled.getSelection()); + mRadioSelectedResource.setEnabled(mChkFilterEnabled.getSelection()); + mRadioSelectedResourceAndChildren.setEnabled(mChkFilterEnabled.getSelection()); + mRadioSelectedWorkingSet.setEnabled(mChkFilterEnabled.getSelection()); + mLblSelectedWorkingSet.setEnabled(mChkFilterEnabled.getSelection()); + mBtnWorkingSet + .setEnabled(mChkFilterEnabled.getSelection() && mChkFilterEnabled.getSelection()); + mChkSeverityEnabled.setEnabled(mChkFilterEnabled.getSelection()); + + mChkSeverityError + .setEnabled(mChkFilterEnabled.getSelection() && mChkSeverityEnabled.getSelection()); + mChkSeverityWarning + .setEnabled(mChkFilterEnabled.getSelection() && mChkSeverityEnabled.getSelection()); + mChkSeverityInfo + .setEnabled(mChkFilterEnabled.getSelection() && mChkSeverityEnabled.getSelection()); + + mGrpRegex.setEnabled(mChkFilterEnabled.getSelection()); + mChkSelectByRegex.setEnabled(mChkFilterEnabled.getSelection()); + mLblRegexFilter.setEnabled(mChkFilterEnabled.getSelection()); + mBtnEditRegex.setEnabled(mChkFilterEnabled.getSelection()); + } + /** * The controller for this dialog. * @@ -396,9 +427,7 @@ private class PageController implements SelectionListener { @Override public void widgetSelected(SelectionEvent e) { - if (e.widget == mChkFilterEnabled || e.widget == mChkSeverityEnabled) { - updateControlState(); - } else if (mBtnDefault == e.widget) { + if (mBtnDefault == e.widget) { mFilter = CheckstyleMarkerFilter.resetState(mFilter.focusResources()); updateUIFromFilter(); } else if (mBtnWorkingSet == e.widget) { @@ -431,35 +460,6 @@ public void widgetSelected(SelectionEvent e) { public void widgetDefaultSelected(SelectionEvent e) { // NOOP } - - /** - * updates the enablement state of the controls. - */ - private void updateControlState() { - - mFilterComposite.setEnabled(mChkFilterEnabled.getSelection()); - mRadioOnAnyResource.setEnabled(mChkFilterEnabled.getSelection()); - mRadioAnyResourceInSameProject.setEnabled(mChkFilterEnabled.getSelection()); - mRadioSelectedResource.setEnabled(mChkFilterEnabled.getSelection()); - mRadioSelectedResourceAndChildren.setEnabled(mChkFilterEnabled.getSelection()); - mRadioSelectedWorkingSet.setEnabled(mChkFilterEnabled.getSelection()); - mLblSelectedWorkingSet.setEnabled(mChkFilterEnabled.getSelection()); - mBtnWorkingSet - .setEnabled(mChkFilterEnabled.getSelection() && mChkFilterEnabled.getSelection()); - mChkSeverityEnabled.setEnabled(mChkFilterEnabled.getSelection()); - - mChkSeverityError - .setEnabled(mChkFilterEnabled.getSelection() && mChkSeverityEnabled.getSelection()); - mChkSeverityWarning - .setEnabled(mChkFilterEnabled.getSelection() && mChkSeverityEnabled.getSelection()); - mChkSeverityInfo - .setEnabled(mChkFilterEnabled.getSelection() && mChkSeverityEnabled.getSelection()); - - mGrpRegex.setEnabled(mChkFilterEnabled.getSelection()); - mChkSelectByRegex.setEnabled(mChkFilterEnabled.getSelection()); - mLblRegexFilter.setEnabled(mChkFilterEnabled.getSelection()); - mBtnEditRegex.setEnabled(mChkFilterEnabled.getSelection()); - } } /**