Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.gradle.api.internal.distribute;

/**
* Created by nls on 2019/4/21. Nothing.
*/
interface IDispatcher {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.gradle.api.internal.distribute.agent;

/**
* Created by nls on 2019/4/21. Nothing.
*/
public class Agent {
private String id;
private String ip;
private String name;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.gradle.api.internal.distribute.agent;

/**
* Created by nls on 2019/4/21.
*/
public interface AgentClient {

int getAliveAgentCount();

int getCanUseAgentCount();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.gradle.api.internal.distribute.agent;

/**
* Created by nls on 2019/4/21. Nothing.
*/
public class DefaultAgentClient implements AgentClient {

public int getAliveAgentCount() {
return 0;
}

public int getCanUseAgentCount() {
return 0;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.gradle.api.internal.distribute.agent;

/**
* Created by nls on 2019/4/21.
* Nothing.
*/
public class LocalMonitor {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.gradle.api.internal.distribute.agent;

/**
* Created by nls on 2019/4/21. Nothing.
*/
public class ServerConfig {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@

package org.gradle.api.internal.distribute.compile;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.gradle.api.internal.distribute.agent.AgentClient;

/**
* Created by nls on 2019/4/21. Nothing.
*/
public class CompileDispatcher {

private AgentClient agentClient;
private IFactory iFactory;
private DispatchTaskTrack taskTrack;
// private Map<String, Set<String>>

public CompileDispatcher(AgentClient client, IFactory iFactory) {
this.agentClient = client;
this.iFactory = iFactory;
}

public boolean dispatch(Map<String, Set<String>> recompileClass) {
int agentCount = agentClient.getCanUseAgentCount();
int count = 0;
Iterator<Map.Entry<String, Set<String>>> it = recompileClass.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Set<String>> entry = it.next();
DispatchTask task = iFactory.create(entry.getKey(), entry.getValue());
taskTrack.runTask(task);
if (++count > agentCount) {
break;
}
it.remove();
}
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.gradle.api.internal.distribute.compile;

import java.util.Set;

/**
* Created by nls on 2019/4/21. Nothing.
*/
public class DispatchTask {

public DispatchTask(String file, Set<String> classes) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.gradle.api.internal.distribute.compile;

import java.util.Set;

/**
* Created by nls on 2019/4/21. Nothing.
*/
public class DispatchTaskFactory implements IFactory {

@Override
public DispatchTask create(String file, Set<String> classes) {
return new DispatchTask(file, classes);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@

package org.gradle.api.internal.distribute.compile;

import org.gradle.api.internal.distribute.agent.AgentClient;

/**
* Created by nls on 2019/4/21. Nothing.
*/
public class DispatchTaskTrack {

public DispatchTaskTrack(AgentClient agent) {

}

public void runTask(DispatchTask task) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.gradle.api.internal.distribute.compile;

import java.util.Set;

/**
* Created by nls on 2019/4/21. Nothing.
*/
public interface IFactory {

DispatchTask create(String file, Set<String> classes);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.gradle.api.internal.distribute.protocol;

/**
* Created by nls on 2019/4/21. Nothing.
*/

public abstract class AbsProtocol implements IProtocol {

public abstract int getCommand();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

package org.gradle.api.internal.distribute.protocol;

/**
* Created by nls on 2019/4/21. Nothing.
*/
public interface IProtocol {

boolean decode(byte[] data);

byte[] encode();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

package org.gradle.api.internal.distribute.protocol;

/**
* Created by nls on 2019/4/21. Nothing.
*/
public class ProtocolHeader {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@

package org.gradle.api.internal.distribute.tasks;

import org.gradle.language.base.internal.compile.Compiler;
import org.gradle.api.internal.tasks.compile.JavaCompileSpec;
import org.gradle.api.internal.tasks.compile.incremental.jar.JarClasspathSnapshot;
import org.gradle.api.internal.tasks.compile.incremental.jar.PreviousCompilation;
import org.gradle.api.internal.tasks.compile.incremental.jar.JarClasspathSnapshotProvider;
import org.gradle.api.internal.tasks.compile.incremental.RecompilationSpecProvider;
import org.gradle.api.internal.tasks.compile.incremental.recomp.RecompilationSpec;
import org.gradle.api.tasks.incremental.IncrementalTaskInputs;
import org.gradle.api.tasks.WorkResult;
import org.gradle.internal.time.Time;
import org.gradle.internal.time.Timer;

/**
* Created by nls on 2019/4/21. Nothing.
*/
public class DistributeCompiler implements Compiler<JavaCompileSpec> {

private final IncrementalTaskInputs inputs;
private final Compiler<JavaCompileSpec> delegate;
private final PreviousCompilation previousCompilation;
private final RecompilationSpecProvider recompilationSpecProvider;
private final JarClasspathSnapshotProvider jarClasspathSnapshotProvider;

public DistributeCompiler(IncrementalTaskInputs inputs, Compiler<JavaCompileSpec> delegate,
PreviousCompilation previousCompilation, JarClasspathSnapshotProvider jarClasspathSnapshotProvider,
RecompilationSpecProvider recompilationSpecProvider) {
this.inputs = inputs;
this.delegate = delegate;
this.previousCompilation = previousCompilation;
this.recompilationSpecProvider = recompilationSpecProvider;
this.jarClasspathSnapshotProvider = jarClasspathSnapshotProvider;
}

@Override
public WorkResult execute(JavaCompileSpec spec) {
Timer clock = Time.startTimer();
JarClasspathSnapshot jarClasspathSnapshot = jarClasspathSnapshotProvider
.getJarClasspathSnapshot(spec.getCompileClasspath());
RecompilationSpec recompilationSpec = recompilationSpecProvider.provideRecompilationSpec(inputs,
previousCompilation, jarClasspathSnapshot);

return delegate.execute(spec);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,6 @@ public void processChange(InputFileDetails input, RecompilationSpec spec) {
return;
}
spec.getClassNames().addAll(actualDependents.getDependentClasses());
spec.addReCompileClass(className, actualDependents.getDependentClasses());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,15 @@

import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;

public class RecompilationSpec {

private final Collection<String> classesToCompile = new NormalizingClassNamesSet();
private final Map<String, LinkedHashSet<String>> classesToCompileGroup = new HashMap<>();
private String fullRebuildCause;

public Collection<String> getClassNames() {
Expand All @@ -38,14 +42,37 @@ public String getFullRebuildCause() {
}

public void setFullRebuildCause(String description, File file) {
fullRebuildCause = description != null? description : "'" + file.getName() + "' was changed";
fullRebuildCause = description != null ? description : "'" + file.getName() + "' was changed";
}

public void addReCompileClass(String file, Set<String> sets) {
LinkedHashSet<String> classSet = classesToCompileGroup.get(file);
if (classSet == null) {
classSet = LinkedHashSet<>();
classesToCompileGroup.put(file,classSet);
}
for (String cn : sets) {
classSet.add(NormalizingClassNames(cn));
}
}

public Map<String, LinkedHashSet<String>> getAllReCompileClass() {
return classesToCompileGroup;
}

private String NormalizingClassNames(String className) {
int idx = className.indexOf('$');
if (idx > 0) {
className = className.substring(0, idx);
}
return className;
}

private static class NormalizingClassNamesSet extends LinkedHashSet<String> {
@Override
public boolean add(String className) {
int idx = className.indexOf('$');
if (idx>0) {
if (idx > 0) {
className = className.substring(0, idx);
}
return super.add(className);
Expand Down