Skip to content
This repository was archived by the owner on Nov 4, 2020. It is now read-only.

Commit 2df16f4

Browse files
committed
Merge pull request #22 from Lothar-Tradescape/timeout_preferences
Implemented preferences to set the UI thread script timeout.
2 parents 1a17089 + ab0951f commit 2df16f4

File tree

7 files changed

+126
-1
lines changed

7 files changed

+126
-1
lines changed

plugin.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,20 @@
6565
<startup
6666
class="org.eclipsescript.core.Autostart">
6767
</startup>
68+
</extension>
69+
<extension
70+
point="org.eclipse.ui.preferencePages">
71+
<page
72+
class="org.eclipsescript.preferences.EclipseScriptPreferencePage"
73+
id="org.eclipsescript.preferences.EclipseScriptPreferencePage"
74+
name="EclipseScript Preferences">
75+
</page>
76+
</extension>
77+
<extension
78+
point="org.eclipse.core.runtime.preferences">
79+
<initializer
80+
class="org.eclipsescript.preferences.PreferenceInitializer">
81+
</initializer>
6882
</extension>
6983

7084
</plugin>

src/org/eclipsescript/javascript/CustomContextFactory.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
import java.security.AccessController;
44
import java.security.PrivilegedAction;
55

6+
import org.eclipse.jface.preference.IPreferenceStore;
67
import org.eclipse.osgi.util.NLS;
78
import org.eclipse.ui.PlatformUI;
9+
import org.eclipsescript.core.Activator;
810
import org.eclipsescript.messages.Messages;
11+
import org.eclipsescript.preferences.PreferenceConstants;
912
import org.eclipsescript.rhino.javascript.Callable;
1013
import org.eclipsescript.rhino.javascript.Context;
1114
import org.eclipsescript.rhino.javascript.ContextFactory;
@@ -18,10 +21,22 @@ static class CustomContext extends Context {
1821
public JavascriptRuntime jsRuntime;
1922

2023
long startTime;
24+
int timeout;
2125
volatile boolean useTimeout = true;
2226

2327
public CustomContext(ContextFactory factory) {
2428
super(factory);
29+
try {
30+
IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
31+
timeout = preferenceStore.getInt(PreferenceConstants.P_TIMEOUT);
32+
} catch (Throwable t) {
33+
System.err.println(t.getMessage());
34+
}
35+
36+
if (timeout == 0) {
37+
timeout = PreferenceConstants.P_TIMEOUT_DEFAULT;
38+
}
39+
// System.out.println("timeout=" + timeout + " @" + this);
2540
}
2641
}
2742

@@ -75,7 +90,7 @@ protected void observeInstructionCount(Context cx, int instructionCount) {
7590
CustomContext mcx = (CustomContext) cx;
7691
if (!mcx.useTimeout)
7792
return;
78-
final int MAX_SECONDS = 10;
93+
final int MAX_SECONDS = mcx.timeout;
7994
long currentTime = System.currentTimeMillis();
8095
if (currentTime - mcx.startTime > MAX_SECONDS * 1000) {
8196
mcx.jsRuntime.abortRunningScript(NLS.bind(Messages.scriptTimeout, MAX_SECONDS));
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.eclipsescript.preferences;
2+
3+
import org.eclipse.jface.preference.FieldEditorPreferencePage;
4+
import org.eclipse.jface.preference.IntegerFieldEditor;
5+
import org.eclipse.ui.IWorkbench;
6+
import org.eclipse.ui.IWorkbenchPreferencePage;
7+
import org.eclipsescript.core.Activator;
8+
9+
/**
10+
* This class represents a preference page that is contributed to the Preferences dialog. By subclassing
11+
* <samp>FieldEditorPreferencePage</samp>, we can use the field support built into JFace that allows us to create a page
12+
* that is small and knows how to save, restore and apply itself.
13+
* <p>
14+
* This page is used to modify preferences only. They are stored in the preference store that belongs to the main
15+
* plug-in class. That way, preferences can be accessed directly via the preference store.
16+
*/
17+
18+
public class EclipseScriptPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
19+
20+
public EclipseScriptPreferencePage() {
21+
super(GRID);
22+
setPreferenceStore(Activator.getDefault().getPreferenceStore());
23+
setDescription(Messages.EclipseScriptPreferencePage_0);
24+
}
25+
26+
/**
27+
* Creates the field editors. Field editors are abstractions of the common GUI blocks needed to manipulate various
28+
* types of preferences. Each field editor knows how to save and restore itself.
29+
*/
30+
@Override
31+
public void createFieldEditors() {
32+
addField(new IntegerFieldEditor(PreferenceConstants.P_TIMEOUT, Messages.EclipseScriptPreferencePage_1,
33+
getFieldEditorParent()));
34+
}
35+
36+
/*
37+
* (non-Javadoc)
38+
*
39+
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
40+
*/
41+
@Override
42+
public void init(IWorkbench workbench) {
43+
// nothing to do here
44+
}
45+
46+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.eclipsescript.preferences;
2+
3+
import org.eclipse.osgi.util.NLS;
4+
5+
public class Messages extends NLS {
6+
private static final String BUNDLE_NAME = "org.eclipsescript.preferences.messages"; //$NON-NLS-1$
7+
public static String EclipseScriptPreferencePage_0;
8+
public static String EclipseScriptPreferencePage_1;
9+
static {
10+
// initialize resource bundle
11+
NLS.initializeMessages(BUNDLE_NAME, Messages.class);
12+
}
13+
14+
private Messages() {
15+
}
16+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.eclipsescript.preferences;
2+
3+
/**
4+
* Constant definitions for plug-in preferences
5+
*/
6+
public class PreferenceConstants {
7+
public static final String P_TIMEOUT = "timeout"; //$NON-NLS-1$
8+
public static final int P_TIMEOUT_DEFAULT = 10;
9+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.eclipsescript.preferences;
2+
3+
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
4+
import org.eclipse.jface.preference.IPreferenceStore;
5+
import org.eclipsescript.core.Activator;
6+
7+
/**
8+
* Class used to initialize default preference values.
9+
*/
10+
public class PreferenceInitializer extends AbstractPreferenceInitializer {
11+
12+
/*
13+
* (non-Javadoc)
14+
*
15+
* @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
16+
*/
17+
@Override
18+
public void initializeDefaultPreferences() {
19+
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
20+
store.setDefault(PreferenceConstants.P_TIMEOUT, PreferenceConstants.P_TIMEOUT_DEFAULT);
21+
}
22+
23+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
EclipseScriptPreferencePage_0=EclipseScript
2+
EclipseScriptPreferencePage_1=Script &timeout (seconds):

0 commit comments

Comments
 (0)