mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
line separators
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,309 +1,309 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.execution.process;
|
||||
|
||||
import com.intellij.openapi.application.Application;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingManager;
|
||||
import com.intellij.util.Consumer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.io.Reader;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.concurrent.*;
|
||||
|
||||
public class OSProcessHandler extends ProcessHandler {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.execution.process.OSProcessHandler");
|
||||
private final Process myProcess;
|
||||
private final String myCommandLine;
|
||||
|
||||
private final ProcessWaitFor myWaitFor;
|
||||
|
||||
private static class ExecutorServiceHolder {
|
||||
private static final ExecutorService ourThreadExecutorsService = createServiceImpl();
|
||||
|
||||
private static ThreadPoolExecutor createServiceImpl() {
|
||||
return new ThreadPoolExecutor(10, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), new ThreadFactory() {
|
||||
@SuppressWarnings({"HardCodedStringLiteral"})
|
||||
public Thread newThread(Runnable r) {
|
||||
return new Thread(r, "OSProcessHandler pooled thread");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Override this method in order to execute the task with a custom pool
|
||||
*
|
||||
* @param task a task to run
|
||||
*/
|
||||
protected Future<?> executeOnPooledThread(Runnable task) {
|
||||
final Application application = ApplicationManager.getApplication();
|
||||
|
||||
if (application != null) {
|
||||
return application.executeOnPooledThread(task);
|
||||
}
|
||||
|
||||
return ExecutorServiceHolder.ourThreadExecutorsService.submit(task);
|
||||
}
|
||||
|
||||
public OSProcessHandler(final Process process, final String commandLine) {
|
||||
myProcess = process;
|
||||
myCommandLine = commandLine;
|
||||
myWaitFor = new ProcessWaitFor(process);
|
||||
}
|
||||
|
||||
private class ProcessWaitFor {
|
||||
private final Future<?> myWaitForThreadFuture;
|
||||
private final BlockingQueue<Consumer<Integer>> myTerminationCallback = new ArrayBlockingQueue<Consumer<Integer>>(1);
|
||||
|
||||
public void detach() {
|
||||
myWaitForThreadFuture.cancel(true);
|
||||
}
|
||||
|
||||
|
||||
public ProcessWaitFor(final Process process) {
|
||||
myWaitForThreadFuture = executeOnPooledThread(new Runnable() {
|
||||
public void run() {
|
||||
int exitCode = 0;
|
||||
try {
|
||||
exitCode = process.waitFor();
|
||||
}
|
||||
catch (InterruptedException ignored) {
|
||||
}
|
||||
finally {
|
||||
try {
|
||||
myTerminationCallback.take().consume(exitCode);
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setTerminationCallback(Consumer<Integer> r) {
|
||||
myTerminationCallback.offer(r);
|
||||
}
|
||||
}
|
||||
|
||||
public Process getProcess() {
|
||||
return myProcess;
|
||||
}
|
||||
|
||||
public void startNotify() {
|
||||
final ReadProcessThread stdoutThread = new ReadProcessThread(createProcessOutReader()) {
|
||||
protected void textAvailable(String s) {
|
||||
notifyTextAvailable(s, ProcessOutputTypes.STDOUT);
|
||||
}
|
||||
};
|
||||
|
||||
final ReadProcessThread stderrThread = new ReadProcessThread(createProcessErrReader()) {
|
||||
protected void textAvailable(String s) {
|
||||
notifyTextAvailable(s, ProcessOutputTypes.STDERR);
|
||||
}
|
||||
};
|
||||
|
||||
notifyTextAvailable(myCommandLine + '\n', ProcessOutputTypes.SYSTEM);
|
||||
|
||||
addProcessListener(new ProcessAdapter() {
|
||||
public void startNotified(final ProcessEvent event) {
|
||||
try {
|
||||
final Future<?> stdOutReadingFuture = executeOnPooledThread(stdoutThread);
|
||||
final Future<?> stdErrReadingFuture = executeOnPooledThread(stderrThread);
|
||||
|
||||
myWaitFor.setTerminationCallback(new Consumer<Integer>() {
|
||||
@Override
|
||||
public void consume(Integer exitCode) {
|
||||
try {
|
||||
// tell threads that no more attempts to read process' output should be made
|
||||
stderrThread.setProcessTerminated(true);
|
||||
stdoutThread.setProcessTerminated(true);
|
||||
|
||||
stdErrReadingFuture.get();
|
||||
stdOutReadingFuture.get();
|
||||
}
|
||||
catch (InterruptedException ignored) {
|
||||
}
|
||||
catch (ExecutionException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
finally {
|
||||
onOSProcessTerminated(exitCode);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
finally {
|
||||
removeProcessListener(this);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
super.startNotify();
|
||||
}
|
||||
|
||||
protected void onOSProcessTerminated(final int exitCode) {
|
||||
notifyProcessTerminated(exitCode);
|
||||
}
|
||||
|
||||
protected Reader createProcessOutReader() {
|
||||
return new InputStreamReader(myProcess.getInputStream(), getCharset());
|
||||
}
|
||||
|
||||
protected Reader createProcessErrReader() {
|
||||
return new InputStreamReader(myProcess.getErrorStream(), getCharset());
|
||||
}
|
||||
|
||||
protected void destroyProcessImpl() {
|
||||
try {
|
||||
closeStreams();
|
||||
}
|
||||
finally {
|
||||
myProcess.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
protected void detachProcessImpl() {
|
||||
final Runnable runnable = new Runnable() {
|
||||
public void run() {
|
||||
closeStreams();
|
||||
|
||||
myWaitFor.detach();
|
||||
notifyProcessDetached();
|
||||
}
|
||||
};
|
||||
|
||||
executeOnPooledThread(runnable);
|
||||
}
|
||||
|
||||
private void closeStreams() {
|
||||
try {
|
||||
myProcess.getOutputStream().close();
|
||||
}
|
||||
catch (IOException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean detachIsDefault() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public OutputStream getProcessInput() {
|
||||
return myProcess.getOutputStream();
|
||||
}
|
||||
|
||||
// todo: to remove
|
||||
public String getCommandLine() {
|
||||
return myCommandLine;
|
||||
}
|
||||
|
||||
|
||||
public Charset getCharset() {
|
||||
return EncodingManager.getInstance().getDefaultCharset();
|
||||
}
|
||||
|
||||
private abstract static class ReadProcessThread implements Runnable {
|
||||
private final Reader myReader;
|
||||
private boolean skipLF = false;
|
||||
|
||||
private boolean myIsProcessTerminated = false;
|
||||
private final char[] myBuffer = new char[8192];
|
||||
|
||||
public ReadProcessThread(final Reader reader) {
|
||||
myReader = reader;
|
||||
}
|
||||
|
||||
public synchronized void setProcessTerminated(boolean isProcessTerminated) {
|
||||
myIsProcessTerminated = isProcessTerminated;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
while (true) {
|
||||
final int rc = readAvailable();
|
||||
if (rc == DONE) break;
|
||||
Thread.sleep(rc == READ_SOME ? 1L : 50L);
|
||||
}
|
||||
}
|
||||
catch (InterruptedException ignore) {
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static final int DONE = 0;
|
||||
private static final int READ_SOME = 1;
|
||||
private static final int READ_NONE = 2;
|
||||
|
||||
private synchronized int readAvailable() throws IOException {
|
||||
char[] buffer = myBuffer;
|
||||
StringBuilder token = new StringBuilder();
|
||||
int rc = READ_NONE;
|
||||
while (myReader.ready()) {
|
||||
int n = myReader.read(buffer);
|
||||
if (n <= 0) break;
|
||||
rc = READ_SOME;
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
char c = buffer[i];
|
||||
if (skipLF && c != '\n') {
|
||||
token.append('\r');
|
||||
}
|
||||
|
||||
if (c == '\r') {
|
||||
skipLF = true;
|
||||
}
|
||||
else {
|
||||
skipLF = false;
|
||||
token.append(c);
|
||||
}
|
||||
|
||||
if (c == '\n') {
|
||||
textAvailable(token.toString());
|
||||
token.setLength(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (token.length() != 0) {
|
||||
textAvailable(token.toString());
|
||||
token.setLength(0);
|
||||
}
|
||||
|
||||
if (myIsProcessTerminated) {
|
||||
try {
|
||||
myReader.close();
|
||||
}
|
||||
catch (IOException e1) {
|
||||
// supressed
|
||||
}
|
||||
|
||||
return DONE;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
protected abstract void textAvailable(final String s);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.execution.process;
|
||||
|
||||
import com.intellij.openapi.application.Application;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingManager;
|
||||
import com.intellij.util.Consumer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.io.Reader;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.concurrent.*;
|
||||
|
||||
public class OSProcessHandler extends ProcessHandler {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.execution.process.OSProcessHandler");
|
||||
private final Process myProcess;
|
||||
private final String myCommandLine;
|
||||
|
||||
private final ProcessWaitFor myWaitFor;
|
||||
|
||||
private static class ExecutorServiceHolder {
|
||||
private static final ExecutorService ourThreadExecutorsService = createServiceImpl();
|
||||
|
||||
private static ThreadPoolExecutor createServiceImpl() {
|
||||
return new ThreadPoolExecutor(10, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), new ThreadFactory() {
|
||||
@SuppressWarnings({"HardCodedStringLiteral"})
|
||||
public Thread newThread(Runnable r) {
|
||||
return new Thread(r, "OSProcessHandler pooled thread");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Override this method in order to execute the task with a custom pool
|
||||
*
|
||||
* @param task a task to run
|
||||
*/
|
||||
protected Future<?> executeOnPooledThread(Runnable task) {
|
||||
final Application application = ApplicationManager.getApplication();
|
||||
|
||||
if (application != null) {
|
||||
return application.executeOnPooledThread(task);
|
||||
}
|
||||
|
||||
return ExecutorServiceHolder.ourThreadExecutorsService.submit(task);
|
||||
}
|
||||
|
||||
public OSProcessHandler(final Process process, final String commandLine) {
|
||||
myProcess = process;
|
||||
myCommandLine = commandLine;
|
||||
myWaitFor = new ProcessWaitFor(process);
|
||||
}
|
||||
|
||||
private class ProcessWaitFor {
|
||||
private final Future<?> myWaitForThreadFuture;
|
||||
private final BlockingQueue<Consumer<Integer>> myTerminationCallback = new ArrayBlockingQueue<Consumer<Integer>>(1);
|
||||
|
||||
public void detach() {
|
||||
myWaitForThreadFuture.cancel(true);
|
||||
}
|
||||
|
||||
|
||||
public ProcessWaitFor(final Process process) {
|
||||
myWaitForThreadFuture = executeOnPooledThread(new Runnable() {
|
||||
public void run() {
|
||||
int exitCode = 0;
|
||||
try {
|
||||
exitCode = process.waitFor();
|
||||
}
|
||||
catch (InterruptedException ignored) {
|
||||
}
|
||||
finally {
|
||||
try {
|
||||
myTerminationCallback.take().consume(exitCode);
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setTerminationCallback(Consumer<Integer> r) {
|
||||
myTerminationCallback.offer(r);
|
||||
}
|
||||
}
|
||||
|
||||
public Process getProcess() {
|
||||
return myProcess;
|
||||
}
|
||||
|
||||
public void startNotify() {
|
||||
final ReadProcessThread stdoutThread = new ReadProcessThread(createProcessOutReader()) {
|
||||
protected void textAvailable(String s) {
|
||||
notifyTextAvailable(s, ProcessOutputTypes.STDOUT);
|
||||
}
|
||||
};
|
||||
|
||||
final ReadProcessThread stderrThread = new ReadProcessThread(createProcessErrReader()) {
|
||||
protected void textAvailable(String s) {
|
||||
notifyTextAvailable(s, ProcessOutputTypes.STDERR);
|
||||
}
|
||||
};
|
||||
|
||||
notifyTextAvailable(myCommandLine + '\n', ProcessOutputTypes.SYSTEM);
|
||||
|
||||
addProcessListener(new ProcessAdapter() {
|
||||
public void startNotified(final ProcessEvent event) {
|
||||
try {
|
||||
final Future<?> stdOutReadingFuture = executeOnPooledThread(stdoutThread);
|
||||
final Future<?> stdErrReadingFuture = executeOnPooledThread(stderrThread);
|
||||
|
||||
myWaitFor.setTerminationCallback(new Consumer<Integer>() {
|
||||
@Override
|
||||
public void consume(Integer exitCode) {
|
||||
try {
|
||||
// tell threads that no more attempts to read process' output should be made
|
||||
stderrThread.setProcessTerminated(true);
|
||||
stdoutThread.setProcessTerminated(true);
|
||||
|
||||
stdErrReadingFuture.get();
|
||||
stdOutReadingFuture.get();
|
||||
}
|
||||
catch (InterruptedException ignored) {
|
||||
}
|
||||
catch (ExecutionException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
finally {
|
||||
onOSProcessTerminated(exitCode);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
finally {
|
||||
removeProcessListener(this);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
super.startNotify();
|
||||
}
|
||||
|
||||
protected void onOSProcessTerminated(final int exitCode) {
|
||||
notifyProcessTerminated(exitCode);
|
||||
}
|
||||
|
||||
protected Reader createProcessOutReader() {
|
||||
return new InputStreamReader(myProcess.getInputStream(), getCharset());
|
||||
}
|
||||
|
||||
protected Reader createProcessErrReader() {
|
||||
return new InputStreamReader(myProcess.getErrorStream(), getCharset());
|
||||
}
|
||||
|
||||
protected void destroyProcessImpl() {
|
||||
try {
|
||||
closeStreams();
|
||||
}
|
||||
finally {
|
||||
myProcess.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
protected void detachProcessImpl() {
|
||||
final Runnable runnable = new Runnable() {
|
||||
public void run() {
|
||||
closeStreams();
|
||||
|
||||
myWaitFor.detach();
|
||||
notifyProcessDetached();
|
||||
}
|
||||
};
|
||||
|
||||
executeOnPooledThread(runnable);
|
||||
}
|
||||
|
||||
private void closeStreams() {
|
||||
try {
|
||||
myProcess.getOutputStream().close();
|
||||
}
|
||||
catch (IOException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean detachIsDefault() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public OutputStream getProcessInput() {
|
||||
return myProcess.getOutputStream();
|
||||
}
|
||||
|
||||
// todo: to remove
|
||||
public String getCommandLine() {
|
||||
return myCommandLine;
|
||||
}
|
||||
|
||||
|
||||
public Charset getCharset() {
|
||||
return EncodingManager.getInstance().getDefaultCharset();
|
||||
}
|
||||
|
||||
private abstract static class ReadProcessThread implements Runnable {
|
||||
private final Reader myReader;
|
||||
private boolean skipLF = false;
|
||||
|
||||
private boolean myIsProcessTerminated = false;
|
||||
private final char[] myBuffer = new char[8192];
|
||||
|
||||
public ReadProcessThread(final Reader reader) {
|
||||
myReader = reader;
|
||||
}
|
||||
|
||||
public synchronized void setProcessTerminated(boolean isProcessTerminated) {
|
||||
myIsProcessTerminated = isProcessTerminated;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
while (true) {
|
||||
final int rc = readAvailable();
|
||||
if (rc == DONE) break;
|
||||
Thread.sleep(rc == READ_SOME ? 1L : 50L);
|
||||
}
|
||||
}
|
||||
catch (InterruptedException ignore) {
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static final int DONE = 0;
|
||||
private static final int READ_SOME = 1;
|
||||
private static final int READ_NONE = 2;
|
||||
|
||||
private synchronized int readAvailable() throws IOException {
|
||||
char[] buffer = myBuffer;
|
||||
StringBuilder token = new StringBuilder();
|
||||
int rc = READ_NONE;
|
||||
while (myReader.ready()) {
|
||||
int n = myReader.read(buffer);
|
||||
if (n <= 0) break;
|
||||
rc = READ_SOME;
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
char c = buffer[i];
|
||||
if (skipLF && c != '\n') {
|
||||
token.append('\r');
|
||||
}
|
||||
|
||||
if (c == '\r') {
|
||||
skipLF = true;
|
||||
}
|
||||
else {
|
||||
skipLF = false;
|
||||
token.append(c);
|
||||
}
|
||||
|
||||
if (c == '\n') {
|
||||
textAvailable(token.toString());
|
||||
token.setLength(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (token.length() != 0) {
|
||||
textAvailable(token.toString());
|
||||
token.setLength(0);
|
||||
}
|
||||
|
||||
if (myIsProcessTerminated) {
|
||||
try {
|
||||
myReader.close();
|
||||
}
|
||||
catch (IOException e1) {
|
||||
// supressed
|
||||
}
|
||||
|
||||
return DONE;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
protected abstract void textAvailable(final String s);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,303 +1,303 @@
|
||||
no.module.defined.error.message=No module defined
|
||||
module.does.not.exist.error.message=Module ''{0}'' does not exist
|
||||
no.jdk.for.module.error.message=No jdk for module ''{0}''
|
||||
jdk.is.bad.configured.error.message=''{0}'' is bad configured
|
||||
class.not.found.in.module.error.message=Class ''{0}'' not found in module ''{1}''
|
||||
package.not.found.error.message=Package ''{0}'' not found
|
||||
jdk.not.configured.error.message=Jdk ''{0}'' not configured
|
||||
project.has.no.jdk.error.message=Project has no JDK
|
||||
some.modules.has.circular.dependency.error.message=Some modules has circular dependency.
|
||||
project.has.no.jdk.configured.error.message=Project has no JDK configured.
|
||||
run.configuration.stop.action.name=Stop
|
||||
warning.common.title=Warning
|
||||
run.configuration.error.dialog.title=Run Configuration Error
|
||||
no.jdk.specified..error.message=No JDK specified
|
||||
home.directory.not.specified.for.jdk.error.message=Home directory is not specified for JDK
|
||||
run.configuration.pause.output.action.name=Pause Output
|
||||
main.class.is.not.specified.error.message=Main class is not specified
|
||||
close.tab.action.name=Close
|
||||
run.configuration.show.command.line.action.name=Show command line
|
||||
|
||||
#---
|
||||
create.run.configuration.action.name=Create Run Configuration
|
||||
create.run.configuration.for.item.action.name=Create {0}
|
||||
create.run.configuration.for.item.dialog.title=Create Run/Debug Configuration: {0}
|
||||
edit.configuration.action=&Edit Configurations
|
||||
save.temporary.run.configuration.action.name=&Save ''{0}'' Configuration
|
||||
choose.run.configuration.action.description=Open run/debug configurations dropdown
|
||||
|
||||
#action - run. debug,profile etc
|
||||
perform.action.with.context.configuration.action.name={0} context configuration
|
||||
|
||||
error.common.title=Error
|
||||
error.running.configuration.with.error.error.message=Error running {0}:<br>{1}
|
||||
|
||||
select.applet.policy.file.dialog.title=Select applet policy file
|
||||
choose.html.file.dialog.title=Choose HTML File
|
||||
html.file.not.specified.error.message=Html file not specified
|
||||
jre.not.valid.error.message=''{0}'' is not valid JRE home
|
||||
|
||||
applet.configuration.description=Applet configuration
|
||||
applet.configuration.name=Applet
|
||||
|
||||
application.configuration.description=Application configuration
|
||||
application.configuration.name=Application
|
||||
|
||||
run.configuration.norunner.selected.label=No runner selected
|
||||
run.configuration.configuration.tab.title=Configuration
|
||||
run.configuration.startup.connection.rab.title=Startup/Connection
|
||||
|
||||
add.new.run.configuration.acrtion.name=Add New Configuration
|
||||
add.new.run.configuration.action.name=Add New ''{0}'' Configuration
|
||||
|
||||
remove.run.configuration.action.name=Remove Configuration
|
||||
|
||||
run.configuration.edit.default.configuration.settings.button=Edit De&faults
|
||||
default.settings.editor.dialog.title=Default Settings
|
||||
clear.all.from.console.action.name=Clear All
|
||||
copy.selected.content.action.name=Copy Selected Content
|
||||
copy.content.action.name=Copy Content
|
||||
run.debug.dialog.title=Run/Debug Configurations
|
||||
run.configuration.display.settings.checkbox=Display settings &before launching
|
||||
run.configurable.display.name=Run
|
||||
apply.action.name=&Apply
|
||||
invalid.data.dialog.title=Invalid Data
|
||||
template.settings.configurable.display.name=Template Settings
|
||||
default.run.configuration.name=<unnamed>
|
||||
|
||||
process.is.running.dialog.title=Process ''{0}'' is running
|
||||
button.disconnect=Disconnect
|
||||
disconnect.process.confirmation.text=Disconnect from the process ''{0}''?
|
||||
terminate.after.disconnect.checkbox=Terminate the process after disconnect
|
||||
copy.configuration.action.name=Copy Configuration
|
||||
junit.configuration.display.name=JUnit
|
||||
junit.configuration.description=JUnit test configuration
|
||||
no.junit.error.message=No junit.jar
|
||||
no.junit.in.scope.error.message=No junit.jar: {0}
|
||||
junit.not.found.in.module.error.message=JUnit not found in module ''{0}''
|
||||
cannot.browse.test.inheritors.dialog.title=Can't Browse TestCase Inheritors
|
||||
seaching.test.progress.title=Searching For Tests...
|
||||
configuration.not.speficied.message=Configuration test type not specified
|
||||
test.in.scope.presentable.text=Tests in ''{0}''
|
||||
all.tests.scope.presentable.text=All Tests
|
||||
module.does.not.exists=Module ''{0}'' does not exist in project ''{1}''
|
||||
select.working.directory.message=Select working directory
|
||||
set.class.name.message=Set class name first
|
||||
cannot.browse.method.dialog.title=Cannot Browse Methods
|
||||
class.does.not.exists.error.message=Class {0} does not exist
|
||||
choose.package.dialog.title=Choose Package
|
||||
choose.test.class.dialog.title=Choose Test Class
|
||||
choose.test.method.dialog.title=Choose Test Method
|
||||
test.cases.count.message={0} test case(s)
|
||||
diff.content.expected.title=Expected
|
||||
diff.content.expected.for.file.title=Expected :
|
||||
diff.content.actual.title=Actual
|
||||
junit.actual.text.label=Actual :
|
||||
junit.click.to.see.diff.link=<Click to see difference>
|
||||
output.tab.title=Output
|
||||
statistics.tab.title=Statistics
|
||||
test.not.started.progress.text=Tests were not started
|
||||
starting.jvm.progress.text=Starting JVM...
|
||||
instantiating.tests.progress.text=Instantiating tests...
|
||||
next.faled.test.action.name=Next Failed Test
|
||||
prev.faled.test.action.name=Previous Failed Test
|
||||
junit.runing.info.memory.available.kb.message={0} kb.
|
||||
junit.runing.info.memory.available.mb.message={0} Mb.
|
||||
junit.runing.info.time.sec.message={0} s
|
||||
junit.runing.info.total.label=Total:
|
||||
junit.runing.info.starting.label=Starting...
|
||||
junit.runing.info.running.label=Running
|
||||
junit.runing.info.passed.label=Passed
|
||||
junit.runing.info.terminated.label=Terminated
|
||||
junit.runing.info.assertion.tree.node=Assertion
|
||||
junit.runing.info.error.tree.node=Error
|
||||
junit.runing.info.ignored.label=Ignored
|
||||
junit.runing.info.ignored.console.message=Test ''{0}.{1}'' ignored
|
||||
junit.runing.info.left.to.run.count.tree.node=Left: {0}
|
||||
junit.runing.info.failed.count.message=F:{0}
|
||||
junit.runing.info.errors.count.message=E:{0}
|
||||
junit.runing.info.passed.count.message=P:{0}
|
||||
junit.runing.info.ignored.count.message=I:{0}
|
||||
|
||||
junit.runing.info.status.completed.from.total.failed={0} of {1} Failed: {2}
|
||||
junit.runing.info.status.completed.from.total={0} of {1}
|
||||
junit.runing.info.status.running.number.with.name=Running: {0} {1}
|
||||
junit.runing.info.failed.to.start.error.message=Failed to start
|
||||
junit.runing.info.tests.failed.label=Tests Failed
|
||||
junit.runing.info.tests.passed.label=Tests Passed
|
||||
tests.passed.with.warnings.message=Tests passed (with warnings)
|
||||
junit.run.hide.passed.action.name=Hide Passed
|
||||
junit.run.hide.passed.action.description=Hide passed tests
|
||||
junit.runing.info.track.test.action.name=Track Running Test
|
||||
junit.runing.info.track.test.action.description=Select currently running test in tree
|
||||
junit.runing.info.collapse.test.action.name=Collapse all test suites
|
||||
junit.runing.info.expand.test.action.name=Expand all test suites
|
||||
junit.runing.info.select.first.failed.action.name=Select First Failed Test When Finished
|
||||
junit.runing.info.scroll.to.stacktrace.action.name=Scroll to Stacktrace
|
||||
junit.runing.info.scroll.to.stacktrace.action.description=Scroll console to beginning of assertion or exception stacktrace
|
||||
junit.runing.info.open.source.at.exception.action.name=Open Source at Exception
|
||||
junit.runing.info.open.source.at.exception.action.description=Go to line which caused exception when opening test source
|
||||
junit.all.tests.passed.label=All Tests Passed
|
||||
junit.tests.in.progress.label=Tests in Progress
|
||||
junit.auto.scroll.to.source.action.name=Auto Scroll to Source
|
||||
junit.open.text.in.editor.action.name=Open selected test in editor
|
||||
|
||||
run.configuration.java.vm.parameters.label=&VM parameters:
|
||||
run.configuration.program.parameters=Program pa&rameters:
|
||||
run.configuration.working.directory.label=&Working directory:
|
||||
run.configuration.use.alternate.jre.checkbox=Use alternative &JRE:
|
||||
run.configuration.select.alternate.jre.label=Select Alternative JRE
|
||||
run.configuration.select.jre.dir.label=Select directory with JRE to run with
|
||||
run.configuration.arguments.help.panel.copy.action.name=Copy
|
||||
terminating.process.progress.title=Terminating ''{0}''
|
||||
waiting.for.vm.detach.progress.text=Waiting for process detach
|
||||
restart.error.message.title=Restart Error
|
||||
rerun.configuration.action.name=Rerun {0}
|
||||
run.configuration.dump.threads.action.name=Dump Threads
|
||||
run.configuration.exit.action.name=Exit
|
||||
run.error.message.title=Run Error
|
||||
default.runner.start.action.text=R&un
|
||||
remote.debug.configuration.description=Remote debug configuration
|
||||
remote.debug.configuration.display.name=Remote
|
||||
|
||||
applet.configuration.url.label=&URL
|
||||
applet.configuration.applet.class.border=Applet Class
|
||||
applet.configuration.applet.parameters.label=Applet Parameters
|
||||
applet.configuration.applet.class.label=Applet &class:
|
||||
button.remove=&Remove
|
||||
button.add=&Add
|
||||
applet.configuration.height.label= &Height:
|
||||
applet.configuration.width.label= &Width:
|
||||
applet.configuration.url.html.file.label=URL/HTML &file:
|
||||
applet.configuration.url.border=URL
|
||||
applet.configuration.use.classpath.and.jdk.of.module.label=Use classpath and JDK of m&odule:
|
||||
applet.configuration.vm.parameters.for.appletviewer.label=&VM parameters for appletviewer:
|
||||
applet.configuration.policy.file.label=&Policy file:
|
||||
applet.configuration.parameter.name.column=Name
|
||||
applet.configuration.parameter.value.column=Value
|
||||
class.not.specified.error.message=Class not specified.
|
||||
failed.to.generate.wrapper.error.message=Failed to generate temporary html wrapper for applet class
|
||||
|
||||
application.configuration.use.classpath.and.jdk.of.module.label=Use classpath and JDK of m&odule:
|
||||
application.configuration.main.class.label=Main &class:
|
||||
jre.path.is.not.valid.jre.home.error.mesage=''{0}'' is not valid JRE home
|
||||
main.method.not.found.in.class.error.message=Main method not found in class {0}
|
||||
no.user.process.input.error.message=No process input
|
||||
fix.run.configuration.problem.button=Fix
|
||||
class.isnt.test.class.error.message={0} isn''t test class
|
||||
class.isnt.inheritor.of.testcase.error.message={0} isn''t inheritor of TestCase
|
||||
junit.jar.not.found.in.module.class.path.error.message=junit.jar not found in module ''{0}'' class path.
|
||||
method.name.not.specified.error.message=Method name not specified
|
||||
test.method.doesnt.exist.error.message=Test method ''{0}'' doesn''t exist
|
||||
no.tests.found.in.package.error.message=No tests found in the package ''{0}''
|
||||
package.does.not.exist.error.message=Package ''{0}'' does not exist
|
||||
choose.main.class.dialog.title=Choose Main Class
|
||||
choose.applet.class.dialog.title=Choose Applet Class
|
||||
junit.configuration.test.runner.parameters.label=Test runner pa&rameters:
|
||||
junit.configuration.use.classpath.and.jdk.of.module.label=Use classpath and JDK of m&odule:
|
||||
junit.configuration.test.border=Test
|
||||
junit.configuration.across.module.dependencies.radio=Across modu&le dependencies
|
||||
junit.configuration.in.single.module.radio=In s&ingle module
|
||||
junit.configuration.in.whole.project.radio=In &whole project
|
||||
junit.configuration.search.for.tests.label=Search for tests:
|
||||
junit.configuration.package.label=Packa&ge:
|
||||
junit.configuration.method.label=Mðod:
|
||||
junit.configuration.class.label=&Class:
|
||||
junit.configuration.configure.junit.test.label=Test:
|
||||
junit.configuration.test.method.radio=Test Method
|
||||
junit.configuration.test.class.radio=Test Class
|
||||
junit.configuration.class.radio=C&lass
|
||||
junit.configuration.method.radio=Me&thod
|
||||
jnit.configuration.all.tests.in.package.radio=All Tests in Package
|
||||
junit.configuration.all.in.package.radio=All in &Package
|
||||
no.jdk.specified.for.module.warning.text=No JDK specified for module ''{0}''
|
||||
module.not.specified.error.text=Module not specified
|
||||
module.doesn.t.exist.in.project.error.text=Module ''{0}'' doesn''t exist in project
|
||||
run.configuration.unnamed.name.prefix=Unnamed
|
||||
no.applet.class.specified.error.message=No applet class specified
|
||||
no.main.class.specified.error.text=No main class specified
|
||||
action.name.save.configuration=Save Configuration
|
||||
#2 - configuration type description
|
||||
empty.run.configuration.panel.text.label=<html><body><br><br><font face=\"{0}\" size=\"-1\">Press the <a href=\"add\"><image src=\"{1}\" border=\"0\"></a> \\ button \
|
||||
to create a new {3} based on default settings.</font></body></html>
|
||||
default.package.presentable.name=<default>
|
||||
default.package.configuration.name=default package
|
||||
no.test.class.specified.error.text=No test class specified
|
||||
edit.run.configuration.run.configuration.name.label=&Name:
|
||||
default.junit.configuration.name=<no-name>
|
||||
strings.equal.failed.dialog.title=Comparison failure
|
||||
junit.runing.info.test.column.name=Test
|
||||
junit.runing.info.time.elapsed.column.name=Time elapsed
|
||||
junit.runing.info.usage.delta.column.name=Usage Delta
|
||||
junit.runing.info.usage.before.column.name=Usage Before
|
||||
junit.runing.info.usage.after.column.name=Usage After
|
||||
junit.runing.info.results.column.name=Results
|
||||
junit.runing.info.loading.tree.node.text=loading
|
||||
remote.configuration.settings.border=Settings
|
||||
remote.configuration.transport.label=Transport:
|
||||
remote.configuration.listen.radio=Listen
|
||||
remote.configuration.attach.radio=Attach
|
||||
remote.configuration.debugger.mode.label=Debugger mode:
|
||||
remote.configuration.shared.memory.radio=Shared memory
|
||||
remote.configuration.socket.radio=Socket
|
||||
remote.configuration.shared.memory.address.label=Shared memory address:
|
||||
remote.configuration.port.label=Port:
|
||||
remote.configuration.host.label=Host:
|
||||
remote.configuration.remote.debugging.allows.you.to.connect.idea.to.a.running.jvm.label=Remote debugging allows you to connect IDEA to a running JVM.
|
||||
standard.runner.description=Run selected configuration
|
||||
environment.variables.helper.use.arguments.label=<html><body>Use the following command line arguments for running remote JVM (you may copy and paste them)</body></html>
|
||||
environment.variables.helper.use.arguments.jdk13.label=<html><body>If the application runs on JDK 1.3.x or earlier, use following arguments</body></html>
|
||||
select.run.configuration.for.item.action.name=Select {0}
|
||||
save.run.configuration.for.item.action.name=Save {0}
|
||||
junit.runing.info.status.done.count=Done: {0}
|
||||
junit.runing.info.status.terminated.count=Terminated: {0}
|
||||
junit.runing.info.tests.in.progress.done.tree.node=Tests in Progress: Done
|
||||
junit.runing.info.tests.in.progress.terminated.tre.node=Tests in Progress: Terminated
|
||||
delete.confirmation.dialog.title=Delete Confirmation
|
||||
move.up.action.name=Move Up
|
||||
move.down.action.name=Move Down
|
||||
memory.available.message={0} Kb
|
||||
|
||||
#code coverage
|
||||
enable.coverage.with.emma=Record code &coverage information
|
||||
merge.coverage.data=&Merge gathered coverage with suite chosen below
|
||||
record.coverage.filters.title=Packages and classes to record coverage data
|
||||
coverage.tab.title=Code Coverage
|
||||
show.swing.inspector=&Enable capturing form snapshots
|
||||
show.swing.inspector.disabled=&Enable capturing form snapshots (requires JRE 5.0 or higher)
|
||||
before.run.property.make=Make
|
||||
run.configuration.store.place.option=&Share configuration
|
||||
run.configuration.default.type.description=configuration
|
||||
|
||||
#GeneralCommandLine
|
||||
run.configuration.error.no.jdk.specified=No JDK specified
|
||||
run.configuration.cannot.find.vm.executable=Cannot find VM executable
|
||||
|
||||
logs.tab.title=Logs
|
||||
before.launch.panel.title=Before launch
|
||||
action.name.save.as.configuration=Save As
|
||||
default.junit.config.name.all.in.module=All in {0}
|
||||
default.junit.config.name.all.in.package.in.module={0} in {1}
|
||||
environment.variables.dialog.title=Environment Variables
|
||||
environment.variables.component.title=&Environment Variables
|
||||
down.the.stack.trace=Down the stack trace
|
||||
up.the.stack.trace=Up the stack trace
|
||||
configuration.action.chooser.title=Choose configuration type to run
|
||||
env.vars.checkbox.title=&Include parent environment variables
|
||||
|
||||
before.launch.compile.step=Make
|
||||
execute.before.run.debug.dialog.title=Execute {0} Before Run/Debug
|
||||
|
||||
export.test.results.filename=Test Results - {0}
|
||||
export.test.results.succeeded=<html>Test results exported successfully to <a href="#a">{0}</a></html>
|
||||
export.test.results.failed=Test results export failed: {0}
|
||||
export.test.results.custom.template.chooser.title=Choose Custom Template
|
||||
export.test.results.output.folder.chooser.title=Choose Output Folder
|
||||
export.test.results.custom.template.path.empty=User-defined tempate path is empty
|
||||
export.test.results.custom.template.not.found=User-defined tempate file ''{0}'' is not found
|
||||
export.test.results.task.name=Exporting test results
|
||||
export.test.results.open.editor=O&pen exported file in editor
|
||||
export.test.results.open.browser=O&pen exported file in browser
|
||||
export.test.results.dialog.title=Export Test Results
|
||||
export.test.results.output.path.empty=Output path is empty
|
||||
export.test.results.output.filename.empty=Output file name is empty
|
||||
no.module.defined.error.message=No module defined
|
||||
module.does.not.exist.error.message=Module ''{0}'' does not exist
|
||||
no.jdk.for.module.error.message=No jdk for module ''{0}''
|
||||
jdk.is.bad.configured.error.message=''{0}'' is bad configured
|
||||
class.not.found.in.module.error.message=Class ''{0}'' not found in module ''{1}''
|
||||
package.not.found.error.message=Package ''{0}'' not found
|
||||
jdk.not.configured.error.message=Jdk ''{0}'' not configured
|
||||
project.has.no.jdk.error.message=Project has no JDK
|
||||
some.modules.has.circular.dependency.error.message=Some modules has circular dependency.
|
||||
project.has.no.jdk.configured.error.message=Project has no JDK configured.
|
||||
run.configuration.stop.action.name=Stop
|
||||
warning.common.title=Warning
|
||||
run.configuration.error.dialog.title=Run Configuration Error
|
||||
no.jdk.specified..error.message=No JDK specified
|
||||
home.directory.not.specified.for.jdk.error.message=Home directory is not specified for JDK
|
||||
run.configuration.pause.output.action.name=Pause Output
|
||||
main.class.is.not.specified.error.message=Main class is not specified
|
||||
close.tab.action.name=Close
|
||||
run.configuration.show.command.line.action.name=Show command line
|
||||
|
||||
#---
|
||||
create.run.configuration.action.name=Create Run Configuration
|
||||
create.run.configuration.for.item.action.name=Create {0}
|
||||
create.run.configuration.for.item.dialog.title=Create Run/Debug Configuration: {0}
|
||||
edit.configuration.action=&Edit Configurations
|
||||
save.temporary.run.configuration.action.name=&Save ''{0}'' Configuration
|
||||
choose.run.configuration.action.description=Open run/debug configurations dropdown
|
||||
|
||||
#action - run. debug,profile etc
|
||||
perform.action.with.context.configuration.action.name={0} context configuration
|
||||
|
||||
error.common.title=Error
|
||||
error.running.configuration.with.error.error.message=Error running {0}:<br>{1}
|
||||
|
||||
select.applet.policy.file.dialog.title=Select applet policy file
|
||||
choose.html.file.dialog.title=Choose HTML File
|
||||
html.file.not.specified.error.message=Html file not specified
|
||||
jre.not.valid.error.message=''{0}'' is not valid JRE home
|
||||
|
||||
applet.configuration.description=Applet configuration
|
||||
applet.configuration.name=Applet
|
||||
|
||||
application.configuration.description=Application configuration
|
||||
application.configuration.name=Application
|
||||
|
||||
run.configuration.norunner.selected.label=No runner selected
|
||||
run.configuration.configuration.tab.title=Configuration
|
||||
run.configuration.startup.connection.rab.title=Startup/Connection
|
||||
|
||||
add.new.run.configuration.acrtion.name=Add New Configuration
|
||||
add.new.run.configuration.action.name=Add New ''{0}'' Configuration
|
||||
|
||||
remove.run.configuration.action.name=Remove Configuration
|
||||
|
||||
run.configuration.edit.default.configuration.settings.button=Edit De&faults
|
||||
default.settings.editor.dialog.title=Default Settings
|
||||
clear.all.from.console.action.name=Clear All
|
||||
copy.selected.content.action.name=Copy Selected Content
|
||||
copy.content.action.name=Copy Content
|
||||
run.debug.dialog.title=Run/Debug Configurations
|
||||
run.configuration.display.settings.checkbox=Display settings &before launching
|
||||
run.configurable.display.name=Run
|
||||
apply.action.name=&Apply
|
||||
invalid.data.dialog.title=Invalid Data
|
||||
template.settings.configurable.display.name=Template Settings
|
||||
default.run.configuration.name=<unnamed>
|
||||
|
||||
process.is.running.dialog.title=Process ''{0}'' is running
|
||||
button.disconnect=Disconnect
|
||||
disconnect.process.confirmation.text=Disconnect from the process ''{0}''?
|
||||
terminate.after.disconnect.checkbox=Terminate the process after disconnect
|
||||
copy.configuration.action.name=Copy Configuration
|
||||
junit.configuration.display.name=JUnit
|
||||
junit.configuration.description=JUnit test configuration
|
||||
no.junit.error.message=No junit.jar
|
||||
no.junit.in.scope.error.message=No junit.jar: {0}
|
||||
junit.not.found.in.module.error.message=JUnit not found in module ''{0}''
|
||||
cannot.browse.test.inheritors.dialog.title=Can't Browse TestCase Inheritors
|
||||
seaching.test.progress.title=Searching For Tests...
|
||||
configuration.not.speficied.message=Configuration test type not specified
|
||||
test.in.scope.presentable.text=Tests in ''{0}''
|
||||
all.tests.scope.presentable.text=All Tests
|
||||
module.does.not.exists=Module ''{0}'' does not exist in project ''{1}''
|
||||
select.working.directory.message=Select working directory
|
||||
set.class.name.message=Set class name first
|
||||
cannot.browse.method.dialog.title=Cannot Browse Methods
|
||||
class.does.not.exists.error.message=Class {0} does not exist
|
||||
choose.package.dialog.title=Choose Package
|
||||
choose.test.class.dialog.title=Choose Test Class
|
||||
choose.test.method.dialog.title=Choose Test Method
|
||||
test.cases.count.message={0} test case(s)
|
||||
diff.content.expected.title=Expected
|
||||
diff.content.expected.for.file.title=Expected :
|
||||
diff.content.actual.title=Actual
|
||||
junit.actual.text.label=Actual :
|
||||
junit.click.to.see.diff.link=<Click to see difference>
|
||||
output.tab.title=Output
|
||||
statistics.tab.title=Statistics
|
||||
test.not.started.progress.text=Tests were not started
|
||||
starting.jvm.progress.text=Starting JVM...
|
||||
instantiating.tests.progress.text=Instantiating tests...
|
||||
next.faled.test.action.name=Next Failed Test
|
||||
prev.faled.test.action.name=Previous Failed Test
|
||||
junit.runing.info.memory.available.kb.message={0} kb.
|
||||
junit.runing.info.memory.available.mb.message={0} Mb.
|
||||
junit.runing.info.time.sec.message={0} s
|
||||
junit.runing.info.total.label=Total:
|
||||
junit.runing.info.starting.label=Starting...
|
||||
junit.runing.info.running.label=Running
|
||||
junit.runing.info.passed.label=Passed
|
||||
junit.runing.info.terminated.label=Terminated
|
||||
junit.runing.info.assertion.tree.node=Assertion
|
||||
junit.runing.info.error.tree.node=Error
|
||||
junit.runing.info.ignored.label=Ignored
|
||||
junit.runing.info.ignored.console.message=Test ''{0}.{1}'' ignored
|
||||
junit.runing.info.left.to.run.count.tree.node=Left: {0}
|
||||
junit.runing.info.failed.count.message=F:{0}
|
||||
junit.runing.info.errors.count.message=E:{0}
|
||||
junit.runing.info.passed.count.message=P:{0}
|
||||
junit.runing.info.ignored.count.message=I:{0}
|
||||
|
||||
junit.runing.info.status.completed.from.total.failed={0} of {1} Failed: {2}
|
||||
junit.runing.info.status.completed.from.total={0} of {1}
|
||||
junit.runing.info.status.running.number.with.name=Running: {0} {1}
|
||||
junit.runing.info.failed.to.start.error.message=Failed to start
|
||||
junit.runing.info.tests.failed.label=Tests Failed
|
||||
junit.runing.info.tests.passed.label=Tests Passed
|
||||
tests.passed.with.warnings.message=Tests passed (with warnings)
|
||||
junit.run.hide.passed.action.name=Hide Passed
|
||||
junit.run.hide.passed.action.description=Hide passed tests
|
||||
junit.runing.info.track.test.action.name=Track Running Test
|
||||
junit.runing.info.track.test.action.description=Select currently running test in tree
|
||||
junit.runing.info.collapse.test.action.name=Collapse all test suites
|
||||
junit.runing.info.expand.test.action.name=Expand all test suites
|
||||
junit.runing.info.select.first.failed.action.name=Select First Failed Test When Finished
|
||||
junit.runing.info.scroll.to.stacktrace.action.name=Scroll to Stacktrace
|
||||
junit.runing.info.scroll.to.stacktrace.action.description=Scroll console to beginning of assertion or exception stacktrace
|
||||
junit.runing.info.open.source.at.exception.action.name=Open Source at Exception
|
||||
junit.runing.info.open.source.at.exception.action.description=Go to line which caused exception when opening test source
|
||||
junit.all.tests.passed.label=All Tests Passed
|
||||
junit.tests.in.progress.label=Tests in Progress
|
||||
junit.auto.scroll.to.source.action.name=Auto Scroll to Source
|
||||
junit.open.text.in.editor.action.name=Open selected test in editor
|
||||
|
||||
run.configuration.java.vm.parameters.label=&VM parameters:
|
||||
run.configuration.program.parameters=Program pa&rameters:
|
||||
run.configuration.working.directory.label=&Working directory:
|
||||
run.configuration.use.alternate.jre.checkbox=Use alternative &JRE:
|
||||
run.configuration.select.alternate.jre.label=Select Alternative JRE
|
||||
run.configuration.select.jre.dir.label=Select directory with JRE to run with
|
||||
run.configuration.arguments.help.panel.copy.action.name=Copy
|
||||
terminating.process.progress.title=Terminating ''{0}''
|
||||
waiting.for.vm.detach.progress.text=Waiting for process detach
|
||||
restart.error.message.title=Restart Error
|
||||
rerun.configuration.action.name=Rerun {0}
|
||||
run.configuration.dump.threads.action.name=Dump Threads
|
||||
run.configuration.exit.action.name=Exit
|
||||
run.error.message.title=Run Error
|
||||
default.runner.start.action.text=R&un
|
||||
remote.debug.configuration.description=Remote debug configuration
|
||||
remote.debug.configuration.display.name=Remote
|
||||
|
||||
applet.configuration.url.label=&URL
|
||||
applet.configuration.applet.class.border=Applet Class
|
||||
applet.configuration.applet.parameters.label=Applet Parameters
|
||||
applet.configuration.applet.class.label=Applet &class:
|
||||
button.remove=&Remove
|
||||
button.add=&Add
|
||||
applet.configuration.height.label= &Height:
|
||||
applet.configuration.width.label= &Width:
|
||||
applet.configuration.url.html.file.label=URL/HTML &file:
|
||||
applet.configuration.url.border=URL
|
||||
applet.configuration.use.classpath.and.jdk.of.module.label=Use classpath and JDK of m&odule:
|
||||
applet.configuration.vm.parameters.for.appletviewer.label=&VM parameters for appletviewer:
|
||||
applet.configuration.policy.file.label=&Policy file:
|
||||
applet.configuration.parameter.name.column=Name
|
||||
applet.configuration.parameter.value.column=Value
|
||||
class.not.specified.error.message=Class not specified.
|
||||
failed.to.generate.wrapper.error.message=Failed to generate temporary html wrapper for applet class
|
||||
|
||||
application.configuration.use.classpath.and.jdk.of.module.label=Use classpath and JDK of m&odule:
|
||||
application.configuration.main.class.label=Main &class:
|
||||
jre.path.is.not.valid.jre.home.error.mesage=''{0}'' is not valid JRE home
|
||||
main.method.not.found.in.class.error.message=Main method not found in class {0}
|
||||
no.user.process.input.error.message=No process input
|
||||
fix.run.configuration.problem.button=Fix
|
||||
class.isnt.test.class.error.message={0} isn''t test class
|
||||
class.isnt.inheritor.of.testcase.error.message={0} isn''t inheritor of TestCase
|
||||
junit.jar.not.found.in.module.class.path.error.message=junit.jar not found in module ''{0}'' class path.
|
||||
method.name.not.specified.error.message=Method name not specified
|
||||
test.method.doesnt.exist.error.message=Test method ''{0}'' doesn''t exist
|
||||
no.tests.found.in.package.error.message=No tests found in the package ''{0}''
|
||||
package.does.not.exist.error.message=Package ''{0}'' does not exist
|
||||
choose.main.class.dialog.title=Choose Main Class
|
||||
choose.applet.class.dialog.title=Choose Applet Class
|
||||
junit.configuration.test.runner.parameters.label=Test runner pa&rameters:
|
||||
junit.configuration.use.classpath.and.jdk.of.module.label=Use classpath and JDK of m&odule:
|
||||
junit.configuration.test.border=Test
|
||||
junit.configuration.across.module.dependencies.radio=Across modu&le dependencies
|
||||
junit.configuration.in.single.module.radio=In s&ingle module
|
||||
junit.configuration.in.whole.project.radio=In &whole project
|
||||
junit.configuration.search.for.tests.label=Search for tests:
|
||||
junit.configuration.package.label=Packa&ge:
|
||||
junit.configuration.method.label=Mðod:
|
||||
junit.configuration.class.label=&Class:
|
||||
junit.configuration.configure.junit.test.label=Test:
|
||||
junit.configuration.test.method.radio=Test Method
|
||||
junit.configuration.test.class.radio=Test Class
|
||||
junit.configuration.class.radio=C&lass
|
||||
junit.configuration.method.radio=Me&thod
|
||||
jnit.configuration.all.tests.in.package.radio=All Tests in Package
|
||||
junit.configuration.all.in.package.radio=All in &Package
|
||||
no.jdk.specified.for.module.warning.text=No JDK specified for module ''{0}''
|
||||
module.not.specified.error.text=Module not specified
|
||||
module.doesn.t.exist.in.project.error.text=Module ''{0}'' doesn''t exist in project
|
||||
run.configuration.unnamed.name.prefix=Unnamed
|
||||
no.applet.class.specified.error.message=No applet class specified
|
||||
no.main.class.specified.error.text=No main class specified
|
||||
action.name.save.configuration=Save Configuration
|
||||
#2 - configuration type description
|
||||
empty.run.configuration.panel.text.label=<html><body><br><br><font face=\"{0}\" size=\"-1\">Press the <a href=\"add\"><image src=\"{1}\" border=\"0\"></a> \\ button \
|
||||
to create a new {3} based on default settings.</font></body></html>
|
||||
default.package.presentable.name=<default>
|
||||
default.package.configuration.name=default package
|
||||
no.test.class.specified.error.text=No test class specified
|
||||
edit.run.configuration.run.configuration.name.label=&Name:
|
||||
default.junit.configuration.name=<no-name>
|
||||
strings.equal.failed.dialog.title=Comparison failure
|
||||
junit.runing.info.test.column.name=Test
|
||||
junit.runing.info.time.elapsed.column.name=Time elapsed
|
||||
junit.runing.info.usage.delta.column.name=Usage Delta
|
||||
junit.runing.info.usage.before.column.name=Usage Before
|
||||
junit.runing.info.usage.after.column.name=Usage After
|
||||
junit.runing.info.results.column.name=Results
|
||||
junit.runing.info.loading.tree.node.text=loading
|
||||
remote.configuration.settings.border=Settings
|
||||
remote.configuration.transport.label=Transport:
|
||||
remote.configuration.listen.radio=Listen
|
||||
remote.configuration.attach.radio=Attach
|
||||
remote.configuration.debugger.mode.label=Debugger mode:
|
||||
remote.configuration.shared.memory.radio=Shared memory
|
||||
remote.configuration.socket.radio=Socket
|
||||
remote.configuration.shared.memory.address.label=Shared memory address:
|
||||
remote.configuration.port.label=Port:
|
||||
remote.configuration.host.label=Host:
|
||||
remote.configuration.remote.debugging.allows.you.to.connect.idea.to.a.running.jvm.label=Remote debugging allows you to connect IDEA to a running JVM.
|
||||
standard.runner.description=Run selected configuration
|
||||
environment.variables.helper.use.arguments.label=<html><body>Use the following command line arguments for running remote JVM (you may copy and paste them)</body></html>
|
||||
environment.variables.helper.use.arguments.jdk13.label=<html><body>If the application runs on JDK 1.3.x or earlier, use following arguments</body></html>
|
||||
select.run.configuration.for.item.action.name=Select {0}
|
||||
save.run.configuration.for.item.action.name=Save {0}
|
||||
junit.runing.info.status.done.count=Done: {0}
|
||||
junit.runing.info.status.terminated.count=Terminated: {0}
|
||||
junit.runing.info.tests.in.progress.done.tree.node=Tests in Progress: Done
|
||||
junit.runing.info.tests.in.progress.terminated.tre.node=Tests in Progress: Terminated
|
||||
delete.confirmation.dialog.title=Delete Confirmation
|
||||
move.up.action.name=Move Up
|
||||
move.down.action.name=Move Down
|
||||
memory.available.message={0} Kb
|
||||
|
||||
#code coverage
|
||||
enable.coverage.with.emma=Record code &coverage information
|
||||
merge.coverage.data=&Merge gathered coverage with suite chosen below
|
||||
record.coverage.filters.title=Packages and classes to record coverage data
|
||||
coverage.tab.title=Code Coverage
|
||||
show.swing.inspector=&Enable capturing form snapshots
|
||||
show.swing.inspector.disabled=&Enable capturing form snapshots (requires JRE 5.0 or higher)
|
||||
before.run.property.make=Make
|
||||
run.configuration.store.place.option=&Share configuration
|
||||
run.configuration.default.type.description=configuration
|
||||
|
||||
#GeneralCommandLine
|
||||
run.configuration.error.no.jdk.specified=No JDK specified
|
||||
run.configuration.cannot.find.vm.executable=Cannot find VM executable
|
||||
|
||||
logs.tab.title=Logs
|
||||
before.launch.panel.title=Before launch
|
||||
action.name.save.as.configuration=Save As
|
||||
default.junit.config.name.all.in.module=All in {0}
|
||||
default.junit.config.name.all.in.package.in.module={0} in {1}
|
||||
environment.variables.dialog.title=Environment Variables
|
||||
environment.variables.component.title=&Environment Variables
|
||||
down.the.stack.trace=Down the stack trace
|
||||
up.the.stack.trace=Up the stack trace
|
||||
configuration.action.chooser.title=Choose configuration type to run
|
||||
env.vars.checkbox.title=&Include parent environment variables
|
||||
|
||||
before.launch.compile.step=Make
|
||||
execute.before.run.debug.dialog.title=Execute {0} Before Run/Debug
|
||||
|
||||
export.test.results.filename=Test Results - {0}
|
||||
export.test.results.succeeded=<html>Test results exported successfully to <a href="#a">{0}</a></html>
|
||||
export.test.results.failed=Test results export failed: {0}
|
||||
export.test.results.custom.template.chooser.title=Choose Custom Template
|
||||
export.test.results.output.folder.chooser.title=Choose Output Folder
|
||||
export.test.results.custom.template.path.empty=User-defined tempate path is empty
|
||||
export.test.results.custom.template.not.found=User-defined tempate file ''{0}'' is not found
|
||||
export.test.results.task.name=Exporting test results
|
||||
export.test.results.open.editor=O&pen exported file in editor
|
||||
export.test.results.open.browser=O&pen exported file in browser
|
||||
export.test.results.dialog.title=Export Test Results
|
||||
export.test.results.output.path.empty=Output path is empty
|
||||
export.test.results.output.filename.empty=Output file name is empty
|
||||
|
||||
+255
-255
@@ -1,256 +1,256 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.xdebugger.impl.ui;
|
||||
|
||||
import com.intellij.debugger.ui.DebuggerContentInfo;
|
||||
import com.intellij.execution.DefaultExecutionResult;
|
||||
import com.intellij.execution.ExecutionResult;
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.configurations.RunProfile;
|
||||
import com.intellij.execution.executors.DefaultDebugExecutor;
|
||||
import com.intellij.execution.process.ProcessAdapter;
|
||||
import com.intellij.execution.process.ProcessEvent;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
import com.intellij.execution.runners.ExecutionEnvironment;
|
||||
import com.intellij.execution.runners.ProgramRunner;
|
||||
import com.intellij.execution.runners.RestartAction;
|
||||
import com.intellij.execution.runners.RunContentBuilder;
|
||||
import com.intellij.execution.ui.*;
|
||||
import com.intellij.execution.ui.actions.CloseAction;
|
||||
import com.intellij.execution.ui.layout.PlaceInGrid;
|
||||
import com.intellij.ide.CommonActionsManager;
|
||||
import com.intellij.ide.actions.ContextHelpAction;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.ui.content.Content;
|
||||
import com.intellij.ui.content.tabs.PinToolwindowTabAction;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.xdebugger.XDebugProcess;
|
||||
import com.intellij.xdebugger.XDebugSession;
|
||||
import com.intellij.xdebugger.XDebuggerBundle;
|
||||
import com.intellij.xdebugger.impl.XDebugSessionImpl;
|
||||
import com.intellij.xdebugger.impl.actions.XDebuggerActions;
|
||||
import com.intellij.xdebugger.impl.frame.XDebugViewBase;
|
||||
import com.intellij.xdebugger.impl.frame.XFramesView;
|
||||
import com.intellij.xdebugger.impl.frame.XVariablesView;
|
||||
import com.intellij.xdebugger.impl.frame.XWatchesView;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author spleaner
|
||||
*/
|
||||
public class XDebugSessionTab extends DebuggerSessionTabBase {
|
||||
private final String mySessionName;
|
||||
private final RunnerLayoutUi myUi;
|
||||
private XWatchesView myWatchesView;
|
||||
private final List<XDebugViewBase> myViews = new ArrayList<XDebugViewBase>();
|
||||
|
||||
public XDebugSessionTab(@NotNull final Project project, @NotNull final String sessionName) {
|
||||
super(project);
|
||||
mySessionName = sessionName;
|
||||
|
||||
myUi = RunnerLayoutUi.Factory.getInstance(project).create("Debug", "unknown!", sessionName, this);
|
||||
myUi.getDefaults().initTabDefaults(0, "Debug", null);
|
||||
|
||||
myUi.getOptions().setTopToolbar(createTopToolbar(), ActionPlaces.DEBUGGER_TOOLBAR);
|
||||
}
|
||||
|
||||
private Content createConsoleContent() {
|
||||
return myUi.createContent(DebuggerContentInfo.CONSOLE_CONTENT, myConsole.getComponent(),
|
||||
XDebuggerBundle.message("debugger.session.tab.console.content.name"), XDebuggerUIConstants.CONSOLE_TAB_ICON,
|
||||
myConsole.getPreferredFocusableComponent());
|
||||
}
|
||||
|
||||
private Content createVariablesContent(final XDebugSession session) {
|
||||
final XVariablesView variablesView = new XVariablesView(session, this);
|
||||
myViews.add(variablesView);
|
||||
return myUi.createContent(DebuggerContentInfo.VARIABLES_CONTENT, variablesView.getPanel(),
|
||||
XDebuggerBundle.message("debugger.session.tab.variables.title"), XDebuggerUIConstants.VARIABLES_TAB_ICON, null);
|
||||
}
|
||||
|
||||
private Content createWatchesContent(final XDebugSession session, final XDebugSessionData sessionData) {
|
||||
myWatchesView = new XWatchesView(session, this, sessionData);
|
||||
myViews.add(myWatchesView);
|
||||
Content watchesContent = myUi.createContent(DebuggerContentInfo.WATCHES_CONTENT, myWatchesView.getMainPanel(),
|
||||
XDebuggerBundle.message("debugger.session.tab.watches.title"), XDebuggerUIConstants.WATCHES_TAB_ICON, null);
|
||||
|
||||
ActionGroup group = (ActionGroup)ActionManager.getInstance().getAction(XDebuggerActions.WATCHES_TREE_TOOLBAR_GROUP);
|
||||
watchesContent.setActions(group, ActionPlaces.DEBUGGER_TOOLBAR, myWatchesView.getTree());
|
||||
return watchesContent;
|
||||
}
|
||||
|
||||
private Content createFramesContent(final XDebugSession session) {
|
||||
final XFramesView framesView = new XFramesView(session, this);
|
||||
myViews.add(framesView);
|
||||
Content framesContent = myUi.createContent(DebuggerContentInfo.FRAME_CONTENT, framesView.getMainPanel(),
|
||||
XDebuggerBundle.message("debugger.session.tab.frames.title"), XDebuggerUIConstants.FRAMES_TAB_ICON, null);
|
||||
final DefaultActionGroup framesGroup = new DefaultActionGroup();
|
||||
|
||||
CommonActionsManager actionsManager = CommonActionsManager.getInstance();
|
||||
framesGroup.add(actionsManager.createPrevOccurenceAction(framesView.getFramesList()));
|
||||
framesGroup.add(actionsManager.createNextOccurenceAction(framesView.getFramesList()));
|
||||
|
||||
framesContent.setActions(framesGroup, ActionPlaces.DEBUGGER_TOOLBAR, framesView.getFramesList());
|
||||
return framesContent;
|
||||
}
|
||||
|
||||
private static DefaultActionGroup createTopToolbar() {
|
||||
DefaultActionGroup stepping = new DefaultActionGroup();
|
||||
ActionManager actionManager = ActionManager.getInstance();
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.SHOW_EXECUTION_POINT));
|
||||
stepping.addSeparator();
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.STEP_OVER));
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.STEP_INTO));
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.FORCE_STEP_INTO));
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.STEP_OUT));
|
||||
stepping.addSeparator();
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.RUN_TO_CURSOR));
|
||||
return stepping;
|
||||
}
|
||||
|
||||
public XDebugSessionData saveData() {
|
||||
final List<String> watchExpressions = myWatchesView.getWatchExpressions();
|
||||
return new XDebugSessionData(ArrayUtil.toStringArray(watchExpressions));
|
||||
}
|
||||
|
||||
public ExecutionConsole getConsole() {
|
||||
return myConsole;
|
||||
}
|
||||
|
||||
public String getSessionName() {
|
||||
return mySessionName;
|
||||
}
|
||||
|
||||
public void rebuildViews() {
|
||||
for (XDebugViewBase view : myViews) {
|
||||
view.rebuildView();
|
||||
}
|
||||
}
|
||||
|
||||
public RunContentDescriptor attachToSession(final @NotNull XDebugSession session, final @Nullable ProgramRunner runner,
|
||||
final @Nullable ExecutionEnvironment env,
|
||||
final @NotNull XDebugSessionData sessionData) {
|
||||
return initUI(session, sessionData, env, runner);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static ExecutionResult createExecutionResult(@NotNull final XDebugSession session) {
|
||||
final XDebugProcess debugProcess = session.getDebugProcess();
|
||||
ProcessHandler processHandler = debugProcess.getProcessHandler();
|
||||
processHandler.addProcessListener(new ProcessAdapter() {
|
||||
public void processTerminated(final ProcessEvent event) {
|
||||
((XDebugSessionImpl)session).stopImpl();
|
||||
}
|
||||
});
|
||||
return new DefaultExecutionResult(debugProcess.createConsole(), processHandler);
|
||||
}
|
||||
|
||||
public XWatchesView getWatchesView() {
|
||||
return myWatchesView;
|
||||
}
|
||||
|
||||
private RunContentDescriptor initUI(final @NotNull XDebugSession session, final @NotNull XDebugSessionData sessionData,
|
||||
final @Nullable ExecutionEnvironment environment, final @Nullable ProgramRunner runner) {
|
||||
ExecutionResult executionResult = createExecutionResult(session);
|
||||
myConsole = executionResult.getExecutionConsole();
|
||||
myRunContentDescriptor = new RunContentDescriptor(myConsole, executionResult.getProcessHandler(), myUi.getComponent(), getSessionName());
|
||||
|
||||
myUi.addContent(createFramesContent(session), 0, PlaceInGrid.left, false);
|
||||
myUi.addContent(createVariablesContent(session), 0, PlaceInGrid.center, false);
|
||||
myUi.addContent(createWatchesContent(session, sessionData), 0, PlaceInGrid.right, false);
|
||||
final Content consoleContent = createConsoleContent();
|
||||
myUi.addContent(consoleContent, 1, PlaceInGrid.bottom, false);
|
||||
if (myConsole instanceof ObservableConsoleView) {
|
||||
ObservableConsoleView observable = (ObservableConsoleView)myConsole;
|
||||
observable.addChangeListener(new ObservableConsoleView.ChangeListener() {
|
||||
public void contentAdded(final Collection<ConsoleViewContentType> types) {
|
||||
if (types.contains(ConsoleViewContentType.ERROR_OUTPUT) || types.contains(ConsoleViewContentType.SYSTEM_OUTPUT)) {
|
||||
consoleContent.fireAlert();
|
||||
}
|
||||
}
|
||||
}, consoleContent);
|
||||
}
|
||||
session.getDebugProcess().registerAdditionalContent(myUi);
|
||||
RunContentBuilder.addAdditionalConsoleEditorActions(myConsole, consoleContent);
|
||||
myUi.addContent(consoleContent, 0, PlaceInGrid.bottom, false);
|
||||
|
||||
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
return myRunContentDescriptor;
|
||||
}
|
||||
|
||||
DefaultActionGroup group = new DefaultActionGroup();
|
||||
final Executor executor = DefaultDebugExecutor.getDebugExecutorInstance();
|
||||
if (runner != null && environment != null) {
|
||||
RestartAction restartAction = new RestartAction(executor, runner, myRunContentDescriptor.getProcessHandler(), XDebuggerUIConstants.DEBUG_AGAIN_ICON,
|
||||
myRunContentDescriptor, environment);
|
||||
group.add(restartAction);
|
||||
restartAction.registerShortcut(myUi.getComponent());
|
||||
}
|
||||
|
||||
addActionToGroup(group, XDebuggerActions.RESUME);
|
||||
addActionToGroup(group, XDebuggerActions.PAUSE);
|
||||
addActionToGroup(group, IdeActions.ACTION_STOP_PROGRAM);
|
||||
|
||||
group.addSeparator();
|
||||
|
||||
addActionToGroup(group, XDebuggerActions.VIEW_BREAKPOINTS);
|
||||
addActionToGroup(group, XDebuggerActions.MUTE_BREAKPOINTS);
|
||||
|
||||
group.addSeparator();
|
||||
//addAction(group, DebuggerActions.EXPORT_THREADS);
|
||||
group.addSeparator();
|
||||
|
||||
group.add(myUi.getOptions().getLayoutActions());
|
||||
|
||||
group.addSeparator();
|
||||
|
||||
group.add(PinToolwindowTabAction.getPinAction());
|
||||
group.add(new CloseAction(executor, myRunContentDescriptor, getProject()));
|
||||
group.add(new ContextHelpAction(executor.getHelpId()));
|
||||
|
||||
myUi.getOptions().setLeftToolbar(group, ActionPlaces.DEBUGGER_TOOLBAR);
|
||||
|
||||
if (environment != null) {
|
||||
final RunProfile runConfiguration = environment.getRunProfile();
|
||||
registerFileMatcher(runConfiguration);
|
||||
initLogConsoles(runConfiguration, myRunContentDescriptor.getProcessHandler());
|
||||
}
|
||||
|
||||
rebuildViews();
|
||||
|
||||
return myRunContentDescriptor;
|
||||
}
|
||||
|
||||
private static void addActionToGroup(final DefaultActionGroup group, final String actionId) {
|
||||
AnAction action = ActionManager.getInstance().getAction(actionId);
|
||||
if (action != null) group.add(action);
|
||||
}
|
||||
|
||||
public RunnerLayoutUi getUi() {
|
||||
return myUi;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public RunContentDescriptor getRunContentDescriptor() {
|
||||
return myRunContentDescriptor;
|
||||
}
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.xdebugger.impl.ui;
|
||||
|
||||
import com.intellij.debugger.ui.DebuggerContentInfo;
|
||||
import com.intellij.execution.DefaultExecutionResult;
|
||||
import com.intellij.execution.ExecutionResult;
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.configurations.RunProfile;
|
||||
import com.intellij.execution.executors.DefaultDebugExecutor;
|
||||
import com.intellij.execution.process.ProcessAdapter;
|
||||
import com.intellij.execution.process.ProcessEvent;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
import com.intellij.execution.runners.ExecutionEnvironment;
|
||||
import com.intellij.execution.runners.ProgramRunner;
|
||||
import com.intellij.execution.runners.RestartAction;
|
||||
import com.intellij.execution.runners.RunContentBuilder;
|
||||
import com.intellij.execution.ui.*;
|
||||
import com.intellij.execution.ui.actions.CloseAction;
|
||||
import com.intellij.execution.ui.layout.PlaceInGrid;
|
||||
import com.intellij.ide.CommonActionsManager;
|
||||
import com.intellij.ide.actions.ContextHelpAction;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.ui.content.Content;
|
||||
import com.intellij.ui.content.tabs.PinToolwindowTabAction;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.xdebugger.XDebugProcess;
|
||||
import com.intellij.xdebugger.XDebugSession;
|
||||
import com.intellij.xdebugger.XDebuggerBundle;
|
||||
import com.intellij.xdebugger.impl.XDebugSessionImpl;
|
||||
import com.intellij.xdebugger.impl.actions.XDebuggerActions;
|
||||
import com.intellij.xdebugger.impl.frame.XDebugViewBase;
|
||||
import com.intellij.xdebugger.impl.frame.XFramesView;
|
||||
import com.intellij.xdebugger.impl.frame.XVariablesView;
|
||||
import com.intellij.xdebugger.impl.frame.XWatchesView;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author spleaner
|
||||
*/
|
||||
public class XDebugSessionTab extends DebuggerSessionTabBase {
|
||||
private final String mySessionName;
|
||||
private final RunnerLayoutUi myUi;
|
||||
private XWatchesView myWatchesView;
|
||||
private final List<XDebugViewBase> myViews = new ArrayList<XDebugViewBase>();
|
||||
|
||||
public XDebugSessionTab(@NotNull final Project project, @NotNull final String sessionName) {
|
||||
super(project);
|
||||
mySessionName = sessionName;
|
||||
|
||||
myUi = RunnerLayoutUi.Factory.getInstance(project).create("Debug", "unknown!", sessionName, this);
|
||||
myUi.getDefaults().initTabDefaults(0, "Debug", null);
|
||||
|
||||
myUi.getOptions().setTopToolbar(createTopToolbar(), ActionPlaces.DEBUGGER_TOOLBAR);
|
||||
}
|
||||
|
||||
private Content createConsoleContent() {
|
||||
return myUi.createContent(DebuggerContentInfo.CONSOLE_CONTENT, myConsole.getComponent(),
|
||||
XDebuggerBundle.message("debugger.session.tab.console.content.name"), XDebuggerUIConstants.CONSOLE_TAB_ICON,
|
||||
myConsole.getPreferredFocusableComponent());
|
||||
}
|
||||
|
||||
private Content createVariablesContent(final XDebugSession session) {
|
||||
final XVariablesView variablesView = new XVariablesView(session, this);
|
||||
myViews.add(variablesView);
|
||||
return myUi.createContent(DebuggerContentInfo.VARIABLES_CONTENT, variablesView.getPanel(),
|
||||
XDebuggerBundle.message("debugger.session.tab.variables.title"), XDebuggerUIConstants.VARIABLES_TAB_ICON, null);
|
||||
}
|
||||
|
||||
private Content createWatchesContent(final XDebugSession session, final XDebugSessionData sessionData) {
|
||||
myWatchesView = new XWatchesView(session, this, sessionData);
|
||||
myViews.add(myWatchesView);
|
||||
Content watchesContent = myUi.createContent(DebuggerContentInfo.WATCHES_CONTENT, myWatchesView.getMainPanel(),
|
||||
XDebuggerBundle.message("debugger.session.tab.watches.title"), XDebuggerUIConstants.WATCHES_TAB_ICON, null);
|
||||
|
||||
ActionGroup group = (ActionGroup)ActionManager.getInstance().getAction(XDebuggerActions.WATCHES_TREE_TOOLBAR_GROUP);
|
||||
watchesContent.setActions(group, ActionPlaces.DEBUGGER_TOOLBAR, myWatchesView.getTree());
|
||||
return watchesContent;
|
||||
}
|
||||
|
||||
private Content createFramesContent(final XDebugSession session) {
|
||||
final XFramesView framesView = new XFramesView(session, this);
|
||||
myViews.add(framesView);
|
||||
Content framesContent = myUi.createContent(DebuggerContentInfo.FRAME_CONTENT, framesView.getMainPanel(),
|
||||
XDebuggerBundle.message("debugger.session.tab.frames.title"), XDebuggerUIConstants.FRAMES_TAB_ICON, null);
|
||||
final DefaultActionGroup framesGroup = new DefaultActionGroup();
|
||||
|
||||
CommonActionsManager actionsManager = CommonActionsManager.getInstance();
|
||||
framesGroup.add(actionsManager.createPrevOccurenceAction(framesView.getFramesList()));
|
||||
framesGroup.add(actionsManager.createNextOccurenceAction(framesView.getFramesList()));
|
||||
|
||||
framesContent.setActions(framesGroup, ActionPlaces.DEBUGGER_TOOLBAR, framesView.getFramesList());
|
||||
return framesContent;
|
||||
}
|
||||
|
||||
private static DefaultActionGroup createTopToolbar() {
|
||||
DefaultActionGroup stepping = new DefaultActionGroup();
|
||||
ActionManager actionManager = ActionManager.getInstance();
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.SHOW_EXECUTION_POINT));
|
||||
stepping.addSeparator();
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.STEP_OVER));
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.STEP_INTO));
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.FORCE_STEP_INTO));
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.STEP_OUT));
|
||||
stepping.addSeparator();
|
||||
stepping.add(actionManager.getAction(XDebuggerActions.RUN_TO_CURSOR));
|
||||
return stepping;
|
||||
}
|
||||
|
||||
public XDebugSessionData saveData() {
|
||||
final List<String> watchExpressions = myWatchesView.getWatchExpressions();
|
||||
return new XDebugSessionData(ArrayUtil.toStringArray(watchExpressions));
|
||||
}
|
||||
|
||||
public ExecutionConsole getConsole() {
|
||||
return myConsole;
|
||||
}
|
||||
|
||||
public String getSessionName() {
|
||||
return mySessionName;
|
||||
}
|
||||
|
||||
public void rebuildViews() {
|
||||
for (XDebugViewBase view : myViews) {
|
||||
view.rebuildView();
|
||||
}
|
||||
}
|
||||
|
||||
public RunContentDescriptor attachToSession(final @NotNull XDebugSession session, final @Nullable ProgramRunner runner,
|
||||
final @Nullable ExecutionEnvironment env,
|
||||
final @NotNull XDebugSessionData sessionData) {
|
||||
return initUI(session, sessionData, env, runner);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static ExecutionResult createExecutionResult(@NotNull final XDebugSession session) {
|
||||
final XDebugProcess debugProcess = session.getDebugProcess();
|
||||
ProcessHandler processHandler = debugProcess.getProcessHandler();
|
||||
processHandler.addProcessListener(new ProcessAdapter() {
|
||||
public void processTerminated(final ProcessEvent event) {
|
||||
((XDebugSessionImpl)session).stopImpl();
|
||||
}
|
||||
});
|
||||
return new DefaultExecutionResult(debugProcess.createConsole(), processHandler);
|
||||
}
|
||||
|
||||
public XWatchesView getWatchesView() {
|
||||
return myWatchesView;
|
||||
}
|
||||
|
||||
private RunContentDescriptor initUI(final @NotNull XDebugSession session, final @NotNull XDebugSessionData sessionData,
|
||||
final @Nullable ExecutionEnvironment environment, final @Nullable ProgramRunner runner) {
|
||||
ExecutionResult executionResult = createExecutionResult(session);
|
||||
myConsole = executionResult.getExecutionConsole();
|
||||
myRunContentDescriptor = new RunContentDescriptor(myConsole, executionResult.getProcessHandler(), myUi.getComponent(), getSessionName());
|
||||
|
||||
myUi.addContent(createFramesContent(session), 0, PlaceInGrid.left, false);
|
||||
myUi.addContent(createVariablesContent(session), 0, PlaceInGrid.center, false);
|
||||
myUi.addContent(createWatchesContent(session, sessionData), 0, PlaceInGrid.right, false);
|
||||
final Content consoleContent = createConsoleContent();
|
||||
myUi.addContent(consoleContent, 1, PlaceInGrid.bottom, false);
|
||||
if (myConsole instanceof ObservableConsoleView) {
|
||||
ObservableConsoleView observable = (ObservableConsoleView)myConsole;
|
||||
observable.addChangeListener(new ObservableConsoleView.ChangeListener() {
|
||||
public void contentAdded(final Collection<ConsoleViewContentType> types) {
|
||||
if (types.contains(ConsoleViewContentType.ERROR_OUTPUT) || types.contains(ConsoleViewContentType.SYSTEM_OUTPUT)) {
|
||||
consoleContent.fireAlert();
|
||||
}
|
||||
}
|
||||
}, consoleContent);
|
||||
}
|
||||
session.getDebugProcess().registerAdditionalContent(myUi);
|
||||
RunContentBuilder.addAdditionalConsoleEditorActions(myConsole, consoleContent);
|
||||
myUi.addContent(consoleContent, 0, PlaceInGrid.bottom, false);
|
||||
|
||||
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
return myRunContentDescriptor;
|
||||
}
|
||||
|
||||
DefaultActionGroup group = new DefaultActionGroup();
|
||||
final Executor executor = DefaultDebugExecutor.getDebugExecutorInstance();
|
||||
if (runner != null && environment != null) {
|
||||
RestartAction restartAction = new RestartAction(executor, runner, myRunContentDescriptor.getProcessHandler(), XDebuggerUIConstants.DEBUG_AGAIN_ICON,
|
||||
myRunContentDescriptor, environment);
|
||||
group.add(restartAction);
|
||||
restartAction.registerShortcut(myUi.getComponent());
|
||||
}
|
||||
|
||||
addActionToGroup(group, XDebuggerActions.RESUME);
|
||||
addActionToGroup(group, XDebuggerActions.PAUSE);
|
||||
addActionToGroup(group, IdeActions.ACTION_STOP_PROGRAM);
|
||||
|
||||
group.addSeparator();
|
||||
|
||||
addActionToGroup(group, XDebuggerActions.VIEW_BREAKPOINTS);
|
||||
addActionToGroup(group, XDebuggerActions.MUTE_BREAKPOINTS);
|
||||
|
||||
group.addSeparator();
|
||||
//addAction(group, DebuggerActions.EXPORT_THREADS);
|
||||
group.addSeparator();
|
||||
|
||||
group.add(myUi.getOptions().getLayoutActions());
|
||||
|
||||
group.addSeparator();
|
||||
|
||||
group.add(PinToolwindowTabAction.getPinAction());
|
||||
group.add(new CloseAction(executor, myRunContentDescriptor, getProject()));
|
||||
group.add(new ContextHelpAction(executor.getHelpId()));
|
||||
|
||||
myUi.getOptions().setLeftToolbar(group, ActionPlaces.DEBUGGER_TOOLBAR);
|
||||
|
||||
if (environment != null) {
|
||||
final RunProfile runConfiguration = environment.getRunProfile();
|
||||
registerFileMatcher(runConfiguration);
|
||||
initLogConsoles(runConfiguration, myRunContentDescriptor.getProcessHandler());
|
||||
}
|
||||
|
||||
rebuildViews();
|
||||
|
||||
return myRunContentDescriptor;
|
||||
}
|
||||
|
||||
private static void addActionToGroup(final DefaultActionGroup group, final String actionId) {
|
||||
AnAction action = ActionManager.getInstance().getAction(actionId);
|
||||
if (action != null) group.add(action);
|
||||
}
|
||||
|
||||
public RunnerLayoutUi getUi() {
|
||||
return myUi;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public RunContentDescriptor getRunContentDescriptor() {
|
||||
return myRunContentDescriptor;
|
||||
}
|
||||
}
|
||||
+85
-85
@@ -1,85 +1,85 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.xdebugger.impl.ui.tree;
|
||||
|
||||
import com.intellij.codeInsight.hint.HintManager;
|
||||
import com.intellij.ui.SimpleColoredComponent;
|
||||
import com.intellij.xdebugger.frame.XValueModifier;
|
||||
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
|
||||
import com.intellij.xdebugger.impl.ui.XDebuggerUIConstants;
|
||||
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class SetValueInplaceEditor extends XDebuggerTreeInplaceEditor {
|
||||
private final JPanel myEditorPanel;
|
||||
private final XValueModifier myModifier;
|
||||
private final XValueNodeImpl myValueNode;
|
||||
|
||||
public SetValueInplaceEditor(final XValueNodeImpl node, @NotNull final String nodeName) {
|
||||
super(node, "setValue");
|
||||
myValueNode = node;
|
||||
myModifier = myValueNode.getValueContainer().getModifier();
|
||||
|
||||
myEditorPanel = new JPanel();
|
||||
myEditorPanel.setLayout(new BoxLayout(myEditorPanel, BoxLayout.X_AXIS));
|
||||
SimpleColoredComponent nameLabel = new SimpleColoredComponent();
|
||||
nameLabel.setIcon(getNode().getIcon());
|
||||
nameLabel.append(nodeName, XDebuggerUIConstants.VALUE_NAME_ATTRIBUTES);
|
||||
|
||||
myEditorPanel.add(nameLabel);
|
||||
|
||||
myEditorPanel.add(myExpressionEditor.getComponent());
|
||||
final String value = myModifier != null ? myModifier.getInitialValueEditorText() : null;
|
||||
myExpressionEditor.setText(value != null ? value : "");
|
||||
myExpressionEditor.selectAll();
|
||||
}
|
||||
|
||||
protected JComponent createInplaceEditorComponent() {
|
||||
return myEditorPanel;
|
||||
}
|
||||
|
||||
public void doOKAction() {
|
||||
if (myModifier == null) return;
|
||||
|
||||
myExpressionEditor.saveTextInHistory();
|
||||
final XDebuggerTreeState treeState = XDebuggerTreeState.saveState(myTree);
|
||||
myValueNode.setValueModificationStarted();
|
||||
myModifier.setValue(myExpressionEditor.getText(), new XValueModifier.XModificationCallback() {
|
||||
public void valueModified() {
|
||||
DebuggerUIUtil.invokeOnEventDispatch(new Runnable() {
|
||||
public void run() {
|
||||
myTree.rebuildAndRestore(treeState);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void errorOccurred(@NotNull final String errorMessage) {
|
||||
DebuggerUIUtil.invokeOnEventDispatch(new Runnable() {
|
||||
public void run() {
|
||||
myTree.rebuildAndRestore(treeState);
|
||||
HintManager.getInstance().showErrorHint(myExpressionEditor.getEditor(), errorMessage);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
super.doOKAction();
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.xdebugger.impl.ui.tree;
|
||||
|
||||
import com.intellij.codeInsight.hint.HintManager;
|
||||
import com.intellij.ui.SimpleColoredComponent;
|
||||
import com.intellij.xdebugger.frame.XValueModifier;
|
||||
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
|
||||
import com.intellij.xdebugger.impl.ui.XDebuggerUIConstants;
|
||||
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class SetValueInplaceEditor extends XDebuggerTreeInplaceEditor {
|
||||
private final JPanel myEditorPanel;
|
||||
private final XValueModifier myModifier;
|
||||
private final XValueNodeImpl myValueNode;
|
||||
|
||||
public SetValueInplaceEditor(final XValueNodeImpl node, @NotNull final String nodeName) {
|
||||
super(node, "setValue");
|
||||
myValueNode = node;
|
||||
myModifier = myValueNode.getValueContainer().getModifier();
|
||||
|
||||
myEditorPanel = new JPanel();
|
||||
myEditorPanel.setLayout(new BoxLayout(myEditorPanel, BoxLayout.X_AXIS));
|
||||
SimpleColoredComponent nameLabel = new SimpleColoredComponent();
|
||||
nameLabel.setIcon(getNode().getIcon());
|
||||
nameLabel.append(nodeName, XDebuggerUIConstants.VALUE_NAME_ATTRIBUTES);
|
||||
|
||||
myEditorPanel.add(nameLabel);
|
||||
|
||||
myEditorPanel.add(myExpressionEditor.getComponent());
|
||||
final String value = myModifier != null ? myModifier.getInitialValueEditorText() : null;
|
||||
myExpressionEditor.setText(value != null ? value : "");
|
||||
myExpressionEditor.selectAll();
|
||||
}
|
||||
|
||||
protected JComponent createInplaceEditorComponent() {
|
||||
return myEditorPanel;
|
||||
}
|
||||
|
||||
public void doOKAction() {
|
||||
if (myModifier == null) return;
|
||||
|
||||
myExpressionEditor.saveTextInHistory();
|
||||
final XDebuggerTreeState treeState = XDebuggerTreeState.saveState(myTree);
|
||||
myValueNode.setValueModificationStarted();
|
||||
myModifier.setValue(myExpressionEditor.getText(), new XValueModifier.XModificationCallback() {
|
||||
public void valueModified() {
|
||||
DebuggerUIUtil.invokeOnEventDispatch(new Runnable() {
|
||||
public void run() {
|
||||
myTree.rebuildAndRestore(treeState);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void errorOccurred(@NotNull final String errorMessage) {
|
||||
DebuggerUIUtil.invokeOnEventDispatch(new Runnable() {
|
||||
public void run() {
|
||||
myTree.rebuildAndRestore(treeState);
|
||||
HintManager.getInstance().showErrorHint(myExpressionEditor.getEditor(), errorMessage);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
super.doOKAction();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user