编译
eclipse编译go不显示编译语句, 有时会出现莫名其妙的错误.
目标: 修改后显示编译语句, 详细错误信息, 如下图:

修改方法:
svn checkout goclipse源码 https://code.google.com/p/goclipse/source/checkout, trunk/goclipse-n就是goclipse项目, 直接导入到eclipse中.
修改文件:

添加console变量
static MessageConsole console;
static MessageConsoleStream consoleOut;
static MessageConsoleStream consoleOutRed;
static MessageConsoleStream consoleOutGreen;
static Boolean hasPrintPath = false;
public static MessageConsoleStream getConsole() {
if(consoleOut == null) {
console = GoConstants.findConsole("Go-Life");
// console.clearConsole();
console.activate();
consoleOut = console.newMessageStream();
consoleOutRed = console.newMessageStream();
consoleOutRed.setColor(new Color(Display.getDefault(), 255, 0, 0));
consoleOutGreen = console.newMessageStream();
consoleOutGreen.setColor(new Color(Display.getDefault(), 19, 119, 62));
}
return consoleOut;
}方法compileAll(), compileCmd(), compilePkg(), installAll()也是类似修改
/**
* @param project
* @param pmonitor
* @param fileList
*/
public void compileAll(final IProject project, IProgressMonitor pmonitor, IFolder target) {
final IPath projectLocation = project.getLocation();
final IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
final String compilerPath = preferenceStore.getString(PreferenceConstants.GO_TOOL_PATH);
try {
// the path exist to find the cc
String path = System.getenv("PATH");
String[] cmd = {};
MarkerUtilities.deleteFileMarkers(target);
cmd = new String[] {
compilerPath,
GoConstants.GO_BUILD_COMMAND
};
String goPath = buildGoPath(project, projectLocation, false);
File file = new File(target.getLocation().toOSString());
ProcessBuilder builder = new ProcessBuilder(cmd).directory(file);
builder.environment().put(GoConstants.GOROOT, Environment.INSTANCE.getGoRoot(project));
builder.environment().put(GoConstants.GOPATH, goPath);
builder.environment().put("PATH", path);
Process p = builder.start();
String cmdStr = "";
for(String each : cmd) {
cmdStr += each + " ";
}
consoleOut.flush();
consoleOutGreen.write("\n");
consoleOutGreen.write("in : " + file);
consoleOutGreen.write("\n");
consoleOutGreen.write("cmd: " + cmdStr);
consoleOutGreen.write("\n");
consoleOutGreen.flush();
try {
p.waitFor();
} catch (InterruptedException e) {
Activator.logInfo(e);
}
refreshProject(project, pmonitor);
InputStream is = p.getInputStream();
InputStream es = p.getErrorStream();
StreamAsLines sal = new StreamAsLines();
sal.setCombineLines(true);
sal.process(is);
sal.process(es);
String currentPackage = "";
for ( String line : sal.getLines()) {
System.out.println(line);
if(line.startsWith("#")) {
currentPackage = line.replace("#", "").trim();
continue;
}
String[] elements = line.split(":");
String message = line.substring(elements[0].length()+elements[1].length()+2);
path = target.getName()+File.separator+elements[0];
IResource res = project.findMember(path);
MarkerUtilities.addMarker(res, Integer.parseInt(elements[1]), message, IMarker.SEVERITY_ERROR);
}
} catch (IOException e1) {
Activator.logInfo(e1);
}
}项目配置
解决配置Go Project Configuration 的Source总是要重新添加问题, 如下图, 重启eclipse后还要重新添加src

修改:

Environment.java
/**
* @param project
* @return
*/
private void saveProperties(IProject project) {
if(project==null){
Activator.logError("Null project given while atempting to save properties.");
return;
}
Properties properties = getProperties(project);
IPath path = project.getWorkingLocation(Activator.PLUGIN_ID);
try {
Activator.logInfo("writing to "
+ path.toOSString()
+ "/properties.xml");
// 修改这里
Properties properties2 = new Properties();
for ( Map.Entry<Object, Object> o : properties.entrySet()) {
properties2.setProperty(o.getKey().toString(), o.getValue().toString());
}
properties2.storeToXML(new FileOutputStream(path.toOSString()
+ "/properties.xml", false), project.getName()+" properties", "utf-8");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
life
life