Capture indicator value before moving to another thread
This commit is contained in:
@@ -117,12 +117,7 @@ public class DeclarationHintSupport extends AbstractProjectComponent {
|
|||||||
lastIndicator = new ProgressIndicatorBase();
|
lastIndicator = new ProgressIndicatorBase();
|
||||||
|
|
||||||
// Move long resolve operation to another thread
|
// Move long resolve operation to another thread
|
||||||
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
|
searchResolvedDescriptor(jetFile, declaration, editor, lastIndicator);
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
searchResolvedDescriptor(jetFile, declaration, editor, lastIndicator);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Mouse moved out of the declaration - can stop search for descriptor
|
// Mouse moved out of the declaration - can stop search for descriptor
|
||||||
@@ -187,31 +182,38 @@ public class DeclarationHintSupport extends AbstractProjectComponent {
|
|||||||
| HintManager.HIDE_BY_SCROLLING | HintManager.HIDE_BY_OTHER_HINT | HintManager.HIDE_BY_MOUSEOVER, 0, false);
|
| HintManager.HIDE_BY_SCROLLING | HintManager.HIDE_BY_OTHER_HINT | HintManager.HIDE_BY_MOUSEOVER, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Executed in Thread Pool
|
// Moves execution from GUI thread to thread pool thread
|
||||||
private void searchResolvedDescriptor(
|
private void searchResolvedDescriptor(
|
||||||
@NotNull final JetFile jetFile,
|
@NotNull final JetFile jetFile,
|
||||||
@NotNull final JetNamedDeclaration declaration,
|
@NotNull final JetNamedDeclaration declaration,
|
||||||
@NotNull final Editor editor,
|
@NotNull final Editor editor,
|
||||||
@NotNull final ProgressIndicator indicator
|
@NotNull final ProgressIndicator indicator
|
||||||
) {
|
) {
|
||||||
runWithWriteActionPriority(indicator, new Runnable() {
|
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
DeclarationDescriptor descriptor = null;
|
runWithWriteActionPriority(indicator, new Runnable() {
|
||||||
try {
|
@Override
|
||||||
BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile(jetFile).getBindingContext();
|
public void run() {
|
||||||
descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration);
|
// Executed in the thread from Thread Pool
|
||||||
}
|
DeclarationDescriptor descriptor = null;
|
||||||
finally {
|
try {
|
||||||
// Back to GUI thread for submitting result
|
BindingContext bindingContext =
|
||||||
final DeclarationDescriptor finalDescriptor = descriptor;
|
WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile(jetFile).getBindingContext();
|
||||||
ApplicationManager.getApplication().invokeLater(new Runnable() {
|
descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration);
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
onDescriptorReady(finalDescriptor, declaration, editor, jetFile, indicator);
|
|
||||||
}
|
}
|
||||||
});
|
finally {
|
||||||
}
|
// Back to GUI thread for submitting result
|
||||||
|
final DeclarationDescriptor finalDescriptor = descriptor;
|
||||||
|
ApplicationManager.getApplication().invokeLater(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
onDescriptorReady(finalDescriptor, declaration, editor, jetFile, indicator);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -219,11 +221,11 @@ public class DeclarationHintSupport extends AbstractProjectComponent {
|
|||||||
/**
|
/**
|
||||||
* Execute action with immediate stop when write lock is required.
|
* Execute action with immediate stop when write lock is required.
|
||||||
*
|
*
|
||||||
* @see ProgressIndicatorUtils.runWithWriteActionPriority();
|
|
||||||
*
|
|
||||||
* @param indicator
|
* @param indicator
|
||||||
* @param action
|
* @param action
|
||||||
|
* @see ProgressIndicatorUtils.runWithWriteActionPriority();
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("JavadocReference")
|
||||||
private void runWithWriteActionPriority(final ProgressIndicator indicator, final Runnable action) {
|
private void runWithWriteActionPriority(final ProgressIndicator indicator, final Runnable action) {
|
||||||
// Executed in Thread Pool
|
// Executed in Thread Pool
|
||||||
final ApplicationAdapter listener = new ApplicationAdapter() {
|
final ApplicationAdapter listener = new ApplicationAdapter() {
|
||||||
@@ -235,7 +237,7 @@ public class DeclarationHintSupport extends AbstractProjectComponent {
|
|||||||
final Application application = ApplicationManager.getApplication();
|
final Application application = ApplicationManager.getApplication();
|
||||||
try {
|
try {
|
||||||
application.addApplicationListener(listener);
|
application.addApplicationListener(listener);
|
||||||
ProgressManager.getInstance().runProcess(new Runnable(){
|
ProgressManager.getInstance().runProcess(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
application.runReadAction(action);
|
application.runReadAction(action);
|
||||||
|
|||||||
Reference in New Issue
Block a user