Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1277 wait scripts before compile #1254

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
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
4 changes: 4 additions & 0 deletions src/org/omegat/core/CoreEvents.java
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,12 @@ public static void registerEditorEventListener(final IEditorEventListener listen
public static void unregisterEditorEventListener(final IEditorEventListener listener) {
EDITOR_EVENT_LISTENERS.remove(listener);
}

public static boolean isInProjectEventLoop = false;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This defines public static


/** Fire event. */
public static void fireProjectChange(final IProjectEventListener.PROJECT_CHANGE_TYPE eventType) {
isInProjectEventLoop = true; // done by the calling thread, not by UI thread (inside invokeLater) !
SwingUtilities.invokeLater(() -> {
Log.logInfoRB("LOG_INFO_EVENT_PROJECT_CHANGE", eventType);
for (IProjectEventListener listener : PROJECT_EVENT_LISTENERS) {
Expand All @@ -123,6 +126,7 @@ public static void fireProjectChange(final IProjectEventListener.PROJECT_CHANGE_
log("ERROR_EVENT_PROJECT_CHANGE", t);
}
}
isInProjectEventLoop = false;
});
}

Expand Down
6 changes: 6 additions & 0 deletions src/org/omegat/core/data/RealProject.java
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,12 @@ public void compileProjectAndCommit(String sourcePattern, boolean doPostProcessi
// them to
// the repository (BUGS#1176)
CoreEvents.fireProjectChange(IProjectEventListener.PROJECT_CHANGE_TYPE.COMPILE);
while (CoreEvents.isInProjectEventLoop) {
Thread.yield();
}
while (org.omegat.gui.scripting.ScriptingWindow.window.inEventsLoop > 0) {
Thread.yield();
}

if (remoteRepositoryProvider != null && config.getTargetDir().isUnderRoot() && commitTargetFiles
&& isOnlineMode) {
Expand Down
15 changes: 9 additions & 6 deletions src/org/omegat/gui/scripting/ScriptingWindow.java
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public class ScriptingWindow {

private static final Logger LOGGER = Logger.getLogger(ScriptingWindow.class.getName());

static ScriptingWindow window;
static public ScriptingWindow window;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here declares static public


public static void loadPlugins() {
CoreEvents.registerApplicationEventListener(new IApplicationEventListener() {
Expand Down Expand Up @@ -585,6 +585,7 @@ protected void done() {
} catch (ExecutionException e) {
logResult(OStrings.getString("SCW_SCRIPT_ERROR"), e);
}
inEventsLoop--;
}
}

Expand All @@ -599,6 +600,8 @@ public void executeScript(ScriptItem scriptItem, Map<String, Object> bindings) {
public void executeScript(ScriptItem scriptItem, Map<String, Object> bindings, boolean cancelQueue) {
executeScripts(Arrays.asList(scriptItem), bindings, cancelQueue);
}

public int inEventsLoop = 0;

/**
* Execute scripts sequentially to make sure they don't interrupt each
Expand All @@ -621,12 +624,12 @@ public void executeScripts(final List<ScriptItem> scriptItems, final Map<String,
try {
String scriptString = scriptItem.getText();
queuedWorkers.add(createScriptWorker(scriptString, scriptItem, bindings));
inEventsLoop++;
} catch (IOException e) {
// TODO: Do we really want to handle the exception here, like
// this?
// This method can be called in instances when the Scripting
// Window is not visible, so it might make more sense to let the
// caller handle the exception.
// Catch loading exception for each script individually:
// failure in loading one script should not prevent from loading the other ones.
// No matter whenever we are running in scripting window or not,
// the error is sent to the log file, not to the scripting window.
logResult(StringUtil.format(OStrings.getString("SCW_SCRIPT_LOAD_ERROR"),
scriptItem.getFileName()), e);
}
Expand Down
Loading