diff --git a/colorSchemes/src/colorSchemes/Darcula.xml b/colorSchemes/src/colorSchemes/Darcula.xml
index 2665674ca240..9691e1db6a5e 100644
--- a/colorSchemes/src/colorSchemes/Darcula.xml
+++ b/colorSchemes/src/colorSchemes/Darcula.xml
@@ -553,9 +553,9 @@
@@ -578,9 +578,9 @@
-
+
-
+
@@ -1565,9 +1565,9 @@
-
+
-
+
diff --git a/java/debugger/impl/src/com/intellij/debugger/DebuggerManagerEx.java b/java/debugger/impl/src/com/intellij/debugger/DebuggerManagerEx.java
index 12c26117216e..d14e554fd99e 100644
--- a/java/debugger/impl/src/com/intellij/debugger/DebuggerManagerEx.java
+++ b/java/debugger/impl/src/com/intellij/debugger/DebuggerManagerEx.java
@@ -24,6 +24,7 @@ import com.intellij.debugger.ui.breakpoints.BreakpointManager;
import com.intellij.execution.ExecutionException;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.util.Collection;
@@ -42,5 +43,6 @@ public abstract class DebuggerManagerEx extends DebuggerManager {
public abstract void addDebuggerManagerListener(DebuggerManagerListener debuggerManagerListener);
public abstract void removeDebuggerManagerListener(DebuggerManagerListener debuggerManagerListener);
+ @Nullable
public abstract DebuggerSession attachVirtualMachine(@NotNull DebugEnvironment environment) throws ExecutionException;
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/DefaultDebugUIEnvironment.java b/java/debugger/impl/src/com/intellij/debugger/DefaultDebugUIEnvironment.java
index b664da2f6e6e..ef2af94a48c8 100644
--- a/java/debugger/impl/src/com/intellij/debugger/DefaultDebugUIEnvironment.java
+++ b/java/debugger/impl/src/com/intellij/debugger/DefaultDebugUIEnvironment.java
@@ -44,10 +44,7 @@ public class DefaultDebugUIEnvironment implements DebugUIEnvironment {
RemoteConnection remoteConnection,
boolean pollConnection) {
myExecutionEnvironment = environment;
- myModelEnvironment = new DefaultDebugEnvironment(environment,
- state,
- remoteConnection,
- pollConnection);
+ myModelEnvironment = new DefaultDebugEnvironment(environment, state, remoteConnection, pollConnection);
}
@Override
diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java
index a5c40cc4b45d..60c0d2dded3d 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java
@@ -205,6 +205,7 @@ public class DebuggerManagerImpl extends DebuggerManagerEx implements Persistent
}
@Override
+ @Nullable
public DebuggerSession attachVirtualMachine(@NotNull DebugEnvironment environment) throws ExecutionException {
ApplicationManager.getApplication().assertIsDispatchThread();
final DebugProcessEvents debugProcess = new DebugProcessEvents(myProject);
@@ -282,7 +283,6 @@ public class DebuggerManagerImpl extends DebuggerManagerEx implements Persistent
return session;
}
-
@Override
public DebugProcessImpl getDebugProcess(final ProcessHandler processHandler) {
synchronized (mySessions) {
diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java
index 3140423a0f62..c6491a2b8a3f 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java
@@ -59,56 +59,43 @@ public class GenericDebuggerRunner extends JavaPatchableProgramRunner libraryKinds = myLibraryDescription.getSuitableLibraryKinds();
diff --git a/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java b/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java
index d4382b40db7a..ccb606d51376 100644
--- a/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java
+++ b/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java
@@ -541,8 +541,17 @@ public class RedundantCastUtil {
}
}
}
- if (parent instanceof PsiInstanceOfExpression || (TypeConversionUtil.isAssignable(castTo, opType, false) &&
- (expectedTypeByParent == null || TypeConversionUtil.isAssignable(expectedTypeByParent, opType, false)))) {
+ if (parent instanceof PsiInstanceOfExpression) {
+ //15.20.2. Type Comparison Operator instanceof:
+ //If a cast (ยง15.16) of the RelationalExpression to the ReferenceType would be rejected as a compile-time error,
+ //then the instanceof relational expression likewise produces a compile-time error.
+ final PsiTypeElement checkTypeElement = ((PsiInstanceOfExpression)parent).getCheckType();
+ if (checkTypeElement != null && TypeConversionUtil.areTypesConvertible(opType, checkTypeElement.getType())) {
+ addToResults(typeCast);
+ }
+ }
+ else if (TypeConversionUtil.isAssignable(castTo, opType, false) &&
+ (expectedTypeByParent == null || TypeConversionUtil.isAssignable(expectedTypeByParent, opType, false))) {
addToResults(typeCast);
}
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java
index 782df40b80b4..e2e57abdabbc 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java
@@ -27,6 +27,7 @@ import com.intellij.psi.util.*;
import com.intellij.util.ArrayUtilRt;
import com.intellij.util.Function;
import com.intellij.util.Processor;
+import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -220,8 +221,9 @@ public class InferenceSession {
return prepareSubstitution();
}
- if (parameters != null && args != null && !MethodCandidateInfo.isOverloadCheck()) {
- final Set additionalConstraints = new HashSet();
+ if (parameters != null && args != null &&
+ !MethodCandidateInfo.ourOverloadGuard.currentStack().contains(PsiUtil.skipParenthesizedExprUp(parent.getParent()))) {
+ final Set additionalConstraints = new LinkedHashSet();
if (parameters.length > 0) {
collectAdditionalConstraints(parameters, args, properties.getMethod(), PsiSubstitutor.EMPTY, additionalConstraints, properties.isVarargs(), true);
}
@@ -881,7 +883,7 @@ public class InferenceSession {
private Set buildSubset(final Set additionalConstraints) {
- final Set subset = new HashSet();
+ final Set subset = new LinkedHashSet();
final Set outputVariables = new HashSet();
for (ConstraintFormula constraint : additionalConstraints) {
if (constraint instanceof InputOutputConstraintFormula) {
@@ -899,8 +901,19 @@ public class InferenceSession {
if (inputVariables != null) {
boolean dependsOnOutput = false;
for (InferenceVariable inputVariable : inputVariables) {
+ if (dependsOnOutput) break;
+ if (inputVariable.hasInstantiation(this)) continue;
final Set dependencies = inputVariable.getDependencies(this);
dependencies.add(inputVariable);
+ if (!hasCapture(inputVariable)) {
+ for (InferenceVariable outputVariable : outputVariables) {
+ if (ContainerUtil.intersects(outputVariable.getDependencies(this), dependencies)) {
+ dependsOnOutput = true;
+ break;
+ }
+ }
+ }
+
dependencies.retainAll(outputVariables);
if (!dependencies.isEmpty()) {
dependsOnOutput = true;
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceVariable.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceVariable.java
index a19961f4c3a9..6bc9e0b89871 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceVariable.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceVariable.java
@@ -115,6 +115,16 @@ public class InferenceVariable extends LightTypeParameter {
return dependencies;
}
+ public boolean hasInstantiation(InferenceSession session) {
+ List bounds = getBounds(InferenceBound.EQ);
+ if (bounds != null) {
+ for (PsiType bound : bounds) {
+ if (session.isProperType(bound)) return true;
+ }
+ }
+ return false;
+ }
+
public boolean isThrownBound() {
return myThrownBound;
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiConditionalExpressionImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiConditionalExpressionImpl.java
index 73639b26c945..5bf3addded5f 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiConditionalExpressionImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiConditionalExpressionImpl.java
@@ -92,7 +92,7 @@ public class PsiConditionalExpressionImpl extends ExpressionPsiElement implement
if (PsiUtil.isLanguageLevel8OrHigher(this) &&
PsiPolyExpressionUtil.isPolyExpression(this) &&
- !MethodCandidateInfo.ourOverloadGuard.currentStack().contains(this.getParent())) {
+ !MethodCandidateInfo.ourOverloadGuard.currentStack().contains(PsiUtil.skipParenthesizedExprUp(this.getParent()))) {
//15.25.3 Reference Conditional Expressions
// The type of a poly reference conditional expression is the same as its target type.
return InferenceSession.getTargetType(this);
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/TypeCastInInstanceof.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/TypeCastInInstanceof.java
new file mode 100644
index 000000000000..cbbffdf44291
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/TypeCastInInstanceof.java
@@ -0,0 +1,13 @@
+@SuppressWarnings({"UnusedDeclaration"})
+class C {
+ boolean foo(final ConfigurableField nameField) {
+ return (Formatter>)nameField.getFormatter() instanceof DefaultFormatter;
+ }
+}
+
+@SuppressWarnings({"UnusedDeclaration"})
+interface Formatter{}
+class DefaultFormatter implements Formatter
@@ -281,19 +281,19 @@
-
+
-
+
-
+
-
+
diff --git a/platform/platform-resources/src/idea/LangActions.xml b/platform/platform-resources/src/idea/LangActions.xml
index e57e0cf0f70e..3b0289f12433 100644
--- a/platform/platform-resources/src/idea/LangActions.xml
+++ b/platform/platform-resources/src/idea/LangActions.xml
@@ -364,6 +364,7 @@
+
diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml
index 869a8a754886..ea65788a2554 100644
--- a/platform/platform-resources/src/idea/PlatformActions.xml
+++ b/platform/platform-resources/src/idea/PlatformActions.xml
@@ -457,6 +457,7 @@
+
diff --git a/platform/platform-tests/testSrc/com/intellij/execution/process/AnsiEscapeDecoderTest.java b/platform/platform-tests/testSrc/com/intellij/execution/process/AnsiEscapeDecoderTest.java
new file mode 100644
index 000000000000..32ec00d1a733
--- /dev/null
+++ b/platform/platform-tests/testSrc/com/intellij/execution/process/AnsiEscapeDecoderTest.java
@@ -0,0 +1,55 @@
+package com.intellij.execution.process;
+
+import com.intellij.openapi.util.Key;
+import com.intellij.openapi.util.Pair;
+import com.intellij.testFramework.PlatformTestCase;
+import com.intellij.util.containers.ContainerUtil;
+import org.jetbrains.annotations.NotNull;
+import org.junit.Assert;
+
+import java.util.List;
+
+public class AnsiEscapeDecoderTest extends PlatformTestCase {
+
+ public void testTextWithoutColors() throws Exception {
+ AnsiEscapeDecoder decoder = new AnsiEscapeDecoder();
+ decoder.escapeText("", ProcessOutputTypes.STDOUT, createExpectedAcceptor(ContainerUtil.newArrayList(
+ Pair.create("", ProcessOutputTypes.STDOUT)
+ )));
+ decoder.escapeText("simple text", ProcessOutputTypes.STDOUT, createExpectedAcceptor(ContainerUtil.newArrayList(
+ Pair.create("simple text", ProcessOutputTypes.STDOUT)
+ )));
+ }
+
+ public void testSingleColoredChunk() throws Exception {
+ AnsiEscapeDecoder decoder = new AnsiEscapeDecoder();
+ decoder.escapeText("Chrome 35.0.1916 (Linux): Executed 0 of 1\u001B[32m SUCCESS\u001B[39m (0 secs / 0 secs)\n", ProcessOutputTypes.STDOUT, createExpectedAcceptor(ContainerUtil.newArrayList(
+ Pair.create("Chrome 35.0.1916 (Linux): Executed 0 of 1", ProcessOutputTypes.STDOUT),
+ Pair.create(" SUCCESS", ColoredOutputTypeRegistry.getInstance().getOutputKey("\u001B[32m")),
+ Pair.create(" (0 secs / 0 secs)\n", ColoredOutputTypeRegistry.getInstance().getOutputKey("\u001B[39m"))
+ )));
+ }
+
+ public void testCompoundEscSeq() throws Exception {
+ AnsiEscapeDecoder decoder = new AnsiEscapeDecoder();
+ decoder.escapeText("E\u001B[41m\u001B[37mE\u001B[0mE", ProcessOutputTypes.STDOUT, createExpectedAcceptor(ContainerUtil.newArrayList(
+ Pair.create("E", ProcessOutputTypes.STDOUT),
+ Pair.create("E", ColoredOutputTypeRegistry.getInstance().getOutputKey("\u001B[41;37m")),
+ Pair.create("E", ProcessOutputTypes.STDOUT)
+ )));
+ }
+
+ private static AnsiEscapeDecoder.ColoredChunksAcceptor createExpectedAcceptor(@NotNull final List> expected) {
+ return new AnsiEscapeDecoder.ColoredChunksAcceptor() {
+ @Override
+ public void coloredChunksAvailable(List> chunks) {
+ Assert.assertEquals(expected, chunks);
+ }
+
+ @Override
+ public void coloredTextAvailable(String text, Key attributes) {
+ throw new RuntimeException(); // shouldn't be called
+ }
+ };
+ }
+}
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/PatternCompiler.java b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/PatternCompiler.java
index 4cbd3cb01c19..07808d33c003 100644
--- a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/PatternCompiler.java
+++ b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/compiler/PatternCompiler.java
@@ -344,11 +344,8 @@ public class PatternCompiler {
@Override
public String getPrefix(int varIndex) {
- try {
- return myPrefixes[varIndex];
- } catch (ArrayIndexOutOfBoundsException e) {
- return null;
- }
+ if (varIndex >= myPrefixes.length) return null;
+ return myPrefixes[varIndex];
}
}
diff --git a/platform/util/src/com/intellij/util/containers/ContainerUtil.java b/platform/util/src/com/intellij/util/containers/ContainerUtil.java
index 171cfababfa9..dca7a0e6b30d 100644
--- a/platform/util/src/com/intellij/util/containers/ContainerUtil.java
+++ b/platform/util/src/com/intellij/util/containers/ContainerUtil.java
@@ -1113,6 +1113,10 @@ public class ContainerUtil extends ContainerUtilRt {
*/
@NotNull
public static List concat(@NotNull final List extends T> list1, @NotNull final List extends T> list2) {
+ if (list1.isEmpty() && list2.isEmpty()) {
+ return Collections.emptyList();
+ }
+
final int size1 = list1.size();
final int size = size1 + list2.size();
diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerManager.java b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerManager.java
index 251e6fdb8ea7..cb65b84af9d9 100644
--- a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerManager.java
+++ b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerManager.java
@@ -58,8 +58,8 @@ public abstract class XDebuggerManager {
public abstract XDebugSession getCurrentSession();
/**
- * Start a new debugging session. Use this method only if debugging is started by using standard 'Debug' action i.e. this methods is called
- * from {@link com.intellij.execution.runners.ProgramRunner#execute} method. Otherwise use {@link #startSessionAndShowTab} method
+ * @deprecated use {@link #startSession(com.intellij.execution.runners.ExecutionEnvironment, XDebugProcessStarter)} instead
+ * to remove in IDEA 15
*/
@NotNull
@Deprecated
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java
index 37baa02ca74e..91e9194edcd3 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java
@@ -22,8 +22,8 @@ import com.intellij.execution.Executor;
import com.intellij.execution.executors.DefaultDebugExecutor;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.runners.ExecutionEnvironment;
-import com.intellij.execution.runners.ExecutionEnvironmentBuilder;
import com.intellij.execution.runners.ProgramRunner;
+import com.intellij.execution.runners.RunContentBuilder;
import com.intellij.execution.ui.ExecutionConsole;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.execution.ui.RunContentManagerImpl;
@@ -174,7 +174,7 @@ public class XDebuggerManagerImpl extends XDebuggerManager
@NotNull ExecutionEnvironment environment,
@Nullable RunContentDescriptor contentToReuse,
@NotNull XDebugProcessStarter processStarter) throws ExecutionException {
- return startSession(contentToReuse, processStarter, new XDebugSessionImpl(ExecutionEnvironmentBuilder.fix(environment, runner), this));
+ return startSession(contentToReuse, processStarter, new XDebugSessionImpl(RunContentBuilder.fix(environment, runner), this));
}
@Override
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java
index 6734edd3e838..0a5fc9e18d9d 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java
@@ -77,22 +77,21 @@ public class XDebugSessionTab extends DebuggerSessionTabBase implements DataProv
if (component != null) {
XDebugSessionTab oldTab = TAB_KEY.getData(DataManager.getInstance().getDataContext(component));
if (oldTab != null) {
- oldTab.setSession(session, environment, contentToReuse, icon);
+ oldTab.setSession(session, environment, icon);
oldTab.attachToSession();
return oldTab;
}
}
}
- return new XDebugSessionTab(session, icon, environment, contentToReuse);
+ return new XDebugSessionTab(session, icon, environment);
}
private XDebugSessionTab(@NotNull XDebugSessionImpl session,
- @Nullable Icon icon,
- @Nullable ExecutionEnvironment environment,
- @Nullable RunContentDescriptor contentToReuse) {
+ @Nullable Icon icon,
+ @Nullable ExecutionEnvironment environment) {
super(session.getProject(), "Debug", session.getSessionName(), GlobalSearchScope.allScope(session.getProject()));
- setSession(session, environment, contentToReuse, icon);
+ setSession(session, environment, icon);
myUi.addContent(createFramesContent(), 0, PlaceInGrid.left, false);
myUi.addContent(createVariablesContent(), 0, PlaceInGrid.center, false);
@@ -126,7 +125,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase implements DataProv
rebuildViews();
}
- private void setSession(@NotNull XDebugSessionImpl session, @Nullable ExecutionEnvironment environment, @Nullable RunContentDescriptor contentToReuse, @Nullable Icon icon) {
+ private void setSession(@NotNull XDebugSessionImpl session, @Nullable ExecutionEnvironment environment, @Nullable Icon icon) {
if (environment != null) {
setEnvironment(environment);
}
@@ -134,9 +133,6 @@ public class XDebugSessionTab extends DebuggerSessionTabBase implements DataProv
this.session = session;
myConsole = session.getConsoleView();
myRunContentDescriptor = new RunContentDescriptor(myConsole, session.getDebugProcess().getProcessHandler(), myUi.getComponent(), session.getSessionName(), icon);
- if (contentToReuse != null && contentToReuse.isReuseToolWindowActivation()) {
- myRunContentDescriptor.setActivateToolWindowWhenAdded(contentToReuse.isActivateToolWindowWhenAdded());
- }
}
@Nullable
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentExcludedVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentExcludedVisitor.java
index 69710a084904..f7778e0a89bc 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentExcludedVisitor.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentExcludedVisitor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2012 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2014 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -44,14 +44,29 @@ class VariablePassedAsArgumentExcludedVisitor extends JavaRecursiveElementVisito
}
@Override
- public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
+ public void visitCallExpression(PsiCallExpression callExpression) {
if (passed) {
return;
}
- super.visitMethodCallExpression(call);
+ super.visitCallExpression(callExpression);
+ visitCall(callExpression);
+ }
+
+ @Override
+ public void visitEnumConstant(PsiEnumConstant enumConstant) {
+ if (passed) {
+ return;
+ }
+ super.visitEnumConstant(enumConstant);
+ visitCall(enumConstant);
+ }
+
+ private void visitCall(PsiCall call) {
final PsiExpressionList argumentList = call.getArgumentList();
- final PsiExpression[] arguments = argumentList.getExpressions();
- for (PsiExpression argument : arguments) {
+ if (argumentList == null) {
+ return;
+ }
+ for (PsiExpression argument : argumentList.getExpressions()) {
if (!VariableAccessUtils.mayEvaluateToVariable(argument, variable, myBuilderPattern)) {
continue;
}
@@ -69,35 +84,6 @@ class VariablePassedAsArgumentExcludedVisitor extends JavaRecursiveElementVisito
}
}
- @Override
- public void visitNewExpression(@NotNull PsiNewExpression newExpression) {
- if (passed) {
- return;
- }
- super.visitNewExpression(newExpression);
- final PsiExpressionList argumentList = newExpression.getArgumentList();
- if (argumentList == null) {
- return;
- }
- final PsiExpression[] arguments = argumentList.getExpressions();
- for (PsiExpression argument : arguments) {
- if (!VariableAccessUtils.mayEvaluateToVariable(argument, variable, myBuilderPattern)) {
- continue;
- }
- final PsiMethod constructor = newExpression.resolveConstructor();
- if (constructor != null) {
- final PsiClass aClass = constructor.getContainingClass();
- if (aClass != null) {
- final String name = aClass.getQualifiedName();
- if (excludes.contains(name)) {
- continue;
- }
- }
- }
- passed = true;
- }
- }
-
public boolean isPassed() {
return passed;
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentVisitor.java
index 7938fbc5c696..92082cea9e27 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentVisitor.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentVisitor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2011 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2014 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -37,33 +37,29 @@ class VariablePassedAsArgumentVisitor extends JavaRecursiveElementVisitor {
}
@Override
- public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
+ public void visitCallExpression(PsiCallExpression callExpression) {
+ super.visitCallExpression(callExpression);
if (passed) {
return;
}
- super.visitMethodCallExpression(call);
- final PsiExpressionList argumentList = call.getArgumentList();
- final PsiExpression[] arguments = argumentList.getExpressions();
- for (PsiExpression argument : arguments) {
- if (VariableAccessUtils.mayEvaluateToVariable(argument, variable)) {
- passed = true;
- break;
- }
- }
+ visitCall(callExpression);
}
@Override
- public void visitNewExpression(@NotNull PsiNewExpression newExpression) {
+ public void visitEnumConstant(PsiEnumConstant enumConstant) {
if (passed) {
return;
}
- super.visitNewExpression(newExpression);
- final PsiExpressionList argumentList = newExpression.getArgumentList();
+ super.visitEnumConstant(enumConstant);
+ visitCall(enumConstant);
+ }
+
+ private void visitCall(PsiCall call) {
+ final PsiExpressionList argumentList = call.getArgumentList();
if (argumentList == null) {
return;
}
- final PsiExpression[] arguments = argumentList.getExpressions();
- for (PsiExpression argument : arguments) {
+ for (PsiExpression argument : argumentList.getExpressions()) {
if (VariableAccessUtils.mayEvaluateToVariable(argument, variable)) {
passed = true;
break;
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_collection_query_update/MismatchedCollectionQueryUpdate.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_collection_query_update/MismatchedCollectionQueryUpdate.java
index 5c53674cd15b..5af84ecb21e7 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_collection_query_update/MismatchedCollectionQueryUpdate.java
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_collection_query_update/MismatchedCollectionQueryUpdate.java
@@ -275,4 +275,18 @@ class SimpleAdd {
return null;
}
+}
+class EnumConstant {
+ private static final List CONSTANT_ARRAY = new ArrayList();
+ static {
+ CONSTANT_ARRAY.add("asdf");
+ }
+
+ enum SomeEnum {
+ ITEM(CONSTANT_ARRAY); // passed as argument
+ private final List myPatterns;
+ SomeEnum(List patterns) {
+ myPatterns = patterns;
+ }
+ }
}
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_string_builder_query_update/MismatchedStringBuilderQueryUpdate.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_string_builder_query_update/MismatchedStringBuilderQueryUpdate.java
index c8d9fb80cf19..2274472eb2fa 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_string_builder_query_update/MismatchedStringBuilderQueryUpdate.java
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_string_builder_query_update/MismatchedStringBuilderQueryUpdate.java
@@ -31,3 +31,15 @@ interface List {
interface Consumer {
void accept(T t);
}
+class EnumConstant {
+ private static final StringBuilder sb = new StringBuilder();
+ static {
+ sb.append("");
+ }
+
+ enum SomeEnum {
+ ITEM(sb); // passed as argument
+
+ SomeEnum(StringBuilder sb) {}
+ }
+}
diff --git a/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineFacetEditor.java b/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineFacetEditor.java
index 6e45480f1156..a01878f1e29d 100644
--- a/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineFacetEditor.java
+++ b/plugins/google-app-engine/source/com/intellij/appengine/facet/AppEngineFacetEditor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -60,6 +60,7 @@ public class AppEngineFacetEditor extends FacetEditorTab {
myContext = context;
mySdkEditor = new AppEngineSdkEditor(myContext.getProject());
validatorsManager.registerValidator(new FacetEditorValidator() {
+ @NotNull
@Override
public ValidationResult check() {
return AppEngineSdkUtil.checkPath(mySdkEditor.getPath());
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonDebuggerRunner.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonDebuggerRunner.java
index 2bdcf1c166e5..2d424b2f58d9 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonDebuggerRunner.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/griffon/GriffonDebuggerRunner.java
@@ -22,7 +22,6 @@ import com.intellij.execution.configurations.*;
import com.intellij.execution.executors.DefaultDebugExecutor;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.ui.RunContentDescriptor;
-import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
/**
@@ -42,10 +41,7 @@ public class GriffonDebuggerRunner extends GenericDebuggerRunner {
@Override
- protected RunContentDescriptor createContentDescriptor(Project project,
- RunProfileState state,
- RunContentDescriptor contentToReuse,
- ExecutionEnvironment environment) throws ExecutionException {
+ protected RunContentDescriptor createContentDescriptor(@NotNull RunProfileState state, @NotNull ExecutionEnvironment environment) throws ExecutionException {
final JavaCommandLine javaCommandLine = (JavaCommandLine)state;
final JavaParameters params = javaCommandLine.getJavaParameters();
@@ -68,11 +64,8 @@ public class GriffonDebuggerRunner extends GenericDebuggerRunner {
}
if (address == null) {
- return super.createContentDescriptor(project, state, contentToReuse, environment);
+ return super.createContentDescriptor(state, environment);
}
-
- RemoteConnection connection = new RemoteConnection(true, "127.0.0.1", address, false);
- return attachVirtualMachine(project, state, contentToReuse, environment, connection, true);
+ return attachVirtualMachine(state, environment, new RemoteConnection(true, "127.0.0.1", address, false), true);
}
-
-}
+}
\ No newline at end of file
diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgOutgoingCommand.java b/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgOutgoingCommand.java
index 89f5d7ad4b8e..578af65a6b56 100644
--- a/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgOutgoingCommand.java
+++ b/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgOutgoingCommand.java
@@ -44,6 +44,7 @@ public class HgOutgoingCommand extends HgRemoteChangesetsCommand {
boolean doNotShowAuthorizationRequest) {
List arguments = new LinkedList();
+ arguments.add("-n");
arguments.add("--template");
arguments.add(template);
arguments.add(HgHistoryUtil.prepareParameter("rev", source));
diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java
index 73998ba4ff8e..de565484e2d5 100644
--- a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java
+++ b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgHistoryUtil.java
@@ -110,19 +110,19 @@ public class HgHistoryUtil {
final HgVersion version = hgvcs.getVersion();
String[] templates = HgBaseLogParser.constructFullTemplateArgument(true, version);
HgCommandResult result = getLogResult(project, root, version, limit, parameters, HgChangesetUtil.makeTemplate(templates));
- return createFullCommitsFromResult(project, root, result, version);
+ return createFullCommitsFromResult(project, root, result, version, false);
}
public static List extends VcsFullCommitDetails> createFullCommitsFromResult(@NotNull Project project,
@NotNull VirtualFile root,
@Nullable HgCommandResult result,
- @NotNull HgVersion version) {
+ @NotNull HgVersion version, boolean silent) {
final VcsLogObjectsFactory factory = getObjectsFactoryWithDisposeCheck(project);
if (factory == null) {
return Collections.emptyList();
}
List hgRevisions =
- getCommitRecords(project, result, new HgFileRevisionLogParser(project, getOriginalHgFile(project, root), version));
+ getCommitRecords(project, result, new HgFileRevisionLogParser(project, getOriginalHgFile(project, root), version), silent);
List vcsFullCommitDetailsList = new ArrayList();
for (HgFileRevision revision : hgRevisions) {
@@ -194,6 +194,13 @@ public class HgHistoryUtil {
public static List getCommitRecords(@NotNull Project project,
@Nullable HgCommandResult result,
@NotNull Function converter) {
+ return getCommitRecords(project, result, converter, false);
+ }
+
+ @NotNull
+ public static List getCommitRecords(@NotNull Project project,
+ @Nullable HgCommandResult result,
+ @NotNull Function converter, boolean silent) {
final List revisions = new LinkedList();
if (result == null) {
return revisions;
@@ -202,7 +209,12 @@ public class HgHistoryUtil {
List errors = result.getErrorLines();
if (errors != null && !errors.isEmpty()) {
if (result.getExitValue() != 0) {
- VcsNotifier.getInstance(project).notifyError(HgVcsMessages.message("hg4idea.error.log.command.execution"), errors.toString());
+ if (silent) {
+ LOG.warn(errors.toString());
+ }
+ else {
+ VcsNotifier.getInstance(project).notifyError(HgVcsMessages.message("hg4idea.error.log.command.execution"), errors.toString());
+ }
return Collections.emptyList();
}
LOG.warn(errors.toString());
diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgOutgoingCommitsProvider.java b/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgOutgoingCommitsProvider.java
index 8d24b20ff7c5..52764a11eef9 100644
--- a/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgOutgoingCommitsProvider.java
+++ b/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgOutgoingCommitsProvider.java
@@ -21,7 +21,6 @@ import com.intellij.dvcs.repo.Repository;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.VcsFullCommitDetails;
import org.jetbrains.annotations.NotNull;
import org.zmlx.hg4idea.HgVcs;
@@ -99,7 +98,6 @@ public class HgOutgoingCommitsProvider extends OutgoingCommitsProvider {
}
LOG.warn(resultErrors.toString());
}
- return new OutgoingResult(
- ContainerUtil.reverse(HgHistoryUtil.createFullCommitsFromResult(project, repository.getRoot(), result, version)), errors);
+ return new OutgoingResult(HgHistoryUtil.createFullCommitsFromResult(project, repository.getRoot(), result, version, true), errors);
}
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java
index 3747107fb223..bada6c044354 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java
@@ -59,10 +59,12 @@ public class MavenRunConfigurationType implements ConfigurationType {
*/
MavenRunConfigurationType() {
myFactory = new ConfigurationFactory(this) {
+ @Override
public RunConfiguration createTemplateConfiguration(Project project) {
return new MavenRunConfiguration(project, this, "");
}
+ @Override
public RunConfiguration createTemplateConfiguration(Project project, RunManager runManager) {
return new MavenRunConfiguration(project, this, "");
}
@@ -99,22 +101,27 @@ public class MavenRunConfigurationType implements ConfigurationType {
};
}
+ @Override
public String getDisplayName() {
return RunnerBundle.message("maven.run.configuration.name");
}
+ @Override
public String getConfigurationTypeDescription() {
return RunnerBundle.message("maven.run.configuration.description");
}
+ @Override
public Icon getIcon() {
return MavenIcons.Phase;
}
+ @Override
public ConfigurationFactory[] getConfigurationFactories() {
return new ConfigurationFactory[]{myFactory};
}
+ @Override
@NonNls
@NotNull
public String getId() {
@@ -187,29 +194,26 @@ public class MavenRunConfigurationType implements ConfigurationType {
ProgramRunner runner = DefaultJavaProgramRunner.getInstance();
Executor executor = DefaultRunExecutor.getRunExecutorInstance();
- ExecutionEnvironment env = new ExecutionEnvironment(executor, runner, configSettings, project);
-
try {
- runner.execute(env, callback);
+ runner.execute(new ExecutionEnvironment(executor, runner, configSettings, project), callback);
}
catch (ExecutionException e) {
MavenUtil.showError(project, "Failed to execute Maven goal", e);
}
}
+ @NotNull
public static RunnerAndConfigurationSettings createRunnerAndConfigurationSettings(@Nullable MavenGeneralSettings generalSettings,
- @Nullable MavenRunnerSettings runnerSettings,
- MavenRunnerParameters params,
- Project project) {
+ @Nullable MavenRunnerSettings runnerSettings,
+ MavenRunnerParameters params,
+ Project project) {
MavenRunConfigurationType type = ConfigurationTypeUtil.findConfigurationType(MavenRunConfigurationType.class);
- final RunnerAndConfigurationSettings settings = RunManagerEx.getInstanceEx(project)
- .createConfiguration(generateName(project, params), type.myFactory);
+ RunnerAndConfigurationSettings settings = RunManager.getInstance(project).createRunConfiguration(generateName(project, params), type.myFactory);
MavenRunConfiguration runConfiguration = (MavenRunConfiguration)settings.getConfiguration();
runConfiguration.setRunnerParameters(params);
runConfiguration.setGeneralSettings(generalSettings);
runConfiguration.setRunnerSettings(runnerSettings);
-
return settings;
}
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/actions/MavenRunConfigurationMenu.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/actions/MavenRunConfigurationMenu.java
index 4566689ed55e..48f376d1829f 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/actions/MavenRunConfigurationMenu.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/navigator/actions/MavenRunConfigurationMenu.java
@@ -57,9 +57,9 @@ public class MavenRunConfigurationMenu extends DefaultActionGroup implements Dum
@Override
public void actionPerformed(AnActionEvent event) {
- if (!myEnabled) return;
-
- ProgramRunnerUtil.executeConfiguration(myProject, mySettings, myExecutor);
+ if (myEnabled) {
+ ProgramRunnerUtil.executeConfiguration(myProject, mySettings, myExecutor);
+ }
}
@Override
diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java
index d252c93bcb34..f671b1a19fc6 100644
--- a/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java
+++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java
@@ -155,8 +155,7 @@ public abstract class AbstractTerminalRunner {
return new CloseAction(defaultExecutor, myDescriptor, myProject);
}
-
- protected void showConsole(Executor defaultExecutor, RunContentDescriptor myDescriptor, final Component toFocus) {
+ protected void showConsole(Executor defaultExecutor, @NotNull RunContentDescriptor myDescriptor, final Component toFocus) {
// Show in run toolwindow
ExecutionManager.getInstance(myProject).getContentManager().showRunContent(defaultExecutor, myDescriptor);
diff --git a/python/src/com/jetbrains/python/buildout/BuildoutConfigPanel.java b/python/src/com/jetbrains/python/buildout/BuildoutConfigPanel.java
index 394de6160cbc..eceedeb00050 100644
--- a/python/src/com/jetbrains/python/buildout/BuildoutConfigPanel.java
+++ b/python/src/com/jetbrains/python/buildout/BuildoutConfigPanel.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -81,6 +81,7 @@ public class BuildoutConfigPanel extends JPanel {
myErrorPanel.add(facetErrorPanel.getComponent(), BorderLayout.CENTER);
facetErrorPanel.getValidatorsManager().registerValidator(new FacetEditorValidator() {
+ @NotNull
@Override
public ValidationResult check() {
if (!myFacetEnabled) {
diff --git a/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibTypeProvider.java b/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibTypeProvider.java
index 346d40f3273e..c28bc29455c9 100644
--- a/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibTypeProvider.java
+++ b/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibTypeProvider.java
@@ -36,6 +36,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import static com.jetbrains.python.psi.PyUtil.as;
+
/**
* @author yole
*/
@@ -132,6 +134,23 @@ public class PyStdlibTypeProvider extends PyTypeProviderBase {
}
}
}
+ else if ("__builtin__.tuple.__add__".equals(qname) && callSite instanceof PyBinaryExpression) {
+ final PyBinaryExpression expression = (PyBinaryExpression)callSite;
+ final PyTupleType leftTupleType = as(context.getType(expression.getLeftExpression()), PyTupleType.class);
+ if (expression.getRightExpression() != null) {
+ final PyTupleType rightTupleType = as(context.getType(expression.getRightExpression()), PyTupleType.class);
+ if (leftTupleType != null && rightTupleType != null) {
+ final PyType[] elementTypes = new PyType[leftTupleType.getElementCount() + rightTupleType.getElementCount()];
+ for (int i = 0; i < leftTupleType.getElementCount(); i++) {
+ elementTypes[i] = leftTupleType.getElementType(i);
+ }
+ for (int i = 0; i < rightTupleType.getElementCount(); i++) {
+ elementTypes[i + leftTupleType.getElementCount()] = rightTupleType.getElementType(i);
+ }
+ return PyTupleType.create(function, elementTypes);
+ }
+ }
+ }
}
return null;
}
diff --git a/python/src/com/jetbrains/python/configuration/PyIntegratedToolsConfigurable.java b/python/src/com/jetbrains/python/configuration/PyIntegratedToolsConfigurable.java
index 8afd9cc4e674..fa869bfca359 100644
--- a/python/src/com/jetbrains/python/configuration/PyIntegratedToolsConfigurable.java
+++ b/python/src/com/jetbrains/python/configuration/PyIntegratedToolsConfigurable.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -120,6 +120,7 @@ public class PyIntegratedToolsConfigurable implements SearchableConfigurable, No
myErrorPanel.add(facetErrorPanel.getComponent(), BorderLayout.CENTER);
facetErrorPanel.getValidatorsManager().registerValidator(new FacetEditorValidator() {
+ @NotNull
@Override
public ValidationResult check() {
final Sdk sdk = PythonSdkType.findPythonSdk(myModule);
diff --git a/python/src/com/jetbrains/python/console/PythonToolWindowConsoleRunner.java b/python/src/com/jetbrains/python/console/PythonToolWindowConsoleRunner.java
index 4fbb92964a02..5c98bd5110b1 100644
--- a/python/src/com/jetbrains/python/console/PythonToolWindowConsoleRunner.java
+++ b/python/src/com/jetbrains/python/console/PythonToolWindowConsoleRunner.java
@@ -54,7 +54,7 @@ public class PythonToolWindowConsoleRunner extends PydevConsoleRunner {
}
@Override
- protected void showConsole(Executor defaultExecutor, RunContentDescriptor contentDescriptor) {
+ protected void showConsole(Executor defaultExecutor, @NotNull RunContentDescriptor contentDescriptor) {
PythonConsoleToolWindow terminalView = PythonConsoleToolWindow.getInstance(getProject());
terminalView.init(getToolWindow(), contentDescriptor);
}
diff --git a/python/src/com/jetbrains/python/packaging/PyPIPackageUtil.java b/python/src/com/jetbrains/python/packaging/PyPIPackageUtil.java
index fbbdfa215e9c..2b8591f96d8e 100644
--- a/python/src/com/jetbrains/python/packaging/PyPIPackageUtil.java
+++ b/python/src/com/jetbrains/python/packaging/PyPIPackageUtil.java
@@ -239,8 +239,6 @@ public class PyPIPackageUtil {
if (connection instanceof HttpsURLConnection) {
((HttpsURLConnection)connection).setSSLSocketFactory(sslContext.getSocketFactory());
}
- connection.setConnectTimeout(5000);
- connection.setReadTimeout(5000);
InputStream is = connection.getInputStream();
Reader reader = new InputStreamReader(is);
try{
diff --git a/python/testData/inspections/PyStringFormatInspection/expected.xml b/python/testData/inspections/PyStringFormatInspection/expected.xml
index 62301ce56510..25e70285bd8d 100644
--- a/python/testData/inspections/PyStringFormatInspection/expected.xml
+++ b/python/testData/inspections/PyStringFormatInspection/expected.xml
@@ -160,4 +160,20 @@
99
Too few arguments for format string
+
+ string-format.py
+ 103
+ Unexpected type
+
+
+ string-format.py
+ 104
+ Too few arguments for format string
+
+
+ string-format.py
+ 105
+ Too many arguments for format string
+
+
diff --git a/python/testData/inspections/PyStringFormatInspection/src/string-format.py b/python/testData/inspections/PyStringFormatInspection/src/string-format.py
index e60e4bb90911..b82ebcf4eb5c 100644
--- a/python/testData/inspections/PyStringFormatInspection/src/string-format.py
+++ b/python/testData/inspections/PyStringFormatInspection/src/string-format.py
@@ -96,4 +96,10 @@ print '%d' % string[:2]
my_tuple = (1,2,3,4,5,6,7,8)
print '%d, %d' % my_tuple[:7:3]
print '%d, %d, %d' % my_tuple[:7:3]
-print '%d, %d, %d, %d' % my_tuple[:7:3]
\ No newline at end of file
+print '%d, %d, %d, %d' % my_tuple[:7:3]
+
+# PY-12801
+print '%d %s' % ((42,) + ('spam',))
+print '%d %s' % (('ham',) + ('spam',))
+print '%d %s' % ((42,) + ())
+print '%d' % ((42,) + ('spam',))
\ No newline at end of file
diff --git a/python/testSrc/com/jetbrains/python/PyTypeTest.java b/python/testSrc/com/jetbrains/python/PyTypeTest.java
index 88243f065a3b..b0e41bcffddc 100644
--- a/python/testSrc/com/jetbrains/python/PyTypeTest.java
+++ b/python/testSrc/com/jetbrains/python/PyTypeTest.java
@@ -829,6 +829,12 @@ public class PyTypeTest extends PyTestCase {
" pass\n");
}
+ // PY-12801
+ public void testTupleConcatenation() {
+ doTest("(int, bool, str)",
+ "expr = (1,) + (True, 'spam') + ()");
+ }
+
private static TypeEvalContext getTypeEvalContext(@NotNull PyExpression element) {
return TypeEvalContext.userInitiated(element.getContainingFile()).withTracing();
}