mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
we don't need to wait until background autogeneration finished before compilation anymore
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user