Warning: session_start(): open(/var/lib/php/sessions/sess_313bhlkdjn2ocspuniq5aq4v1b, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
sclass JMiniJavaIDE is Swingable {
settable SimpleLiveValue lvScript = stringLiveValue();
S sectionTitle = "Mini Java IDE";
sS helpText = "Javaaa";
transient CompileResult compileResult;
transient RSyntaxTextAreaWithSearch taScript;
transient new Q compileQ;
transient JLabel lblCompileResult;
transient JButton btnRun;
transient JavaCompletionProvider completionProvider;
transient AutoCompletion autoComplete;
class JavaCompletionProvider extends DefaultCompletionProvider {
@Override
public L getCompletionByInputText(S inputText) {
print("getCompletionByInputText: " + quote(inputText));
ret ll(
/*new BasicCompletion(this, inputText + "YesYes"),
new BasicCompletion(this, inputText + "NoNo")*/);
}
@Override
public L getCompletionsImpl(JTextComponent comp) {
ret getCompletionByInputText(getAlreadyEnteredText(comp));
}
}
visual {
taScript = liveValueRSyntaxTextArea_bothWays(lvScript);
awtCalcEvery(taScript.textArea(), 5.0, -> compileQ.add(r compile));
swing {
completionProvider = new JavaCompletionProvider;
completionProvider.setAutoActivationRules(true, " ");
autoComplete = new AutoCompletion(completionProvider);
autoComplete.setAutoActivationEnabled(true);
autoComplete.install(taScript.textArea);
}
ret jCenteredSection(sectionTitle,
centerAndSouthWithMargin(
taScript.visualize(),
centerAndEastWithMargin(
lblCompileResult = jlabel(),
jline(
btnRun = jbutton("Run" := rThread runButtonAction),
jPopDownButton_noText(
"Show Scripting Help", rThread { showTextWordWrapped("Gazelle 'Left arrow script' Help", helpText) },
)
))));
}
bool visible() { ret isShowing(lblCompileResult); }
void compile {
var script = lvScript!;
var result = compileResult;
if (result == null || !eq(result.script, script)) {
try {
result = new CompileResult;
result.script = script;
result.className = "UserCode_" + now();
result.adaptedScript = "class " + result.className + "{"
+ evalJava_prep(result.script)
+ "}";
result.java = result.adaptedScript;
//result.adaptedScript = "mainClassName " + result.className + "\n\n" + result.script;
//result.java = transpileRaw(result.adaptedScript);
result.compiledObject = veryQuickJava_finish_specialMainClass(result.className, result.java);
print(compiledObject := result.compiledObject);
} catch print e {
result.compileError = e;
}
compileResult = result;
setText(lblCompileResult, compileResult);
updateRunButtonState();
}
}
void updateRunButtonState() {
setEnabled(btnRun, runButtonShouldBeEnabled());
}
swappable bool runButtonShouldBeEnabled() {
ret compileResult != null && compileResult.runnable();
}
CompileResult freshCompileResult() {
runInQAndWait(compileQ, r compile);
ret compileResult;
}
O compiledObject() {
ret freshCompileResult().compiledObject;
}
swappable void runButtonAction {
runScript();
}
void runScript {
//showText_fast_noWrap("Script Error", renderStackTrace(e));
var result = freshCompileResult();
if (result.compiledObject != null) {
setStatus("Running");
result.result = okOrError(-> callCalc(result.compiledObject));
setStatus(result.result.isOK()
? shorten(str(result.result))
: exceptionToStringShorter(result.result.error()));
}
}
class CompileResult {
S script, adaptedScript, java;
S className;
Class compiledObject;
Throwable compileError;
OKOrError result;
toString {
ret compileError != null ? exceptionToStringShorter(compileError) : "Compiled OK";
}
bool runnable() { ret compiledObject != null; }
}
swappable void modifyParser(GazelleV_LeftArrowScriptParser parser) {
parser.allowTheWorld(mc());
}
void setStatus(S status) {
setText(lblCompileResult, status);
}
}