use of com.intellij.openapi.util.Ref in project intellij-community by JetBrains.
the class GrCreateSubclassAction method createSubclassGroovy.
@Nullable
public static PsiClass createSubclassGroovy(final GrTypeDefinition psiClass, final PsiDirectory targetDirectory, final String className) {
final Project project = psiClass.getProject();
final Ref<GrTypeDefinition> targetClass = new Ref<>();
new WriteCommandAction(project, getTitle(psiClass), getTitle(psiClass)) {
@Override
protected void run(@NotNull Result result) throws Throwable {
IdeDocumentHistory.getInstance(project).includeCurrentPlaceAsChangePlace();
final GrTypeParameterList oldTypeParameterList = psiClass.getTypeParameterList();
try {
targetClass.set(CreateClassActionBase.createClassByType(targetDirectory, className, PsiManager.getInstance(project), psiClass, GroovyTemplates.GROOVY_CLASS, true));
} catch (final IncorrectOperationException e) {
ApplicationManager.getApplication().invokeLater(() -> Messages.showErrorDialog(project, CodeInsightBundle.message("intention.error.cannot.create.class.message", className) + "\n" + e.getLocalizedMessage(), CodeInsightBundle.message("intention.error.cannot.create.class.title")));
return;
}
startTemplate(oldTypeParameterList, project, psiClass, targetClass.get(), false);
}
}.execute();
if (targetClass.get() == null)
return null;
if (!ApplicationManager.getApplication().isUnitTestMode() && !psiClass.hasTypeParameters()) {
final Editor editor = CodeInsightUtil.positionCursorAtLBrace(project, targetClass.get().getContainingFile(), targetClass.get());
if (editor == null)
return targetClass.get();
chooseAndImplement(psiClass, project, targetClass.get(), editor);
}
return targetClass.get();
}
use of com.intellij.openapi.util.Ref in project intellij-community by JetBrains.
the class GrIntroduceClosureParameterProcessor method findUsagesForLocal.
private static Collection<PsiReference> findUsagesForLocal(GrClosableBlock initializer, final GrVariable var) {
final Instruction[] flow = ControlFlowUtils.findControlFlowOwner(initializer).getControlFlow();
final List<BitSet> writes = ControlFlowUtils.inferWriteAccessMap(flow, var);
Instruction writeInstr = null;
final PsiElement parent = initializer.getParent();
if (parent instanceof GrVariable) {
writeInstr = ContainerUtil.find(flow, instruction -> instruction.getElement() == var);
} else if (parent instanceof GrAssignmentExpression) {
final GrReferenceExpression refExpr = (GrReferenceExpression) ((GrAssignmentExpression) parent).getLValue();
final Instruction instruction = ContainerUtil.find(flow, instruction1 -> instruction1.getElement() == refExpr);
LOG.assertTrue(instruction != null);
final BitSet prev = writes.get(instruction.num());
if (prev.cardinality() == 1) {
writeInstr = flow[prev.nextSetBit(0)];
}
}
LOG.assertTrue(writeInstr != null);
Collection<PsiReference> result = new ArrayList<>();
for (Instruction instruction : flow) {
if (!(instruction instanceof ReadWriteVariableInstruction))
continue;
if (((ReadWriteVariableInstruction) instruction).isWrite())
continue;
final PsiElement element = instruction.getElement();
if (element instanceof GrVariable && element != var)
continue;
if (!(element instanceof GrReferenceExpression))
continue;
final GrReferenceExpression ref = (GrReferenceExpression) element;
if (ref.isQualified() || ref.resolve() != var)
continue;
final BitSet prev = writes.get(instruction.num());
if (prev.cardinality() == 1 && prev.get(writeInstr.num())) {
result.add(ref);
}
}
return result;
}
use of com.intellij.openapi.util.Ref in project intellij-community by JetBrains.
the class CustomCreateProperty method generateCreateComponentsMethod.
public static void generateCreateComponentsMethod(final PsiClass aClass) {
final PsiFile psiFile = aClass.getContainingFile();
if (psiFile == null)
return;
final VirtualFile vFile = psiFile.getVirtualFile();
if (vFile == null)
return;
if (!FileModificationService.getInstance().prepareFileForWrite(psiFile))
return;
final Ref<SmartPsiElementPointer> refMethod = new Ref<>();
CommandProcessor.getInstance().executeCommand(aClass.getProject(), () -> ApplicationManager.getApplication().runWriteAction(() -> {
PsiElementFactory factory = JavaPsiFacade.getInstance(aClass.getProject()).getElementFactory();
try {
PsiMethod method = factory.createMethodFromText("private void " + AsmCodeGenerator.CREATE_COMPONENTS_METHOD_NAME + "() { \n // TODO: place custom component creation code here \n }", aClass);
final PsiMethod psiMethod = (PsiMethod) aClass.add(method);
refMethod.set(SmartPointerManager.getInstance(aClass.getProject()).createSmartPsiElementPointer(psiMethod));
CodeStyleManager.getInstance(aClass.getProject()).reformat(psiMethod);
} catch (IncorrectOperationException e) {
LOG.error(e);
}
}), null, null);
if (!refMethod.isNull()) {
SwingUtilities.invokeLater(() -> {
final PsiMethod element = (PsiMethod) refMethod.get().getElement();
if (element != null) {
final PsiCodeBlock body = element.getBody();
assert body != null;
final PsiComment comment = PsiTreeUtil.getChildOfType(body, PsiComment.class);
if (comment != null) {
new OpenFileDescriptor(comment.getProject(), vFile, comment.getTextOffset()).navigate(true);
}
}
});
}
}
use of com.intellij.openapi.util.Ref in project intellij-community by JetBrains.
the class CreateClassToBindFix method createBoundFields.
private void createBoundFields(final PsiClass formClass) throws IncorrectOperationException {
final Module module = myEditor.getRootContainer().getModule();
final GlobalSearchScope scope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module);
final PsiManager psiManager = PsiManager.getInstance(myEditor.getProject());
final Ref<IncorrectOperationException> exception = new Ref<>();
FormEditingUtil.iterate(myEditor.getRootContainer(), new FormEditingUtil.ComponentVisitor() {
public boolean visit(final IComponent component) {
if (component.getBinding() != null) {
final PsiClass fieldClass = JavaPsiFacade.getInstance(psiManager.getProject()).findClass(component.getComponentClassName(), scope);
if (fieldClass != null) {
PsiType fieldType = JavaPsiFacade.getInstance(psiManager.getProject()).getElementFactory().createType(fieldClass);
try {
PsiField field = JavaPsiFacade.getInstance(psiManager.getProject()).getElementFactory().createField(component.getBinding(), fieldType);
formClass.add(field);
} catch (IncorrectOperationException e) {
exception.set(e);
return false;
}
}
}
return true;
}
});
if (!exception.isNull()) {
throw exception.get();
}
}
use of com.intellij.openapi.util.Ref in project intellij-community by JetBrains.
the class PyAbstractTestProcessRunner method rerunFailedTests.
/**
* Rerun current tests. Make sure there is at least one failed test.
* <strong>Run in AWT thread only!</strong>
*/
public void rerunFailedTests() {
assert getFailedTestsCount() > 0 : "No failed tests. What you want to rerun?";
assert myLastProcessDescriptor != null : "No last run descriptor. First run tests at least one time";
final List<ProgramRunner<?>> run = getAvailableRunnersForLastRun();
Assert.assertFalse("No runners to rerun", run.isEmpty());
final ProgramRunner<?> runner = run.get(0);
final ExecutionEnvironment restartAction = RerunFailedActionsTestTools.findRestartAction(myLastProcessDescriptor);
Assert.assertNotNull("No restart action", restartAction);
final Ref<ProcessHandler> handlerRef = new Ref<>();
try {
runner.execute(restartAction, descriptor -> handlerRef.set(descriptor.getProcessHandler()));
} catch (final ExecutionException e) {
throw new AssertionError("ExecutionException can't be thrown in tests. Probably, API changed. Got: " + e);
}
final ProcessHandler handler = handlerRef.get();
if (handler == null) {
return;
}
handler.waitFor();
}
Aggregations