public List<CompilerMessage> parseStream(String data) { List<CompilerMessage> messages = new ArrayList<CompilerMessage>(); Matcher matcher = pattern.matcher(data); if (matcher.find()) { String filename = matcher.group(1); String url = CompilationTaskWorker.generateFileUrl(basePath, filename); messages.add( new CompilerMessage( CompilerMessageCategory.ERROR, matcher.group(3), url, Integer.parseInt(matcher.group(2)), -1)); } else { // Ignore error lines that start with the compiler as the line that follows this contains // the error that // we're interested in. Otherwise, the error is more severe and we should display it if (!StringUtils.startsWith(data, GoSdkUtil.getCompilerName(goSdkData.TARGET_ARCH))) { messages.add(new CompilerMessage(CompilerMessageCategory.ERROR, data, null, -1, -1)); } } return messages; }
private void make( final CompileContext context, final Chunk<Module> moduleChunk, VirtualFile[] files, OutputSink sink) { String basePath = project.getBaseDir().getPath(); File makeFile = new File(basePath, "/Makefile"); if (!makeFile.exists()) { // TODO Generate the Makefile context.addMessage( CompilerMessageCategory.ERROR, "Makefile doesn't exist at " + makeFile.getPath(), null, -1, -1); } else { GeneralCommandLine command = new GeneralCommandLine(); final Sdk projectSdk = null; final GoSdkData goSdkData = goSdkData(projectSdk); command.setExePath(getMakeBinary(projectSdk)); command.addParameter("-C"); command.addParameter(project.getBaseDir().getPath()); command.addParameter("-f"); command.addParameter(makeFile.getPath()); command.addParameter("-e"); command.addParameter("install"); command.addParameter("clean"); command .getEnvironment() .putAll( new HashMap<String, String>() { { put("GOROOT", projectSdk.getHomePath()); put("GOARCH", goSdkData.TARGET_ARCH.getName()); put("GOOS", goSdkData.TARGET_OS.getName()); put("GOBIN", goSdkData.GO_BIN_PATH); put("PATH", System.getenv("PATH") + File.pathSeparator + goSdkData.GO_BIN_PATH); put("TARGDIR", getOutputPath(context, moduleChunk)); } }); CompilationTaskWorker compilationTaskWorker = new CompilationTaskWorker(new MakeOutputStreamParser(projectSdk, goSdkData, basePath)); compilationTaskWorker.executeTask(command, basePath, context); } }