From d39d47ae9822aa7387899588ef49c7ab57d460dd Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 3 Apr 2012 12:50:09 +0200 Subject: [PATCH 1/7] EA-35300 - NPE: MigrationProcessor.findUsages reinit migration processor if rerun --- .../intellij/refactoring/migration/MigrationProcessor.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/java/java-impl/src/com/intellij/refactoring/migration/MigrationProcessor.java b/java/java-impl/src/com/intellij/refactoring/migration/MigrationProcessor.java index ed031a4bfc94..97597bb99e4d 100644 --- a/java/java-impl/src/com/intellij/refactoring/migration/MigrationProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/migration/MigrationProcessor.java @@ -22,6 +22,7 @@ import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Ref; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMigration; import com.intellij.psi.impl.migration.PsiMigrationManager; import com.intellij.refactoring.BaseRefactoringProcessor; @@ -71,6 +72,11 @@ class MigrationProcessor extends BaseRefactoringProcessor { } } + @Override + protected void refreshElements(PsiElement[] elements) { + myPsiMigration = startMigration(myProject); + } + @NotNull protected UsageInfo[] findUsages() { ArrayList usagesVector = new ArrayList(); From 7f656d7c2466a343936e139a928458eda0ce5ccb Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 3 Apr 2012 13:49:55 +0200 Subject: [PATCH 2/7] ensure check for update for plugins after IDEA update (IDEA-83956) --- .../src/com/intellij/idea/IdeaApplication.java | 13 ++++++++++--- .../updateSettings/impl/CheckForUpdateAction.java | 2 +- .../openapi/updateSettings/impl/UpdateChecker.java | 2 +- .../openapi/updateSettings/impl/UpdateSettings.java | 8 ++++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/idea/IdeaApplication.java b/platform/platform-impl/src/com/intellij/idea/IdeaApplication.java index 7bfa6c2caeb8..97930bafdabf 100644 --- a/platform/platform-impl/src/com/intellij/idea/IdeaApplication.java +++ b/platform/platform-impl/src/com/intellij/idea/IdeaApplication.java @@ -32,10 +32,12 @@ import com.intellij.openapi.extensions.ExtensionPoint; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.updateSettings.impl.UpdateChecker; +import com.intellij.openapi.updateSettings.impl.UpdateSettings; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.SystemInfo; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.WindowManager; import com.intellij.openapi.wm.impl.WindowManagerImpl; import com.intellij.ui.Splash; @@ -212,9 +214,14 @@ public class IdeaApplication { loadProject(); } - if (UpdateChecker.isMyVeryFirstOpening() && UpdateChecker.checkNeeded()) { - UpdateChecker.setMyVeryFirstOpening(false); - UpdateChecker.updateAndShowResult(); + final UpdateSettings settings = UpdateSettings.getInstance(); + if (settings != null) { + final ApplicationInfo appInfo = ApplicationInfo.getInstance(); + if (StringUtil.compareVersionNumbers(settings.LAST_BUILD_CHECKED, appInfo.getBuild().asString()) < 0 || + (UpdateChecker.isMyVeryFirstOpening() && UpdateChecker.checkNeeded())) { + UpdateChecker.setMyVeryFirstOpening(false); + UpdateChecker.updateAndShowResult(); + } } SwingUtilities.invokeLater(new Runnable() { diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/CheckForUpdateAction.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/CheckForUpdateAction.java index 089338910882..d1785b240db5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/CheckForUpdateAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/CheckForUpdateAction.java @@ -62,7 +62,7 @@ public class CheckForUpdateAction extends AnAction implements DumbAware { return; } - instance.LAST_TIME_CHECKED = System.currentTimeMillis(); + instance.saveLastCheckedInfo(); UpdateChecker.showUpdateResult(result, updatedPlugins, true, enableLink, true); } }); diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java index d3098820dceb..ea3561fff091 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java @@ -428,7 +428,7 @@ public final class UpdateChecker { final CheckForUpdateResult result = doCheckForUpdates(updateSettings); if (result.getState() == UpdateStrategy.State.LOADED) { - updateSettings.LAST_TIME_CHECKED = System.currentTimeMillis(); + updateSettings.saveLastCheckedInfo(); settings.setKnownChannelIds(result.getAllChannelsIds()); } diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettings.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettings.java index 48c96c609a21..7bf980933b34 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettings.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettings.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.updateSettings.impl; +import com.intellij.openapi.application.ApplicationInfo; import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.ServiceManager; @@ -55,6 +56,7 @@ public class UpdateSettings implements PersistentStateComponent, UserUp public boolean CHECK_NEEDED = true; public long LAST_TIME_CHECKED = 0; + public String LAST_BUILD_CHECKED = ""; public String UPDATE_CHANNEL_TYPE = ChannelStatus.RELEASE_CODE; public static UpdateSettings getInstance() { @@ -65,6 +67,12 @@ public class UpdateSettings implements PersistentStateComponent, UserUp updateDefaultChannel(); } + public void saveLastCheckedInfo() { + LAST_TIME_CHECKED = System.currentTimeMillis(); + ApplicationInfo appInfo = ApplicationInfo.getInstance(); + LAST_BUILD_CHECKED = appInfo.getBuild().asString(); + } + private void updateDefaultChannel() { if (ApplicationInfoImpl.getShadowInstance().isEAP()) { UPDATE_CHANNEL_TYPE = ChannelStatus.EAP_CODE; From 4215333bd571af75d79df446d80e6ab33de2e3ee Mon Sep 17 00:00:00 2001 From: "Maxim.Medvedev" Date: Tue, 3 Apr 2012 15:04:12 +0400 Subject: [PATCH 3/7] highlighting for calls which arguments have unknown type IDEA-77566 --- .../GroovyAssignabilityCheckInspection.java | 28 +++++++++++++++---- .../statements/expressions/TypesUtil.java | 10 +++---- .../impl/types/GrClosureSignatureUtil.java | 21 ++------------ .../plugins/groovy/lang/psi/util/PsiUtil.java | 2 +- .../groovy/lang/GroovyHighlightingTest.groovy | 8 +++--- .../plugins/groovy/spock/SpockTest.groovy | 19 ++++++------- .../highlighting/ImplicitEnumCoercion.groovy | 4 +-- .../highlighting/SpreadArguments.groovy | 3 +- .../highlighting/UnknownVarInArgList.groovy | 4 +-- 9 files changed, 49 insertions(+), 50 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyAssignabilityCheckInspection.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyAssignabilityCheckInspection.java index e62afa172b81..00532b3fcf86 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyAssignabilityCheckInspection.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/assignment/GroovyAssignabilityCheckInspection.java @@ -264,7 +264,8 @@ public class GroovyAssignabilityCheckInspection extends BaseInspection { final PsiElement constructor = constructorResolveResult.getElement(); if (constructor != null) { - checkConstructorApplicability(constructorResolveResult, refElement); + if (!checkConstructorApplicability(constructorResolveResult, refElement)) return; + if (!checkUnknownParams(refElement)) return; } else { final GroovyResolveResult[] results = constructorCall.multiResolveConstructor(); @@ -275,7 +276,7 @@ public class GroovyAssignabilityCheckInspection extends BaseInspection { if (!checkConstructorApplicability(result, refElement)) return; } } - + if (!checkUnknownParams(refElement)) return; registerError(getElementToHighlight(refElement, argList), GroovyBundle.message("constructor.call.is.ambiguous")); } else { @@ -419,12 +420,12 @@ public class GroovyAssignabilityCheckInspection extends BaseInspection { final PsiType type = referenceExpression.getType(); if (resolved != null ) { if (resolved instanceof PsiMethod && !resolveResult.isInvokedOnProperty()) { - checkMethodApplicability(resolveResult, referenceExpression); + if (!checkMethodApplicability(resolveResult, referenceExpression)) return; } else { - checkCallApplicability(type, referenceExpression); + if (!checkCallApplicability(type, referenceExpression)) return; } - + if (!checkUnknownParams(referenceExpression)) return; } else if (results.length > 0) { for (GroovyResolveResult result : results) { @@ -436,6 +437,7 @@ public class GroovyAssignabilityCheckInspection extends BaseInspection { if (!checkCallApplicability(type, referenceExpression)) return; } } + if (!checkUnknownParams(referenceExpression)) return; registerError(getElementToHighlight(referenceExpression, PsiUtil.getArgumentsList(referenceExpression)), GroovyBundle.message("method.call.is.ambiguous")); @@ -443,6 +445,20 @@ public class GroovyAssignabilityCheckInspection extends BaseInspection { } } + private boolean checkUnknownParams(PsiElement place) { + PsiType[] args = PsiUtil.getArgumentTypes(place, true); + if (args == null) return true; + + for (PsiType arg : args) { + if (arg == null) { + registerError(getElementToHighlight(place, PsiUtil.getArgumentsList(place)), GroovyBundle.message("cannot.infer.argument.types"), + LocalQuickFix.EMPTY_ARRAY, ProblemHighlightType.WEAK_WARNING); + return false; + } + } + return true; + } + private boolean checkCannotInferArgumentTypes(PsiElement referenceExpression) { if (PsiUtil.getArgumentTypes(referenceExpression, true) != null) return false; @@ -553,10 +569,12 @@ public class GroovyAssignabilityCheckInspection extends BaseInspection { PsiElement resolved = result.getElement(); if (resolved instanceof PsiMethod && !result.isInvokedOnProperty()) { if (!checkMethodApplicability(result, invokedExpr)) return false; + if (!checkUnknownParams(invokedExpr)) return false; } else if (resolved instanceof PsiField) { if (!checkCallApplicability(((PsiField)resolved).getType(), invokedExpr)) return false; } + if (!checkUnknownParams(invokedExpr)) return false; } if (calls.length == 0 && !(invokedExpr instanceof GrString)) { registerCannotApplyError(invokedExpr, argumentTypes, invokedExpr.getText()); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java index 426bc7760f18..c18d68533059 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java @@ -299,7 +299,7 @@ public class TypesUtil { } } - if (isClassType(rType, GroovyCommonClassNames.GROOVY_LANG_GSTRING)) { + if (isClassType(rType, GROOVY_LANG_GSTRING)) { if (isAssignable(lType, GroovyPsiManager.getInstance(manager.getProject()).createTypeByFQClassName(JAVA_LANG_STRING, scope), manager, scope)) { return true; } @@ -584,9 +584,9 @@ public class TypesUtil { public static PsiClassType createListType(@NotNull PsiClass elements) { JavaPsiFacade facade = JavaPsiFacade.getInstance(elements.getProject()); GlobalSearchScope resolveScope = elements.getResolveScope(); - PsiClass listClass = facade.findClass(CommonClassNames.JAVA_UTIL_LIST, resolveScope); + PsiClass listClass = facade.findClass(JAVA_UTIL_LIST, resolveScope); if (listClass == null) { - return facade.getElementFactory().createTypeByFQClassName(CommonClassNames.JAVA_UTIL_LIST, resolveScope); + return facade.getElementFactory().createTypeByFQClassName(JAVA_UTIL_LIST, resolveScope); } return facade.getElementFactory().createType(listClass, facade.getElementFactory().createType(elements)); } @@ -596,12 +596,12 @@ public class TypesUtil { JavaPsiFacade facade = JavaPsiFacade.getInstance(context.getProject()); GlobalSearchScope resolveScope = context.getResolveScope(); - PsiClass setClass = facade.findClass(CommonClassNames.JAVA_UTIL_SET, resolveScope); + PsiClass setClass = facade.findClass(JAVA_UTIL_SET, resolveScope); if (setClass != null) { return facade.getElementFactory().createType(setClass, type); } - return facade.getElementFactory().createTypeByFQClassName(CommonClassNames.JAVA_UTIL_SET, resolveScope); + return facade.getElementFactory().createTypeByFQClassName(JAVA_UTIL_SET, resolveScope); } public static Map getSuperClassesWithCache(@NotNull PsiClass aClass) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java index b22bff737a58..1ab1ea08ceae 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrClosureSignatureUtil.java @@ -52,6 +52,7 @@ import java.util.*; /** * @author Maxim.Medvedev */ +@SuppressWarnings("unchecked") public class GrClosureSignatureUtil { private GrClosureSignatureUtil() { } @@ -549,7 +550,7 @@ public class GrClosureSignatureUtil { for (GrExpression expression : expressionArgs) { PsiType type = expression.getType(); - if (expression instanceof GrNewExpression && com.intellij.psi.util.PsiUtil.resolveClassInType(type) == null) { + if (partial && expression instanceof GrNewExpression && com.intellij.psi.util.PsiUtil.resolveClassInType(type) == null) { type = null; } if (eraseArgs) { @@ -649,24 +650,6 @@ public class GrClosureSignatureUtil { return generateAllMethodSignaturesByClosureSignature(name, signature, PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY); } - @Nullable - public static PsiType getTypeByTypeArg(ArgInfo arg, PsiManager manager, GlobalSearchScope resolveScope) { - if (arg.isMultiArg) { - if (arg.args.size() == 0) return PsiType.getJavaLangObject(manager, resolveScope).createArrayType(); - PsiType leastUpperBound = null; - - for (PsiType type : arg.args) { - leastUpperBound = TypesUtil.getLeastUpperBoundNullable(leastUpperBound, type, manager); - } - if (leastUpperBound == null) return null; - return leastUpperBound.createArrayType(); - } - else { - if (arg.args.size() > 0) return arg.args.get(0); - return null; - } - } - @Nullable public static PsiType getTypeByArg(ArgInfo arg, PsiManager manager, GlobalSearchScope resolveScope) { if (arg.isMultiArg) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java index df8ac872bf12..a6a832255035 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java @@ -251,7 +251,7 @@ public class PsiUtil { } else { if (type == null) { - result.add(nullAsBottom ? PsiType.NULL : TypesUtil.getJavaLangObject(expression)); + result.add(nullAsBottom ? null : TypesUtil.getJavaLangObject(expression)); } else { if (stopAt == expression) { diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy index 575ad2e4d3c1..3fffb9539d8f 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy @@ -84,7 +84,7 @@ public class GroovyHighlightingTest extends LightCodeInsightFixtureTestCase { private void doTest(InspectionProfileEntry... tools) { myFixture.enableInspections(tools); - myFixture.testHighlighting(true, false, false, getTestName(false) + ".groovy"); + myFixture.testHighlighting(true, false, true, getTestName(false) + ".groovy"); } public void testCircularInheritance() throws Throwable { @@ -477,11 +477,11 @@ class A { doTest(new GroovyUnresolvedAccessInspection()); } - public void testUnknownVarInArgList() { + public void testImplicitEnumCoercion() { doTest(new GroovyAssignabilityCheckInspection()); } - - public void testImplicitEnumCoercion() { + + public void testUnknownVarInArgList() { doTest(new GroovyAssignabilityCheckInspection()); } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/spock/SpockTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/spock/SpockTest.groovy index 526c9ba3825c..c0709e8e3860 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/spock/SpockTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/spock/SpockTest.groovy @@ -1,12 +1,11 @@ package org.jetbrains.plugins.groovy.spock -import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase import com.intellij.codeInsight.lookup.LookupElement -import com.intellij.util.containers.CollectionFactory -import com.intellij.psi.PsiFile - -import com.intellij.psi.PsiVariable import com.intellij.psi.CommonClassNames +import com.intellij.psi.PsiFile +import com.intellij.psi.PsiVariable +import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase +import com.intellij.util.containers.CollectionFactory import org.jetbrains.plugins.groovy.codeInspection.assignment.GroovyAssignabilityCheckInspection import org.jetbrains.plugins.groovy.codeInspection.untypedUnresolvedAccess.GroovyUnresolvedAccessInspection @@ -203,13 +202,13 @@ class FooSpec extends spock.lang.Specification { public void testVariable_resolved() { myFixture.enableInspections(GroovyAssignabilityCheckInspection, GroovyUnresolvedAccessInspection) - myFixture.configureByText("FooSpec.groovy", """ + myFixture.configureByText("FooSpec.groovy", """\ class FooSpec extends spock.lang.Specification { def "foo test"() { - String subscriber = Mock() - then: (0.._) * subscriber.concat(_) - subscriber.concat(asdasdasd) - subscriber.concat(23) + String subscriber = Mock() + then: (0.._) * subscriber.concat(_) + subscriber.concat(asdasdasd) + subscriber.concat(23) } } """) diff --git a/plugins/groovy/testdata/highlighting/ImplicitEnumCoercion.groovy b/plugins/groovy/testdata/highlighting/ImplicitEnumCoercion.groovy index a1bc879d0237..98f3189a8815 100644 --- a/plugins/groovy/testdata/highlighting/ImplicitEnumCoercion.groovy +++ b/plugins/groovy/testdata/highlighting/ImplicitEnumCoercion.groovy @@ -5,5 +5,5 @@ enum My { My var = 'foo' var = 'fail' -var = "fo"+"o" -var="fo${'o'}" +var = "fo"+"o" +var="fo${'o'}" diff --git a/plugins/groovy/testdata/highlighting/SpreadArguments.groovy b/plugins/groovy/testdata/highlighting/SpreadArguments.groovy index bcfecaae36fc..529191225a34 100644 --- a/plugins/groovy/testdata/highlighting/SpreadArguments.groovy +++ b/plugins/groovy/testdata/highlighting/SpreadArguments.groovy @@ -4,5 +4,4 @@ foo(1, 2, '3') foo(1, *[2, '3']) foo(1, *[2, 3]) def list = new ArrayList() -foo(1, *list) - +foo(1, *list) diff --git a/plugins/groovy/testdata/highlighting/UnknownVarInArgList.groovy b/plugins/groovy/testdata/highlighting/UnknownVarInArgList.groovy index 4ed8ca33a0dc..028b03609637 100644 --- a/plugins/groovy/testdata/highlighting/UnknownVarInArgList.groovy +++ b/plugins/groovy/testdata/highlighting/UnknownVarInArgList.groovy @@ -1,7 +1,7 @@ def foo(Date d) {} def a = unknown -foo(a) +foo(a) foo(1) @@ -10,4 +10,4 @@ def abc(Date d){} def abc(int i) {} def x = unknown2 -abc(x) \ No newline at end of file +abc(x) \ No newline at end of file From ace4cb519a2d215bea1f263865983351fa958248 Mon Sep 17 00:00:00 2001 From: "Maxim.Medvedev" Date: Tue, 3 Apr 2012 16:47:25 +0400 Subject: [PATCH 4/7] EA-35305 - assert: ArgumentInstruction.inferMixinType --- .../groovy/lang/psi/controlFlow/impl/ArgumentInstruction.java | 4 ++-- .../groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ArgumentInstruction.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ArgumentInstruction.java index 3471561d016f..9f3d4f24510c 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ArgumentInstruction.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ArgumentInstruction.java @@ -52,8 +52,8 @@ public class ArgumentInstruction extends InstructionImpl implements MixinTypeIns PsiElement parent = element.getParent().getParent(); LOG.assertTrue(parent instanceof GrCall, "elemText: " + element.getText() + - "\n elemParent = " + (element.getParent() == null ? "null" : element.getParent().getClass()) + - "\n elemPParent" + (parent == null ? "null" : parent.getClass())); + "\nParent = " + (element.getParent() == null ? "null" : element.getParent().getClass()) + + "\nPParent" + (parent == null ? "null" : parent.getClass())); GrCall call = (GrCall)parent; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java index cfe842b2e42c..45058043b22a 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java @@ -437,7 +437,7 @@ public class ControlFlowBuilder extends GroovyRecursiveElementVisitor { else { boolean isWrite = !myAssertionsOnly && PsiUtil.isLValue(refExpr); addNodeAndCheckPending(new ReadWriteVariableInstruction(name, refExpr, myInstructionNumber++, isWrite ? WRITE : READ)); - if (refExpr.getParent() instanceof GrArgumentList) { + if (refExpr.getParent() instanceof GrArgumentList && refExpr.getParent().getParent() instanceof GrCall) { addNodeAndCheckPending(new ArgumentInstruction(refExpr, myInstructionNumber++)); } } From 0047218b5b7d23ccb3de88a6c0a51cd444769275 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Tue, 3 Apr 2012 14:53:52 +0200 Subject: [PATCH 5/7] fix tests --- platform/core-api/src/com/intellij/ui/LayeredIcon.java | 4 ++-- platform/util/src/com/intellij/openapi/util/IconLoader.java | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/platform/core-api/src/com/intellij/ui/LayeredIcon.java b/platform/core-api/src/com/intellij/ui/LayeredIcon.java index c637d8a29d9f..2f09cdfcd652 100644 --- a/platform/core-api/src/com/intellij/ui/LayeredIcon.java +++ b/platform/core-api/src/com/intellij/ui/LayeredIcon.java @@ -116,7 +116,7 @@ public class LayeredIcon implements Icon { @Override public int getIconWidth() { - if (myWidth == 0) { + if (myWidth <= 1) { //icon is not loaded yet recalculateSize(); } return myWidth; @@ -124,7 +124,7 @@ public class LayeredIcon implements Icon { @Override public int getIconHeight() { - if (myHeight == 0) { + if (myHeight <= 1) { //icon is not loaded yet recalculateSize(); } return myHeight; diff --git a/platform/util/src/com/intellij/openapi/util/IconLoader.java b/platform/util/src/com/intellij/openapi/util/IconLoader.java index 9b9144c6ad0a..55e9486dde94 100644 --- a/platform/util/src/com/intellij/openapi/util/IconLoader.java +++ b/platform/util/src/com/intellij/openapi/util/IconLoader.java @@ -21,7 +21,6 @@ import com.intellij.reference.SoftReference; import com.intellij.util.ImageLoader; import com.intellij.util.containers.ConcurrentHashMap; import com.intellij.util.containers.WeakHashMap; -import com.intellij.util.ui.EmptyIcon; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -46,7 +45,7 @@ public final class IconLoader { */ private static final Map ourIcon2DisabledIcon = new WeakHashMap(200); - private static final Icon EMPTY_ICON = new EmptyIcon(0,0) { + private static final ImageIcon EMPTY_ICON = new ImageIcon(new BufferedImage(1, 1, BufferedImage.TYPE_3BYTE_BGR)) { @NonNls public String toString() { return "Empty icon " + super.toString(); From 53e66d4e65844aab575b9e7d95d331cd86bcf645 Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Tue, 3 Apr 2012 16:59:20 +0400 Subject: [PATCH 6/7] Renderer timeout --- .../designSurface/AndroidDesignerEditorPanel.java | 11 ++++++++--- .../jetbrains/android/uipreview/RenderService.java | 3 ++- .../org/jetbrains/android/uipreview/RenderUtil.java | 11 +++++------ 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java index b9ea3469de69..08a18efde45a 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java +++ b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java @@ -320,9 +320,14 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel { float xdpi = deviceConfiguration.getDevice().getXDpi(); float ydpi = deviceConfiguration.getDevice().getYDpi(); - mySession = RenderUtil - .createRenderSession(getProject(), layoutXmlText, myFile, manager.getSelectedTarget(), facet, config, xdpi, ydpi, - manager.getSelectedTheme()); + while (true) { + mySession = RenderUtil + .createRenderSession(getProject(), layoutXmlText, myFile, manager.getSelectedTarget(), facet, config, xdpi, ydpi, + manager.getSelectedTheme(), 10000); + if (mySession.getResult().getStatus() != Result.Status.ERROR_TIMEOUT) { + break; + } + } ApplicationManager.getApplication().invokeLater(new Runnable() { @Override diff --git a/plugins/android/src/org/jetbrains/android/uipreview/RenderService.java b/plugins/android/src/org/jetbrains/android/uipreview/RenderService.java index c6d4927931da..8c25d058a983 100644 --- a/plugins/android/src/org/jetbrains/android/uipreview/RenderService.java +++ b/plugins/android/src/org/jetbrains/android/uipreview/RenderService.java @@ -69,7 +69,7 @@ class RenderService { @Nullable @SuppressWarnings("IOResourceOpenedButNotSafelyClosed") - public RenderSession createRenderSession(@NotNull String layoutXmlText, @NotNull String appLabel) + public RenderSession createRenderSession(@NotNull String layoutXmlText, @NotNull String appLabel, long timeout) throws FileNotFoundException, XmlPullParserException { final ILayoutPullParser parser = new XmlParser(); @@ -102,6 +102,7 @@ class RenderService { params.setExtendedViewInfoMode(false); params.setAppLabel(appLabel); + params.setTimeout(timeout); final ScreenSizeQualifier screenSizeQualifier = myConfig.getScreenSizeQualifier(); params.setConfigScreenSize(screenSizeQualifier != null ? screenSizeQualifier.getValue() : ScreenSize.NORMAL); diff --git a/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java b/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java index dc67b71849e8..c3efd25dc0d1 100644 --- a/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java +++ b/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java @@ -1,8 +1,6 @@ package org.jetbrains.android.uipreview; -import com.android.ide.common.rendering.api.RenderResources; -import com.android.ide.common.rendering.api.RenderSession; -import com.android.ide.common.rendering.api.Result; +import com.android.ide.common.rendering.api.*; import com.android.ide.common.resources.ResourceDeltaKind; import com.android.ide.common.resources.ResourceFolder; import com.android.ide.common.resources.ResourceRepository; @@ -73,7 +71,8 @@ public class RenderUtil { @NotNull FolderConfiguration config, float xdpi, float ydpi, - @NotNull ThemeData theme) + @NotNull ThemeData theme, + long timeout) throws RenderingException, IOException, AndroidSdkNotConfiguredException { final Sdk sdk = ModuleRootManager.getInstance(facet.getModule()).getSdk(); if (sdk == null || !(sdk.getSdkType() instanceof AndroidSdkType)) { @@ -121,7 +120,7 @@ public class RenderUtil { final RenderService renderService = factory.createService(pair.getFirst(), pair.getSecond(), config, xdpi, ydpi, callback, minSdkVersion); try { - return renderService.createRenderSession(layoutXmlText, getAppLabelToShow(facet)); + return renderService.createRenderSession(layoutXmlText, getAppLabelToShow(facet), timeout); } catch (XmlPullParserException e) { throw new RenderingException(e); @@ -198,7 +197,7 @@ public class RenderUtil { final RenderSession session; try { - session = renderService.createRenderSession(layoutXmlText, getAppLabelToShow(facet)); + session = renderService.createRenderSession(layoutXmlText, getAppLabelToShow(facet), RenderParams.DEFAULT_TIMEOUT); } catch (XmlPullParserException e) { throw new RenderingException(e); From 72ec7ad4a601eb9db60c83f74b48547233068209 Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Tue, 3 Apr 2012 17:56:54 +0400 Subject: [PATCH 7/7] Fixed wrong field name in log (compile-server). --- jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java index 704c08443492..8dbe8210cfc7 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java @@ -1409,7 +1409,7 @@ public class Mappings { debug("Processing removed fields:"); for (FieldRepr f : diff.fields().removed()) { - debug("Field: ", it.name); + debug("Field: ", f.name); if ((f.access & Opcodes.ACC_PRIVATE) == 0 && (f.access & mask) == mask && f.hasValue()) { debug("Field had value and was (non-private) final static => a switch to non-incremental mode requested");