Merge remote-tracking branch 'origin/master'

This commit is contained in:
Konstantin Bulenkov
2013-10-28 15:22:31 +04:00
11 changed files with 89 additions and 48 deletions
@@ -52,6 +52,7 @@ import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange;
@@ -75,6 +76,7 @@ import com.intellij.testFramework.HighlightTestInfo;
import com.intellij.testFramework.LightPlatformTestCase;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.xml.XmlSchemaProvider;
import gnu.trove.THashMap;
import gnu.trove.TIntArrayList;
@@ -284,8 +286,18 @@ public abstract class DaemonAnalyzerTestCase extends CodeInsightTestCase {
return doDoTest(checkWarnings, checkInfos, false);
}
protected Collection<HighlightInfo> doDoTest(boolean checkWarnings, boolean checkInfos, boolean checkWeakWarnings) {
return checkHighlighting(new ExpectedHighlightingData(myEditor.getDocument(),checkWarnings, checkWeakWarnings, checkInfos, myFile));
protected Collection<HighlightInfo> doDoTest(final boolean checkWarnings, final boolean checkInfos, final boolean checkWeakWarnings) {
return ContainerUtil.filter(
checkHighlighting(new ExpectedHighlightingData(myEditor.getDocument(), checkWarnings, checkWeakWarnings, checkInfos, myFile)),
new Condition<HighlightInfo>() {
@Override
public boolean value(HighlightInfo info) {
return (info.getSeverity() == HighlightSeverity.INFORMATION) && checkInfos ||
(info.getSeverity() == HighlightSeverity.WARNING) && checkWarnings ||
(info.getSeverity() == HighlightSeverity.WEAK_WARNING) && checkWeakWarnings ||
info.getSeverity().compareTo(HighlightSeverity.WARNING) > 0;
}
});
}
@NotNull
@@ -395,12 +395,12 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
@Override
public long checkHighlighting() {
return checkHighlighting(true, true, true);
return checkHighlighting(true, false, true);
}
@Override
public long testHighlighting(final String... filePaths) {
return testHighlighting(true, true, true, filePaths);
return testHighlighting(true, false, true, filePaths);
}
@Override
@@ -512,8 +512,10 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
List<HighlightInfo> infos = doHighlighting();
ArrayList<IntentionAction> actions = new ArrayList<IntentionAction>();
for (HighlightInfo info : infos) {
for (Pair<HighlightInfo.IntentionActionDescriptor, TextRange> pair : info.quickFixActionRanges) {
actions.add(pair.getFirst().getAction());
if (info.quickFixActionRanges != null) {
for (Pair<HighlightInfo.IntentionActionDescriptor, TextRange> pair : info.quickFixActionRanges) {
actions.add(pair.getFirst().getAction());
}
}
}
return actions;
@@ -53,7 +53,6 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.branch.GrContinueSta
import org.jetbrains.plugins.groovy.lang.psi.api.statements.branch.GrReturnStatement;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.clauses.GrCaseSection;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.*;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrCallExpression;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrMethodCallExpression;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;
@@ -63,7 +62,6 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrEn
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod;
import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement;
import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeArgumentList;
import org.jetbrains.plugins.groovy.lang.psi.api.util.GrDeclarationHolder;
import org.jetbrains.plugins.groovy.lang.psi.api.util.GrStatementOwner;
import org.jetbrains.plugins.groovy.lang.psi.api.util.GrVariableDeclarationOwner;
@@ -84,24 +82,6 @@ public abstract class GroovyRefactoringUtil {
private static final String[] finalModifiers = new String[]{PsiModifier.FINAL};
@Nullable
public static PsiElement getEnclosingContainer(PsiElement place) {
PsiElement parent = place.getParent();
while (true) {
if (parent == null) {
return null;
}
if (parent instanceof GrDeclarationHolder && !(parent instanceof GrClosableBlock && parent.getParent() instanceof GrStringInjection)) {
return parent;
}
if (parent instanceof GrLoopStatement) {
return parent;
}
parent = parent.getParent();
}
}
@Nullable
public static <T extends PsiElement> T findElementInRange(final PsiFile file,
int startOffset,
@@ -19,6 +19,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.ArrayUtilRt;
@@ -33,6 +34,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpres
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod;
import org.jetbrains.plugins.groovy.lang.psi.api.util.GrDeclarationHolder;
import org.jetbrains.plugins.groovy.lang.psi.api.util.GrStatementOwner;
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringUtil;
@@ -75,7 +77,7 @@ public class GrIntroduceLocalVariableProcessor {
int expressionIndex = ArrayUtilRt.find(myOccurrences, myExpression);
final PsiElement[] replaced = processOccurrences();
PsiElement replacedExpression = replaced[expressionIndex];
GrStatement anchor = getAnchor(replaced, replacedExpression);
GrStatement anchor = getAnchor(replaced);
RefactoringUtil.highlightAllOccurrences(myContext.getProject(), replaced, myContext.getEditor());
@@ -104,8 +106,6 @@ public class GrIntroduceLocalVariableProcessor {
throw new IncorrectOperationException("Expression occurrence to be replaced is not instance of GroovyPsiElement");
}
boolean isOriginal = myExpression == occurrence;
final GrExpression replaced = ((GrExpression)occurrence).replaceWithExpression(templateRef, true);
result.add(replaced);
}
@@ -174,10 +174,10 @@ public class GrIntroduceLocalVariableProcessor {
return variable;
}
private GrVariableDeclaration doInsertDefinition(GrVariableDeclaration declaration,
GrStatement anchor,
boolean deleteExpression,
boolean anchorEqualsExpression) {
private static GrVariableDeclaration doInsertDefinition(GrVariableDeclaration declaration,
GrStatement anchor,
boolean deleteExpression,
boolean anchorEqualsExpression) {
PsiElement realContainer = anchor.getParent();
GrStatementOwner block = (GrStatementOwner)realContainer;
@@ -206,12 +206,35 @@ public class GrIntroduceLocalVariableProcessor {
}
@NotNull
private GrStatement getAnchor(PsiElement[] replaced, PsiElement replacedExpression) {
PsiElement anchor = GrIntroduceHandlerBase.findAnchor(replaced, GroovyRefactoringUtil.getEnclosingContainer(replacedExpression));
private GrStatement getAnchor(PsiElement[] replaced) {
PsiElement parent = PsiTreeUtil.findCommonParent(replaced);
PsiElement container = getEnclosingContainer(parent);
assert container != null;
PsiElement anchor = GrIntroduceHandlerBase.findAnchor(replaced, container);
GrIntroduceHandlerBase.assertStatement(anchor, myOccurrences, myContext.getScope());
return (GrStatement)anchor;
}
@Nullable
public static PsiElement getEnclosingContainer(PsiElement place) {
PsiElement parent = place;
while (true) {
if (parent == null) {
return null;
}
if (parent instanceof GrDeclarationHolder && !(parent instanceof GrClosableBlock && parent.getParent() instanceof GrStringInjection)) {
return parent;
}
if (parent instanceof GrLoopStatement) {
return parent;
}
parent = parent.getParent();
}
}
@Nullable
private static String getFieldName(@Nullable PsiElement element) {
if (element instanceof GrAccessorMethod) element = ((GrAccessorMethod)element).getProperty();
@@ -96,6 +96,29 @@ print "a" + preved<caret> + "c"
''')
}
void testAllUsages() {
doTest('''\
def foo() {
println(123); // (1)
println(123); // (2)
if (true) {
println(<all>123<end>); // (3)
println(123); // (4)
}
}
''', '''\
def foo() {
def preved = 123
println(preved); // (1)
println(preved); // (2)
if (true) {
println(preved<caret>); // (3)
println(preved); // (4)
}
}
''')
}
protected static final String ALL_MARKER = "<all>"
private void processFile(String fileText, boolean explicitType) {
@@ -29,6 +29,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpres
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringUtil;
import org.jetbrains.plugins.groovy.refactoring.introduce.GrIntroduceContextImpl;
import org.jetbrains.plugins.groovy.refactoring.introduce.variable.GrIntroduceLocalVariableProcessor;
import org.jetbrains.plugins.groovy.refactoring.introduce.variable.GroovyVariableValidator;
import org.jetbrains.plugins.groovy.util.TestUtils;
@@ -83,7 +84,7 @@ public class IntroduceVariableValidatorTest extends LightCodeInsightFixtureTestC
Assert.assertNotNull("Selected expression reference points to null", selectedExpr);
final PsiElement tempContainer = GroovyRefactoringUtil.getEnclosingContainer(selectedExpr);
final PsiElement tempContainer = GrIntroduceLocalVariableProcessor.getEnclosingContainer(selectedExpr);
Assert.assertTrue(tempContainer instanceof GroovyPsiElement);
PsiElement[] occurences = GroovyRefactoringUtil.getExpressionOccurrences(PsiUtil.skipParentheses(selectedExpr, false), tempContainer);
@@ -5,6 +5,7 @@ import com.intellij.codeInsight.actions.ReformatCodeProcessor;
import com.intellij.codeInsight.completion.*;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementDecorator;
import com.intellij.codeInsight.template.TemplateManager;
import com.intellij.openapi.editor.CaretModel;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
@@ -31,6 +32,10 @@ public class MavenPomXmlCompletionTagListenerContributor extends CompletionContr
@Override
public void fillCompletionVariants(CompletionParameters parameters, final CompletionResultSet result) {
if (TemplateManager.getInstance(parameters.getOriginalFile().getProject()).getActiveTemplate(parameters.getEditor()) != null) {
return; // Don't brake the template.
}
PsiFile psiFile = parameters.getOriginalFile();
if (!(psiFile instanceof XmlFile)) return;
@@ -26,8 +26,6 @@ import com.intellij.find.findUsages.PsiElement2UsageTargetAdapter;
import com.intellij.lang.documentation.DocumentationProvider;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.intellij.openapi.util.Comparing;
@@ -291,7 +289,7 @@ public abstract class MavenDomTestCase extends MavenImportingTestCase {
}
protected void checkHighlighting(VirtualFile f) throws IOException {
checkHighlighting(f, true, true, true);
checkHighlighting(f, true, false, true);
}
protected void checkHighlighting(VirtualFile f, boolean checkWarnings, boolean checkInfos, boolean checkWeakWarnings) throws IOException {
@@ -17,7 +17,6 @@ package com.intellij.codeInsight.daemon.impl.analysis;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.lang.annotation.Annotator;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.XmlHighlighterColors;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
@@ -36,7 +35,6 @@ import java.util.List;
public class XmlNsPrefixAnnotator implements Annotator {
@Override
public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
if (ApplicationManager.getApplication().isUnitTestMode()) return;
if (element instanceof XmlTag || element instanceof XmlAttribute) {
List<SchemaPrefixReference> references = ContainerUtil.findAll(element.getReferences(), SchemaPrefixReference.class);
for (SchemaPrefixReference reference : references) {
@@ -1195,10 +1195,10 @@ public class XmlHighlightingTest extends DaemonAnalyzerTestCase {
configureByFile(BASE_PATH + "web-app_2_4.xsd");
final String testName = getTestName(false);
final String actionName = XmlBundle.message(AddXsiSchemaLocationForExtResourceAction.KEY);
doTestWithQuickFix(BASE_PATH + testName, actionName, true);
doTestWithQuickFix(BASE_PATH + testName + "2", actionName, true);
doTestWithQuickFix(BASE_PATH + testName + "3", actionName, true);
doTestWithQuickFix(BASE_PATH + testName + "4", actionName, true);
doTestWithQuickFix(BASE_PATH + testName, actionName, false);
doTestWithQuickFix(BASE_PATH + testName + "2", actionName, false);
doTestWithQuickFix(BASE_PATH + testName + "3", actionName, false);
doTestWithQuickFix(BASE_PATH + testName + "4", actionName, false);
}
public void testHighlightingWithConditionalSectionsInDtd() throws Exception {
@@ -1998,7 +1998,7 @@ public class XmlHighlightingTest extends DaemonAnalyzerTestCase {
getVirtualFile(BASE_PATH + "Substitute/test.xml"),
getVirtualFile(BASE_PATH + "Substitute/schema-b.xsd"),
getVirtualFile(BASE_PATH + "Substitute/schema-a.xsd")
}, true, true);
}, true, false);
}
public void testDtdWithXsd() throws Exception {
@@ -68,8 +68,7 @@ public class XMLCatalogManagerTest extends LightPlatformCodeInsightFixtureTestCa
myFixture.configureByFile("policy.xml");
try {
ExternalResourceManagerEx.getInstanceEx().setCatalogPropertiesFile(getTestDataPath() + "catalog.properties");
List<HighlightInfo> infos = myFixture.doHighlighting();
assertEquals(infos.toString(), 0, infos.size());
myFixture.checkHighlighting();
}
finally {
ExternalResourceManagerEx.getInstanceEx().setCatalogPropertiesFile(null);