we don't need to wait until background autogeneration finished before compilation anymore

This commit is contained in:
Eugene Kudelevsky
2012-02-08 15:41:40 +04:00
parent ef174126cd
commit 895f5dbbc3
3 changed files with 10 additions and 72 deletions
@@ -19,15 +19,11 @@ import com.intellij.openapi.compiler.CompilerManager;
import com.intellij.openapi.components.AbstractProjectComponent;
import com.intellij.openapi.project.Project;
import org.jetbrains.android.compiler.AndroidPrecompileTask;
import org.jetbrains.annotations.NotNull;
/**
* @author Eugene.Kudelevsky
*/
public class AndroidProjectComponent extends AbstractProjectComponent {
private volatile boolean myCompilationRunning = false;
private final Object COMPILATION_FLAG_LOCK = new Object();
protected AndroidProjectComponent(Project project) {
super(project);
}
@@ -35,26 +31,6 @@ public class AndroidProjectComponent extends AbstractProjectComponent {
@Override
public void projectOpened() {
final CompilerManager manager = CompilerManager.getInstance(myProject);
manager.addBeforeTask(new AndroidPrecompileTask(this));
}
public void setCompilationStarted() {
synchronized (COMPILATION_FLAG_LOCK) {
myCompilationRunning = true;
}
}
public void setCompilationFinished() {
synchronized (COMPILATION_FLAG_LOCK) {
myCompilationRunning = false;
}
}
public void runIfNotInCompilation(@NotNull Runnable r) {
synchronized (COMPILATION_FLAG_LOCK) {
if (!myCompilationRunning) {
r.run();
}
}
manager.addBeforeTask(new AndroidPrecompileTask());
}
}
@@ -39,7 +39,6 @@ import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
@@ -52,7 +51,6 @@ import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.ArrayUtil;
import com.intellij.util.containers.HashMap;
import com.intellij.util.containers.HashSet;
import org.jetbrains.android.AndroidProjectComponent;
import org.jetbrains.android.dom.resources.Attr;
import org.jetbrains.android.dom.resources.DeclareStyleable;
import org.jetbrains.android.dom.resources.ResourceElement;
@@ -414,32 +412,18 @@ public class AndroidCompileUtil {
public static void doGenerate(final Module module, final AndroidAutogeneratorMode mode) {
final Project project = module.getProject();
final AndroidProjectComponent component = ApplicationManager.getApplication().runReadAction(new Computable<AndroidProjectComponent>() {
@Nullable
@Override
public AndroidProjectComponent compute() {
return !project.isDisposed() ? project.getComponent(AndroidProjectComponent.class) : null;
}
});
if (component == null) {
return;
}
component.runIfNotInCompilation(new Runnable() {
@Override
assert !ApplicationManager.getApplication().isDispatchThread();
final CompileContext[] contextWrapper = new CompileContext[1];
ApplicationManager.getApplication().runReadAction(new Runnable() {
public void run() {
assert !ApplicationManager.getApplication().isDispatchThread();
final CompileContext[] contextWrapper = new CompileContext[1];
ApplicationManager.getApplication().runReadAction(new Runnable() {
public void run() {
if (project.isDisposed()) return;
CompilerTask task = new CompilerTask(project, true, "Android auto-generation", true);
CompileScope scope = new ModuleCompileScope(module, false);
contextWrapper[0] = new CompileContextImpl(project, task, scope, null, false, false);
}
});
generate(module, mode, contextWrapper[0]);
if (project.isDisposed()) return;
CompilerTask task = new CompilerTask(project, true, "Android auto-generation", true);
CompileScope scope = new ModuleCompileScope(module, false);
contextWrapper[0] = new CompileContextImpl(project, task, scope, null, false, false);
}
});
generate(module, mode, contextWrapper[0]);
}
public static boolean isModuleAffected(CompileContext context, Module module) {
@@ -35,7 +35,6 @@ import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.hash.HashSet;
import org.jetbrains.android.AndroidProjectComponent;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.sdk.AndroidPlatform;
import org.jetbrains.annotations.NotNull;
@@ -49,20 +48,12 @@ import java.util.Set;
* @author Eugene.Kudelevsky
*/
public class AndroidPrecompileTask implements CompileTask {
private final AndroidProjectComponent myOwner;
private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.compiler.AndroidPrecompileTask");
public AndroidPrecompileTask(@NotNull AndroidProjectComponent owner) {
myOwner = owner;
}
@Override
public boolean execute(CompileContext context) {
final Project project = context.getProject();
myOwner.setCompilationStarted();
ExcludedEntriesConfiguration configuration =
((CompilerConfigurationImpl)CompilerConfiguration.getInstance(project)).getExcludedEntriesConfiguration();
@@ -107,19 +98,6 @@ public class AndroidPrecompileTask implements CompileTask {
LOG.debug("Files excluded by Android: " + addedEntries.size());
CompilerManager.getInstance(project).addCompilationStatusListener(new MyCompilationStatusListener(project, addedEntries), project);
}
CompilerManager.getInstance(project).addCompilationStatusListener(new CompilationStatusAdapter() {
@Override
public void compilationFinished(boolean aborted, int errors, int warnings, final CompileContext compileContext) {
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
@Override
public void run() {
myOwner.setCompilationFinished();
}
});
}
}, project);
return true;
}