overlayKeys= new ArrayList<>();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderDescriptor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderDescriptor.java
index 1031717f02e..a99993bdbf8 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderDescriptor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderDescriptor.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2025 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -16,7 +16,10 @@
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.PreferenceConstants;
import org.eclipse.jdt.ui.text.folding.IJavaFoldingPreferenceBlock;
import org.eclipse.jdt.ui.text.folding.IJavaFoldingStructureProvider;
@@ -116,4 +119,8 @@ public String getId() {
public String getName() {
return fName;
}
+
+ public boolean hasProjectSpecificOptions(IScopeContext context) {
+ return context.getNode(JavaUI.ID_PLUGIN).getBoolean(PreferenceConstants.EDITOR_FOLDING_PROJECT_SPECIFIC_SETTINGS_ENABLED, false);
+ }
}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderRegistry.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderRegistry.java
index dad8824488c..2e14797a28c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderRegistry.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderRegistry.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2025 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -24,6 +24,7 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.jface.preference.IPreferenceStore;
@@ -87,6 +88,17 @@ public JavaFoldingStructureProviderDescriptor getFoldingProviderDescriptor(Strin
* @return the current provider according to the preferences
*/
public IJavaFoldingStructureProvider getCurrentFoldingProvider() {
+ JavaFoldingStructureProviderDescriptor desc= getCurrentFoldingStructureProviderDescriptor();
+
+ try {
+ return desc.createProvider();
+ } catch (CoreException e) {
+ JavaPlugin.log(e);
+ return null;
+ }
+ }
+
+ private JavaFoldingStructureProviderDescriptor getCurrentFoldingStructureProviderDescriptor() {
IPreferenceStore preferenceStore= JavaPlugin.getDefault().getPreferenceStore();
String currentProviderId= preferenceStore.getString(PreferenceConstants.EDITOR_FOLDING_PROVIDER);
JavaFoldingStructureProviderDescriptor desc= getFoldingProviderDescriptor(currentProviderId);
@@ -103,13 +115,7 @@ public IJavaFoldingStructureProvider getCurrentFoldingProvider() {
preferenceStore.setToDefault(PreferenceConstants.EDITOR_FOLDING_PROVIDER);
}
-
- try {
- return desc.createProvider();
- } catch (CoreException e) {
- JavaPlugin.log(e);
- return null;
- }
+ return desc;
}
/**
@@ -142,4 +148,11 @@ public void reloadExtensions() {
}
}
+ public synchronized boolean hasProjectSpecificOptions(IScopeContext context) {
+ synchronized(this) {
+ ensureRegistered();
+ }
+
+ return getCurrentFoldingStructureProviderDescriptor().hasProjectSpecificOptions(context);
+ }
}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
index 0cc78f9cd48..cce10760f6b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
@@ -3402,6 +3402,16 @@ private PreferenceConstants() {
*/
public static final String CODEASSIST_CATEGORY_ORDER= "content_assist_category_order"; //$NON-NLS-1$
+ /**
+ * A named preference that controls whether project specific settings are enabled for folding.
+ *
+ * Value is of type Boolean
.
+ *
+ *
+ * @since 3.34
+ */
+ public static final String EDITOR_FOLDING_PROJECT_SPECIFIC_SETTINGS_ENABLED= "editor_folding_project_settings_enabled"; //$NON-NLS-1$
+
/**
* A named preference that controls whether folding is enabled in the Java editor.
*
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java
index e212f37c39a..b1c23ad8d26 100755
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2024 IBM Corporation and others.
+ * Copyright (c) 2006, 2025 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -72,10 +72,10 @@
import org.eclipse.jdt.ui.PreferenceConstants;
-import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
+import org.eclipse.jdt.internal.ui.preferences.FoldingPreferencePage;
import org.eclipse.jdt.internal.ui.text.DocumentCharacterIterator;
/**
@@ -900,7 +900,7 @@ private IJavaElement getInputElement() {
}
private void initializePreferences() {
- IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
+ IPreferenceStore store = FoldingPreferencePage.getFoldingPreferenceStore(fEditor);
fCollapseInnerTypes= store.getBoolean(PreferenceConstants.EDITOR_FOLDING_INNERTYPES);
fCollapseImportContainer= store.getBoolean(PreferenceConstants.EDITOR_FOLDING_IMPORTS);
fCollapseJavadoc= store.getBoolean(PreferenceConstants.EDITOR_FOLDING_JAVADOC);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/IScopedJavaFoldingPreferenceBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/IScopedJavaFoldingPreferenceBlock.java
new file mode 100644
index 00000000000..8527205dd6d
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/IScopedJavaFoldingPreferenceBlock.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2025 Daniel Schmid and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Daniel Schmid - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.ui.text.folding;
+
+import org.eclipse.core.runtime.preferences.IScopeContext;
+
+/**
+ * Extends {@link IJavaFoldingPreferenceBlock} for supporting preferences in a given scope (e.g. projects).
+ * @since 3.34
+ */
+public interface IScopedJavaFoldingPreferenceBlock extends IJavaFoldingPreferenceBlock {
+ /**
+ * Marks this preference block to be configured in an {@link IScopeContext}.
+ * @param context The scope context the preferences apply to.
+ */
+ default void setScopeContext(IScopeContext context) {
+
+ }
+}