diff --git a/plugins/ant/src/com/intellij/lang/ant/quickfix/AntCreatePropertyFix.java b/plugins/ant/src/com/intellij/lang/ant/quickfix/AntCreatePropertyFix.java index 05941ae64a8c..8b7866476f62 100644 --- a/plugins/ant/src/com/intellij/lang/ant/quickfix/AntCreatePropertyFix.java +++ b/plugins/ant/src/com/intellij/lang/ant/quickfix/AntCreatePropertyFix.java @@ -15,6 +15,7 @@ */ package com.intellij.lang.ant.quickfix; +import com.intellij.codeInsight.FileModificationService; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.lang.ant.AntBundle; @@ -36,6 +37,8 @@ import com.intellij.util.xml.DomUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; + public class AntCreatePropertyFix implements LocalQuickFix { private static final String PROPERTY = "property"; private static final String NAME_ATTR = "name"; @@ -67,18 +70,29 @@ public class AntCreatePropertyFix implements LocalQuickFix { final PsiElement psiElement = descriptor.getPsiElement(); final PsiFile containingFile = psiElement.getContainingFile(); - + final FileModificationService modificationService = FileModificationService.getInstance(); Navigatable result = null; if (myPropFile != null) { - final IProperty generatedProperty = myPropFile.addProperty(myCanonicalText, ""); final VirtualFile vFile = myPropFile.getVirtualFile(); - result = vFile != null? new OpenFileDescriptor(project, vFile, generatedProperty.getPsiElement().getTextRange().getEndOffset()) : generatedProperty; + + boolean canModify = true; + if (myPropFile instanceof PsiFile) { + canModify = modificationService.prepareFileForWrite((PsiFile)myPropFile); + } + else if (vFile != null) { + canModify = modificationService.prepareVirtualFilesForWrite(project, Collections.singleton(vFile)); + } + + if (canModify) { + final IProperty generatedProperty = myPropFile.addProperty(myCanonicalText, ""); + result = vFile != null? new OpenFileDescriptor(project, vFile, generatedProperty.getPsiElement().getTextRange().getEndOffset()) : generatedProperty; + } } else { if (containingFile instanceof XmlFile) { final XmlFile xmlFile = (XmlFile)containingFile; final XmlTag rootTag = xmlFile.getRootTag(); - if (rootTag != null) { + if (rootTag != null && modificationService.prepareFileForWrite(xmlFile)) { final XmlTag propTag = rootTag.createChildTag(PROPERTY, rootTag.getNamespace(), null, false); propTag.setAttribute(NAME_ATTR, myCanonicalText); propTag.setAttribute(VALUE_ATTR, ""); diff --git a/plugins/ant/src/com/intellij/lang/ant/quickfix/AntCreateTargetFix.java b/plugins/ant/src/com/intellij/lang/ant/quickfix/AntCreateTargetFix.java index 908769385ac1..5f4f9d24a020 100644 --- a/plugins/ant/src/com/intellij/lang/ant/quickfix/AntCreateTargetFix.java +++ b/plugins/ant/src/com/intellij/lang/ant/quickfix/AntCreateTargetFix.java @@ -15,6 +15,7 @@ */ package com.intellij.lang.ant.quickfix; +import com.intellij.codeInsight.FileModificationService; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.lang.ant.AntBundle; @@ -53,12 +54,11 @@ public class AntCreateTargetFix implements LocalQuickFix { final PsiElement psiElement = descriptor.getPsiElement(); final PsiFile containingFile = psiElement.getContainingFile(); - Navigatable result = null; if (containingFile instanceof XmlFile) { final XmlFile xmlFile = (XmlFile)containingFile; final XmlTag rootTag = xmlFile.getRootTag(); - if (rootTag != null) { + if (rootTag != null && FileModificationService.getInstance().prepareFileForWrite(xmlFile)) { final XmlTag propTag = rootTag.createChildTag(TAG_NAME, rootTag.getNamespace(), "", false); propTag.setAttribute(NAME_ATTR, myCanonicalText); final DomElement contextElement = DomUtil.getDomElement(descriptor.getPsiElement());