mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
external build: send messages when building of target is started/finished (to be used in TeamCity)
This commit is contained in:
@@ -139,13 +139,16 @@ final class BuildSession implements Runnable, CanceledStatus {
|
||||
CustomBuilderMessage builderMessage = (CustomBuilderMessage)buildMessage;
|
||||
response = CmdlineProtoUtil.createCustomBuilderMessage(builderMessage.getBuilderId(), builderMessage.getMessageType(), builderMessage.getMessageText());
|
||||
}
|
||||
else {
|
||||
else if (!(buildMessage instanceof BuildingTargetProgressMessage)) {
|
||||
float done = -1.0f;
|
||||
if (buildMessage instanceof ProgressMessage) {
|
||||
done = ((ProgressMessage)buildMessage).getDone();
|
||||
}
|
||||
response = CmdlineProtoUtil.createCompileProgressMessageResponse(buildMessage.getMessageText(), done);
|
||||
}
|
||||
else {
|
||||
response = null;
|
||||
}
|
||||
if (response != null) {
|
||||
Channels.write(myChannel, CmdlineProtoUtil.toMessage(mySessionId, response));
|
||||
}
|
||||
|
||||
@@ -809,6 +809,7 @@ public class IncProjectBuilder {
|
||||
private void buildTargetsChunk(CompileContext context, final BuildTargetChunk chunk) throws ProjectBuildException {
|
||||
boolean doneSomething;
|
||||
try {
|
||||
sendBuildingTargetMessages(chunk.getTargets(), BuildingTargetProgressMessage.Event.STARTED);
|
||||
Utils.ERRORS_DETECTED_KEY.set(context, Boolean.FALSE);
|
||||
|
||||
for (BuildTarget<?> target : chunk.getTargets()) {
|
||||
@@ -864,9 +865,14 @@ public class IncProjectBuilder {
|
||||
finally {
|
||||
Utils.REMOVED_SOURCES_KEY.set(context, null);
|
||||
}
|
||||
sendBuildingTargetMessages(chunk.getTargets(), BuildingTargetProgressMessage.Event.FINISHED);
|
||||
}
|
||||
}
|
||||
|
||||
private void sendBuildingTargetMessages(@NotNull Set<? extends BuildTarget<?>> targets, @NotNull BuildingTargetProgressMessage.Event event) {
|
||||
myMessageDispatcher.processMessage(new BuildingTargetProgressMessage(targets, event));
|
||||
}
|
||||
|
||||
private static void createClasspathIndex(final BuildTargetChunk chunk) {
|
||||
final Set<File> outputDirs = new THashSet<File>(FileUtil.FILE_HASHING_STRATEGY);
|
||||
for (BuildTarget<?> target : chunk.getTargets()) {
|
||||
@@ -992,6 +998,7 @@ public class IncProjectBuilder {
|
||||
|
||||
// return true if changed something, false otherwise
|
||||
private boolean runModuleLevelBuilders(final CompileContext context, final ModuleChunk chunk) throws ProjectBuildException, IOException {
|
||||
sendBuildingTargetMessages(chunk.getTargets(), BuildingTargetProgressMessage.Event.STARTED);
|
||||
for (BuilderCategory category : BuilderCategory.values()) {
|
||||
for (ModuleLevelBuilder builder : myBuilderRegistry.getBuilders(category)) {
|
||||
builder.chunkBuildStarted(context, chunk);
|
||||
@@ -1105,6 +1112,7 @@ public class IncProjectBuilder {
|
||||
builder.chunkBuildFinished(context, chunk);
|
||||
}
|
||||
}
|
||||
sendBuildingTargetMessages(chunk.getTargets(), BuildingTargetProgressMessage.Event.FINISHED);
|
||||
}
|
||||
|
||||
return doneSomething;
|
||||
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package org.jetbrains.jps.incremental.messages;
|
||||
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.NotNullFunction;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jps.builders.BuildTarget;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class BuildingTargetProgressMessage extends BuildMessage {
|
||||
private final Collection<? extends BuildTarget<?>> myTargets;
|
||||
@NotNull private final Event myEventType;
|
||||
|
||||
public enum Event {
|
||||
STARTED, FINISHED
|
||||
}
|
||||
|
||||
public BuildingTargetProgressMessage(@NotNull Collection<? extends BuildTarget<?>> targets, @NotNull Event event) {
|
||||
super(composeMessageText(targets, event), Kind.PROGRESS);
|
||||
myTargets = targets;
|
||||
myEventType = event;
|
||||
}
|
||||
|
||||
private static String composeMessageText(Collection<? extends BuildTarget<?>> targets, Event event) {
|
||||
String targetsString = StringUtil.join(targets, new NotNullFunction<BuildTarget<?>, String>() {
|
||||
@NotNull
|
||||
@Override
|
||||
public String fun(BuildTarget<?> dom) {
|
||||
return dom.getPresentableName();
|
||||
}
|
||||
}, ", ");
|
||||
return (event == Event.STARTED ? "Started" : "Finished") + " building " + targetsString;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Collection<? extends BuildTarget<?>> getTargets() {
|
||||
return myTargets;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Event getEventType() {
|
||||
return myEventType;
|
||||
}
|
||||
}
|
||||
@@ -1183,9 +1183,9 @@ public class StringUtil extends StringUtilRt {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static <T> String join(@NotNull Collection<T> items, @NotNull Function<T, String> f, @NotNull @NonNls String separator) {
|
||||
public static <T> String join(@NotNull Collection<? extends T> items, @NotNull Function<? super T, String> f, @NotNull @NonNls String separator) {
|
||||
if (items.isEmpty()) return "";
|
||||
return join((Iterable<T>)items, f, separator);
|
||||
return join((Iterable<? extends T>)items, f, separator);
|
||||
}
|
||||
|
||||
public static String join(@NotNull Iterable<?> items, @NotNull @NonNls String separator) {
|
||||
@@ -1200,7 +1200,7 @@ public class StringUtil extends StringUtilRt {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static <T> String join(@NotNull Iterable<T> items, @NotNull Function<T, String> f, @NotNull @NonNls String separator) {
|
||||
public static <T> String join(@NotNull Iterable<? extends T> items, @NotNull Function<? super T, String> f, @NotNull @NonNls String separator) {
|
||||
final StringBuilder result = new StringBuilder();
|
||||
for (T item : items) {
|
||||
String string = f.fun(item);
|
||||
|
||||
Reference in New Issue
Block a user