From 9aab50cb18c97d393a715151af3d7c7421471270 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 13 Apr 2017 12:19:33 +0300 Subject: [PATCH 01/86] Fix potential IOOBE --- .../zmlx/hg4idea/command/HgWorkingCopyRevisionsCommand.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgWorkingCopyRevisionsCommand.java b/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgWorkingCopyRevisionsCommand.java index 61cec1a1237f..0412318febae 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgWorkingCopyRevisionsCommand.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgWorkingCopyRevisionsCommand.java @@ -144,11 +144,11 @@ public class HgWorkingCopyRevisionsCommand { } final List lines = result.getOutputLines(); - if (lines != null && !lines.isEmpty()) { + if (!lines.isEmpty()) { List parts = StringUtil.split(lines.get(0), " "); - String changesets = parts.get(0); - String revisions = parts.get(1); if (parts.size() >= 2) { + String changesets = parts.get(0); + String revisions = parts.get(1); if (changesets.indexOf('+') != changesets.lastIndexOf('+')) { // in the case of unresolved merge we have 2 revisions at once, both current, so with "+" // 9f2e6c02913c+b311eb4eb004+ 186+183+ From 740dfd3a359fb7de7c400b6719e1327601c690ee Mon Sep 17 00:00:00 2001 From: sergio Date: Thu, 13 Apr 2017 12:20:38 +0300 Subject: [PATCH 02/86] Fix typo: close the span tag --- platform/platform-resources-en/src/tips/SelectTasks.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-resources-en/src/tips/SelectTasks.html b/platform/platform-resources-en/src/tips/SelectTasks.html index 78f21d54b769..f1d7b6739913 100644 --- a/platform/platform-resources-en/src/tips/SelectTasks.html +++ b/platform/platform-resources-en/src/tips/SelectTasks.html @@ -7,7 +7,7 @@

When working with a lengthy list of tasks, you don't need to delete them one by one. Select several tasks, using Shift or Control/Command keys, click the right arrow, and then click -Remove. +Remove.

From 66cb95f230f979591b7d3db6f2e4d0e4b9452975 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 12 Apr 2017 18:58:36 +0300 Subject: [PATCH 03/86] speedup unboxing by using the private field value --- .../expression/UnBoxingEvaluator.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/UnBoxingEvaluator.java b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/UnBoxingEvaluator.java index cefa3cecfef7..c3f841ddeab0 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/UnBoxingEvaluator.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/UnBoxingEvaluator.java @@ -18,13 +18,12 @@ package com.intellij.debugger.engine.evaluation.expression; import com.intellij.debugger.engine.DebugProcessImpl; import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; +import com.intellij.debugger.impl.DebuggerUtilsEx; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Couple; import com.intellij.psi.CommonClassNames; import com.intellij.util.containers.HashMap; -import com.sun.jdi.ClassType; -import com.sun.jdi.Method; -import com.sun.jdi.ObjectReference; -import com.sun.jdi.Value; +import com.sun.jdi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -35,7 +34,9 @@ import java.util.Map; * @author Eugene Zhuravlev * Date: Feb 8, 2010 */ -public class UnBoxingEvaluator implements Evaluator{ +public class UnBoxingEvaluator implements Evaluator { + private static final Logger LOG = Logger.getInstance(UnBoxingEvaluator.class); + private final Evaluator myOperand; private static final Map> TYPES_TO_CONVERSION_METHOD_MAP = new HashMap<>(); static { @@ -79,6 +80,17 @@ public class UnBoxingEvaluator implements Evaluator{ String conversionMethodSignature) throws EvaluateException { final DebugProcessImpl process = context.getDebugProcess(); final ClassType wrapperClass = (ClassType)value.referenceType(); + + // for speedup first try value field + Field valueField = wrapperClass.fieldByName("value"); + if (valueField != null) { + Value primitiveValue = value.getValue(valueField); + if (primitiveValue != null) { + LOG.assertTrue(DebuggerUtilsEx.signatureToName(conversionMethodSignature).startsWith(primitiveValue.type().name())); + return primitiveValue; + } + } + Method method = wrapperClass.concreteMethodByName(conversionMethodName, conversionMethodSignature); if (method == null) { throw new EvaluateException("Cannot convert to primitive value of type " + value.type() + ": Unable to find method " + From 410fc5c262528e77e4bcdfa2541b3360dcd9103e Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 13 Apr 2017 12:44:08 +0300 Subject: [PATCH 04/86] introduced renderers for unboxable types --- .../expression/UnBoxingEvaluator.java | 34 ++++--- .../ui/tree/render/UnboxableTypeRenderer.java | 92 +++++++++++++++++++ .../debugger/engine/DebuggerUtils.java | 17 ++-- resources/src/META-INF/IdeaPlugin.xml | 8 ++ 4 files changed, 128 insertions(+), 23 deletions(-) create mode 100644 java/debugger/impl/src/com/intellij/debugger/ui/tree/render/UnboxableTypeRenderer.java diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/UnBoxingEvaluator.java b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/UnBoxingEvaluator.java index c3f841ddeab0..2e830e3d6013 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/UnBoxingEvaluator.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/UnBoxingEvaluator.java @@ -15,13 +15,12 @@ */ package com.intellij.debugger.engine.evaluation.expression; -import com.intellij.debugger.engine.DebugProcessImpl; import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; -import com.intellij.debugger.impl.DebuggerUtilsEx; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Couple; import com.intellij.psi.CommonClassNames; +import com.intellij.psi.impl.PsiJavaParserFacadeImpl; import com.intellij.util.containers.HashMap; import com.sun.jdi.*; import org.jetbrains.annotations.NotNull; @@ -78,25 +77,32 @@ public class UnBoxingEvaluator implements Evaluator { private static Value convertToPrimitive(EvaluationContextImpl context, ObjectReference value, final String conversionMethodName, String conversionMethodSignature) throws EvaluateException { - final DebugProcessImpl process = context.getDebugProcess(); - final ClassType wrapperClass = (ClassType)value.referenceType(); - // for speedup first try value field - Field valueField = wrapperClass.fieldByName("value"); - if (valueField != null) { - Value primitiveValue = value.getValue(valueField); - if (primitiveValue != null) { - LOG.assertTrue(DebuggerUtilsEx.signatureToName(conversionMethodSignature).startsWith(primitiveValue.type().name())); - return primitiveValue; - } + Value primitiveValue = getInnerPrimitiveValue(value); + if (primitiveValue != null) { + return primitiveValue; } - Method method = wrapperClass.concreteMethodByName(conversionMethodName, conversionMethodSignature); + Method method = ((ClassType)value.referenceType()).concreteMethodByName(conversionMethodName, conversionMethodSignature); if (method == null) { throw new EvaluateException("Cannot convert to primitive value of type " + value.type() + ": Unable to find method " + conversionMethodName + conversionMethodSignature); } - return process.invokeMethod(context, value, method, Collections.emptyList()); + return context.getDebugProcess().invokeMethod(context, value, method, Collections.emptyList()); + } + + @Nullable + public static PrimitiveValue getInnerPrimitiveValue(ObjectReference value) { + ReferenceType type = value.referenceType(); + Field valueField = type.fieldByName("value"); + if (valueField != null) { + Value primitiveValue = value.getValue(valueField); + if (primitiveValue instanceof PrimitiveValue) { + LOG.assertTrue(type.name().equals(PsiJavaParserFacadeImpl.getPrimitiveType(primitiveValue.type().name()).getBoxedTypeName())); + return (PrimitiveValue)primitiveValue; + } + } + return null; } } \ No newline at end of file diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/UnboxableTypeRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/UnboxableTypeRenderer.java new file mode 100644 index 000000000000..52c047081ee6 --- /dev/null +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/UnboxableTypeRenderer.java @@ -0,0 +1,92 @@ +/* + * Copyright 2000-2017 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.debugger.ui.tree.render; + +import com.intellij.debugger.engine.DebuggerUtils; +import com.intellij.debugger.engine.evaluation.EvaluateException; +import com.intellij.debugger.engine.evaluation.EvaluationContext; +import com.intellij.debugger.engine.evaluation.expression.UnBoxingEvaluator; +import com.intellij.debugger.settings.NodeRendererSettings; +import com.intellij.debugger.ui.tree.ValueDescriptor; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.CommonClassNames; +import com.sun.jdi.ObjectReference; + +/** + * @author egor + */ +public abstract class UnboxableTypeRenderer extends CompoundReferenceRenderer { + public UnboxableTypeRenderer(String className, NodeRendererSettings rendererSettings) { + super(rendererSettings, StringUtil.getShortName(className), new LabelRenderer() { + @Override + public String calcLabel(ValueDescriptor descriptor, EvaluationContext evaluationContext, DescriptorLabelListener labelListener) + throws EvaluateException { + return DebuggerUtils.getValueAsString(evaluationContext, UnBoxingEvaluator.getInnerPrimitiveValue((ObjectReference)descriptor.getValue())); + } + }, null); + LOG.assertTrue(UnBoxingEvaluator.isTypeUnboxable(className)); + setClassName(className); + setEnabled(true); + } + + public static class BooleanRenderer extends UnboxableTypeRenderer { + public BooleanRenderer(NodeRendererSettings rendererSettings) { + super(CommonClassNames.JAVA_LANG_BOOLEAN, rendererSettings); + } + } + + public static class ByteRenderer extends UnboxableTypeRenderer { + public ByteRenderer(NodeRendererSettings rendererSettings) { + super(CommonClassNames.JAVA_LANG_BYTE, rendererSettings); + } + } + + public static class CharacterRenderer extends UnboxableTypeRenderer { + public CharacterRenderer(NodeRendererSettings rendererSettings) { + super(CommonClassNames.JAVA_LANG_CHARACTER, rendererSettings); + } + } + + public static class ShortRenderer extends UnboxableTypeRenderer { + public ShortRenderer(NodeRendererSettings rendererSettings) { + super(CommonClassNames.JAVA_LANG_SHORT, rendererSettings); + } + } + + public static class IntegerRenderer extends UnboxableTypeRenderer { + public IntegerRenderer(NodeRendererSettings rendererSettings) { + super(CommonClassNames.JAVA_LANG_INTEGER, rendererSettings); + } + } + + public static class LongRenderer extends UnboxableTypeRenderer { + public LongRenderer(NodeRendererSettings rendererSettings) { + super(CommonClassNames.JAVA_LANG_LONG, rendererSettings); + } + } + + public static class FloatRenderer extends UnboxableTypeRenderer { + public FloatRenderer(NodeRendererSettings rendererSettings) { + super(CommonClassNames.JAVA_LANG_FLOAT, rendererSettings); + } + } + + public static class DoubleRenderer extends UnboxableTypeRenderer { + public DoubleRenderer(NodeRendererSettings rendererSettings) { + super(CommonClassNames.JAVA_LANG_DOUBLE, rendererSettings); + } + } +} diff --git a/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java b/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java index ef55ee92e099..a48a908d6c4c 100644 --- a/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java +++ b/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java @@ -72,20 +72,19 @@ public abstract class DebuggerUtils { return ((StringReference)value).value(); } if (isInteger(value)) { - long v = ((PrimitiveValue)value).longValue(); - return String.valueOf(v); + return String.valueOf(((PrimitiveValue)value).longValue()); } - if (isNumeric(value)) { - double v = ((PrimitiveValue)value).doubleValue(); - return String.valueOf(v); + if (value instanceof FloatValue) { + return String.valueOf(((FloatValue)value).floatValue()); + } + if (value instanceof DoubleValue) { + return String.valueOf(((DoubleValue)value).doubleValue()); } if (value instanceof BooleanValue) { - boolean v = ((PrimitiveValue)value).booleanValue(); - return String.valueOf(v); + return String.valueOf(((PrimitiveValue)value).booleanValue()); } if (value instanceof CharValue) { - char v = ((PrimitiveValue)value).charValue(); - return String.valueOf(v); + return String.valueOf(((PrimitiveValue)value).charValue()); } if (value instanceof ObjectReference) { if (value instanceof ArrayReference) { diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index 89c31ce067d9..160f2f5a7490 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -1757,6 +1757,14 @@ + + + + + + + + From 4866f3334743a3e676889fbd794e3af5940b0b56 Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Wed, 12 Apr 2017 20:50:18 +0300 Subject: [PATCH 05/86] External dependencies: implement more granular downloads on each task (IDEA-171008) --- .../intellij/build/impl/BuildContextImpl.groovy | 8 -------- .../intellij/build/impl/BuildTasksImpl.groovy | 15 +++++++++------ .../intellij/build/impl/BuildUtils.groovy | 2 +- .../build/impl/CompilationContextImpl.groovy | 8 -------- .../build/impl/CompilationTasksImpl.groovy | 8 ++++++++ 5 files changed, 18 insertions(+), 23 deletions(-) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy index 635c44e563e3..9269a2908afa 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy @@ -48,7 +48,6 @@ class BuildContextImpl extends BuildContext { def context = new BuildContextImpl(compilationContext, productProperties, windowsDistributionCustomizer, linuxDistributionCustomizer, macDistributionCustomizer, proprietaryBuildTools) - setupDependencies(context.messages, communityHome) return context } @@ -76,13 +75,6 @@ class BuildContextImpl extends BuildContext { bootClassPathJarNames = ["bootstrap.jar", "extensions.jar", "util.jar", "jdom.jar", "log4j.jar", "trove4j.jar", "jna.jar"] } - private static void setupDependencies(BuildMessages messages, String communityHome) { - messages.info("Setting up installer dependencies") - if (!BuildUtils.gradle(new File(communityHome, 'build/dependencies/'), 'setupDependencies')) { - messages.error("Cannot setup installer dependencies") - } - } - private String readSnapshotBuildNumber() { new File(paths.communityHome, "build.txt").text.trim() } diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy index 612c0f7a8128..0c61b5f8d955 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy @@ -17,11 +17,7 @@ package org.jetbrains.intellij.build.impl import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.text.StringUtil -import org.jetbrains.intellij.build.BuildContext -import org.jetbrains.intellij.build.BuildOptions -import org.jetbrains.intellij.build.BuildTasks -import org.jetbrains.intellij.build.CompilationTasks -import org.jetbrains.intellij.build.ProductModulesLayout +import org.jetbrains.intellij.build.* import org.jetbrains.jps.model.java.JavaResourceRootType import org.jetbrains.jps.model.java.JavaSourceRootType import org.jetbrains.jps.model.module.JpsModule @@ -277,7 +273,7 @@ idea.fatal.error.notification=disabled if (buildContext.productProperties.scrambleMainJar) { scramble() } - + setupJbreDependencies() layoutShared() def propertiesFile = patchIdeaPropertiesFile() @@ -308,6 +304,13 @@ idea.fatal.error.notification=disabled } } } + + private void setupJbreDependencies() { + buildContext.messages.info("Setting up installer dependencies") + if (!BuildUtils.runGradle(new File(buildContext.paths.communityHome, 'build/dependencies/'), 'setupJbre')) { + buildContext.messages.error("Cannot setup installer dependencies") + } + } private void scramble() { if (buildContext.proprietaryBuildTools.scrambleTool != null) { diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildUtils.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildUtils.groovy index fbd3309c0fd6..f4a265b662f0 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildUtils.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildUtils.groovy @@ -84,7 +84,7 @@ class BuildUtils { } } - static boolean gradle(File projectDir, String... tasks) { + static boolean runGradle(File projectDir, String... tasks) { def gradleScript = SystemInfo.isWindows ? "gradlew.bat" : "gradlew" List command = new ArrayList() command.add("${projectDir.absolutePath}/$gradleScript".toString()) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy index f3d4b09dc50e..514ca15d0ad8 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy @@ -69,7 +69,6 @@ class CompilationContextImpl implements CompilationContext { projectHome = toCanonicalPath(projectHome) def jdk8Home = toCanonicalPath(JdkUtils.computeJdkHome(messages, "jdk8Home", "$projectHome/build/jdk/1.8", "JDK_18_x64")) - setupDependencies(messages, communityHome) if (project.modules.isEmpty()) { loadProject(communityHome, projectHome, jdk8Home, project, global, messages) } @@ -120,13 +119,6 @@ class CompilationContextImpl implements CompilationContext { messages.info("Loaded project $projectHome: ${project.modules.size()} modules, ${project.libraryCollection.libraries.size()} libraries") } - private static void setupDependencies(BuildMessages messages, String communityHome) { - messages.info("Setting up compilation dependencies") - if (!BuildUtils.gradle(new File(communityHome, 'build/dependencies/'), 'setupJdks', 'setupKotlinPlugin')) { - messages.error("Cannot setup compilation dependencies") - } - } - void prepareForBuild() { checkCompilationOptions() projectBuilder.buildIncrementally = options.incrementalCompilation diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy index bcf6d160ab5d..0e9ba0d4981b 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy @@ -40,6 +40,7 @@ class CompilationTasksImpl extends CompilationTasks { return } + setupCompilationDependencies() ensureKotlinCompilerAddedToClassPath() context.messages.progress("Compiling project") @@ -76,6 +77,13 @@ class CompilationTasksImpl extends CompilationTasks { compileModules(null, null) } + private void setupCompilationDependencies() { + context.messages.info("Setting up compilation dependencies") + if (!BuildUtils.runGradle(new File(context.paths.communityHome, 'build/dependencies/'), 'setupJdks', 'setupKotlinPlugin')) { + context.messages.error("Cannot setup compilation dependencies") + } + } + private void ensureKotlinCompilerAddedToClassPath() { if (getClass().getResource("/org/jetbrains/kotlin/jps/build/KotlinBuilder.class") != null) { return From aac55efa0c7b517307e7b4772513ceba9fb75143 Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Wed, 12 Apr 2017 21:22:05 +0300 Subject: [PATCH 06/86] Build scripts: introduce path to Kotlin into BuildPaths --- .../intellij/build/BaseIdeaProperties.groovy | 2 +- .../intellij/build/BuildPaths.groovy | 5 ++++ .../build/impl/CompilationContextImpl.groovy | 24 ++++++++++--------- .../build/impl/CompilationTasksImpl.groovy | 2 +- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/build/groovy/org/jetbrains/intellij/build/BaseIdeaProperties.groovy b/build/groovy/org/jetbrains/intellij/build/BaseIdeaProperties.groovy index 3d57da02980a..f4652f52fd13 100644 --- a/build/groovy/org/jetbrains/intellij/build/BaseIdeaProperties.groovy +++ b/build/groovy/org/jetbrains/intellij/build/BaseIdeaProperties.groovy @@ -117,7 +117,7 @@ abstract class BaseIdeaProperties extends ProductProperties { } } context.ant.copy(todir: "$targetDirectory/plugins/Kotlin") { - fileset(dir: "$context.paths.communityHome/build/dependencies/build/kotlin/Kotlin") + fileset(dir: "$context.paths.kotlinHome") } context.ant.move(file: "$targetDirectory/lib/annotations-java8.jar", tofile: "$targetDirectory/redist/annotations-java8.jar") } diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildPaths.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildPaths.groovy index 0e23f8b8f0a2..ee941d67ce8d 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildPaths.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildPaths.groovy @@ -58,4 +58,9 @@ abstract class BuildPaths { * Path to a directory containing JDK (currently Java 8) which is used to compile the project */ String jdkHome + + /** + * Path to a directory containing Kotlin plugin with compiler which is used to compile the project + */ + String kotlinHome } diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy index 514ca15d0ad8..6f18f2c1ec28 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy @@ -68,23 +68,24 @@ class CompilationContextImpl implements CompilationContext { projectHome = toCanonicalPath(projectHome) def jdk8Home = toCanonicalPath(JdkUtils.computeJdkHome(messages, "jdk8Home", "$projectHome/build/jdk/1.8", "JDK_18_x64")) + def kotlinHome = toCanonicalPath("$communityHome/build/dependencies/build/kotlin/Kotlin") if (project.modules.isEmpty()) { - loadProject(communityHome, projectHome, jdk8Home, project, global, messages) + loadProject(projectHome, jdk8Home, kotlinHome, project, global, messages) } else { //todo[nik] currently we need this to build IDEA CE from IDEA UI build scripts. It would be better to create a separate JpsProject instance instead messages.info("Skipping loading project because it's already loaded") } - def context = new CompilationContextImpl(ant, projectBuilder, project, global, communityHome, projectHome, jdk8Home, messages, + def context = new CompilationContextImpl(ant, projectBuilder, project, global, communityHome, projectHome, jdk8Home, kotlinHome, messages, buildOutputRootEvaluator, options) context.prepareForBuild() return context } private CompilationContextImpl(AntBuilder ant, JpsGantProjectBuilder projectBuilder, JpsProject project, JpsGlobal global, - String communityHome, String projectHome, String jdk8Home, BuildMessages messages, + String communityHome, String projectHome, String jdk8Home, String kotlinHome, BuildMessages messages, BiFunction buildOutputRootEvaluator, BuildOptions options) { this.ant = ant this.project = project @@ -93,18 +94,18 @@ class CompilationContextImpl implements CompilationContext { this.projectBuilder = projectBuilder this.messages = messages String buildOutputRoot = options.outputRootPath ?: buildOutputRootEvaluator.apply(project, messages) - this.paths = new BuildPathsImpl(communityHome, projectHome, buildOutputRoot, jdk8Home) + this.paths = new BuildPathsImpl(communityHome, projectHome, buildOutputRoot, jdk8Home, kotlinHome) } CompilationContextImpl createCopy(AntBuilder ant, BuildMessages messages, BuildOptions options, BiFunction buildOutputRootEvaluator) { - return new CompilationContextImpl(ant, projectBuilder, project, global, paths.communityHome, paths.projectHome, paths.jdkHome, - messages, buildOutputRootEvaluator, options) + return new CompilationContextImpl(ant, projectBuilder, project, global, paths.communityHome, paths.projectHome, paths.jdkHome, + paths.kotlinHome, messages, buildOutputRootEvaluator, options) } - private static void loadProject(String communityHome, String projectHome, String jdkHome, JpsProject project, JpsGlobal global, + private static void loadProject(String projectHome, String jdkHome, String kotlinHome, JpsProject project, JpsGlobal global, BuildMessages messages) { - def bundledKotlinPath = "$communityHome/build/dependencies/build/kotlin/Kotlin/kotlinc" + def bundledKotlinPath = "$kotlinHome/kotlinc" if (!new File(bundledKotlinPath, "lib/kotlin-runtime.jar").exists()) { messages.error( "Could not find Kotlin runtime at $bundledKotlinPath/lib/kotlin-runtime.jar: run `./gradlew setupKotlin` in dependencies module to download Kotlin JARs") @@ -232,17 +233,18 @@ class CompilationContextImpl implements CompilationContext { messages.artifactBuild(relativePath) } - private static String toCanonicalPath(String communityHome) { - FileUtil.toSystemIndependentName(new File(communityHome).canonicalPath) + private static String toCanonicalPath(String path) { + FileUtil.toSystemIndependentName(new File(path).canonicalPath) } } class BuildPathsImpl extends BuildPaths { - BuildPathsImpl(String communityHome, String projectHome, String buildOutputRoot, String jdkHome) { + BuildPathsImpl(String communityHome, String projectHome, String buildOutputRoot, String jdkHome, String kotlinHome) { this.communityHome = communityHome this.projectHome = projectHome this.buildOutputRoot = buildOutputRoot this.jdkHome = jdkHome + this.kotlinHome = kotlinHome artifacts = "$buildOutputRoot/artifacts" distAll = "$buildOutputRoot/dist.all" temp = "$buildOutputRoot/temp" diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy index 0e9ba0d4981b..75f41ba9c791 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy @@ -89,7 +89,7 @@ class CompilationTasksImpl extends CompilationTasks { return } - def kotlinPluginLibPath = "$context.paths.communityHome/build/dependencies/build/kotlin/Kotlin/lib" + def kotlinPluginLibPath = "$context.paths.kotlinHome/lib" if (new File(kotlinPluginLibPath).exists()) { ["jps/kotlin-jps-plugin.jar", "kotlin-plugin.jar", "kotlin-runtime.jar", "kotlin-reflect.jar"].each { BuildUtils.addToJpsClassPath("$kotlinPluginLibPath/$it", context.ant) From 4483aee5b9f03dea2d46139fdfdc63fa2948a78f Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Thu, 13 Apr 2017 11:28:40 +0300 Subject: [PATCH 07/86] External dependencies: implement more granular downloads on each task (IDEA-171008) --- .../intellij/build/impl/CompilationContextImpl.groovy | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy index 6f18f2c1ec28..ce29a9e77a0f 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy @@ -105,12 +105,7 @@ class CompilationContextImpl implements CompilationContext { private static void loadProject(String projectHome, String jdkHome, String kotlinHome, JpsProject project, JpsGlobal global, BuildMessages messages) { - def bundledKotlinPath = "$kotlinHome/kotlinc" - if (!new File(bundledKotlinPath, "lib/kotlin-runtime.jar").exists()) { - messages.error( - "Could not find Kotlin runtime at $bundledKotlinPath/lib/kotlin-runtime.jar: run `./gradlew setupKotlin` in dependencies module to download Kotlin JARs") - } - JpsModelSerializationDataService.getOrCreatePathVariablesConfiguration(global).addPathVariable("KOTLIN_BUNDLED", bundledKotlinPath) + JpsModelSerializationDataService.getOrCreatePathVariablesConfiguration(global).addPathVariable("KOTLIN_BUNDLED", "$kotlinHome/kotlinc") JdkUtils.defineJdk(global, "IDEA jdk", JdkUtils.computeJdkHome(messages, "jdkHome", "$projectHome/build/jdk/1.6", "JDK_16_x64")) JdkUtils.defineJdk(global, "1.8", jdkHome) From d18517817735121164d477a352759fec49ffda5d Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 13 Apr 2017 12:02:11 +0200 Subject: [PATCH 08/86] cleanup (log from class) --- .../ExternalSystemRunConfiguration.java | 18 ++++++++++++++++-- .../impl/BaseRCSettingsConfigurable.java | 3 +-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java index 7373448af253..161ad514f12f 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java @@ -1,3 +1,18 @@ +/* + * Copyright 2000-2017 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.intellij.openapi.externalSystem.service.execution; import com.intellij.diagnostic.logging.LogConfigurationPanel; @@ -53,8 +68,7 @@ import java.io.OutputStream; * @since 23.05.13 18:30 */ public class ExternalSystemRunConfiguration extends LocatableConfigurationBase { - - private static final Logger LOG = Logger.getInstance("#" + ExternalSystemRunConfiguration.class.getName()); + private static final Logger LOG = Logger.getInstance(ExternalSystemRunConfiguration.class); private ExternalSystemTaskExecutionSettings mySettings = new ExternalSystemTaskExecutionSettings(); diff --git a/platform/lang-impl/src/com/intellij/execution/impl/BaseRCSettingsConfigurable.java b/platform/lang-impl/src/com/intellij/execution/impl/BaseRCSettingsConfigurable.java index 544397dbc357..61794c698cc5 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/BaseRCSettingsConfigurable.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/BaseRCSettingsConfigurable.java @@ -68,8 +68,7 @@ abstract class BaseRCSettingsConfigurable extends SettingsEditorConfigurable Date: Thu, 13 Apr 2017 12:06:28 +0200 Subject: [PATCH 09/86] =?UTF-8?q?RunManager=20=E2=80=94=20add=20test=20tes?= =?UTF-8?q?tRemoveFromWorkspace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/intellij/execution/RunManagerEx.java | 11 +------ .../intellij/execution/impl/RunManagerImpl.kt | 19 ++++++++++-- .../RunnerAndConfigurationSettingsImpl.kt | 31 ++++++++++++------- .../src/com/intellij/mock/MockRunManager.kt | 3 ++ 4 files changed, 40 insertions(+), 24 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java b/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java index 34a9f409641d..5dc5984c74c6 100644 --- a/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java +++ b/platform/lang-impl/src/com/intellij/execution/RunManagerEx.java @@ -47,18 +47,9 @@ public abstract class RunManagerEx extends RunManager { @NotNull public abstract RunManagerConfig getConfig(); - public final void addConfiguration(@NotNull RunnerAndConfigurationSettings settings, boolean isShared) { - if (isShared) { - ((RunnerAndConfigurationSettingsImpl)settings).setLevel(RunnerAndConfigurationSettingsImpl.Level.PROJECT); - } - addConfiguration(settings); - } - @Deprecated public final void addConfiguration(RunnerAndConfigurationSettings settings, boolean isShared, List tasks, boolean addTemplateTasksIfAbsent) { - if (isShared) { - ((RunnerAndConfigurationSettingsImpl)settings).setLevel(RunnerAndConfigurationSettingsImpl.Level.PROJECT); - } + ((RunnerAndConfigurationSettingsImpl)settings).setShared(isShared); addConfiguration(settings, tasks, addTemplateTasksIfAbsent); } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt index 3c04177d5dbc..833aa7ac3450 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt @@ -162,7 +162,9 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent } return name ?: throw IllegalStateException("name is missed in the scheme data") } - }, streamProvider = schemeManagerProvider, autoSave = false) + + override fun isExternalizable(scheme: RunnerAndConfigurationSettingsImpl) = true + }, streamProvider = schemeManagerProvider, autoSave = false) private val stringIdToBeforeRunProvider by lazy { val result = ContainerUtil.newConcurrentMap>() @@ -278,6 +280,11 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent } } + override fun addConfiguration(settings: RunnerAndConfigurationSettings, isShared: Boolean) { + (settings as RunnerAndConfigurationSettingsImpl).isShared = isShared + addConfiguration(settings) + } + override fun addConfiguration(settings: RunnerAndConfigurationSettings) { val newId = settings.uniqueID var existingId: String? = null @@ -304,6 +311,9 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent if (!settings.isShared && existingId == null) { schemeManager.addScheme(settings as RunnerAndConfigurationSettingsImpl) } + if (settings.isShared && existingId != null) { + schemeManager.removeScheme(settings as RunnerAndConfigurationSettingsImpl) + } checkRecentsLimit() } @@ -749,7 +759,7 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent } if (isShared) { - settings.level = RunnerAndConfigurationSettingsImpl.Level.PROJECT + settings.level = RunConfigurationLevel.PROJECT } doLoadConfiguration(element, settings) @@ -1026,7 +1036,7 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent if (value && settings.isTemporary) { doMakeStable(settings) } - (settings as RunnerAndConfigurationSettingsImpl).level = RunnerAndConfigurationSettingsImpl.Level.PROJECT + (settings as RunnerAndConfigurationSettingsImpl).level = RunConfigurationLevel.PROJECT fireRunConfigurationChanged(settings) } @@ -1147,6 +1157,9 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent } iterator.remove() + if (!settings.isShared) { + schemeManager.removeScheme(settings as RunnerAndConfigurationSettingsImpl) + } recentlyUsedTemporaries.remove(settings.configuration) isRemoved = true } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt index fd6c6f261588..bb5f51d59c17 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt @@ -54,14 +54,15 @@ internal val TEMPLATE_FLAG_ATTRIBUTE = "default" val SINGLETON = "singleton" +enum class RunConfigurationLevel { + WORKSPACE, PROJECT, TEMPORARY +} + class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(private val manager: RunManagerImpl, private var _configuration: RunConfiguration? = null, private var isTemplate: Boolean = false, - private var singleton: Boolean = false) : Cloneable, RunnerAndConfigurationSettings, Comparable, Scheme, SerializableScheme { - enum class Level { - WORKSPACE, PROJECT, TEMPORARY - } - + private var singleton: Boolean = false, + var level: RunConfigurationLevel = RunConfigurationLevel.WORKSPACE) : Cloneable, RunnerAndConfigurationSettings, Comparable, Scheme, SerializableScheme { private val runnerSettings = object : RunnerItem("RunnerSettings") { override fun createSettings(runner: ProgramRunner<*>) = runner.createConfigurationData(InfoProvider(runner)) } @@ -70,7 +71,6 @@ class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(private val m override fun createSettings(runner: ProgramRunner<*>) = configuration.createRunnerSettings(InfoProvider(runner)) } - var level = Level.WORKSPACE private var isEditBeforeRun = false private var isActivateToolWindowBeforeRun = true private var wasSingletonSpecifiedExplicitly = false @@ -82,12 +82,21 @@ class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(private val m override fun isTemplate() = isTemplate - override fun isTemporary() = level == Level.TEMPORARY + override fun isTemporary() = level == RunConfigurationLevel.TEMPORARY - override fun isShared() = level == Level.PROJECT + override fun isShared() = level == RunConfigurationLevel.PROJECT override fun setTemporary(value: Boolean) { - level = if (value) Level.TEMPORARY else Level.WORKSPACE + level = if (value) RunConfigurationLevel.TEMPORARY else RunConfigurationLevel.WORKSPACE + } + + fun setShared(value: Boolean) { + if (value) { + level = RunConfigurationLevel.PROJECT + } + else if (level == RunConfigurationLevel.PROJECT) { + level = RunConfigurationLevel.WORKSPACE + } } override fun getConfiguration() = _configuration ?: UnknownConfigurationType.FACTORY.createTemplateConfiguration(manager.project) @@ -148,10 +157,10 @@ class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(private val m isTemplate = element.getAttributeValue(TEMPLATE_FLAG_ATTRIBUTE).toBoolean() if (isShared) { - level = Level.PROJECT + level = RunConfigurationLevel.PROJECT } else { - level = if (element.getAttributeValue(TEMPORARY_ATTRIBUTE).toBoolean() || TEMP_CONFIGURATION == element.name) Level.TEMPORARY else Level.WORKSPACE + level = if (element.getAttributeValue(TEMPORARY_ATTRIBUTE).toBoolean() || TEMP_CONFIGURATION == element.name) RunConfigurationLevel.TEMPORARY else RunConfigurationLevel.WORKSPACE } isEditBeforeRun = (element.getAttributeValue(EDIT_BEFORE_RUN)).toBoolean() diff --git a/platform/testFramework/src/com/intellij/mock/MockRunManager.kt b/platform/testFramework/src/com/intellij/mock/MockRunManager.kt index 919c4ca5b6e0..fb747b4c7eea 100644 --- a/platform/testFramework/src/com/intellij/mock/MockRunManager.kt +++ b/platform/testFramework/src/com/intellij/mock/MockRunManager.kt @@ -27,6 +27,9 @@ import javax.swing.Icon * @author gregsh */ class MockRunManager : RunManagerEx() { + override fun addConfiguration(settings: RunnerAndConfigurationSettings, isShared: Boolean) { + } + override fun hasSettings(settings: RunnerAndConfigurationSettings) = false override fun getConfigurationsList(type: ConfigurationType) = emptyList() From a598eeba45f1e953f55b0adca1cea44102854fdf Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Thu, 13 Apr 2017 13:59:55 +0300 Subject: [PATCH 10/86] Setup compilation dependencies even if compilation is not required --- .../jetbrains/intellij/build/impl/CompilationTasksImpl.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy index 75f41ba9c791..ee4b2d5a1a42 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy @@ -31,6 +31,7 @@ class CompilationTasksImpl extends CompilationTasks { @Override void compileModules(List moduleNames, List includingTestsInModules) { + setupCompilationDependencies() if (context.options.useCompiledClassesFromProjectOutput) { context.messages.info("Compilation skipped, the compiled classes from the project output will be used") return @@ -40,7 +41,6 @@ class CompilationTasksImpl extends CompilationTasks { return } - setupCompilationDependencies() ensureKotlinCompilerAddedToClassPath() context.messages.progress("Compiling project") From 1a095a11e1bd75213472c712dc0701e0e587ad1c Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 13 Apr 2017 13:12:41 +0200 Subject: [PATCH 11/86] =?UTF-8?q?RunManager=20=E2=80=94=20do=20not=20save?= =?UTF-8?q?=20unchanged=20template=20configurations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. do not save defaults 2. developers can update template (currently, new template is not respected because already saved as custom in the workspace) --- .../intellij/execution/impl/RunManagerImpl.kt | 6 +++-- .../RunnerAndConfigurationSettingsImpl.kt | 26 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt index 833aa7ac3450..01d8487f5e28 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt @@ -267,8 +267,7 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent val key = "${factory.type.id}.${factory.name}" return lock.read { templateIdToConfiguration.get(key) } ?: lock.write { templateIdToConfiguration.getOrPut(key) { - val template = RunnerAndConfigurationSettingsImpl(this, factory.createTemplateConfiguration(project, this), true) - template.isSingleton = factory.isConfigurationSingletonByDefault + val template = createTemplateSettings(factory) (template.configuration as? UnknownRunConfiguration)?.let { it.isDoNotStore = true } @@ -280,6 +279,9 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent } } + internal fun createTemplateSettings(factory: ConfigurationFactory) = RunnerAndConfigurationSettingsImpl(this, + factory.createTemplateConfiguration(project, this), isTemplate = true, singleton = factory.isConfigurationSingletonByDefault) + override fun addConfiguration(settings: RunnerAndConfigurationSettings, isShared: Boolean) { (settings as RunnerAndConfigurationSettingsImpl).isShared = isShared addConfiguration(settings) diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt index bb5f51d59c17..b65ba219805e 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt @@ -217,6 +217,7 @@ class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(private val m } // do not call directly + // cannot be private - used externally fun writeExternal(element: Element) { val configuration = configuration val factory = configuration.factory @@ -257,6 +258,12 @@ class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(private val m runnerSettings.getState(element) configurationPerRunnerSettings.getState(element) } + + if (configuration !is UnknownRunConfiguration) { + manager.writeBeforeRunTasks(this, configuration)?.let { + element.addContent(it) + } + } } private fun serializeConfigurationInto(configuration: RunConfiguration, element: Element) { @@ -271,13 +278,6 @@ class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(private val m override fun writeScheme(): Element { val element = Element("configuration") writeExternal(element) - - val configuration = _configuration - if (configuration != null && configuration !is UnknownRunConfiguration) { - manager.writeBeforeRunTasks(this, configuration)?.let { - element.addContent(it) - } - } return element } @@ -376,13 +376,11 @@ class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(private val m } if (isTemplate && _configuration != null) { - val templateConfiguration = configuration.factory.createTemplateConfiguration(manager.project, manager) - - val templateState = Element("state") - serializeConfigurationInto(templateConfiguration, templateState) - - val state = writeScheme() - if (JDOMUtil.areElementsEqual(state, templateState)) { + // todo optimize + val templateSettings = manager.createTemplateSettings(configuration.factory) + if (JDOMUtil.areElementsEqual(writeScheme(), templateSettings.writeScheme())) { + // this state doesn't mean that scheme will be removed - SchemeManager doesn't expect that scheme can be NON_PERSISTENT after UNCHANGED + // todo definitely, SchemeManager should be improved to support this case, but it is not safe to do right now return SchemeState.NON_PERSISTENT } } From 8845079108d47c467c2d8ecd9486a99c7a42f86e Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 13 Apr 2017 14:21:36 +0300 Subject: [PATCH 12/86] all unboxable classes are final so there's no need to check inheritance --- .../debugger/ui/tree/render/UnboxableTypeRenderer.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/UnboxableTypeRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/UnboxableTypeRenderer.java index 52c047081ee6..a76516600258 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/UnboxableTypeRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/UnboxableTypeRenderer.java @@ -24,6 +24,8 @@ import com.intellij.debugger.ui.tree.ValueDescriptor; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.CommonClassNames; import com.sun.jdi.ObjectReference; +import com.sun.jdi.ReferenceType; +import com.sun.jdi.Type; /** * @author egor @@ -42,6 +44,11 @@ public abstract class UnboxableTypeRenderer extends CompoundReferenceRenderer { setEnabled(true); } + @Override + public boolean isApplicable(Type type) { + return type instanceof ReferenceType && StringUtil.equals(type.name(), getClassName()); + } + public static class BooleanRenderer extends UnboxableTypeRenderer { public BooleanRenderer(NodeRendererSettings rendererSettings) { super(CommonClassNames.JAVA_LANG_BOOLEAN, rendererSettings); From 23e36f03bd35b4398521aefeaa0d5a6976fd1340 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Tue, 11 Apr 2017 20:00:31 +0300 Subject: [PATCH 13/86] [groovy] new type calculation API (IDEA-170732) --- .../groovy/lang/GroovyCoreEnvironment.java | 9 +++++ .../expressions/GrMethodCallImpl.java | 25 +----------- .../GrReferenceExpressionImpl.java | 8 ++-- .../groovy/lang/typing/GrTypeCalculator.java | 40 +++++++++++++++++++ .../lang/typing/MethodCallTypeCalculator.kt | 35 ++++++++++++++++ .../ReferenceExpressionTypeCalculator.kt | 32 +++++++++++++++ plugins/groovy/src/META-INF/plugin.xml | 9 +++++ 7 files changed, 130 insertions(+), 28 deletions(-) create mode 100644 plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/GrTypeCalculator.java create mode 100644 plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/MethodCallTypeCalculator.kt create mode 100644 plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/ReferenceExpressionTypeCalculator.kt diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyCoreEnvironment.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyCoreEnvironment.java index 08fc01713737..b61f3bea0a00 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyCoreEnvironment.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyCoreEnvironment.java @@ -85,6 +85,8 @@ import org.jetbrains.plugins.groovy.lang.folding.GroovyFoldingBuilder; import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes; import org.jetbrains.plugins.groovy.lang.parser.GroovyParserDefinition; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.expectedTypes.GroovyExpectedTypesContributor; import org.jetbrains.plugins.groovy.lang.psi.impl.*; import org.jetbrains.plugins.groovy.lang.psi.impl.javaView.GroovyClassFinder; @@ -106,6 +108,9 @@ import org.jetbrains.plugins.groovy.lang.resolve.ast.builder.strategy.SimpleBuil import org.jetbrains.plugins.groovy.lang.resolve.noncode.GrCollectionTypeMembersProvider; import org.jetbrains.plugins.groovy.lang.resolve.noncode.MixinMemberContributor; import org.jetbrains.plugins.groovy.lang.stubs.GroovyShortNamesCache; +import org.jetbrains.plugins.groovy.lang.typing.GrTypeCalculator; +import org.jetbrains.plugins.groovy.lang.typing.MethodCallTypeCalculator; +import org.jetbrains.plugins.groovy.lang.typing.ReferenceExpressionTypeCalculator; import org.jetbrains.plugins.groovy.structure.GroovyStructureViewFactory; import org.jetbrains.plugins.groovy.swingBuilder.SwingBuilderNamedArgumentProvider; import org.jetbrains.plugins.groovy.swingBuilder.SwingBuilderNonCodeMemberContributor; @@ -343,6 +348,10 @@ public class GroovyCoreEnvironment { CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), ReadWriteAccessDetector.EP_NAME, ReadWriteAccessDetector.class); appEnvironment.addExtension(ReadWriteAccessDetector.EP_NAME, new GroovyReadWriteAccessDetector()); + + appEnvironment.addExplicitExtension(GrTypeCalculator.EP, GrReferenceExpression.class, new ReferenceExpressionTypeCalculator()); + appEnvironment.addExplicitExtension(GrTypeCalculator.EP, GrMethodCall.class, new MethodCallTypeCalculator()); + if (GroovyElementTypes.ADDITIVE_EXPRESSION == null) throw new IllegalStateException(); // initialize tokens } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrMethodCallImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrMethodCallImpl.java index b5af35e42bf2..c4c018d428cb 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrMethodCallImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrMethodCallImpl.java @@ -20,7 +20,6 @@ import com.intellij.navigation.ItemPresentation; import com.intellij.navigation.ItemPresentationProviders; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiType; -import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -31,33 +30,13 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethod import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.dataFlow.types.TypeInferenceHelper; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.path.GrCallExpressionImpl; -import org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrCallExpressionTypeCalculator; import org.jetbrains.plugins.groovy.lang.resolve.GrReferenceResolveRunnerKt; +import org.jetbrains.plugins.groovy.lang.typing.GrTypeCalculator; /** * @author Maxim.Medvedev */ public abstract class GrMethodCallImpl extends GrCallExpressionImpl implements GrMethodCall { - private static final Function METHOD_CALL_TYPES_CALCULATOR = callExpression -> { - GroovyResolveResult[] resolveResults; - - GrExpression invokedExpression = callExpression.getInvokedExpression(); - if (invokedExpression instanceof GrReferenceExpression) { - resolveResults = ((GrReferenceExpression)invokedExpression).multiResolve(false); - } - else { - resolveResults = GroovyResolveResult.EMPTY_ARRAY; - } - - for (GrCallExpressionTypeCalculator typeCalculator : GrCallExpressionTypeCalculator.EP_NAME.getExtensions()) { - PsiType res = typeCalculator.calculateReturnType(callExpression, resolveResults); - if (res != null) { - return res; - } - } - - return null; - }; public GrMethodCallImpl(@NotNull ASTNode node) { super(node); @@ -83,7 +62,7 @@ public abstract class GrMethodCallImpl extends GrCallExpressionImpl implements G @Override public PsiType getType() { - return TypeInferenceHelper.getCurrentContext().getExpressionType(this, METHOD_CALL_TYPES_CALCULATOR); + return TypeInferenceHelper.getCurrentContext().getExpressionType(this, GrTypeCalculator::getTypeFromCalculators); } @Override diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java index 4b32321da153..357f03fd1b3c 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java @@ -53,11 +53,11 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeArgumentList; import org.jetbrains.plugins.groovy.lang.psi.dataFlow.types.TypeInferenceHelper; import org.jetbrains.plugins.groovy.lang.psi.impl.*; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literals.GrLiteralImpl; -import org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrExpressionTypeCalculator; import org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrReferenceTypeEnhancer; import org.jetbrains.plugins.groovy.lang.psi.util.*; import org.jetbrains.plugins.groovy.lang.resolve.DependentResolver; import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; +import org.jetbrains.plugins.groovy.lang.typing.GrTypeCalculator; import java.util.*; @@ -363,10 +363,8 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl { + + ClassExtension EP = new ClassExtension<>("org.intellij.groovy.typeCalculator"); + + @Nullable + PsiType getType(@NotNull T expression); + + @Nullable + static PsiType getTypeFromCalculators(@NotNull GrExpression expression) { + for (GrTypeCalculator calculator : EP.forKey(expression.getClass())) { + //noinspection unchecked + PsiType type = calculator.getType(expression); + if (type != null) return type; + } + return null; + } +} diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/MethodCallTypeCalculator.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/MethodCallTypeCalculator.kt new file mode 100644 index 000000000000..28309616cd20 --- /dev/null +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/MethodCallTypeCalculator.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2000-2017 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.plugins.groovy.lang.typing + +import com.intellij.psi.PsiType +import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression +import org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrCallExpressionTypeCalculator + +class MethodCallTypeCalculator : GrTypeCalculator { + + override fun getType(expression: GrMethodCall): PsiType? { + val resolveResults = (expression.invokedExpression as? GrReferenceExpression)?.multiResolve(false) + ?: GroovyResolveResult.EMPTY_ARRAY + for (calculator in GrCallExpressionTypeCalculator.EP_NAME.extensions) { + val type = calculator.calculateReturnType(expression, resolveResults) + if (type != null) return type + } + return null + } +} diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/ReferenceExpressionTypeCalculator.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/ReferenceExpressionTypeCalculator.kt new file mode 100644 index 000000000000..5d958479d442 --- /dev/null +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/ReferenceExpressionTypeCalculator.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2000-2017 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.plugins.groovy.lang.typing + +import com.intellij.psi.PsiType +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression +import org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrExpressionTypeCalculator + +class ReferenceExpressionTypeCalculator : GrTypeCalculator { + + override fun getType(expression: GrReferenceExpression): PsiType? { + val resolved = expression.resolve() + for (calculator in GrExpressionTypeCalculator.EP_NAME.extensions) { + val type = calculator.calculateType(expression, resolved) + if (type != null) return type + } + return null + } +} diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index 11896cc55fb9..c8a1aab64944 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -57,6 +57,9 @@ interface="org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrCallExpressionTypeCalculator"/> + + + @@ -160,6 +163,12 @@ implementation="org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.path.GrDGMTypeCalculator"/> + + From 423fe4e07dee0592e9784c2aed637a5453ce1d0e Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Tue, 11 Apr 2017 22:08:39 +0300 Subject: [PATCH 14/86] [groovy] deprecate callExpressionTypeCalculator and expressionTypeCalculator APIs --- .../psi/typeEnhancers/GrCallExpressionTypeCalculator.java | 4 +++- .../lang/psi/typeEnhancers/GrExpressionTypeCalculator.java | 5 ++++- .../plugins/groovy/lang/typing/MethodCallTypeCalculator.kt | 2 ++ .../groovy/lang/typing/ReferenceExpressionTypeCalculator.kt | 2 ++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrCallExpressionTypeCalculator.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrCallExpressionTypeCalculator.java index 4bb9f8501781..050e372a90ab 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrCallExpressionTypeCalculator.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrCallExpressionTypeCalculator.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -26,7 +26,9 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethod /** * @author sergey.evdokimov + * @deprecated To be removed in 2017.3 */ +@Deprecated public abstract class GrCallExpressionTypeCalculator { public static final ExtensionPointName EP_NAME = ExtensionPointName.create("org.intellij.groovy.callExpressionTypeCalculator"); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrExpressionTypeCalculator.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrExpressionTypeCalculator.java index 12c60031f06d..c5429f8bbecb 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrExpressionTypeCalculator.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/typeEnhancers/GrExpressionTypeCalculator.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -22,6 +22,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; +/** + * @deprecated To be removed in 2017.3 + */ public abstract class GrExpressionTypeCalculator { public static final ExtensionPointName EP_NAME = diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/MethodCallTypeCalculator.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/MethodCallTypeCalculator.kt index 28309616cd20..de3e8f5444eb 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/MethodCallTypeCalculator.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/MethodCallTypeCalculator.kt @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") + package org.jetbrains.plugins.groovy.lang.typing import com.intellij.psi.PsiType diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/ReferenceExpressionTypeCalculator.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/ReferenceExpressionTypeCalculator.kt index 5d958479d442..b1306c3f6456 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/ReferenceExpressionTypeCalculator.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/ReferenceExpressionTypeCalculator.kt @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("DEPRECATION") + package org.jetbrains.plugins.groovy.lang.typing import com.intellij.psi.PsiType From a6858f2f2e5fe712b605c80670958f8cfcaff79f Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Tue, 11 Apr 2017 22:20:48 +0300 Subject: [PATCH 15/86] [groovy] update expressionTypeCalculator implementations to use new API --- .../groovy/lang/GroovyCoreEnvironment.java | 8 ++- .../path/GrClosureDelegateTypeCalculator.java | 58 ------------------- .../typing/GrClosureDelegateTypeCalculator.kt | 39 +++++++++++++ plugins/groovy/src/META-INF/plugin.xml | 4 +- 4 files changed, 47 insertions(+), 62 deletions(-) delete mode 100644 plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrClosureDelegateTypeCalculator.java create mode 100644 plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/GrClosureDelegateTypeCalculator.kt diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyCoreEnvironment.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyCoreEnvironment.java index b61f3bea0a00..fd6ee23487b3 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyCoreEnvironment.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyCoreEnvironment.java @@ -92,7 +92,10 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.*; import org.jetbrains.plugins.groovy.lang.psi.impl.javaView.GroovyClassFinder; import org.jetbrains.plugins.groovy.lang.psi.impl.search.GrPrivateFieldScopeEnlarger; import org.jetbrains.plugins.groovy.lang.psi.impl.smartPointers.GrClassReferenceTypePointerFactory; -import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.path.*; +import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.path.DefaultCallExpressionTypeCalculator; +import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.path.GrDGMTypeCalculator; +import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.path.GrDescriptorReturnTypeCalculator; +import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.path.GrWithTraitTypeCalculator; import org.jetbrains.plugins.groovy.lang.psi.stubs.index.*; import org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.*; import org.jetbrains.plugins.groovy.lang.psi.util.GroovyConstantExpressionEvaluator; @@ -108,6 +111,7 @@ import org.jetbrains.plugins.groovy.lang.resolve.ast.builder.strategy.SimpleBuil import org.jetbrains.plugins.groovy.lang.resolve.noncode.GrCollectionTypeMembersProvider; import org.jetbrains.plugins.groovy.lang.resolve.noncode.MixinMemberContributor; import org.jetbrains.plugins.groovy.lang.stubs.GroovyShortNamesCache; +import org.jetbrains.plugins.groovy.lang.typing.GrClosureDelegateTypeCalculator; import org.jetbrains.plugins.groovy.lang.typing.GrTypeCalculator; import org.jetbrains.plugins.groovy.lang.typing.MethodCallTypeCalculator; import org.jetbrains.plugins.groovy.lang.typing.ReferenceExpressionTypeCalculator; @@ -224,7 +228,6 @@ public class GroovyCoreEnvironment { appEnvironment.addExtension(GrCallExpressionTypeCalculator.EP_NAME, new GrWithTraitTypeCalculator()); CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), GrExpressionTypeCalculator.EP_NAME, GrExpressionTypeCalculator.class); - appEnvironment.addExtension(GrExpressionTypeCalculator.EP_NAME, new GrClosureDelegateTypeCalculator()); CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), GroovyClassDescriptor.EP_NAME, GroovyClassDescriptor.class); @@ -349,6 +352,7 @@ public class GroovyCoreEnvironment { CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), ReadWriteAccessDetector.EP_NAME, ReadWriteAccessDetector.class); appEnvironment.addExtension(ReadWriteAccessDetector.EP_NAME, new GroovyReadWriteAccessDetector()); + appEnvironment.addExplicitExtension(GrTypeCalculator.EP, GrReferenceExpression.class, new GrClosureDelegateTypeCalculator()); appEnvironment.addExplicitExtension(GrTypeCalculator.EP, GrReferenceExpression.class, new ReferenceExpressionTypeCalculator()); appEnvironment.addExplicitExtension(GrTypeCalculator.EP, GrMethodCall.class, new MethodCallTypeCalculator()); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrClosureDelegateTypeCalculator.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrClosureDelegateTypeCalculator.java deleted file mode 100644 index 599afae7037d..000000000000 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrClosureDelegateTypeCalculator.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2000-2017 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.path; - -import com.intellij.psi.*; -import com.intellij.psi.util.PsiTreeUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; -import org.jetbrains.plugins.groovy.lang.psi.typeEnhancers.GrExpressionTypeCalculator; -import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames; -import org.jetbrains.plugins.groovy.lang.resolve.delegatesTo.DelegatesToInfo; -import org.jetbrains.plugins.groovy.lang.resolve.delegatesTo.GrDelegatesToUtilKt; - -public class GrClosureDelegateTypeCalculator extends GrExpressionTypeCalculator { - - @Nullable - @Override - public PsiType calculateType(@NotNull GrExpression expression, @Nullable PsiElement resolved) { - if (expression instanceof GrReferenceExpression && resolved instanceof PsiMethod) { - return calculateType(expression, (PsiMethod)resolved); - } - return null; - } - - @Nullable - protected PsiType calculateType(@NotNull GrExpression expression, @NotNull PsiMethod method) { - if (!"getDelegate".equals(method.getName()) || method.getParameterList().getParametersCount() != 0) return null; - - final GrClosableBlock closure = PsiTreeUtil.getParentOfType(expression, GrClosableBlock.class); - if (closure == null) return null; - - final PsiClass closureClass = JavaPsiFacade.getInstance(expression.getProject()).findClass( - GroovyCommonClassNames.GROOVY_LANG_CLOSURE, expression.getResolveScope() - ); - if (closureClass == null || !closureClass.equals(method.getContainingClass())) return null; - - final DelegatesToInfo info = GrDelegatesToUtilKt.getDelegatesToInfo(closure); - if (info == null) return null; - - return info.getTypeToDelegate(); - } -} diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/GrClosureDelegateTypeCalculator.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/GrClosureDelegateTypeCalculator.kt new file mode 100644 index 000000000000..d5f96aa444bc --- /dev/null +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/typing/GrClosureDelegateTypeCalculator.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2000-2017 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.plugins.groovy.lang.typing + +import com.intellij.psi.JavaPsiFacade +import com.intellij.psi.PsiMethod +import com.intellij.psi.PsiType +import com.intellij.psi.util.PsiTreeUtil +import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression +import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames.GROOVY_LANG_CLOSURE +import org.jetbrains.plugins.groovy.lang.resolve.delegatesTo.getDelegatesToInfo + +class GrClosureDelegateTypeCalculator : GrTypeCalculator { + + override fun getType(expression: GrReferenceExpression): PsiType? { + val method = expression.resolve() as? PsiMethod ?: return null + if ("getDelegate" != method.name || method.parameterList.parametersCount != 0) return null + + val closureClass = JavaPsiFacade.getInstance(expression.project).findClass(GROOVY_LANG_CLOSURE, expression.resolveScope) + if (closureClass == null || closureClass != method.containingClass) return null + + val closure = PsiTreeUtil.getParentOfType(expression, GrClosableBlock::class.java) ?: return null + return getDelegatesToInfo(closure)?.typeToDelegate + } +} diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index c8a1aab64944..af7aea0b4c81 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -161,8 +161,8 @@ implementation="org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.path.GrDescriptorReturnTypeCalculator"/> - + From c6673f4d24655ab55ab7a40e643fc9d4fbc0e66f Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 13 Apr 2017 12:21:13 +0100 Subject: [PATCH 16/86] update checked sign icons --- platform/icons/src/actions/checked.png | Bin 210 -> 163 bytes platform/icons/src/actions/checked@2x.png | Bin 342 -> 268 bytes platform/icons/src/actions/checked@2x_dark.png | Bin 342 -> 268 bytes platform/icons/src/actions/checkedBlack.png | Bin 210 -> 163 bytes platform/icons/src/actions/checkedBlack@2x.png | Bin 342 -> 268 bytes platform/icons/src/actions/checkedGrey.png | Bin 210 -> 163 bytes platform/icons/src/actions/checkedGrey@2x.png | Bin 342 -> 268 bytes platform/icons/src/actions/checked_dark.png | Bin 210 -> 163 bytes platform/icons/src/actions/checked_selected.png | Bin 196 -> 167 bytes .../icons/src/actions/checked_selected@2x.png | Bin 306 -> 276 bytes platform/icons/src/actions/checked_small.png | Bin 180 -> 143 bytes platform/icons/src/actions/checked_small@2x.png | Bin 289 -> 223 bytes .../icons/src/actions/checked_small@2x_dark.png | Bin 290 -> 223 bytes .../icons/src/actions/checked_small_dark.png | Bin 181 -> 143 bytes .../src/actions/checked_small_selected.png | Bin 165 -> 144 bytes .../src/actions/checked_small_selected@2x.png | Bin 262 -> 224 bytes 16 files changed, 0 insertions(+), 0 deletions(-) diff --git a/platform/icons/src/actions/checked.png b/platform/icons/src/actions/checked.png index 1de39421bc906b6402b462664f56b2a3895c6c78..012db846e702135767260891e2a62780608905ec 100644 GIT binary patch delta 134 zcmV;10D1q?0iywsB!6m2L_t(|+GAj#1*q?ys13wVNzt$dMFWTf#FjV|dqCyapldjR zMKK>p94fDkEHM`VLr4SYcS1YN^_AP&Q! zVJcL96|#n3K>QYnrO*^x0r6iTeh$RK$Qml3rfdgdMyO&oAie^`|A5#FB!;Yk35fSX zHKju})Ij;OU^b$A8swZeK>QhM;&&jv3&cFQG=Q)l)CnN`2QP@Nk^O`#SYe^ki5_CO kG;jj(QXpo>seu#>00}<{-ZwxY+W-In07*qoM6N<$g3!K8!~g&Q diff --git a/platform/icons/src/actions/checked@2x.png b/platform/icons/src/actions/checked@2x.png index 7ef960bcf244fdb7a8e3d9cbb2ff993106633d52..fb29f5a3683de1fc07014f40b3a68a0e310e8150 100644 GIT binary patch delta 241 zcmVAbv_K!&5+p)5HRxp?pAmot73f z!VJf10aOCy0zNVf*G4uRWEn0CK)9a_3)Ud%$L>fp7g&;DxCffv6kH0gBPrTNLd2dx z(szQWBnHLBL|9NvlFwn81Su?K@u-zW^YvU}yljc)qPcj~_G+W4l_fUP`U!a(i$jXZ z&XL$64lO88keqjb8p3e75Q|(GxmkY=dKhEz-5N^D7WC}D2EDu?B|{QbfT7`jY8AmJ ruozBOp-605Lt3&VBf?LNtVRF;K!IUY<*~ez00000NkvXXu0mjfS$t-f delta 316 zcmV-C0mJ@`0@ebMBYy!MNkl$#fd~*kN3!57E(;=nIED-hmLnMs!n3eh5P_s1gv_9UVFzp$Y)4Y?5{N~K z44Ri{hOfnyidLg3TunyMJO*MRTo!m@@hZNc3PDr*2Z$YE@_)D@c`=%%m#~aOM9{P& ztHEUfFA(1*BB)lPsW}D2Y{Xaq!X`lc6Hic~2hC?7Rz-INp^R3FBdD+iO%k>^B4hz0 z5bwYeROl&f6|O`;Oi>{Y#4oUAbv_K!&5+p)5HRxp?pAmot73f z!VJf10aOCy0zNVf*G4uRWEn0CK)9a_3)Ud%$L>fp7g&;DxCffv6kH0gBPrTNLd2dx z(szQWBnHLBL|9NvlFwn81Su?K@u-zW^YvU}yljc)qPcj~_G+W4l_fUP`U!a(i$jXZ z&XL$64lO88keqjb8p3e75Q|(GxmkY=dKhEz-5N^D7WC}D2EDu?B|{QbfT7`jY8AmJ ruozBOp-605Lt3&VBf?LNtVRF;K!IUY<*~ez00000NkvXXu0mjfS$t-f delta 316 zcmV-C0mJ@`0@ebMBYy!MNklp94fDkEHM`VLr4SYcS1YN^_AP&Q! zVJcL96|#n3K>QYnrO*^x0r6iTeh$RK$Qml3rfdgdMyO&oAie^`|A5#FB!;Yk35fSX zHKju})Ij;OU^b$A8swZeK>QhM;&&jv3&cFQG=Q)l)CnN`2QP@Nk^O`#SYe^ki5_CO kG;jj(QXpo>seu#>00}<{-ZwxY+W-In07*qoM6N<$g3!K8!~g&Q diff --git a/platform/icons/src/actions/checkedBlack@2x.png b/platform/icons/src/actions/checkedBlack@2x.png index 7ef960bcf244fdb7a8e3d9cbb2ff993106633d52..fb29f5a3683de1fc07014f40b3a68a0e310e8150 100644 GIT binary patch delta 241 zcmVAbv_K!&5+p)5HRxp?pAmot73f z!VJf10aOCy0zNVf*G4uRWEn0CK)9a_3)Ud%$L>fp7g&;DxCffv6kH0gBPrTNLd2dx z(szQWBnHLBL|9NvlFwn81Su?K@u-zW^YvU}yljc)qPcj~_G+W4l_fUP`U!a(i$jXZ z&XL$64lO88keqjb8p3e75Q|(GxmkY=dKhEz-5N^D7WC}D2EDu?B|{QbfT7`jY8AmJ ruozBOp-605Lt3&VBf?LNtVRF;K!IUY<*~ez00000NkvXXu0mjfS$t-f delta 316 zcmV-C0mJ@`0@ebMBYy!MNkl$#fd~*kN3!57E(;=nIED-hmLnMs!n3eh5P_s1gv_9UVFzp$Y)4Y?5{N~K z44Ri{hOfnyidLg3TunyMJO*MRTo!m@@hZNc3PDr*2Z$YE@_)D@c`=%%m#~aOM9{P& ztHEUfFA(1*BB)lPsW}D2Y{Xaq!X`lc6Hic~2hC?7Rz-INp^R3FBdD+iO%k>^B4hz0 z5bwYeROl&f6|O`;Oi>{Y#4oUp94fDkEHM`Abv_K!&5+p)5HRxp?pAmot73f z!VJf10aOCy0zNVf*G4uRWEn0CK)9a_3)Ud%$L>fp7g&;DxCffv6kH0gBPrTNLd2dx z(szQWBnHLBL|9NvlFwn81Su?K@u-zW^YvU}yljc)qPcj~_G+W4l_fUP`U!a(i$jXZ z&XL$64lO88keqjb8p3e75Q|(GxmkY=dKhEz-5N^D7WC}D2EDu?B|{QbfT7`jY8AmJ ruozBOp-605Lt3&VBf?LNtVRF;K!IUY<*~ez00000NkvXXu0mjfS$t-f delta 316 zcmV-C0mJ@`0@ebMBYy!MNklp94fDkEHM`#5I3yozk tC*blIx&~vYLKrqCCd?a@V4SYcS1YH9NgyGOI6)L|9 zS;H?Nehb7>Xo{_X_%9GY2V!Al4HZyRwgWLERE!OXuK@8sAofD{G!qc-g=$KNiq$~* zvv7qH$T@F-_%qbR??8MPhTSg3Ro8zFI=K)e))*(r%>I0gXU W#LQ;%3cINQ0000-B!BryL_t(|+GF_t|33pQF~d-_K#Z0aH2sHwXj)hh_#XjwQQHC$ zAbyTy!C71uL;!IN85S)6j|ygCvmgRVK?s>a0|O4&EZB~u;3W`?5*aiv(F|XUD;2Fq zQ@EOppm_|$LbxpO#Nt(aK^20g_74y{63S?c(KNk8&p3F3rhlE7oXiWvw}}X6}F&BBB!up1mYc7f(kvQt)iqf6$j!M|8awd zKrBdUaqSMo|F9SiN|N@}st>xbSkOw%3I~+@P9qt90*G0uU8AW0@h2!&p;eU$D#qhS dM5T{{0nHyTgAh^W`d0t|002ovPDHLkV1mrGb5Q^Q diff --git a/platform/icons/src/actions/checked_small.png b/platform/icons/src/actions/checked_small.png index eaf1718e664b7262a1e1eac7173e47828f6f568e..47a244cdaaeb326cf222673bd39bc5aec11e3188 100644 GIT binary patch delta 114 zcmV-&0FD2&0gnNYBx_blL_t(|+GAiCFi_t;kq?NkqYI|sP}~p1PtgUR0-B!7EJL_t(|+GF_t|33q0p)K3@zE9Y0r5Skf?6Q{0mQF?SOS}3 z5Vio~-%t%890YSeuF$B0DqM){SzL-i9$N&&0yq^Dg8_kb1QAqyIVL**00005AhBp*JsNU=nd--Sz#)MRu5Nj!|G)(%ftZbu!55J< zyaZx#G($zuf&k;}aDkPP~T=Gr*)NF^nMOhz*dhSy+AEu5AhBp*JsNU=nd--Sz#)MRu5Nj!|G;kil(0{1=EP6EJuglA$2nK*-?lNQ(W42m%m355#PQ48Dk@ z;Uy4@qZulK76c%N=z!!1861V?nvG}%FGrIvg2@pRd8^PgCx7Dzf_*^DM2f+n7=Man z04SZBL4yXKynt99**CclFhh)$%G}p$VM=B{9WHOpzFuVp^Y9Ym7E+D>+W+*5{ z2vce>2%91W11M;`aAg{D%8FX3!87pXMsf^h2I9p)%uTkzBew0kr{;B!7HKL_t(|+GF_t|33qxzA4~XwU71RRp42i3S4WE(-BLorwrp`e0U-#}5A0|21v VW@jQ1I)4BF002ovPDHLkV1iRPEa(6L delta 137 zcmV;40CxY70i^+uB!6s4L_t(|+GF_t|33qc_!GKf z5V!)wTu?qU5TAgGC!;G~3YC}viq7@CHpzJciQ0^&#l5w;(y4n*@3GFT1CV4NC2E+obQ zSkojfF9OAkk>od%l6-j4BE=X@ei<$~Qj^hUBynG&k{1aPnLP&e$$lg;DT=cy)Ij72 yOQSTqBB#|eL?0fqvQB!A6GL_t(|+GF_t|33pQFvF<9)HJvYh(7^wA2kgQ{Eq-1h%uOz z2t$Q{_&Jin_Xru>2E>1XcrpQlm;FZt4TKE-j-=R+h#&xg^FYi-$l!}e8eRgiIGVf& zS`dI7qC-roh(dGCMl|{5X!1p*B)3&)nv-z^!9E~nBE?`(jAK7VG60lL&7eVpoV?`8 z$sle({13^XUudq4qa^1|{*N83p)^Z#0r7P-LqRD*m>Ok;DN- From ec6d8bc6aeb4b5689292b4ed97b03235e61b471b Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 13 Apr 2017 12:21:46 +0100 Subject: [PATCH 17/86] update add sdk icons --- plugins/devkit/resources/icons/add_sdk.png | Bin 403 -> 143 bytes plugins/devkit/resources/icons/add_sdk@2x.png | Bin 918 -> 202 bytes .../devkit/resources/icons/add_sdk@2x_dark.png | Bin 912 -> 0 bytes plugins/devkit/resources/icons/add_sdk_dark.png | Bin 360 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 plugins/devkit/resources/icons/add_sdk@2x_dark.png delete mode 100644 plugins/devkit/resources/icons/add_sdk_dark.png diff --git a/plugins/devkit/resources/icons/add_sdk.png b/plugins/devkit/resources/icons/add_sdk.png index 99eff5353d9d037f467f66d1ee23281a0f30078f..b0ede2d60cab5e53de0e9566a0b0d8ad037da25b 100644 GIT binary patch delta 115 zcmV-(0F3{W1CIfaBWwUxNkle&jcyqC{G!QQa z;+rr`ssXvknxS|xLBoKOnm~LS-FBi}05xDLx^1Ky08-pRi5EZ$%*YBvm;uD70|2{m VwVzb0>}LP~002ovPDHLkV1hBKEc^ff delta 377 zcmV-<0fzpM0h0reBYy!}NklBCIk^J5)eTWS&bU6XmE{e zD`+pifZz=aHwsn~(g;HE)_4gPUS2|!*!U0@qHsL_I5UjHE-YAlyJydy|C`y1AR_S} z)DzJ?U?8utn49`WAQ5p(QwK~%GB}>@i4ZCHI|d{dASfG1*MbP21L#r|qdQ>0 dI;qrl003RNwG7biY%%}<002ovPDHLkV1kdIL;wH) delta 896 zcmV-`1AqL=0hR}lBYy*3Nkl4y4PsOj!393RC{Iz|0*W+1v7i(XG!YdIA_QWHG2&K)7+DgL<2jdtm)gP< zNR5jx{kfUW|8?$}83X_j{w2bHBj8>b2s{oK@G8@QPo|eSP^PuzzGJt5bHRStU97ZP z7_p_R67bYVgS0t@L7CPbrFn<~i*(2jq#1EqSRX7b(Ryg+-plzz>QfmK>}x@iYu?@ z%4d*>HN8mimxtqi1C{mXsh}@ML7yg+kSvk7D67JhDT?t%}SaKyw=C=dPgBfr4U0@BI{P7QWBY$DMPRICI84ZJfBs$F!-#7^x%%oM_ zhSnIk88ZE;ItISf$1=o7;C7U)o4{~!7<{hPEecqZcw`*T&aZ35mo0&az90a%Ih%!Ik+B*rSD>hTI}?9B=go?n&=z1acu z@>==7Vza<^8%!W02)%fM#%pyMSU8FNLMD(=qzVNT_>2&6?*-F&AEEt>ltD8<9lrrw WF!RSk3gJ5d0000Fw?gEFnH^c|Z89EYnG0ubJ;B5 z-lPQIj-+*g&ZSnX1u=*o7Vq|W;4ycM*wR%AcxYn5vo(%EnbsbryNd#gRLD1^6>%`G zj}|G!3%E2!f_qCWgR)owEKEkeBVfRJRRT_Rp|DpI!=P*`@c68^qBFyDp*PFFo-0p9 z7P<05{yR1a?5>rAYjY%nGB2P#?IAqNl@@kq`T~kTUzYzpEK4&fFGDtPa@*){(E___ zWZ?23oI#lv&}Deiuh}tjD|GJpRT+?ouHg6*S6*c-r%$BZu--0Oz_D5i&gw7*Wlmrd z3Y0y`ku;!$(^yHw+{^31MhPmZo1ya`YUAKjV?0BQMDIoaiggnhFO7hY^{Qn7a}ux2 zNZ{Pu5hY;lMKWCPvBmHhJ%H#3o3g;F#IGw+Ih-e_Z4>a$5pXL+3xG8Sn=UP_Br#Q` zY{VcppA?`+y}(}@fx7D*!@2UgA{COc97rS=lyego3kfSV?RhU$Pl~+sLccV z8Hhm&fSTpDwm4n`(tlRZ?fMUO0o)~64N#e5^B;tP1|$LT{{#I#p+G}!fD8e;#2MKo zSPek(_d}2YFhjPrI^6^rvT9x*+#C1|V25c&GvqeVkl#DnU2F*%z=Li8)Q}LMA$Rum zdVR$(0G2qAywHHn5TFYrcXhg{;4 Date: Thu, 13 Apr 2017 14:25:32 +0300 Subject: [PATCH 18/86] External dependencies: ignore missing tools.jar --- build/dependencies/setupJbre.gradle | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/build/dependencies/setupJbre.gradle b/build/dependencies/setupJbre.gradle index d3235c4595d9..e9501e9b04e5 100644 --- a/build/dependencies/setupJbre.gradle +++ b/build/dependencies/setupJbre.gradle @@ -47,7 +47,12 @@ jrePlatformsToDownload(targetOs).each { platform -> doFirst { exec { commandLine 'mkdir', '-p', outputDir } } commandLine 'tar', '-xpf', "${downloadOutputs.singleFile.absolutePath}", '--directory', outputDir if (platform != 'osx') { - doLast { exec { commandLine 'mv', "$outputDir/lib/tools.jar", "$outputDir/jre/lib/" } } + doLast { + exec { + commandLine 'mv', "$outputDir/lib/tools.jar", "$outputDir/jre/lib/" + ignoreExitValue = true + } + } } } } From db203c1941e67b6d068b67624359a9a0fdb4c757 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 13 Apr 2017 13:59:28 +0200 Subject: [PATCH 19/86] fix XCode testChangingSharedFlagAndRenaming and add simple platform test for "unshare case" --- .../lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt index 01d8487f5e28..35eb90aad2a5 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt @@ -1038,7 +1038,7 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent if (value && settings.isTemporary) { doMakeStable(settings) } - (settings as RunnerAndConfigurationSettingsImpl).level = RunConfigurationLevel.PROJECT + (settings as RunnerAndConfigurationSettingsImpl).isShared = value fireRunConfigurationChanged(settings) } From e561e921da5033b91b861d3b8aca7cd94d60163b Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 13 Apr 2017 11:35:48 +0200 Subject: [PATCH 20/86] ensure single tests are started with old junit when they are compatible with --- .../intellij/execution/junit/JUnitUtil.java | 2 +- .../intellij/execution/junit/TestClass.java | 24 +++++++++++++++-- .../intellij/execution/junit/TestMethod.java | 26 +++++++++++++------ .../intellij/execution/junit/TestObject.java | 12 +++++++-- 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java index 2fa79311b8c6..91bcef935b00 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java +++ b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java @@ -219,7 +219,7 @@ public class JUnitUtil { return false; } - public static boolean isJUnit5TestClass(final PsiClass psiClass, boolean checkAbstract) { + public static boolean isJUnit5TestClass(@NotNull final PsiClass psiClass, boolean checkAbstract) { final PsiModifierList modifierList = psiClass.getModifierList(); if (modifierList == null) return false; diff --git a/plugins/junit/src/com/intellij/execution/junit/TestClass.java b/plugins/junit/src/com/intellij/execution/junit/TestClass.java index 1ce6428519dc..0e92a76c2a67 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestClass.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestClass.java @@ -19,13 +19,19 @@ package com.intellij.execution.junit; import com.intellij.execution.ExecutionBundle; import com.intellij.execution.ExecutionException; import com.intellij.execution.JavaExecutionUtil; -import com.intellij.execution.configurations.*; -import com.intellij.execution.junit2.configuration.JUnitConfigurationModel; +import com.intellij.execution.configurations.JavaParameters; +import com.intellij.execution.configurations.JavaRunConfigurationModule; +import com.intellij.execution.configurations.RuntimeConfigurationException; +import com.intellij.execution.configurations.RuntimeConfigurationWarning; import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.psi.*; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.listeners.RefactoringElementListener; +import com.intellij.rt.execution.junit.JUnitStarter; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; class TestClass extends TestObject { public TestClass(JUnitConfiguration configuration, ExecutionEnvironment environment) { @@ -40,6 +46,20 @@ class TestClass extends TestObject { return javaParameters; } + @Nullable + @Override + protected String getPreferredRunner(GlobalSearchScope globalSearchScope) { + Project project = getConfiguration().getProject(); + final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, getConfiguration().getPersistentData().getMainClassName(), globalSearchScope); + if (psiClass != null) { + if (JUnitUtil.isJUnit5TestClass(psiClass, false)) { + return JUnitStarter.JUNIT5_RUNNER_NAME; + } + return JUnitStarter.JUNIT4_PARAMETER; + } + return null; + } + @NotNull @Override protected String getForkMode() { diff --git a/plugins/junit/src/com/intellij/execution/junit/TestMethod.java b/plugins/junit/src/com/intellij/execution/junit/TestMethod.java index 25a570ce0fca..b94f92d89e01 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestMethod.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestMethod.java @@ -29,6 +29,7 @@ import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.refactoring.listeners.UndoRefactoringElementListener; import com.intellij.rt.execution.junit.JUnitStarter; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; class TestMethod extends TestObject { public TestMethod(JUnitConfiguration configuration, ExecutionEnvironment environment) { @@ -39,8 +40,6 @@ class TestMethod extends TestObject { protected JavaParameters createJavaParameters() throws ExecutionException { final JavaParameters javaParameters = createDefaultJavaParameters(); final JUnitConfiguration.Data data = getConfiguration().getPersistentData(); - RunConfigurationModule module = getConfiguration().getConfigurationModule(); - addJUnit3Parameter(javaParameters, data, module.getProject()); javaParameters.getProgramParametersList().add(data.getMainClassName() + "," + data.getMethodNameWithSignature()); return javaParameters; } @@ -49,19 +48,30 @@ class TestMethod extends TestObject { return super.createJavaParameters(); } - protected void addJUnit3Parameter(JavaParameters javaParameters, final JUnitConfiguration.Data data, Project project) throws ExecutionException { - final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, data.getMainClassName(), GlobalSearchScope.allScope(project)); - if (psiClass == null || JUnitUtil.isJUnit4TestClass(psiClass) || JUnitUtil.isJUnit5(psiClass)) { - return; + @Nullable + @Override + protected String getPreferredRunner(GlobalSearchScope globalSearchScope) { + Project project = getConfiguration().getProject(); + JUnitConfiguration.Data data = getConfiguration().getPersistentData(); + final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, data.getMainClassName(), globalSearchScope); + if (psiClass == null) return null; + + if (JUnitUtil.isJUnit5TestClass(psiClass, false)) { + return JUnitStarter.JUNIT5_RUNNER_NAME; } + + if (JUnitUtil.isJUnit4TestClass(psiClass)) { + return JUnitStarter.JUNIT4_PARAMETER; + } + final String methodName = data.getMethodName(); final PsiMethod[] methods = psiClass.findMethodsByName(methodName, true); for (PsiMethod method : methods) { if (JUnitUtil.isTestAnnotated(method)) { - return; + return JUnitStarter.JUNIT4_PARAMETER; } } - javaParameters.getProgramParametersList().add(JUnitStarter.JUNIT3_PARAMETER); + return JUnitStarter.JUNIT3_PARAMETER; } @Override diff --git a/plugins/junit/src/com/intellij/execution/junit/TestObject.java b/plugins/junit/src/com/intellij/execution/junit/TestObject.java index 279066c457e1..a07706d592cf 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestObject.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestObject.java @@ -158,8 +158,8 @@ public abstract class TestObject extends JavaTestFrameworkRunnableState Date: Thu, 13 Apr 2017 11:56:21 +0200 Subject: [PATCH 21/86] structure view: support actions on groups (IDEA-170415) --- .../StructureViewComponent.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java index f456786637f4..2784fc130de6 100644 --- a/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java +++ b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java @@ -251,7 +251,16 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre if (selectionPaths == null) return null; List result = new ArrayList<>(); for (TreePath selectionPath : selectionPaths) { - ContainerUtil.addIfNotNull(result, getNodeTreeValue((DefaultMutableTreeNode)selectionPath.getLastPathComponent())); + Object value = getNodeValue((DefaultMutableTreeNode)selectionPath.getLastPathComponent()); + if (value instanceof StructureViewTreeElement) { + ContainerUtil.addIfNotNull(result, ((StructureViewTreeElement)value).getValue()); + } + else if (value instanceof Group) { + ((Group)value).getChildren().stream() + .filter(element -> element instanceof StructureViewTreeElement) + .map(element -> ((StructureViewTreeElement)element).getValue()) + .forEach(element -> ContainerUtil.addIfNotNull(result, element)); + } } return ArrayUtil.toObjectArray(result); } @@ -275,12 +284,6 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre return userObject instanceof AbstractTreeNode ? ((AbstractTreeNode)userObject).getValue() : null; } - @Nullable - private static Object getNodeTreeValue(DefaultMutableTreeNode mutableTreeNode) { - Object value = getNodeValue(mutableTreeNode); - return value instanceof StructureViewTreeElement ? ((StructureViewTreeElement)value).getValue() : null; - } - private void addTreeMouseListeners() { EditSourceOnDoubleClickHandler.install(getTree()); CustomizationUtil.installPopupHandler(getTree(), IdeActions.GROUP_STRUCTURE_VIEW_POPUP, ActionPlaces.STRUCTURE_VIEW_POPUP); From 2d1525e5663416586fc834d7a2cb5fd3fbcc7960 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 13 Apr 2017 14:00:49 +0200 Subject: [PATCH 22/86] move classes and packages: retarget usages before decode to provide correct qualified names (IDEA-170920) --- .../MoveClassesOrPackagesProcessor.java | 4 ++-- .../packageAndReferencedClass/after/b/B.java | 6 ++++++ .../packageAndReferencedClass/after/b/C.java | 2 ++ .../packageAndReferencedClass/after/b/a/A.java | 2 ++ .../packageAndReferencedClass/before/B.java | 4 ++++ .../packageAndReferencedClass/before/a/A.java | 2 ++ .../packageAndReferencedClass/before/b/C.java | 2 ++ .../intellij/refactoring/MovePackageTest.java | 18 +++++++++++++++--- 8 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/B.java create mode 100644 java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/C.java create mode 100644 java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/a/A.java create mode 100644 java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/B.java create mode 100644 java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/a/A.java create mode 100644 java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/b/C.java diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java index 4fe261b153de..f9edca96cfdf 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java @@ -511,14 +511,14 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor { myElementsToMove[idx] = element; } + myNonCodeUsages = CommonMoveUtil.retargetUsages(usages, oldToNewElementsMapping); + for (PsiElement element : myElementsToMove) { if (element instanceof PsiClass) { MoveClassesOrPackagesUtil.finishMoveClass((PsiClass)element); } } - myNonCodeUsages = CommonMoveUtil.retargetUsages(usages, oldToNewElementsMapping); - if (myOpenInEditor) { EditorHelper.openFilesInEditor(myElementsToMove); } diff --git a/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/B.java b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/B.java new file mode 100644 index 000000000000..d6457aef6e16 --- /dev/null +++ b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/B.java @@ -0,0 +1,6 @@ +package b; + +import b.a.A; +public class B { + A aa; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/C.java b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/C.java new file mode 100644 index 000000000000..beba5243f562 --- /dev/null +++ b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/C.java @@ -0,0 +1,2 @@ +package b; +class C {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/a/A.java b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/a/A.java new file mode 100644 index 000000000000..4cc1ad36b90a --- /dev/null +++ b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/after/b/a/A.java @@ -0,0 +1,2 @@ +package b.a; +public class A {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/B.java b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/B.java new file mode 100644 index 000000000000..a17e968da5fa --- /dev/null +++ b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/B.java @@ -0,0 +1,4 @@ +import a.A; +public class B { + A aa; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/a/A.java b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/a/A.java new file mode 100644 index 000000000000..c40d43155dc2 --- /dev/null +++ b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/a/A.java @@ -0,0 +1,2 @@ +package a; +public class A {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/b/C.java b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/b/C.java new file mode 100644 index 000000000000..beba5243f562 --- /dev/null +++ b/java/java-tests/testData/refactoring/movePackage/packageAndReferencedClass/before/b/C.java @@ -0,0 +1,2 @@ +package b; +class C {} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MovePackageTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MovePackageTest.java index d60e7f0f90f4..caf741958725 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/MovePackageTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/MovePackageTest.java @@ -15,14 +15,16 @@ */ package com.intellij.refactoring; +import com.intellij.JavaTestUtil; import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.project.Project; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiPackage; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesProcessor; import com.intellij.refactoring.move.moveClassesOrPackages.SingleSourceRootMoveDestination; -import com.intellij.JavaTestUtil; import org.jetbrains.annotations.NotNull; public class MovePackageTest extends MultiFileTestCase { @@ -49,6 +51,12 @@ public class MovePackageTest extends MultiFileTestCase { doTest(new String[]{"a"}, "a.b"); } + public void testPackageAndReferencedClass() throws Exception { + Project project = myPsiManager.getProject(); + JavaPsiFacade facade = JavaPsiFacade.getInstance(project); + doTest((rootDir, rootAfter) -> performAction(new PsiElement[]{facade.findPackage("a"), facade.findClass("B", GlobalSearchScope.allScope(project))}, "b")); + } + @NotNull @Override protected String getTestRoot() { @@ -67,12 +75,16 @@ public class MovePackageTest extends MultiFileTestCase { assertNotNull("Package " + packageName + " not found", packages[i]); } + performAction(packages, newPackageName); + } + + private void performAction(PsiElement[] packagesAndClasses, String newPackageName) { PsiPackage newParentPackage = JavaPsiFacade.getInstance(myPsiManager.getProject()).findPackage(newPackageName); assertNotNull(newParentPackage); final PsiDirectory[] dirs = newParentPackage.getDirectories(); assertEquals(dirs.length, 1); - new MoveClassesOrPackagesProcessor(myProject, packages, + new MoveClassesOrPackagesProcessor(myProject, packagesAndClasses, new SingleSourceRootMoveDestination(PackageWrapper.create(newParentPackage), dirs[0]), true, false, null).run(); FileDocumentManager.getInstance().saveAllDocuments(); From b6caf67f70a318657cd8d5e35d5f7c8771c7553c Mon Sep 17 00:00:00 2001 From: Alexey Ushakov Date: Thu, 13 Apr 2017 15:04:26 +0300 Subject: [PATCH 23/86] Updating versions of project dependencies: jdkBuild->u152b819.2 Alexey Ushakov --- build/dependencies/gradle.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/dependencies/gradle.properties b/build/dependencies/gradle.properties index 285b865d0488..677173d30e4f 100644 --- a/build/dependencies/gradle.properties +++ b/build/dependencies/gradle.properties @@ -1,5 +1,5 @@ #The file might be automatically updated. Comments and empty lines will be removed. -#Mon Apr 10 12:16:24 MSK 2017 -kotlinPluginBuild=1.1.2-eap-69-IJ2017.2-1:EAP-1.1 +#Thu Apr 13 15:04:25 MSK 2017 +kotlinPluginBuild=1.1.1-release-IJ2017.1-1 jetSignBuild=42.30 -jdkBuild=u152b819.1 +jdkBuild=u152b819.2 From 10922319b28ce60e6ae48731b88e4e17f3da6aba Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Thu, 13 Apr 2017 15:04:56 +0300 Subject: [PATCH 24/86] IDEA-170910 Diagram printing prints empty --- platform/util/src/com/intellij/util/ui/JBUI.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/platform/util/src/com/intellij/util/ui/JBUI.java b/platform/util/src/com/intellij/util/ui/JBUI.java index 8386a26da55c..686cb3a36f8b 100644 --- a/platform/util/src/com/intellij/util/ui/JBUI.java +++ b/platform/util/src/com/intellij/util/ui/JBUI.java @@ -216,9 +216,16 @@ public class JBUI { */ public static float sysScale(@Nullable GraphicsConfiguration gc) { if (UIUtil.isJreHiDPIEnabled() && gc != null) { - if (SystemInfo.isMac && UIUtil.isJreHiDPI_earlierVersion()) { - if (gc.getDevice().getType() == GraphicsDevice.TYPE_RASTER_SCREEN) { - return UIUtil.DetectRetinaKit.isOracleMacRetinaDevice(gc.getDevice()) ? 2f : 1f; + if (SystemInfo.isMac) { + switch (gc.getDevice().getType()) { + case GraphicsDevice.TYPE_RASTER_SCREEN: + if (UIUtil.isJreHiDPI_earlierVersion()) { + return UIUtil.DetectRetinaKit.isOracleMacRetinaDevice(gc.getDevice()) ? 2f : 1f; + } + break; + case GraphicsDevice.TYPE_PRINTER: + // workaround for mac: default tx for PrinterGraphicsConfig may be uninitialized yet + return sysScale(); } } return (float)gc.getDefaultTransform().getScaleX(); From 1f663efcc30a2968164f79c7add643a4dbbf0ea4 Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Thu, 13 Apr 2017 15:08:57 +0300 Subject: [PATCH 25/86] Java: Mark service implementations as used if the service declaration is used (IDEA-169204) --- .../reference/RefJavaModuleImpl.java | 48 +++++++++- .../constructor/MyServiceImpl.java | 8 ++ .../constructor/expected.xml | 3 + .../implementation/MyServiceImpl.java | 7 ++ .../implementation/expected.xml | 3 + .../provider/MyServiceImpl.java | 12 +++ .../provider/expected.xml | 3 + .../unusedConstructor/MyServiceImpl.java | 8 ++ .../unusedConstructor/expected.xml | 10 +++ .../unusedImplementation/MyServiceImpl.java | 7 ++ .../unusedImplementation/expected.xml | 10 +++ .../unusedProvider/MyServiceImpl.java | 12 +++ .../unusedProvider/expected.xml | 10 +++ .../Java9UnusedServiceImplementationsTest.kt | 87 +++++++++++++++++++ 14 files changed, 226 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/constructor/MyServiceImpl.java create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/constructor/expected.xml create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/implementation/MyServiceImpl.java create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/implementation/expected.xml create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/provider/MyServiceImpl.java create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/provider/expected.xml create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/unusedConstructor/MyServiceImpl.java create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/unusedConstructor/expected.xml create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/unusedImplementation/MyServiceImpl.java create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/unusedImplementation/expected.xml create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/unusedProvider/MyServiceImpl.java create mode 100644 java/java-tests/testData/inspection/unusedServiceImplementations/unusedProvider/expected.xml create mode 100644 java/java-tests/testSrc/com/intellij/codeInspection/Java9UnusedServiceImplementationsTest.kt diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java index 69d8ff16e6ca..e3273c4b553d 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java @@ -18,6 +18,7 @@ package com.intellij.codeInspection.reference; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.psi.*; +import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -43,7 +44,7 @@ public class RefJavaModuleImpl extends RefElementImpl implements RefJavaModule { @Override protected void initialize() { - + ((RefModuleImpl)myRefModule).add(this); } @Override @@ -115,7 +116,35 @@ public class RefJavaModuleImpl extends RefElementImpl implements RefJavaModule { } } } - ((RefModuleImpl)myRefModule).add(this); + for (PsiProvidesStatement statement : javaModule.getProvides()) { + final PsiJavaCodeReferenceElement interfaceReference = statement.getInterfaceReference(); + final PsiReferenceList implementationList = statement.getImplementationList(); + if (interfaceReference != null && implementationList != null) { + final PsiElement providerInterface = interfaceReference.resolve(); + if (providerInterface instanceof PsiClass) { + final RefElement refInterface = getRefManager().getReference(providerInterface); + if (refInterface instanceof RefJavaElementImpl) { + for (PsiJavaCodeReferenceElement implementationReference : implementationList.getReferenceElements()) { + final PsiElement implementationClass = implementationReference.resolve(); + if (implementationClass instanceof PsiClass) { + PsiElement targetElement = getProviderMethod((PsiClass)implementationClass); + if (targetElement == null) { + targetElement = getDefaultConstructor((PsiClass)implementationClass); + if (targetElement == null) { + targetElement = implementationClass; + } + } + final RefElement refTargetElement = getRefManager().getReference(targetElement); + if (refTargetElement != null) { + ((RefJavaElementImpl)refInterface) + .addReference(refTargetElement, targetElement, providerInterface, false, true, null); + } + } + } + } + } + } + } getRefManager().fireBuildReferences(this); } } @@ -150,4 +179,19 @@ public class RefJavaModuleImpl extends RefElementImpl implements RefJavaModule { } return !exportedPackages.isEmpty() ? exportedPackages : Collections.emptyMap(); } + + @Nullable + private static PsiMethod getProviderMethod(@NotNull PsiClass psiClass) { + final PsiMethod[] methods = psiClass.findMethodsByName("provider", false); + return ContainerUtil.find(methods, m -> m.hasModifierProperty(PsiModifier.PUBLIC) && + m.hasModifierProperty(PsiModifier.STATIC) && + m.getParameterList().getParametersCount() == 0); + } + + @Nullable + private static PsiMethod getDefaultConstructor(@NotNull PsiClass psiClass) { + final PsiMethod[] constructors = psiClass.getConstructors(); + return ContainerUtil.find(constructors, m -> m.hasModifierProperty(PsiModifier.PUBLIC) && + m.getParameterList().getParametersCount() == 0); + } } diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/constructor/MyServiceImpl.java b/java/java-tests/testData/inspection/unusedServiceImplementations/constructor/MyServiceImpl.java new file mode 100644 index 000000000000..2a507686b86f --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/constructor/MyServiceImpl.java @@ -0,0 +1,8 @@ +package my.impl; +import my.api.MyService; + +public class MyServiceImpl implements MyService { + public MyServiceImpl() {} + @Override + public void foo() {} +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/constructor/expected.xml b/java/java-tests/testData/inspection/unusedServiceImplementations/constructor/expected.xml new file mode 100644 index 000000000000..5e933496b9cf --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/constructor/expected.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/implementation/MyServiceImpl.java b/java/java-tests/testData/inspection/unusedServiceImplementations/implementation/MyServiceImpl.java new file mode 100644 index 000000000000..0a3d1e4a0b63 --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/implementation/MyServiceImpl.java @@ -0,0 +1,7 @@ +package my.impl; +import my.api.MyService; + +public class MyServiceImpl implements MyService { + @Override + public void foo() {} +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/implementation/expected.xml b/java/java-tests/testData/inspection/unusedServiceImplementations/implementation/expected.xml new file mode 100644 index 000000000000..5e933496b9cf --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/implementation/expected.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/provider/MyServiceImpl.java b/java/java-tests/testData/inspection/unusedServiceImplementations/provider/MyServiceImpl.java new file mode 100644 index 000000000000..0dcb7e99ce79 --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/provider/MyServiceImpl.java @@ -0,0 +1,12 @@ +package my.impl; +import my.api.MyService; + +public class MyServiceImpl { + public static MyService provider() { + return new MyService() { + @Override + public void foo() { + } + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/provider/expected.xml b/java/java-tests/testData/inspection/unusedServiceImplementations/provider/expected.xml new file mode 100644 index 000000000000..5e933496b9cf --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/provider/expected.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/unusedConstructor/MyServiceImpl.java b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedConstructor/MyServiceImpl.java new file mode 100644 index 000000000000..2a507686b86f --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedConstructor/MyServiceImpl.java @@ -0,0 +1,8 @@ +package my.impl; +import my.api.MyService; + +public class MyServiceImpl implements MyService { + public MyServiceImpl() {} + @Override + public void foo() {} +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/unusedConstructor/expected.xml b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedConstructor/expected.xml new file mode 100644 index 000000000000..ae969d8f95d0 --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedConstructor/expected.xml @@ -0,0 +1,10 @@ + + + + MyServiceImpl.java + 5 + + unused + Unused declaration + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/unusedImplementation/MyServiceImpl.java b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedImplementation/MyServiceImpl.java new file mode 100644 index 000000000000..0a3d1e4a0b63 --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedImplementation/MyServiceImpl.java @@ -0,0 +1,7 @@ +package my.impl; +import my.api.MyService; + +public class MyServiceImpl implements MyService { + @Override + public void foo() {} +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/unusedImplementation/expected.xml b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedImplementation/expected.xml new file mode 100644 index 000000000000..6a061d5f437d --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedImplementation/expected.xml @@ -0,0 +1,10 @@ + + + + MyServiceImpl.java + 4 + + unused + Unused declaration + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/unusedProvider/MyServiceImpl.java b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedProvider/MyServiceImpl.java new file mode 100644 index 000000000000..0dcb7e99ce79 --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedProvider/MyServiceImpl.java @@ -0,0 +1,12 @@ +package my.impl; +import my.api.MyService; + +public class MyServiceImpl { + public static MyService provider() { + return new MyService() { + @Override + public void foo() { + } + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/unusedServiceImplementations/unusedProvider/expected.xml b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedProvider/expected.xml new file mode 100644 index 000000000000..ae969d8f95d0 --- /dev/null +++ b/java/java-tests/testData/inspection/unusedServiceImplementations/unusedProvider/expected.xml @@ -0,0 +1,10 @@ + + + + MyServiceImpl.java + 5 + + unused + Unused declaration + + \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/Java9UnusedServiceImplementationsTest.kt b/java/java-tests/testSrc/com/intellij/codeInspection/Java9UnusedServiceImplementationsTest.kt new file mode 100644 index 000000000000..1976ef5ebe94 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/codeInspection/Java9UnusedServiceImplementationsTest.kt @@ -0,0 +1,87 @@ +/* + * Copyright 2000-2017 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInspection + +import com.intellij.analysis.AnalysisScope +import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection +import com.intellij.codeInspection.ex.GlobalInspectionToolWrapper +import com.intellij.idea.Bombed +import com.intellij.openapi.application.ex.PathManagerEx +import com.intellij.openapi.util.io.FileUtil +import com.intellij.openapi.util.io.FileUtil.loadFileText +import com.intellij.testFramework.InspectionTestUtil +import com.intellij.testFramework.createGlobalContextForTool +import com.intellij.testFramework.fixtures.LightJava9ModulesCodeInsightFixtureTestCase +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor.* +import org.intellij.lang.annotations.Language +import org.jetbrains.annotations.NonNls + +/** + * @author Pavel.Dolgov + */ +class Java9UnusedServiceImplementationsTest : LightJava9ModulesCodeInsightFixtureTestCase() { + override fun getTestDataPath() = PathManagerEx.getTestDataPath() + "/inspection/unusedServiceImplementations/" + + override fun setUp() { + super.setUp() + + addFile("module-info.java", "module MAIN { requires M2; }", MAIN) + addFile("module-info.java", "module M2 { exports my.api; provides my.api.MyService with my.impl.MyServiceImpl; }", M2) + + addFile("my/api/MyService.java", "package my.api; public interface MyService { void foo(); }", M2) + } + + fun testImplementation() = doTest() + + fun testConstructor() = doTest() + + fun testProvider() = doTest() + + @Bombed(user ="Pavel Dolgov", year = 2017, month = 8, day = 1, description = "Disabled, until the test infrastructure supports it") + fun testUnusedImplementation() = doTest(false) + + @Bombed(user ="Pavel Dolgov", year = 2017, month = 8, day = 1, description = "Disabled, until the test infrastructure supports it") + fun testUnusedConstructor() = doTest(false) + + @Bombed(user ="Pavel Dolgov", year = 2017, month = 8, day = 1, description = "Disabled, until the test infrastructure supports it") + fun testUnusedProvider() = doTest(false) + + private fun doTest(withUsage: Boolean = true) { + @Language("JAVA") @NonNls + val usageText = """ + import my.api.MyService; + public class MyApp { + public static void main(String[] args) { + for (MyService service : ServiceLoader.load(MyService.class)) { + service.foo(); + } + } + }""" + if (withUsage) addFile("my/app/MyApp.java", usageText, MAIN) + + val testPath = testDataPath + "/" + getTestName(true) + val sourceFile = FileUtil.findFirstThatExist(testPath + "/MyServiceImpl.java") + assertNotNull("Test data: $testPath", sourceFile) + val implText = String(loadFileText(sourceFile!!)) + addFile("my/impl/MyServiceImpl.java", implText, M2) + + val toolWrapper = GlobalInspectionToolWrapper(UnusedDeclarationInspection()) + val scope = AnalysisScope(project) + val globalContext = createGlobalContextForTool(scope, project, listOf(toolWrapper)) + InspectionTestUtil.runTool(toolWrapper, scope, globalContext) + InspectionTestUtil.compareToolResults(globalContext, toolWrapper, true, testPath) + } +} \ No newline at end of file From 7d4640afb18d0e902fd0ca63758e321282c79198 Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Thu, 13 Apr 2017 14:35:35 +0300 Subject: [PATCH 26/86] Build scripts: setup testing dependencies on testing only --- .../intellij/build/impl/CompilationTasksImpl.groovy | 2 +- .../intellij/build/impl/TestingTasksImpl.groovy | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy index ee4b2d5a1a42..75f41ba9c791 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy @@ -31,7 +31,6 @@ class CompilationTasksImpl extends CompilationTasks { @Override void compileModules(List moduleNames, List includingTestsInModules) { - setupCompilationDependencies() if (context.options.useCompiledClassesFromProjectOutput) { context.messages.info("Compilation skipped, the compiled classes from the project output will be used") return @@ -41,6 +40,7 @@ class CompilationTasksImpl extends CompilationTasks { return } + setupCompilationDependencies() ensureKotlinCompilerAddedToClassPath() context.messages.progress("Compiling project") diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy index b1e0974acfeb..f63188e6a03c 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy @@ -50,6 +50,7 @@ class TestingTasksImpl extends TestingTasks { else { compilationTasks.compileAllModulesAndTests() } + setupTestingDependencies() def mainModule = options.mainModule ?: defaultMainModule List testsClasspath = context.projectBuilder.moduleRuntimeClasspath(context.findRequiredModule(mainModule), true) @@ -171,6 +172,18 @@ class TestingTasksImpl extends TestingTasks { test(name: 'com.intellij.tests.BootstrapTests') } } + + static boolean dependenciesInstalled + + private def setupTestingDependencies() { + if (dependenciesInstalled) return + dependenciesInstalled = true + context.messages.info("Setting up testing dependencies") + if (!BuildUtils.runGradle(new File(context.paths.communityHome, 'build/dependencies/'), 'setupKotlinPlugin')) { + context.messages.error("Cannot setup testing dependencies") + } + dependenciesInstalled = true + } static boolean taskDefined From cb40921b91eda176e7a1ba44954670077bb0e608 Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Thu, 13 Apr 2017 15:18:48 +0300 Subject: [PATCH 27/86] Build scripts: setup compilation dependencies before setting JDK paths - extract runDependenciesGradle method --- .../intellij/build/impl/BuildTasksImpl.groovy | 2 +- .../intellij/build/impl/BuildUtils.groovy | 6 +++++- .../build/impl/CompilationContextImpl.groovy | 14 ++++++++++++++ .../build/impl/CompilationTasksImpl.groovy | 9 +-------- .../intellij/build/impl/TestingTasksImpl.groovy | 2 +- 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy index 0c61b5f8d955..20120f1a4aa7 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy @@ -307,7 +307,7 @@ idea.fatal.error.notification=disabled private void setupJbreDependencies() { buildContext.messages.info("Setting up installer dependencies") - if (!BuildUtils.runGradle(new File(buildContext.paths.communityHome, 'build/dependencies/'), 'setupJbre')) { + if (!BuildUtils.runDependenciesGradle(buildContext.paths.communityHome, 'setupJbre')) { buildContext.messages.error("Cannot setup installer dependencies") } } diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildUtils.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildUtils.groovy index f4a265b662f0..e39edfa79496 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildUtils.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildUtils.groovy @@ -84,7 +84,11 @@ class BuildUtils { } } - static boolean runGradle(File projectDir, String... tasks) { + static boolean runDependenciesGradle(String communityHome, String... tasks) { + return runGradle(new File(communityHome, 'build/dependencies/'), tasks) + } + + private static boolean runGradle(File projectDir, String... tasks) { def gradleScript = SystemInfo.isWindows ? "gradlew.bat" : "gradlew" List command = new ArrayList() command.add("${projectDir.absolutePath}/$gradleScript".toString()) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy index ce29a9e77a0f..b0e54df9bd10 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy @@ -66,6 +66,10 @@ class CompilationContextImpl implements CompilationContext { messages.error("communityHome ($communityHome) doesn't point to a directory containing IntelliJ Community sources") } + if (!options.isInDevelopmentMode) { + setupCompilationDependencies(messages, communityHome) + } + projectHome = toCanonicalPath(projectHome) def jdk8Home = toCanonicalPath(JdkUtils.computeJdkHome(messages, "jdk8Home", "$projectHome/build/jdk/1.8", "JDK_18_x64")) def kotlinHome = toCanonicalPath("$communityHome/build/dependencies/build/kotlin/Kotlin") @@ -115,6 +119,16 @@ class CompilationContextImpl implements CompilationContext { messages.info("Loaded project $projectHome: ${project.modules.size()} modules, ${project.libraryCollection.libraries.size()} libraries") } + static boolean dependenciesInstalled + static void setupCompilationDependencies(BuildMessages messages, String communityHome) { + if (dependenciesInstalled) return + dependenciesInstalled = true + messages.info("Setting up compilation dependencies") + if (!BuildUtils.runDependenciesGradle(communityHome, 'setupJdks', 'setupKotlinPlugin')) { + messages.error("Cannot setup compilation dependencies") + } + } + void prepareForBuild() { checkCompilationOptions() projectBuilder.buildIncrementally = options.incrementalCompilation diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy index 75f41ba9c791..e24efd606d84 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy @@ -40,7 +40,7 @@ class CompilationTasksImpl extends CompilationTasks { return } - setupCompilationDependencies() + CompilationContextImpl.setupCompilationDependencies(context.messages, context.paths.communityHome) ensureKotlinCompilerAddedToClassPath() context.messages.progress("Compiling project") @@ -77,13 +77,6 @@ class CompilationTasksImpl extends CompilationTasks { compileModules(null, null) } - private void setupCompilationDependencies() { - context.messages.info("Setting up compilation dependencies") - if (!BuildUtils.runGradle(new File(context.paths.communityHome, 'build/dependencies/'), 'setupJdks', 'setupKotlinPlugin')) { - context.messages.error("Cannot setup compilation dependencies") - } - } - private void ensureKotlinCompilerAddedToClassPath() { if (getClass().getResource("/org/jetbrains/kotlin/jps/build/KotlinBuilder.class") != null) { return diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy index f63188e6a03c..bbadf82786a9 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy @@ -179,7 +179,7 @@ class TestingTasksImpl extends TestingTasks { if (dependenciesInstalled) return dependenciesInstalled = true context.messages.info("Setting up testing dependencies") - if (!BuildUtils.runGradle(new File(context.paths.communityHome, 'build/dependencies/'), 'setupKotlinPlugin')) { + if (!BuildUtils.runDependenciesGradle(context.paths.communityHome, 'setupKotlinPlugin')) { context.messages.error("Cannot setup testing dependencies") } dependenciesInstalled = true From b49e32a65fcd61ba27b435886e0744ef353eaefa Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Mon, 10 Apr 2017 20:17:47 +0300 Subject: [PATCH 28/86] comment --- .../com/intellij/openapi/application/impl/ApplicationImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index 6de889d52422..1160dc20c6ae 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -110,7 +110,7 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App private final boolean myIsInternal; private final String myName; - private final Stack myWriteActionsStack = new Stack<>(); // accessed from EDT only, no need to sync + private final Stack myWriteActionsStack = new Stack<>(); // contents modified in write action, read in read action private final TransactionGuardImpl myTransactionGuard = new TransactionGuardImpl(); private int myWriteStackBase; private volatile Thread myWriteActionThread; From e48005b3cc006d240aacef41145cae6d85fe0786 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 11 Apr 2017 16:07:23 +0300 Subject: [PATCH 29/86] more diagnostics for EA-100155 - IAE: UsageInfo. --- .../src/com/intellij/usageView/UsageInfo.java | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/platform/core-api/src/com/intellij/usageView/UsageInfo.java b/platform/core-api/src/com/intellij/usageView/UsageInfo.java index 2881d761b00b..78c1d854c196 100644 --- a/platform/core-api/src/com/intellij/usageView/UsageInfo.java +++ b/platform/core-api/src/com/intellij/usageView/UsageInfo.java @@ -35,7 +35,7 @@ public class UsageInfo { public final boolean isNonCodeUsage; protected boolean myDynamicUsage; - public UsageInfo(@NotNull PsiElement element, int startOffset, int endOffset, boolean isNonCodeUsage) { + public UsageInfo(@NotNull PsiElement element, final int startOffset, final int endOffset, boolean isNonCodeUsage) { element = element.getNavigationElement(); PsiFile file = element.getContainingFile(); PsiElement topElement = file == null ? element : file; @@ -45,30 +45,32 @@ public class UsageInfo { if (elementRange == null) { throw new IllegalArgumentException("text range null for " + element + "; " + element.getClass()); } + int effectiveStart; + int effectiveEnd; if (startOffset == -1 && endOffset == -1) { // calculate natural element range - startOffset = element.getTextOffset() - elementRange.getStartOffset(); - endOffset = elementRange.getEndOffset() - elementRange.getStartOffset(); + effectiveStart = element.getTextOffset() - elementRange.getStartOffset(); + effectiveEnd = elementRange.getLength(); + } + else { + effectiveStart = startOffset; + effectiveEnd = endOffset; } - if (startOffset < 0) { - throw new IllegalArgumentException("element " + element + "; startOffset " +startOffset); - } - if (startOffset > endOffset) { - throw new IllegalArgumentException("element " + element + "; diff " + (endOffset-startOffset)); + if (effectiveStart < 0 || effectiveStart > effectiveEnd) { + throw new IllegalArgumentException("element " + element + "; startOffset " +startOffset+"; endOffset="+endOffset+ + "; effectiveStart="+effectiveStart+"; effectiveEnd="+effectiveEnd+ + "; elementRange="+elementRange+"; element.getTextOffset()="+element.getTextOffset()); } Project project = topElement.getProject(); SmartPointerManager smartPointerManager = SmartPointerManager.getInstance(project); mySmartPointer = smartPointerManager.createSmartPsiElementPointer(element, file); - if (startOffset != element.getTextOffset() - elementRange.getStartOffset() || endOffset != elementRange.getLength()) { - TextRange rangeToStore; - if (file != null && InjectedLanguageManager.getInstance(project).isInjectedFragment(file)) { - rangeToStore = elementRange; - } - else { - rangeToStore = TextRange.create(startOffset, endOffset).shiftRight(elementRange.getStartOffset()); - } + if (file != null && + (effectiveStart != element.getTextOffset() - elementRange.getStartOffset() || effectiveEnd != elementRange.getLength())) { + TextRange rangeToStore = InjectedLanguageManager.getInstance(project).isInjectedFragment(file) + ? elementRange + : TextRange.create(effectiveStart, effectiveEnd).shiftRight(elementRange.getStartOffset()); myPsiFileRange = smartPointerManager.createSmartPsiFileRangePointer(file, rangeToStore); } else { From 8deb16a12f775b63df60db5ec560b2f2bd096f2c Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 12 Apr 2017 14:29:58 +0300 Subject: [PATCH 30/86] consistent ARRAY_FACTORY --- .../codeInspection/bytecodeAnalysis/HData.java | 3 +++ .../codeInspection/bytecodeAnalysis/Solver.java | 4 +--- .../src/com/intellij/psi/PsiClassType.java | 4 ++-- .../src/com/intellij/psi/tree/IElementType.java | 13 +++++-------- .../src/com/intellij/lang/impl/PsiBuilderImpl.java | 4 +--- .../com/intellij/lang/surroundWith/Surrounder.java | 4 ++++ .../modifiers/annotation/GrAnnotation.java | 2 ++ .../groovy/lang/psi/api/statements/GrVariable.java | 2 +- .../psi/api/statements/GrVariableDeclaration.java | 2 +- .../lang/psi/api/statements/params/GrParameter.java | 2 +- .../psi/api/statements/typedef/GrReferenceList.java | 3 ++- .../api/statements/typedef/GrTypeDefinition.java | 2 +- .../statements/typedef/members/GrEnumConstant.java | 3 +-- .../api/statements/typedef/members/GrMethod.java | 2 +- .../psi/api/toplevel/imports/GrImportStatement.java | 2 +- .../groovy/lang/psi/api/types/GrTypeParameter.java | 2 ++ .../auxiliary/modifiers/GrModifierListImpl.java | 4 +--- .../psi/impl/types/GrTypeParameterListImpl.java | 4 +--- .../src/com/jetbrains/python/psi/PyClass.java | 3 ++- .../src/com/jetbrains/python/psi/PyFunction.java | 2 +- .../com/intellij/xml/XmlAttributeDescriptor.java | 3 +-- 21 files changed, 35 insertions(+), 35 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/HData.java b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/HData.java index f6f56da72dbc..6e77aa820636 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/HData.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/HData.java @@ -15,6 +15,7 @@ */ package com.intellij.codeInspection.bytecodeAnalysis; +import com.intellij.util.ArrayFactory; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -90,6 +91,8 @@ final class HKey { * Represents a lattice product of a constant {@link #value} and all {@link #ids}. */ final class HComponent { + static final HComponent[] EMPTY_ARRAY = new HComponent[0]; + static final ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new HComponent[count]; @NotNull Value value; @NotNull final HKey[] ids; diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/Solver.java b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/Solver.java index 79d8e339a27a..28b3753c2c42 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/Solver.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/Solver.java @@ -15,7 +15,6 @@ */ package com.intellij.codeInspection.bytecodeAnalysis; -import com.intellij.util.ArrayFactory; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.org.objectweb.asm.tree.analysis.AnalyzerException; @@ -101,7 +100,6 @@ class ResultUtil { class HResultUtil { private static final HKey[] EMPTY_PRODUCT = new HKey[0]; - private static final ArrayFactory HCOMPONENT_ARRAY_FACTORY = count -> new HComponent[count]; private final ELattice lattice; final Value top; @@ -138,7 +136,7 @@ class HResultUtil { } HPending pending1 = (HPending) r1; HPending pending2 = (HPending) r2; - return new HPending(ArrayUtil.mergeArrays(pending1.delta, pending2.delta, HCOMPONENT_ARRAY_FACTORY)); + return new HPending(ArrayUtil.mergeArrays(pending1.delta, pending2.delta, HComponent.ARRAY_FACTORY)); } } diff --git a/java/java-psi-api/src/com/intellij/psi/PsiClassType.java b/java/java-psi-api/src/com/intellij/psi/PsiClassType.java index 40715e11ffb9..ccd277dee6c8 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiClassType.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiClassType.java @@ -31,7 +31,7 @@ import org.jetbrains.annotations.Nullable; */ public abstract class PsiClassType extends PsiType { public static final PsiClassType[] EMPTY_ARRAY = new PsiClassType[0]; - public static final ArrayFactory ARRAY_FACTORY = count -> new PsiClassType[count]; + public static final ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new PsiClassType[count]; protected final LanguageLevel myLanguageLevel; @@ -289,7 +289,7 @@ public abstract class PsiClassType extends PsiType { }; } - public static abstract class Stub extends PsiClassType { + public abstract static class Stub extends PsiClassType { protected Stub(LanguageLevel languageLevel, @NotNull PsiAnnotation[] annotations) { super(languageLevel, annotations); } diff --git a/platform/core-api/src/com/intellij/psi/tree/IElementType.java b/platform/core-api/src/com/intellij/psi/tree/IElementType.java index 2a8f8a6c27b5..f468e70abfb7 100644 --- a/platform/core-api/src/com/intellij/psi/tree/IElementType.java +++ b/platform/core-api/src/com/intellij/psi/tree/IElementType.java @@ -40,24 +40,21 @@ public class IElementType { private static final Logger LOG = Logger.getInstance("#com.intellij.psi.tree.IElementType"); public static final IElementType[] EMPTY_ARRAY = new IElementType[0]; + public static final ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new IElementType[count]; /** * Default enumeration predicate which matches all token types. * * @see #enumerate(Predicate) */ - public static final Predicate TRUE = new Predicate() { - @Override - public boolean matches(@NotNull IElementType type) { - return true; - } - }; + public static final Predicate TRUE = type -> true; public static final short FIRST_TOKEN_INDEX = 1; private static final short MAX_INDEXED_TYPES = 15000; private static short size; // guarded by lock private static volatile IElementType[] ourRegistry = EMPTY_ARRAY; // writes are guarded by lock + @SuppressWarnings("RedundantStringConstructorCall") private static final Object lock = new String("registry lock"); static { @@ -91,7 +88,6 @@ public class IElementType { this(debugName, language, true); } - private static final ArrayFactory FACTORY = count -> new IElementType[count]; /** * Allows to construct element types for some temporary purposes without registering them. @@ -107,7 +103,7 @@ public class IElementType { myIndex = size++; LOG.assertTrue(myIndex < MAX_INDEXED_TYPES, "Too many element types registered. Out of (short) range."); IElementType[] newRegistry = - myIndex >= ourRegistry.length ? ArrayUtil.realloc(ourRegistry, ourRegistry.length * 3 / 2 + 1, FACTORY) : ourRegistry; + myIndex >= ourRegistry.length ? ArrayUtil.realloc(ourRegistry, ourRegistry.length * 3 / 2 + 1, ARRAY_FACTORY) : ourRegistry; newRegistry[myIndex] = this; ourRegistry = newRegistry; } @@ -189,6 +185,7 @@ public class IElementType { * * @see IElementType#enumerate(Predicate) */ + @FunctionalInterface public interface Predicate { boolean matches(@NotNull IElementType type); } diff --git a/platform/core-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java b/platform/core-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java index 65947401313e..7e16ad25ac64 100644 --- a/platform/core-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java +++ b/platform/core-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java @@ -126,8 +126,6 @@ public class PsiBuilderImpl extends UserDataHolderBase implements PsiBuilder { doneMarker.clean(); } }); - private static final ArrayFactory myElementTypeArrayFactory = - count -> count == 0 ? IElementType.EMPTY_ARRAY : new IElementType[count]; public static void registerWhitespaceToken(@NotNull IElementType type) { ourAnyLanguageWhitespaceTokens = TokenSet.orSet(ourAnyLanguageWhitespaceTokens, TokenSet.create(type)); @@ -918,7 +916,7 @@ public class PsiBuilderImpl extends UserDataHolderBase implements PsiBuilder { private void resizeLexemes(final int newSize) { myLexStarts = ArrayUtil.realloc(myLexStarts, newSize+1); - myLexTypes = ArrayUtil.realloc(myLexTypes, newSize, myElementTypeArrayFactory); + myLexTypes = ArrayUtil.realloc(myLexTypes, newSize, IElementType.ARRAY_FACTORY); clearCachedTokenType(); } diff --git a/platform/lang-api/src/com/intellij/lang/surroundWith/Surrounder.java b/platform/lang-api/src/com/intellij/lang/surroundWith/Surrounder.java index 0020ab937d30..0cbd1ae3ad06 100644 --- a/platform/lang-api/src/com/intellij/lang/surroundWith/Surrounder.java +++ b/platform/lang-api/src/com/intellij/lang/surroundWith/Surrounder.java @@ -19,6 +19,7 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; +import com.intellij.util.ArrayFactory; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,6 +31,9 @@ import org.jetbrains.annotations.Nullable; * @see SurroundDescriptor */ public interface Surrounder { + Surrounder[] EMPTY_ARRAY = new Surrounder[0]; + ArrayFactory myArrayFactory = count -> count == 0 ? EMPTY_ARRAY : new Surrounder[count]; + /** * Returns the user-visible name of the Surround With template. * diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/auxiliary/modifiers/annotation/GrAnnotation.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/auxiliary/modifiers/annotation/GrAnnotation.java index 3df4e08ecfaa..c1d037122772 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/auxiliary/modifiers/annotation/GrAnnotation.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/auxiliary/modifiers/annotation/GrAnnotation.java @@ -17,6 +17,7 @@ package org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation; import com.intellij.psi.PsiAnnotation; +import com.intellij.util.ArrayFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrCondition; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; @@ -28,6 +29,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; public interface GrAnnotation extends GrCondition, PsiAnnotation, GrAnnotationMemberValue { GrAnnotation[] EMPTY_ARRAY = new GrAnnotation[0]; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new GrAnnotation[count]; @NotNull GrCodeReferenceElement getClassReference(); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/GrVariable.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/GrVariable.java index ab81545374f6..0f7426c362a2 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/GrVariable.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/GrVariable.java @@ -35,7 +35,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement; */ public interface GrVariable extends PsiVariable, GrNamedElement { GrVariable[] EMPTY_ARRAY = new GrVariable[0]; - ArrayFactory ARRAY_FACTORY = GrVariable[]::new; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new GrVariable[count]; @Override @NotNull diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/GrVariableDeclaration.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/GrVariableDeclaration.java index 02cfee85a596..17b71da7b4d0 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/GrVariableDeclaration.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/GrVariableDeclaration.java @@ -31,7 +31,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement; */ public interface GrVariableDeclaration extends GrStatement, GrMembersDeclaration { GrVariableDeclaration[] EMPTY_ARRAY = new GrVariableDeclaration[0]; - ArrayFactory ARRAY_FACTORY = count -> new GrVariableDeclaration[count]; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new GrVariableDeclaration[count]; @Nullable GrTypeElement getTypeElementGroovy(); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/params/GrParameter.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/params/GrParameter.java index 923f98b0afc4..a1cbdeefb3bd 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/params/GrParameter.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/params/GrParameter.java @@ -33,7 +33,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement; */ public interface GrParameter extends PsiParameter, GrVariable, GrCondition { GrParameter[] EMPTY_ARRAY = new GrParameter[0]; - ArrayFactory ARRAY_FACTORY = count -> new GrParameter[count]; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new GrParameter[count]; @Override @Nullable diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/GrReferenceList.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/GrReferenceList.java index 655ab20b6222..9fd6a2038e16 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/GrReferenceList.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/GrReferenceList.java @@ -27,7 +27,8 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; * @author ilyas */ public interface GrReferenceList extends GroovyPsiElement, PsiReferenceList { - ArrayFactory ARRAY_FACTORY = count -> new GrReferenceList[0]; + GrReferenceList[] EMPTY_ARRAY = new GrReferenceList[0]; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new GrReferenceList[count]; @Nullable PsiElement getKeyword(); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/GrTypeDefinition.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/GrTypeDefinition.java index 116e500472b5..99dbbf28d205 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/GrTypeDefinition.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/GrTypeDefinition.java @@ -37,7 +37,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeParameterList; public interface GrTypeDefinition extends PsiClass, GrDocCommentOwner, GrMember, GrNamedElement, GrTopStatement { GrTypeDefinition[] EMPTY_ARRAY = new GrTypeDefinition[0]; - ArrayFactory ARRAY_FACTORY = GrTypeDefinition[]::new; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new GrTypeDefinition[count]; @NotNull @Override diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrEnumConstant.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrEnumConstant.java index 9f3050ae1b23..212ff1ff22a4 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrEnumConstant.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrEnumConstant.java @@ -19,7 +19,6 @@ package org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members; import com.intellij.psi.PsiEnumConstant; import com.intellij.psi.PsiMethod; import com.intellij.util.ArrayFactory; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField; import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList; @@ -32,7 +31,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrEnumConsta */ public interface GrEnumConstant extends GrField, GrConstructorCall, PsiEnumConstant { GrEnumConstant[] EMPTY_ARRAY = new GrEnumConstant[0]; - ArrayFactory ARRAY_FACTORY = count -> new GrEnumConstant[count]; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new GrEnumConstant[count]; @Override @Nullable diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrMethod.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrMethod.java index 7d1dc44ec7f8..6322deeb25c5 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrMethod.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/statements/typedef/members/GrMethod.java @@ -43,7 +43,7 @@ import java.util.Map; public interface GrMethod extends GrMembersDeclaration, GrNamedElement, PsiMethod, GrMember, GrParametersOwner, GrTopStatement, GrTypeParameterListOwner, GrDocCommentOwner { GrMethod[] EMPTY_ARRAY = new GrMethod[0]; - ArrayFactory ARRAY_FACTORY = count -> new GrMethod[count]; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new GrMethod[count]; @Nullable GrOpenBlock getBlock(); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/toplevel/imports/GrImportStatement.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/toplevel/imports/GrImportStatement.java index b8ff769eb20b..c4ef729064e6 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/toplevel/imports/GrImportStatement.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/toplevel/imports/GrImportStatement.java @@ -31,7 +31,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; public interface GrImportStatement extends GrTopStatement { GrImportStatement[] EMPTY_ARRAY = new GrImportStatement[0]; - ArrayFactory ARRAY_FACTORY = count -> new GrImportStatement[count]; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new GrImportStatement[count]; @Nullable GrCodeReferenceElement getImportReference(); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/types/GrTypeParameter.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/types/GrTypeParameter.java index 3bfc0f24e7f9..13d820e3f66e 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/types/GrTypeParameter.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/types/GrTypeParameter.java @@ -17,6 +17,7 @@ package org.jetbrains.plugins.groovy.lang.psi.api.types; import com.intellij.psi.PsiTypeParameter; +import com.intellij.util.ArrayFactory; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; /** @@ -24,4 +25,5 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefini */ public interface GrTypeParameter extends GrTypeDefinition, PsiTypeParameter { public static final GrTypeParameter[] EMPTY_ARRAY = new GrTypeParameter[0]; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new GrTypeParameter[count]; } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java index 5c386a18fbea..b8d764636ac7 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java @@ -23,7 +23,6 @@ import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.CachedValueProvider.Result; import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.util.PsiModificationTracker; -import com.intellij.util.ArrayFactory; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; import gnu.trove.TObjectIntHashMap; @@ -57,7 +56,6 @@ import java.util.Map; public class GrModifierListImpl extends GrStubElementBase implements GrModifierList, StubBasedPsiElement { public static final TObjectIntHashMap NAME_TO_MODIFIER_FLAG_MAP = new TObjectIntHashMap<>(); public static final Map NAME_TO_MODIFIER_ELEMENT_TYPE = ContainerUtil.newHashMap(); - private static final ArrayFactory ARRAY_FACTORY = GrAnnotation[]::new; private static final TObjectIntHashMap PRIORITY = new TObjectIntHashMap<>(16); @@ -208,7 +206,7 @@ public class GrModifierListImpl extends GrStubElementBase im @NotNull @Override public GrAnnotation[] getRawAnnotations() { - return getStubOrPsiChildren(GroovyElementTypes.ANNOTATION, ARRAY_FACTORY); + return getStubOrPsiChildren(GroovyElementTypes.ANNOTATION, GrAnnotation.ARRAY_FACTORY); } private void setModifierPropertyInternal(String name, boolean doSet) { diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrTypeParameterListImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrTypeParameterListImpl.java index 6934482c2650..e8a86e9f03b2 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrTypeParameterListImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/types/GrTypeParameterListImpl.java @@ -21,7 +21,6 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiTypeParameter; import com.intellij.psi.StubBasedPsiElement; import com.intellij.psi.stubs.EmptyStub; -import com.intellij.util.ArrayFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes; import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes; @@ -37,7 +36,6 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.GrStubElementBase; * @author ilyas */ public class GrTypeParameterListImpl extends GrStubElementBase implements GrTypeParameterList, StubBasedPsiElement { - private static final ArrayFactory ARRAY_FACTORY = count -> new GrTypeParameter[count]; public GrTypeParameterListImpl(EmptyStub stub) { super(stub, GroovyElementTypes.TYPE_PARAMETER_LIST); @@ -54,7 +52,7 @@ public class GrTypeParameterListImpl extends GrStubElementBase implem @NotNull @Override public GrTypeParameter[] getTypeParameters() { - return getStubOrPsiChildren(GroovyElementTypes.TYPE_PARAMETER, ARRAY_FACTORY); + return getStubOrPsiChildren(GroovyElementTypes.TYPE_PARAMETER, GrTypeParameter.ARRAY_FACTORY); } @Override diff --git a/python/psi-api/src/com/jetbrains/python/psi/PyClass.java b/python/psi-api/src/com/jetbrains/python/psi/PyClass.java index f069ae233b43..d279e5f9f999 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/PyClass.java +++ b/python/psi-api/src/com/jetbrains/python/psi/PyClass.java @@ -39,7 +39,8 @@ import java.util.Map; */ public interface PyClass extends PsiNameIdentifierOwner, PyStatement, PyDocStringOwner, StubBasedPsiElement, ScopeOwner, PyDecoratable, PyTypedElement, PyQualifiedNameOwner, PyStatementListContainer, PyWithAncestors { - ArrayFactory ARRAY_FACTORY = count -> new PyClass[count]; + PyClass[] EMPTY_ARRAY = new PyClass[0]; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new PyClass[count]; @Nullable ASTNode getNameNode(); diff --git a/python/psi-api/src/com/jetbrains/python/psi/PyFunction.java b/python/psi-api/src/com/jetbrains/python/psi/PyFunction.java index fa668a445105..2727464338b4 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/PyFunction.java +++ b/python/psi-api/src/com/jetbrains/python/psi/PyFunction.java @@ -39,7 +39,7 @@ public interface PyFunction extends PsiNamedElement, StubBasedPsiElement ARRAY_FACTORY = count -> new PyFunction[count]; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new PyFunction[count]; /** * Returns the AST node for the function name identifier. diff --git a/xml/xml-psi-api/src/com/intellij/xml/XmlAttributeDescriptor.java b/xml/xml-psi-api/src/com/intellij/xml/XmlAttributeDescriptor.java index 6f43cec3f7d0..5e37f41cca5e 100644 --- a/xml/xml-psi-api/src/com/intellij/xml/XmlAttributeDescriptor.java +++ b/xml/xml-psi-api/src/com/intellij/xml/XmlAttributeDescriptor.java @@ -19,7 +19,6 @@ package com.intellij.xml; import com.intellij.psi.meta.PsiMetaData; import com.intellij.psi.xml.XmlElement; import com.intellij.util.ArrayFactory; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** @@ -27,7 +26,7 @@ import org.jetbrains.annotations.Nullable; */ public interface XmlAttributeDescriptor extends PsiMetaData { XmlAttributeDescriptor[] EMPTY = new XmlAttributeDescriptor[0]; - ArrayFactory ARRAY_FACTORY = count -> new XmlAttributeDescriptor[count]; + ArrayFactory ARRAY_FACTORY = count -> count == 0 ? EMPTY : new XmlAttributeDescriptor[count]; boolean isRequired(); boolean isFixed(); From 13dcd3d38bc223078f9ecf766318ba152c35b8d4 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 12 Apr 2017 14:31:56 +0300 Subject: [PATCH 31/86] cleanup --- .../intellij/psi/stubs/SerializationManager.java | 8 +------- .../formatter/PythonFormattingModelBuilder.java | 14 ++++++-------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/platform/indexing-api/src/com/intellij/psi/stubs/SerializationManager.java b/platform/indexing-api/src/com/intellij/psi/stubs/SerializationManager.java index b72f8bb57a5c..c6ccb97f3d24 100644 --- a/platform/indexing-api/src/com/intellij/psi/stubs/SerializationManager.java +++ b/platform/indexing-api/src/com/intellij/psi/stubs/SerializationManager.java @@ -22,7 +22,6 @@ package com.intellij.psi.stubs; import com.intellij.openapi.application.ApplicationManager; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.StubFileElementType; -import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; @@ -45,12 +44,7 @@ public abstract class SerializationManager { synchronized (this) { if (mySerializersLoaded) return; IStubElementType.loadRegisteredStubElementTypes(); - final IElementType[] stubElementTypes = IElementType.enumerate(new IElementType.Predicate() { - @Override - public boolean matches(@NotNull final IElementType type) { - return type instanceof StubSerializer; - } - }); + final IElementType[] stubElementTypes = IElementType.enumerate(type -> type instanceof StubSerializer); for (IElementType type : stubElementTypes) { if (type instanceof StubFileElementType && StubFileElementType.DEFAULT_EXTERNAL_ID.equals(((StubFileElementType)type).getExternalId())) { diff --git a/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java b/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java index 71100d5f408b..970bb3380f45 100644 --- a/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java +++ b/python/src/com/jetbrains/python/formatter/PythonFormattingModelBuilder.java @@ -38,7 +38,7 @@ import static com.jetbrains.python.PyTokenTypes.*; @SuppressWarnings("UseOfSystemOutOrSystemErr") public class PythonFormattingModelBuilder implements FormattingModelBuilderEx, CustomFormattingModelBuilder { private static final boolean DUMP_FORMATTING_AST = false; - public static final TokenSet STATEMENT_OR_DECLARATION = PythonDialectsTokenSetProvider.INSTANCE.getStatementTokens(); + static final TokenSet STATEMENT_OR_DECLARATION = PythonDialectsTokenSetProvider.INSTANCE.getStatementTokens(); @NotNull @Override @@ -66,6 +66,7 @@ public class PythonFormattingModelBuilder implements FormattingModelBuilderEx, C return null; } + @Override @NotNull public FormattingModel createModel(final PsiElement element, final CodeStyleSettings settings) { return createModel(element, settings, FormattingMode.REFORMAT); @@ -163,14 +164,10 @@ public class PythonFormattingModelBuilder implements FormattingModelBuilderEx, C private static TokenSet allButLambda() { final PythonLanguage pythonLanguage = PythonLanguage.getInstance(); - return TokenSet.create(IElementType.enumerate(new IElementType.Predicate() { - @Override - public boolean matches(@NotNull IElementType type) { - return type != LAMBDA_KEYWORD && type.getLanguage().isKindOf(pythonLanguage); - } - })); + return TokenSet.create(IElementType.enumerate(type -> type != LAMBDA_KEYWORD && type.getLanguage().isKindOf(pythonLanguage))); } + @Override public TextRange getRangeAffectingIndent(PsiFile file, int offset, ASTNode elementAtOffset) { return null; } @@ -180,12 +177,13 @@ public class PythonFormattingModelBuilder implements FormattingModelBuilderEx, C for (int i = 0; i < indent; i++) { System.out.print(" "); } - System.out.println(node.toString() + " " + node.getTextRange().toString()); + System.out.println(node + " " + node.getTextRange()); printAST(node.getFirstChildNode(), indent + 2); node = node.getTreeNext(); } } + @Override public boolean isEngagedToFormat(PsiElement context) { PsiFile file = context.getContainingFile(); return file != null && file.getLanguage() == PythonLanguage.getInstance(); From df8c0ba192003fa9f9eb220be5085f3e61c75c9e Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 12 Apr 2017 19:32:31 +0300 Subject: [PATCH 32/86] unmask problems with Component.getPeer() gone in JDK9 --- .../src/com/intellij/openapi/wm/impl/WindowManagerImpl.java | 2 +- .../src/com/intellij/openapi/wm/impl/X11UiUtil.java | 4 ++-- platform/platform-impl/src/com/intellij/ui/FrameState.java | 1 - platform/util/src/com/intellij/ui/mac/foundation/MacUtil.java | 2 -- 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java index d065dee27115..5960f8cd9e44 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java @@ -759,7 +759,7 @@ public final class WindowManagerImpl extends WindowManagerEx implements NamedCom private int updateFrameBounds(IdeFrameImpl frame) { int extendedState = frame.getExtendedState(); if (SystemInfo.isMacOSLion) { - @SuppressWarnings("deprecation") ComponentPeer peer = frame.getPeer(); + ComponentPeer peer = frame.getPeer(); if (peer instanceof FramePeer) { // frame.state is not updated by jdk so get it directly from peer extendedState = ((FramePeer)peer).getState(); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/X11UiUtil.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/X11UiUtil.java index 9d3867022d19..f728b6a82e9e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/X11UiUtil.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/X11UiUtil.java @@ -337,7 +337,7 @@ public class X11UiUtil { private static boolean hasWindowProperty(JFrame frame, long name, long expected) { if (X11 == null) return false; try { - @SuppressWarnings("deprecation") ComponentPeer peer = frame.getPeer(); + ComponentPeer peer = frame.getPeer(); long window = (Long)X11.getWindow.invoke(peer); long[] values = X11.getLongArrayProperty(window, name, XA_ATOM); if (values != null) { @@ -357,7 +357,7 @@ public class X11UiUtil { if (X11 == null) return; try { - @SuppressWarnings("deprecation") ComponentPeer peer = frame.getPeer(); + ComponentPeer peer = frame.getPeer(); long window = (Long)X11.getWindow.invoke(peer); long screen = (Long)X11.getScreenNumber.invoke(peer); long rootWindow = X11.getRootWindow(screen); diff --git a/platform/platform-impl/src/com/intellij/ui/FrameState.java b/platform/platform-impl/src/com/intellij/ui/FrameState.java index 986d23b4d497..fcdf076419cd 100644 --- a/platform/platform-impl/src/com/intellij/ui/FrameState.java +++ b/platform/platform-impl/src/com/intellij/ui/FrameState.java @@ -60,7 +60,6 @@ public class FrameState { state = ((Frame)component).getExtendedState(); if (SystemInfo.isMacOSLion) { // workaround: frame.state is not updated by jdk so get it directly from peer - @SuppressWarnings("deprecation") ComponentPeer peer = component.getPeer(); if (peer instanceof FramePeer) { state = ((FramePeer)peer).getState(); diff --git a/platform/util/src/com/intellij/ui/mac/foundation/MacUtil.java b/platform/util/src/com/intellij/ui/mac/foundation/MacUtil.java index d467a5417f34..e025483503da 100644 --- a/platform/util/src/com/intellij/ui/mac/foundation/MacUtil.java +++ b/platform/util/src/com/intellij/ui/mac/foundation/MacUtil.java @@ -150,12 +150,10 @@ public class MacUtil { Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK); } - @SuppressWarnings("deprecation") public static ID findWindowFromJavaWindow(final Window w) { ID windowId = null; if (SystemInfo.isJavaVersionAtLeast("1.7") && Registry.is("skip.untitled.windows.for.mac.messages")) { try { - //noinspection deprecation Class cWindowPeerClass = w.getPeer().getClass(); Method getPlatformWindowMethod = cWindowPeerClass.getDeclaredMethod("getPlatformWindow"); Object cPlatformWindow = getPlatformWindowMethod.invoke(w.getPeer()); From 2b45d281cafea319fdbd7a44459ba1fc19ec3fb5 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 13 Apr 2017 15:18:32 +0300 Subject: [PATCH 33/86] Component.getPeer() is gone in JDK9 --- .../platform-impl/src/com/intellij/ui/Win7TaskBar.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ui/Win7TaskBar.java b/platform/platform-impl/src/com/intellij/ui/Win7TaskBar.java index 04446cae547f..4aa7d317550a 100644 --- a/platform/platform-impl/src/com/intellij/ui/Win7TaskBar.java +++ b/platform/platform-impl/src/com/intellij/ui/Win7TaskBar.java @@ -27,6 +27,8 @@ import com.sun.jna.platform.win32.*; import com.sun.jna.ptr.PointerByReference; import com.sun.jna.win32.StdCallLibrary; import com.sun.jna.win32.W32APIOptions; +import org.jetbrains.annotations.NotNull; +import sun.awt.AWTAccessor; import java.awt.*; import java.awt.peer.ComponentPeer; @@ -177,9 +179,10 @@ class Win7TaskBar { User32Ex.INSTANCE.FlashWindow(getHandle(frame), true); } - private static WinDef.HWND getHandle(IdeFrame frame) { + private static WinDef.HWND getHandle(@NotNull IdeFrame frame) { + Component component = (Component)frame; try { - ComponentPeer peer = ((Component)frame).getPeer(); + ComponentPeer peer = AWTAccessor.getComponentAccessor().getPeer(component); Method getHWnd = peer.getClass().getMethod("getHWnd"); return new WinDef.HWND(new Pointer((Long)getHWnd.invoke(peer))); } From a94f392622144a237b67cd55ee5ab8345ae0901c Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 13 Apr 2017 15:20:10 +0300 Subject: [PATCH 34/86] encapsulate antialiasing hacks into GraphicsUtil for jdk9 --- .../intellij/util/CachedValueLeakChecker.java | 3 +-- .../com/intellij/ide/ui/AntialiasingType.java | 7 +++--- .../ExpandedItemListCellRendererWrapper.java | 4 ++-- .../JBComboBoxTableCellEditorComponent.java | 10 ++++---- .../ide/ui/AppearanceConfigurable.java | 16 ++++++------- .../ui/impl/DialogWrapperPeerImpl.java | 4 ++-- .../openapi/wm/impl/content/BaseLabel.java | 4 ++-- .../com/intellij/openapi/util/SystemInfo.java | 1 + .../com/intellij/util/ui/GraphicsUtil.java | 23 +++++++++++++++++++ 9 files changed, 47 insertions(+), 25 deletions(-) diff --git a/platform/core-impl/src/com/intellij/util/CachedValueLeakChecker.java b/platform/core-impl/src/com/intellij/util/CachedValueLeakChecker.java index 0e8ddb7c5d44..531a2f3bea72 100644 --- a/platform/core-impl/src/com/intellij/util/CachedValueLeakChecker.java +++ b/platform/core-impl/src/com/intellij/util/CachedValueLeakChecker.java @@ -43,7 +43,6 @@ class CachedValueLeakChecker { private static final Logger LOG = Logger.getInstance("#com.intellij.util.CachedValueChecker"); private static final boolean DO_CHECKS = ApplicationManager.getApplication().isUnitTestMode(); private static final Set ourCheckedKeys = ContainerUtil.newConcurrentSet(); - private static final boolean JAVA9 = SystemInfo.isJavaVersionAtLeast("9"); static void checkProvider(@NotNull final CachedValueProvider provider, @NotNull final Key key, @@ -51,7 +50,7 @@ class CachedValueLeakChecker { if (!DO_CHECKS || ApplicationInfoImpl.isInStressTest()) return; if (!ourCheckedKeys.add(key.toString())) return; // store strings because keys are created afresh in each (test) project - if (!JAVA9) { + if (!SystemInfo.IS_AT_LEAST_JAVA9) { findReferencedPsi(provider, userDataHolder, 5); } } diff --git a/platform/editor-ui-api/src/com/intellij/ide/ui/AntialiasingType.java b/platform/editor-ui-api/src/com/intellij/ide/ui/AntialiasingType.java index f14b7e408a53..3fda7fed307c 100644 --- a/platform/editor-ui-api/src/com/intellij/ide/ui/AntialiasingType.java +++ b/platform/editor-ui-api/src/com/intellij/ide/ui/AntialiasingType.java @@ -16,8 +16,7 @@ package com.intellij.ide.ui; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.util.ui.UIUtil; -import sun.swing.SwingUtilities2; +import com.intellij.util.ui.GraphicsUtil; import java.awt.*; @@ -54,8 +53,8 @@ public enum AntialiasingType { isEnabled = enabled; } - public SwingUtilities2.AATextInfo getTextInfo() { - return !isEnabled ? null : new SwingUtilities2.AATextInfo(myHint, UIUtil.getLcdContrastValue()); + public Object getTextInfo() { + return isEnabled ? GraphicsUtil.createAATextInfo(myHint) : null; } @Override diff --git a/platform/platform-api/src/com/intellij/ui/ExpandedItemListCellRendererWrapper.java b/platform/platform-api/src/com/intellij/ui/ExpandedItemListCellRendererWrapper.java index 9833e17006ec..f9661958a26e 100644 --- a/platform/platform-api/src/com/intellij/ui/ExpandedItemListCellRendererWrapper.java +++ b/platform/platform-api/src/com/intellij/ui/ExpandedItemListCellRendererWrapper.java @@ -16,9 +16,9 @@ package com.intellij.ui; import com.intellij.ide.ui.AntialiasingType; +import com.intellij.util.ui.GraphicsUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; -import sun.swing.SwingUtilities2; import javax.swing.*; import java.awt.*; @@ -34,7 +34,7 @@ public class ExpandedItemListCellRendererWrapper implements ListCellRenderer { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - list.putClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, AntialiasingType.getAAHintForSwingComponent()); + GraphicsUtil.setAntialiasingType(list, AntialiasingType.getAAHintForSwingComponent()); Component result = myWrappee.getListCellRendererComponent(list, UIUtil.htmlInjectionGuard(value), index, isSelected, cellHasFocus); if (!myHandler.getExpandedItems().contains(index)) return result; Rectangle bounds = result.getBounds(); diff --git a/platform/platform-api/src/com/intellij/ui/components/editors/JBComboBoxTableCellEditorComponent.java b/platform/platform-api/src/com/intellij/ui/components/editors/JBComboBoxTableCellEditorComponent.java index b62b821ec5e3..04e470ebf2f0 100644 --- a/platform/platform-api/src/com/intellij/ui/components/editors/JBComboBoxTableCellEditorComponent.java +++ b/platform/platform-api/src/com/intellij/ui/components/editors/JBComboBoxTableCellEditorComponent.java @@ -20,7 +20,6 @@ import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.openapi.ui.popup.JBPopupAdapter; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.LightweightWindowEvent; -import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.TableUtil; import com.intellij.ui.awt.RelativePoint; @@ -32,9 +31,12 @@ import com.intellij.util.Function; import com.intellij.util.PlatformIcons; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.EmptyIcon; -import sun.swing.SwingUtilities2; +import com.intellij.util.ui.GraphicsUtil; -import javax.accessibility.*; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleState; +import javax.accessibility.AccessibleStateSet; import javax.swing.*; import javax.swing.event.TableModelEvent; import java.awt.*; @@ -83,7 +85,7 @@ public class JBComboBoxTableCellEditorComponent extends JBLabel { } else { label.setIcon(getEmptyIcon()); } - label.putClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, AntialiasingType.getAAHintForSwingComponent()); + GraphicsUtil.setAntialiasingType(label, AntialiasingType.getAAHintForSwingComponent()); return label; } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java index 85a0d1157d3b..e8184f6beb2e 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java @@ -34,9 +34,9 @@ import com.intellij.openapi.wm.ex.WindowManagerEx; import com.intellij.ui.FontComboBox; import com.intellij.ui.ListCellRendererWrapper; import com.intellij.ui.components.JBCheckBox; +import com.intellij.util.ui.GraphicsUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; -import sun.swing.SwingUtilities2; import javax.swing.*; import javax.swing.event.ChangeEvent; @@ -174,7 +174,7 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab settings.setIdeAAType((AntialiasingType)myComponent.myAntialiasingInIDE.getSelectedItem()); for (Window w : Window.getWindows()) { for (JComponent c : UIUtil.uiTraverser(w).filter(JComponent.class)) { - c.putClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, AntialiasingType.getAAHintForSwingComponent()); + GraphicsUtil.setAntialiasingType(c, AntialiasingType.getAAHintForSwingComponent()); } } shouldUpdateUI = true; @@ -522,10 +522,8 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab } private static class AAListCellRenderer extends ListCellRendererWrapper { - private static final SwingUtilities2.AATextInfo SUBPIXEL_HINT = new SwingUtilities2.AATextInfo( - RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB, UIUtil.getLcdContrastValue()); - private static final SwingUtilities2.AATextInfo GREYSCALE_HINT = new SwingUtilities2.AATextInfo( - RenderingHints.VALUE_TEXT_ANTIALIAS_ON, UIUtil.getLcdContrastValue()); + private static final Object SUBPIXEL_HINT = GraphicsUtil.createAATextInfo(RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); + private static final Object GREYSCALE_HINT = GraphicsUtil.createAATextInfo(RenderingHints.VALUE_TEXT_ANTIALIAS_ON); private final boolean useEditorAASettings; @@ -537,13 +535,13 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab @Override public void customize(JList list, AntialiasingType value, int index, boolean selected, boolean hasFocus) { if (value == AntialiasingType.SUBPIXEL) { - setClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, SUBPIXEL_HINT); + GraphicsUtil.generatePropertiesForAntialiasing(SUBPIXEL_HINT, this::setClientProperty); } else if (value == AntialiasingType.GREYSCALE) { - setClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, GREYSCALE_HINT); + GraphicsUtil.generatePropertiesForAntialiasing(GREYSCALE_HINT, this::setClientProperty); } else if (value == AntialiasingType.OFF) { - setClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, null); + GraphicsUtil.generatePropertiesForAntialiasing(null, this::setClientProperty); } if (useEditorAASettings) { diff --git a/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java b/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java index 2a4ba9550864..fd78f15ab9b8 100644 --- a/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java @@ -53,13 +53,13 @@ import com.intellij.ui.mac.foundation.ID; import com.intellij.ui.mac.foundation.MacUtil; import com.intellij.util.IJSwingUtilities; import com.intellij.util.ReflectionUtil; +import com.intellij.util.ui.GraphicsUtil; import com.intellij.util.ui.JBInsets; import com.intellij.util.ui.OwnerOptional; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import sun.swing.SwingUtilities2; import javax.swing.*; import java.awt.*; @@ -906,7 +906,7 @@ public class DialogWrapperPeerImpl extends DialogWrapperPeer implements FocusTra myOpened = true; final DialogWrapper activeWrapper = getActiveWrapper(); for (JComponent c : UIUtil.uiTraverser(e.getWindow()).filter(JComponent.class)) { - c.putClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, AntialiasingType.getAAHintForSwingComponent()); + GraphicsUtil.setAntialiasingType(c, AntialiasingType.getAAHintForSwingComponent()); } if (activeWrapper == null) { myFocusedCallback.setRejected(); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/content/BaseLabel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/content/BaseLabel.java index d5e16d371260..b7ce4d3448fa 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/content/BaseLabel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/content/BaseLabel.java @@ -21,9 +21,9 @@ import com.intellij.ui.EngravedTextGraphics; import com.intellij.ui.Gray; import com.intellij.ui.JBColor; import com.intellij.ui.content.Content; +import com.intellij.util.ui.GraphicsUtil; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.WatermarkIcon; -import sun.swing.SwingUtilities2; import javax.swing.*; import java.awt.*; @@ -75,7 +75,7 @@ public class BaseLabel extends JLabel { protected void paintComponent(final Graphics g) { final Color fore = myUi.myWindow.isActive() ? myActiveFg : myPassiveFg; setForeground(fore); - putClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, AntialiasingType.getAAHintForSwingComponent()); + GraphicsUtil.setAntialiasingType(this, AntialiasingType.getAAHintForSwingComponent()); super.paintComponent(_getGraphics((Graphics2D)g)); } diff --git a/platform/util/src/com/intellij/openapi/util/SystemInfo.java b/platform/util/src/com/intellij/openapi/util/SystemInfo.java index 1d1d0c0f5aa4..a89824877cbd 100644 --- a/platform/util/src/com/intellij/openapi/util/SystemInfo.java +++ b/platform/util/src/com/intellij/openapi/util/SystemInfo.java @@ -47,6 +47,7 @@ public class SystemInfo extends SystemInfoRt { public static final boolean isSunJvm = isSunJvm(); public static final boolean isIbmJvm = isIbmJvm(); public static final boolean isJetbrainsJvm = isJetbrainsJvm(); + public static final boolean IS_AT_LEAST_JAVA9 = isJavaVersionAtLeast("9"); public static boolean isOsVersionAtLeast(@NotNull String version) { return StringUtil.compareVersionNumbers(OS_VERSION, version) >= 0; diff --git a/platform/util/src/com/intellij/util/ui/GraphicsUtil.java b/platform/util/src/com/intellij/util/ui/GraphicsUtil.java index ac40641aeaa9..f1c10e3e8dd9 100644 --- a/platform/util/src/com/intellij/util/ui/GraphicsUtil.java +++ b/platform/util/src/com/intellij/util/ui/GraphicsUtil.java @@ -16,8 +16,11 @@ package com.intellij.util.ui; import com.intellij.openapi.ui.GraphicsConfig; +import com.intellij.openapi.util.SystemInfo; import com.intellij.util.MethodInvocator; +import com.intellij.util.PairConsumer; import org.jetbrains.annotations.NotNull; +import sun.swing.SwingUtilities2; import javax.swing.*; import java.awt.*; @@ -123,4 +126,24 @@ public class GraphicsUtil { ? (Graphics)ourSafelyGetGraphicsMethod.invoke(null, c) : c.getGraphics(); } + + public static Object getAntialiasingType(@NotNull JComponent list) { + return SystemInfo.IS_AT_LEAST_JAVA9 ? null : list.getClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY); + } + + public static void setAntialiasingType(@NotNull JComponent list, Object type) { + if (!SystemInfo.IS_AT_LEAST_JAVA9) { + list.putClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, type); + } + } + + public static void generatePropertiesForAntialiasing(Object type, @NotNull PairConsumer propertySetter) { + if (!SystemInfo.IS_AT_LEAST_JAVA9) { + propertySetter.consume(SwingUtilities2.AA_TEXT_PROPERTY_KEY, type); + } + } + + public static Object createAATextInfo(@NotNull Object hint) { + return SystemInfo.IS_AT_LEAST_JAVA9 ? null : new SwingUtilities2.AATextInfo(hint, UIUtil.getLcdContrastValue()); + } } From 16242dcbd3b2c940b27332d2fe410f819baf07db Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 13 Apr 2017 15:20:38 +0300 Subject: [PATCH 35/86] make throwable interner work under jdk 9 --- .../util/objectTree/ThrowableInterner.java | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/platform/util/src/com/intellij/openapi/util/objectTree/ThrowableInterner.java b/platform/util/src/com/intellij/openapi/util/objectTree/ThrowableInterner.java index c97755d9542c..5eff1632efa6 100644 --- a/platform/util/src/com/intellij/openapi/util/objectTree/ThrowableInterner.java +++ b/platform/util/src/com/intellij/openapi/util/objectTree/ThrowableInterner.java @@ -17,6 +17,7 @@ package com.intellij.openapi.util.objectTree; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.SystemInfo; +import com.intellij.util.ReflectionUtil; import com.intellij.util.concurrency.AtomicFieldUpdater; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.FilteringIterator; @@ -71,26 +72,45 @@ public class ThrowableInterner { } }); - private static final long BACKTRACE_FIELD_OFFSET; + private static final Field BACKTRACE_FIELD; + // can be UNKNOWN if the memory layout or JDK is unknown or ancient so we skip interning altogether, (e.g. jdk <=6) + // or LUCKILY_NOT_NEEDED when the JDK supports reflection to the "backtrace" field (e.g. jdk 9) + // or the real offset of the "backtrace" field into the Throwable class (for jdk 7 and 8) + private static final int BACKTRACE_FIELD_OFFSET; + private static final int UNKNOWN = -1; + private static final int LUCKILY_NOT_NEEDED = -2; + static { - if ((SystemInfo.isOracleJvm || SystemInfo.isJetbrainsJvm) && SystemInfo.isJavaVersionAtLeast("1.7")) { + BACKTRACE_FIELD = ReflectionUtil.getDeclaredField(Throwable.class, "backtrace"); + if (BACKTRACE_FIELD != null) { + BACKTRACE_FIELD_OFFSET = LUCKILY_NOT_NEEDED; + } + else if ((SystemInfo.isOracleJvm || SystemInfo.isJetbrainsJvm) && SystemInfo.isJavaVersionAtLeast("1.7")) { Field firstField = Throwable.class.getDeclaredFields()[1]; long firstFieldOffset = AtomicFieldUpdater.getUnsafe().objectFieldOffset(firstField); - BACKTRACE_FIELD_OFFSET = firstFieldOffset == 12 ? 8 : firstFieldOffset == 16 ? 12 : firstFieldOffset == 24 ? 16 : -1; - if (BACKTRACE_FIELD_OFFSET == -1 + BACKTRACE_FIELD_OFFSET = firstFieldOffset == 12 ? 8 : firstFieldOffset == 16 ? 12 : firstFieldOffset == 24 ? 16 : UNKNOWN; + if (BACKTRACE_FIELD_OFFSET == UNKNOWN || !firstField.getName().equals("detailMessage") - || !(AtomicFieldUpdater.getUnsafe().getObject(new Throwable(), BACKTRACE_FIELD_OFFSET) instanceof Object[])) { + || !(AtomicFieldUpdater.getUnsafe().getObject(new Throwable(), (long)BACKTRACE_FIELD_OFFSET) instanceof Object[])) { throw new RuntimeException("Unknown layout: "+firstField+";"+firstFieldOffset+". Please specify -Didea.disposer.debug=off in idea.properties to suppress"); } } else { - BACKTRACE_FIELD_OFFSET = -1; + BACKTRACE_FIELD_OFFSET = UNKNOWN; } } private static Object[] getBacktrace(@NotNull Throwable throwable) { // the JVM blocks access to Throwable.backtrace via reflection - Object backtrace = BACKTRACE_FIELD_OFFSET == -1 ? null : AtomicFieldUpdater.getUnsafe().getObject(throwable, BACKTRACE_FIELD_OFFSET); + Object backtrace; + try { + backtrace = BACKTRACE_FIELD != null ? BACKTRACE_FIELD.get(throwable) : + BACKTRACE_FIELD_OFFSET == UNKNOWN ? null : + AtomicFieldUpdater.getUnsafe().getObject(throwable, (long)BACKTRACE_FIELD_OFFSET); + } + catch (IllegalAccessException e) { + return null; + } // obsolete jdk return backtrace instanceof Object[] && ((Object[])backtrace).length == 5 ? (Object[])backtrace : null; } From a36449efe38bebac7adc0f7b367f5b6436e96bbb Mon Sep 17 00:00:00 2001 From: Elizaveta Shashkova Date: Thu, 13 Apr 2017 15:44:27 +0300 Subject: [PATCH 36/86] Tests: try to use short timeout for all Django debugger tests --- .../testSrc/com/jetbrains/env/PyExecutionFixtureTestTask.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python/testSrc/com/jetbrains/env/PyExecutionFixtureTestTask.java b/python/testSrc/com/jetbrains/env/PyExecutionFixtureTestTask.java index c98ebe9dcd73..170786cabecc 100644 --- a/python/testSrc/com/jetbrains/env/PyExecutionFixtureTestTask.java +++ b/python/testSrc/com/jetbrains/env/PyExecutionFixtureTestTask.java @@ -96,6 +96,10 @@ public abstract class PyExecutionFixtureTestTask extends PyTestTask { myTimeout = LONG_TIMEOUT; } + public void useShortTimeout() { + myTimeout = 5000; + } + /** * Returns virt file by path. May be relative or not. * From b6b398f06d5fa30b5c780ca38c8fe1ec92430f68 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 13 Apr 2017 12:19:00 +0300 Subject: [PATCH 37/86] run icons.gant --- java/openapi/src/icons/OpenapiIcons.java | 17 +++++++++++++++++ .../library/RepositoryLibraryDescription.java | 4 ++-- .../gen/icons/PythonEducationalIcons.java | 2 ++ .../python/edu/CustomizeEduStepPanel.java | 6 +++--- 4 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 java/openapi/src/icons/OpenapiIcons.java diff --git a/java/openapi/src/icons/OpenapiIcons.java b/java/openapi/src/icons/OpenapiIcons.java new file mode 100644 index 000000000000..eb9eb75de85a --- /dev/null +++ b/java/openapi/src/icons/OpenapiIcons.java @@ -0,0 +1,17 @@ +package icons; + +import com.intellij.openapi.util.IconLoader; + +import javax.swing.*; + +/** + * NOTE THIS FILE IS AUTO-GENERATED + * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead + */ +public class OpenapiIcons { + private static Icon load(String path) { + return IconLoader.getIcon(path, OpenapiIcons.class); + } + + public static final Icon RepositoryLibraryLogo = load("/icons/repositoryLibraryLogo.png"); // 16x16 +} diff --git a/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryDescription.java b/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryDescription.java index 2153db6276c4..f5a0aef9f95c 100644 --- a/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryDescription.java +++ b/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryDescription.java @@ -18,8 +18,8 @@ package org.jetbrains.idea.maven.utils.library; import com.intellij.jarRepository.RemoteRepositoryDescription; import com.intellij.jarRepository.RepositoryLibraryDefinition; import com.intellij.openapi.roots.DependencyScope; -import com.intellij.openapi.util.IconLoader; import com.intellij.util.containers.HashMap; +import icons.OpenapiIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.library.JpsMavenRepositoryLibraryDescriptor; @@ -43,7 +43,7 @@ public class RepositoryLibraryDescription { @NotNull public static final String SnapshotVersionSuffix = "-SNAPSHOT"; - public static final Icon DEFAULT_ICON = IconLoader.getIcon("/icons/repositoryLibraryLogo.png"); + public static final Icon DEFAULT_ICON = OpenapiIcons.RepositoryLibraryLogo; private static volatile Map ourStaticallyDefinedLibraries; diff --git a/python/educational-python/gen/icons/PythonEducationalIcons.java b/python/educational-python/gen/icons/PythonEducationalIcons.java index c8828ed8ae68..e2c275ad80d5 100644 --- a/python/educational-python/gen/icons/PythonEducationalIcons.java +++ b/python/educational-python/gen/icons/PythonEducationalIcons.java @@ -14,4 +14,6 @@ public class PythonEducationalIcons { } public static final Icon Field = load("/icons/com/jetbrains/edu/Field.png"); // 16x16 + public static final Icon Student = load("/icons/com/jetbrains/edu/student.png"); // 180x180 + public static final Icon Teacher = load("/icons/com/jetbrains/edu/teacher.png"); // 180x180 } diff --git a/python/educational-python/src/com/jetbrains/python/edu/CustomizeEduStepPanel.java b/python/educational-python/src/com/jetbrains/python/edu/CustomizeEduStepPanel.java index 603deb9c8605..82c80d9ad12b 100644 --- a/python/educational-python/src/com/jetbrains/python/edu/CustomizeEduStepPanel.java +++ b/python/educational-python/src/com/jetbrains/python/edu/CustomizeEduStepPanel.java @@ -2,8 +2,8 @@ package com.jetbrains.python.edu; import com.intellij.ide.customize.AbstractCustomizeWizardStep; import com.intellij.openapi.ui.VerticalFlowLayout; -import com.intellij.openapi.util.IconLoader; import com.jetbrains.edu.learning.StudySettings; +import icons.PythonEducationalIcons; import javax.swing.*; import java.awt.event.ActionEvent; @@ -13,7 +13,7 @@ public class CustomizeEduStepPanel extends AbstractCustomizeWizardStep { public CustomizeEduStepPanel() { final JPanel studentPanel = new JPanel(new VerticalFlowLayout()); - final JButton student = new JButton(IconLoader.findIcon("/icons/com/jetbrains/edu/student.png")); + final JButton student = new JButton(PythonEducationalIcons.Student); student.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -24,7 +24,7 @@ public class CustomizeEduStepPanel extends AbstractCustomizeWizardStep { studentPanel.add(new JLabel("Student", SwingConstants.CENTER)); add(studentPanel); - final JButton teacher = new JButton(IconLoader.findIcon("/icons/com/jetbrains/edu/teacher.png")); + final JButton teacher = new JButton(PythonEducationalIcons.Teacher); final JPanel teacherPanel = new JPanel(new VerticalFlowLayout()); teacherPanel.add(teacher); teacherPanel.add(new JLabel("Teacher", SwingConstants.CENTER)); From 4f2ca0bf69e64d4b63db825e1da25d01255deaa0 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 13 Apr 2017 15:36:26 +0300 Subject: [PATCH 38/86] diff: update icons --- platform/icons/src/actions/diff.png | Bin 368 -> 142 bytes platform/icons/src/actions/diff@2x.png | Bin 1090 -> 207 bytes platform/icons/src/actions/diff@2x_dark.png | Bin 914 -> 0 bytes platform/icons/src/actions/diffWithCurrent.png | Bin 287 -> 137 bytes .../icons/src/actions/diffWithCurrent@2x.png | Bin 556 -> 201 bytes .../src/actions/diffWithCurrent@2x_dark.png | Bin 709 -> 0 bytes .../icons/src/actions/diffWithCurrent_dark.png | Bin 296 -> 0 bytes platform/icons/src/actions/diff_dark.png | Bin 406 -> 0 bytes platform/icons/src/diff/Diff.png | Bin 353 -> 142 bytes platform/icons/src/diff/Diff@2x.png | Bin 782 -> 207 bytes platform/icons/src/diff/Diff@2x_dark.png | Bin 727 -> 0 bytes platform/icons/src/diff/Diff_dark.png | Bin 352 -> 0 bytes platform/icons/src/fileTypes/diagram.png | Bin 129 -> 131 bytes platform/icons/src/fileTypes/diagram@2x.png | Bin 173 -> 188 bytes 14 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 platform/icons/src/actions/diff@2x_dark.png delete mode 100644 platform/icons/src/actions/diffWithCurrent@2x_dark.png delete mode 100644 platform/icons/src/actions/diffWithCurrent_dark.png delete mode 100644 platform/icons/src/actions/diff_dark.png delete mode 100644 platform/icons/src/diff/Diff@2x_dark.png delete mode 100644 platform/icons/src/diff/Diff_dark.png diff --git a/platform/icons/src/actions/diff.png b/platform/icons/src/actions/diff.png index 5addd2e2ed6fe08462bd4c043091f05549d687e0..718a45c6895e8b125c6ad47f9bf4778b791940a5 100644 GIT binary patch delta 114 zcmeys)W`A_!8@phF*G-(#m0 zYDgwXMg-EifI?R?;ih~Mnu{!l8a?olCC@{ zu|h27OqaX=6+A05r6jTvXD{0n#F>X>NxZ3GB#un{d*i*dz<+TZ-L~zb3IkqPDh1>x zcMH6Cfiv6-&TqZq+2gM+3rygTG*+!`+hEO-ha6u3qqzD7jGf(a#-t4(|NVi7%oDP1rf`hAgXjHxx79IB9H~d zG~@DvfS0M<`Ad8d8*HG%o)+NVl)wq3zt oXOb+Jucisi)th-Trv5H{#(nx|a*fKCMXJ$mLLZ-A( zKx&*A)7B;}m!=Iq8EvWo9Y`4%DsANwsny~Qss^-N6dklm<)Q-u7HJ<^jrR81ho(*X zV4E~GIj(k(q>~CVlvlm36+g_-CKZ5QMJl;=e>ZGJgRI3k&CCDN#?{CjKIH z8|d94_7VvX+m-R*g_r}pMEs%np>y#&ku%r6tj7MB0^rm9DHs1pyhbcmcu&e_KS>ue z%Tznp9T}M&AQTEMQV>^ERMadN{!m(4x&%F|v*Gx}qE|YF$@MkEsPz_RRLx$FsB z0JvH~>zL+mpG>p`cuLOvZS=^A-*{>YBw|JtAe(TPl$5kbamhY|i<$gmW7!356K?7q zo^S5Wx3`?|cTBl4qYAK@@CAcGZ*g()#6uPh5s$&eOn?5->%d37$BE%NfB0MPjQBqv z^=@dt>BEdFz*b3KAP~r-p*xC2xZzLBSHOPm;Za5&^%CM|#oTu7pNwBX9&|;xMF3TnUA?_1? z+a+Z8#ebFvW4nZ#rOTw~_*;pDVVFsM}lZrczBX%#)QFg)L>a1tH2I883!T^>Zk*_f??fLdyzq%va3fV?VJvZk*xRh`qdnmz`#qr6Kz zyW^DUulV>YCZ*!cjJ|>F2{_L+Uu96obbkV_>M)ba@3~Vv^IpevfRFka+zs?qZ~$^v z?;B=N#}ptf7-pROo+-e)(*eA7{Y*054fIuD2b@(+!wl+Z0z`#p&t=9@-mNd+-k}7~ z;H+#MVo)zw0QU!%bWh!7olZx0lyxb=GdSrDgA8UCEQ&AQ=wLYXK>Q%2PYZy o7A$~<0JJm~G*y8A?SID)07uDv3`2ME$^ZZW07*qoM6N<$f;mLUgd%{o7epHO+MfJ+c4^S~Q7YsR0gZ?;`A#_+}Hz`<{r;{D|7~JiG=c40>b%j6@<4 z4>ZGmsKeF?0pJ>oJ7C}__FH@AQ3&X0C|MT?RNJ>aL8KWqNk{1 zCa>5RGSQk_udk)!O1HIl!Gs=JfWw5vZnv8~9#3e6LF2?4xacYJP6G?AttI@+^|g9^ z!SZW!=F*&I9&k z0jg9g2`e>iBR*<|;A>^noB{Up+k=ee`I|LgTSc9bL{3?8_oGUJeOZ7u4Rz|U0^&RI zlduYhklnp)0Y*54FKN*XWiP8~oDtW>IdFEjPcx`x0Tcnf9bhlBag5RP z;aJ+H7}OC5FxdtabIk(=wHRP$!zd%Ji*w-QxPlDosO>;T{V1d7!^v(5FsLIAu;bia zC8hd4gIWxb?i^+Gb^uORbAUk|wH-*S9bxo*IGL9w8PpL6*nakoVyqfqP>TUlFFs`S zb^y+|0*)ifc?<1*ks5OEb_SZ_l>PN6*v3wTYX%g-F|D`9G{g<0= z4W>bSkT^C27|>lX`NGHl_Dl2s%gnO+FFV&3OoR9!aSQ`s7}aPIYglV$P$ zrRQ0IX%HVIPP73a+;#f#f9s{`U>YVylmSFwyao`3F$^FF0{|g!XeC60clQ7Q002ov JPDHLkV1jtEcfSAt diff --git a/platform/icons/src/actions/diffWithCurrent@2x.png b/platform/icons/src/actions/diffWithCurrent@2x.png index 7da53a5eb964a2599efecfeb88e0cdf53a2ae9ec..266d039f633ce49a87004e857cc0895fa66d8a42 100644 GIT binary patch delta 174 zcmV;f08#&}1jzxABYyypNkl_t0IAsx z-NKRU0HO+_x!3v!&H*6H=U#hC^C-aSbCBf&;s9jJ>Fxk@%kg2VJAf3+ho=JuJPHOy zA{@|ch+gW^y&!`4xS!;rm}&qK?{u^jy8~$K2;%d4|3Eu{MkkIKLJsI3ripNnXTt%q coQzTr0P!&Denc3+G5`Po07*qoM6N<$f_!gGs{jB1 delta 532 zcmV+v0_*+B0jva&BYy$&NklyX0 z$D}jj66rf&6F!dcc@k4gld@u2a^<>96qp zuQA)@7my!LZwGt@S*pDZ7y=92{ttu$z?Nz(cK@%wkhTuMn;2CWy8c&P;QF74gi9L- zD9;Dx0wAV_1AmZl4om}(%>gnXaB0VXkvdHjEYV@`Utx|t7=zg8@}3K7{!_yNtRMrX zT=@9kc23rRv35N;mh3bBFE`f?j6rN#xk?5|I00~17i>yCJs^qQVY^U&;i&mE(d^c_kY zsqO#}ZaI15zv^O-|I+gFE!T;jOFLsg2m9)(aZrL zoUwP^f5|zfUJvqQ>JrH$Hvz3v3@^qr)%n+;jf--rvic9svNdoshpq zps%kFwg^1?zd&gTkbLMumQBH*m)ivmn*+a}L9?6l#o;Ab66QH|m4QS{knkf_R_aRsdDMSGB z@P^{GJ-RX6l?w z2(U}JL>K7eTPwiU)f0!-GifBsX$xssa6?1f4OnMn1Qab$Iest$#T^sT#o7SDI$MTk zGXg?<{03U@WCGW^U+fL+2O+XhGic{s46M`VmDk;?^huCn1a_c+%sU>g^0&UM4ju*` zMZ^r6n3I9EaE4i#cPzYT%s`}mF0Via**<~n;zUSxX>?jS)A3sM#14ph-T|6~i-9%Y z#|&n14+>O_Hs%({Mos~W{PI9V9qo8myXb^$;0!Z-zQW%~c8}~6Pk>4EU!7CMoS#%l z`o=4q6#pHEB#Sr-2PRWumK}(|AM{roMfnuAfgK}iDBg<$f)ZhV`Us&d894^h82? rI9r$fLD2#tP_Tfgl!m}R@pt?kMa0XNd2S^%00000NkvXXu0mjf^JYpl diff --git a/platform/icons/src/actions/diffWithCurrent_dark.png b/platform/icons/src/actions/diffWithCurrent_dark.png deleted file mode 100644 index 303603da35a06fd3aaebef19fd50fd7b1d728b62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmV+@0oVSCP)0n^R^1|l$S13V_}VbEUW_+NLaGaTzIcKW2XzaX_PuDQr@3DkflVhs3?gwHt6oExjX%Iy=7oq;CzpBMu`I74H#+kcV_ zkltj@fQ*$_IAMrk7y!jhFasnP8vmD?Ve(&Yk@bJYRgPd9#0QCEGk^iz1ybq#vt(xY zK2TWi_+N38^M4Qx;)BF73;bS{t9!2OGS8RtTkZdYXb>MH4pT?i01(b= uT_`or{SlakiV-h z3&A(=^n1p$@vs>L9zOE$eICDTlK?NS{#EcG421;C5|nl3 z7U;SzBU;S-KV!CMe#)!_chX_!N8Z2tmU%&}-EN!gkx>)#?HebCGvD1Brnzf=#dv{I zE|-&HY17fGu!Q;Mpgk^dKtL1ul`)lSdcPv74<9g4w^xHzqFP1yd4! zf@!+akL0=Oaj0hW{&A)BE0W>TKY_Idd`g=Ad8^zdCbCJF4KW?*IS*07*qoM6N<$f?Djh AJpcdz diff --git a/platform/icons/src/diff/Diff.png b/platform/icons/src/diff/Diff.png index a105010a9642e7ec20ffd78d2ad88d274a98d42d..718a45c6895e8b125c6ad47f9bf4778b791940a5 100644 GIT binary patch delta 114 zcmaFJ)W%Lc3 zz1DyEPQ(B59ftpyF0MOu1px#3ECWZmwzz}W#g)}I{K_L%{0rXe_#S~5hfFaxn z3TarVgJJ+ZRzN^8h06f27eFBm4Dr_>1JJw>O2`ZFKm>(2DCE%$z)0?RqY)bN#2G*d Z1^~t~8S^pA$&~;A002ovPDHLkV1n-LiO>K5 diff --git a/platform/icons/src/diff/Diff@2x.png b/platform/icons/src/diff/Diff@2x.png index a547dcaa8dfbcc96dc56cdf5d73a8e61c4e93f33..6feb913559372538acd6387f2768595c61d60d81 100644 GIT binary patch delta 180 zcmV;l089Ul2G0SIBYyyvNkl3V}&;r&f^d>^Msk9XWN*4%3tMP(C z2@w*53!^xtl$H>S64a&^s~bo(F=~u%h?k8U7j8^U+=+ic;||vvHpllJ#-=n=GE+L# z#Kp6joSyT}Ip2A{j*wD{aw7hj0P%SIa}J-t2k;IofoEV5+<)CRRxLIHV{U+X@CdvF zZ^3);F?S6s0#s=ME|(!d4fz4uFouk7X@KpDQ`jPIX$!l4Hz@vF7}o)Yz|$=WP%+^V z_C&qhF}+tZh*N2JJr=um1mg$5lVSp#0VhES^nq^B1={rjR8D%u?%OT0I=N3W2m;BS z%AV!H=!J9m&3|d|&~yMyER9kb^Qw!x?)zm;>VS0IY*3$7DxQ^|NGO8&PJy(k0DKE| z5(C(;*Q*P=9|WWuA)M(}xofUTR!!B)im-dt7w%lZoJmsw9J7t;TN#0iyE6W@0BVSU zbk6%EkHtP+x9W=?HXnc!XD2KY@4djvv6=pH?Ff=3DStvtEDEr0@w!aMm*K?dK(R$w z@ET%gL_RnIk$VKq^TDO@sYv%`u3^CdC_0f3icn}p_^U0|GpmVc*a{Iva=oAR0776V zzGD|!tyJ+9&Spu;Tx1b8g#&l!d+Jt4#R4iWc{_d%&MUES zpG#?c!+(Y8drh~N{~ve^`iG(;gAS$kE6vD-=?4mi+g>1mUn{~OU_&|zPH5NBaDWV5 z&>J~EQKfi(Qn&PbO=`btJci&iGyTGJ0AKjf0zFQj)9ds*JNkl4sJN~1NT+L~!gaHOP7Q+r9Z5n>ckTZxud7ovhFNE_=yP14Yk5EHAGq@k5u zis+_z*|>4xMiAV!{sF~ZT`S!j-*+5CjHok7Gby-uU^0Po-kI~A=bK{^LYV4_Y1;%y zrBd%pcn98qS6~&afJJZ@nEpW+B*8Lx3SNTO;BDy~TOOd{R*PA^zEY2S8B?t?ZcVP$swK`$g-rOIYuB zD))8<+c!?fCZ;gnNs!PLfKS0ev|vfd%EZ#jfRG9Z@u*icFE~U~)Go{+X>)M)NE&0t zbOo?J=v1Cc3!L1R@B0xz2{9n{W)BE1izO~^x}!e*0XT4RzzXTe4Q`C5FHNdT5UXhs zmQOAhhSzRnZu=`OLfzZ2bP1d}-)b^F@2O@R>JFe5;nzdik%%gy^R*DsRGIgSpk_W{ z8#-#K;;Wz^zVD&;e-lxvt3kcKw$;t(3An%_bVd$F>3e$LsCN7qoQ*FeylvsG7xX-R zPwyKMAPYt(?@f<22kjqdMtYuppkV$Ipj$1%A;5;@1IN|vs5!tqUEq(M3p54WzfiaI zd&`nb@jXNEo}PZ8JHQb9O^?&(^g8`c&vT!1%hCT@dj;Q~{s7UVi}W~OH@!~3{}c_S z!w_0~1^Y@xOE8hX9H7su?FkH_H$brnZ)Wa{$pz1P`JlBf!e6!_yzcGE`JR<7fsvo( zMG*~WM`!7Ku75qw1&WI4d#vfldL2xr%e=pRPDWJ+_-{|g-vLf(ZlnOe6KDVc002ov JPDHLkV1mV4Sh4^B diff --git a/platform/icons/src/diff/Diff_dark.png b/platform/icons/src/diff/Diff_dark.png deleted file mode 100644 index b1df05ce5f935ffeedea5e608ab802b4b663615a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmV-m0iXVfP)amj%8Io0}F5e)l_kV+x{wUaRRlt9vwZUMlzrydQ)x4leoCe_Xg6;}$pk|+!LGx3hpkBzw7l@#c zc7TRF*Z}nf4o9+Ql{!EJaSFaz07;qvL)-xr@-PDwrD z1B(|i4DbSma5*TXK_Lzbc~A_X#|kK>a2fy%;R;Yl!$KVt1L&~=iYZ(MfV}_;X;6rR yLY`DFzylE!;-HX6GXNvGY-F6E66@jV;uunKD>-2S+l;L>ht-NcC>SxY$!xO~V0iRXVU~zx3hVR6ANEtk z6x{f3GR$C-u=DScF>C%eS=oJ-QW3Aj5j_bv&zUj|3_5)#a^|mnSQ&u8)78&qol`;+ E00bW)RsaA1 diff --git a/platform/icons/src/fileTypes/diagram@2x.png b/platform/icons/src/fileTypes/diagram@2x.png index 02405d127fd6d9e176ba903d2e9255a03ea38a72..e3d3b90803bdfb5b2b76623920d2b528b1f27264 100644 GIT binary patch delta 160 zcmV;R0AK&D0lWc_B!7cRL_t(|+GAiC1yC?+`Gzy}#G?)vb->_r08TLXT0a<*3dq%m zW=IMUKZW9An(IR|!~@9?7!ISEJ~TtLf%rNWgRX<+sI3pp5I!J2fyEGH!}zGC4~s#& z@E8KayQrp*2nRtl(@Wp*aRAl8kafUl8W>FjLoN-BwunX@Fd6EA5eoo6f|0q2=N-2I O0000_r050IL?STLYlbWl@ z)rZZH^H3~6Ykjy3`47cJ8Ah%?LWU4!7`gh0H3Y9= Date: Thu, 13 Apr 2017 15:40:56 +0300 Subject: [PATCH 39/86] diff: add new icons --- platform/icons/src/actions/diagramDiff.png | Bin 0 -> 144 bytes platform/icons/src/actions/diagramDiff@2x.png | Bin 0 -> 210 bytes platform/icons/src/actions/diffPreview.png | Bin 0 -> 175 bytes platform/icons/src/actions/diffPreview@2x.png | Bin 0 -> 255 bytes platform/icons/src/actions/diffWithClipboard.png | Bin 0 -> 162 bytes .../icons/src/actions/diffWithClipboard@2x.png | Bin 0 -> 235 bytes platform/icons/src/actions/listChanges.png | Bin 0 -> 137 bytes platform/icons/src/actions/listChanges@2x.png | Bin 0 -> 205 bytes platform/icons/src/vcs/allRevisions.png | Bin 317 -> 0 bytes platform/icons/src/vcs/allRevisions@2x.png | Bin 791 -> 0 bytes platform/icons/src/vcs/allRevisions@2x_dark.png | Bin 645 -> 0 bytes platform/icons/src/vcs/allRevisions_dark.png | Bin 315 -> 0 bytes .../src/idea/PlatformActions.xml | 2 +- .../platform-resources/src/idea/VcsActions.xml | 2 +- .../util/src/com/intellij/icons/AllIcons.java | 5 ++++- .../openapi/vcs/changes/ChangesViewManager.java | 2 +- platform/vcs-log/impl/src/META-INF/vcs-log.xml | 2 +- .../src/git4idea/rebase/GitRebaseEditor.java | 2 +- .../ui/branch/GitCompareBranchesDialog.java | 2 +- 19 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 platform/icons/src/actions/diagramDiff.png create mode 100644 platform/icons/src/actions/diagramDiff@2x.png create mode 100644 platform/icons/src/actions/diffPreview.png create mode 100644 platform/icons/src/actions/diffPreview@2x.png create mode 100644 platform/icons/src/actions/diffWithClipboard.png create mode 100644 platform/icons/src/actions/diffWithClipboard@2x.png create mode 100644 platform/icons/src/actions/listChanges.png create mode 100644 platform/icons/src/actions/listChanges@2x.png delete mode 100644 platform/icons/src/vcs/allRevisions.png delete mode 100644 platform/icons/src/vcs/allRevisions@2x.png delete mode 100644 platform/icons/src/vcs/allRevisions@2x_dark.png delete mode 100644 platform/icons/src/vcs/allRevisions_dark.png diff --git a/platform/icons/src/actions/diagramDiff.png b/platform/icons/src/actions/diagramDiff.png new file mode 100644 index 0000000000000000000000000000000000000000..6bdb05a8767733bac10446563a1e90b4e61c7502 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`;hrvzAr-fh6BwEzPn*v<*ecn< z*nFE|5s&(D)+f>i-=pk*vNf2T-}`M!qegn-X2~UzvX{>@tg2uPR}jiP5WGXtMY`ea r`IeXlq1q)<4hjr`dmO9|ER(1{9HfLzx3UV%($?Vg)1Z*7+;7nG?#NvsCzk|u|~oA zfZRLhEsS#>aysPmFL@}#uv_Pjwg2Jwd@=#T|9l&Mitbs|GAW(oZ9|G6Bcow=09%Y8 zTZ0Z0`-A0%R&7HHKlE0&vE?&GOu0XmYw)78&q Iol`;+04wiGN&o-= literal 0 HcmV?d00001 diff --git a/platform/icons/src/actions/diffPreview.png b/platform/icons/src/actions/diffPreview.png new file mode 100644 index 0000000000000000000000000000000000000000..d441c02438609a8a76a2e391d761474cfae72093 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Wu7jMAr-fh6BwEzPn*wCWH&y* zFj49ob0NPUv%~}jD|w!0aj%cBY+JynaJG28t?GG(8EHPump({dXjmvIee87#7jH$^ zRRNngkHbj}%M>k`rREz?quWkso!+CF={_6&HdfLok20Z_Nb>*y002ovPDHLk FV1gf9X_o*1 literal 0 HcmV?d00001 diff --git a/platform/icons/src/actions/diffWithClipboard.png b/platform/icons/src/actions/diffWithClipboard.png new file mode 100644 index 0000000000000000000000000000000000000000..b0e4d6ac48487f4e8a520b1b60bf68db844710a9 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`nVv3=Ar-fh6C9W}Ps{(n`p7ur z#`MMrhLAmyOE^3EjS`FvrOpd9b4nd>&~q?rXwa7GFk)DrTfF}3xo)p7i-V(vw!6cG-Otiv*f#JiY&zhg^eN_fp%HZkh K=d#Wzp$Pz&DmUZ+ literal 0 HcmV?d00001 diff --git a/platform/icons/src/actions/diffWithClipboard@2x.png b/platform/icons/src/actions/diffWithClipboard@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..82548066add314c3054309b3031d678a8929a5ce GIT binary patch literal 235 zcmVGsc zU~-vXvVZuVw+eptF91fuaFUGn0jRX91xRc~hXm+EE09!PZ5ao!nQJ>^01k5qfNNeH zz&8(tIKUV4e*(Z;P{j~J*U-Ou#ShV*G2>40*>}eLjILA8`2gZ~ozVcZ$PC;-8UkP{ lDyVtN8VUn|%ww;fqXk5Ht_A&6uFe1e002ovPDHLkV1lhXVDJC{ literal 0 HcmV?d00001 diff --git a/platform/icons/src/actions/listChanges.png b/platform/icons/src/actions/listChanges.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd92cf2fcec24920c178f9275c0d27cb69de544 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`0iG_7Ar-fhXKbxG92_&FQLiCG z{LJ2K{`+(l&K9q?RXxvYaCQfe!l|?viS=$=ycJzn1%&4O6Ire3l5wEzH>bO@A=?Cr kUm_W9{4SeC$fLTt>_m#Ory{t{wo+{VIT5F}UJ^KVUv zr;`@L8$-@MDW^>gg7>OBPB1Z5yp_24zsA~{Z71WIveV)l-4=TS-N)eR>gTe~DWM4f DT+K)} literal 0 HcmV?d00001 diff --git a/platform/icons/src/vcs/allRevisions.png b/platform/icons/src/vcs/allRevisions.png deleted file mode 100644 index 31b05446b772a4f9d40e12acba12a4b22335e34e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmV-D0mA-?P)9NsPpA2zsUa-2haUvzd^rE- zVMN3{&%1{t5Mj@Ry}x6YeF0#Yo97loVguxWKCPsTWt~)jd{%*>fb6tl=KUsFep?0b zSb+4T%#CG}iiZJ}jzh`|NN(=FqRp!G6QC_>+}d}^xsJ%Wji?w5$vzEUG1nc6yn?Z5 z+18~;)}^2P3i5!qs-^T@C5RAag-vAha8DYqd1fXfPd6<9^n1P{;F!lQjMAK^X zFaaY73~39OC%=L)QV?cfC`kwJUwhjin29X$Gs?jDxnQxkQAVzF@NF9(=X>sJd6BLX P00000NkvXXu0mjf>XVO6 diff --git a/platform/icons/src/vcs/allRevisions@2x.png b/platform/icons/src/vcs/allRevisions@2x.png deleted file mode 100644 index b18f7049c199cfb02d62a5f2ae3e980c8a345f76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)Mw}`d*^| z+fq6XaEN)UNZSC|d6|9rd?vIc9N@Kh4ghNsV*u9N2+!wkpV;zY=s3V|E+ksthihCh z3jEsL&H)TA1$u@u!LkKEHTNL~{z?*jn+Yv|s7UJo%!>iXU?zBMSsnxDx&XfINf_Cm zs=wYWL||aie_?b3+(`RGb0+x5Qn&@qjr-u+orK{26A1m7s$bjJVqjSrYnq|_sD6Nf zY*4hUMrzK|ICybE|M$lbKmdw=?-6*mli;d6Y#PU>dtm4%aFhg>dpGgZyEh5mZz-;LKW;M^LAt~4TUOW=K#i4%J{S_iSM`KeQd-ti=e1{6L;)D}W^%VoDv;SgMKS2lT{mT*xKY zwJ{7Zta%8HrJ6{7AWx7l$Q$x|$`}SfFR1=a95MZTuE>Y6~gR#+G~6hq61W$ zkj8RN>k9G*zZ37VZ^YQ(a)|Z6a~lV+eU7Q-(O9a9-rsL&Ieil zf}8cdb{YpTWjv~RG?r>2`GGuvzHrz|Q8rv0Wu~l$U3S&7-kY z6Uh(c3G2rQGp__#f0~yT{x?T^Z%dA5SLdvZqB*P_cH(HJ{iYf^?$p_^^@r1L!+(;W}Oa)@y-J z*Wq5^jOC3jJu4uz%A)ypVeI|%cXp;N3J7iDtw5+a5|v92F2l>Cz`ej=ahQswM1y>I z2=dk=egy{J#RGQ>`le`(0@+G~c8~+L{KQ#++H!jZg86u4prBubR>pvQoB-``783P& z>odHbf;)MwV_X;LUs7qX5dST%Cqdeq1hqN~!zV9bImOL<=uLqZ7o+F{I>DnrGma_xAeZj{VqOp)1)Sfb=mR=|UZ5MjEYR$cqgpv< zIYGA5fNn59c9F35f+!sRA( zT7iDVD%k+P$B_AePOw}tH(qhy0rUZ#U|vLg86xxnow%(j?)KHp?!y_6S2Je;JICjK f6!89P=2!jz7wR;#dEDmT00000NkvXXu0mjf@QW=C diff --git a/platform/icons/src/vcs/allRevisions_dark.png b/platform/icons/src/vcs/allRevisions_dark.png deleted file mode 100644 index 984870678bdef70226b274af975c98b0488f6789..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 315 zcmV-B0mS}^P)w5dZ*KzYHSEit;G+5o{yRT z^AG?aj^o@yvf?4HguTDvEQtW%u&uf#!6XKV0Xi`EQiqqY-W%5BE#yi+B8D%d`ZhZg% N002ovPDHLkV1j9PfU*Dp diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml index ebff8b608a14..54155575829a 100644 --- a/platform/platform-resources/src/idea/PlatformActions.xml +++ b/platform/platform-resources/src/idea/PlatformActions.xml @@ -175,7 +175,7 @@ - + diff --git a/platform/platform-resources/src/idea/VcsActions.xml b/platform/platform-resources/src/idea/VcsActions.xml index a6c1c2f9596b..9ca381f12921 100644 --- a/platform/platform-resources/src/idea/VcsActions.xml +++ b/platform/platform-resources/src/idea/VcsActions.xml @@ -207,7 +207,7 @@ + icon="AllIcons.Actions.ListChanges" /> diff --git a/platform/util/src/com/intellij/icons/AllIcons.java b/platform/util/src/com/intellij/icons/AllIcons.java index 044db7d05334..e020588d4d42 100644 --- a/platform/util/src/com/intellij/icons/AllIcons.java +++ b/platform/util/src/com/intellij/icons/AllIcons.java @@ -58,7 +58,10 @@ public class AllIcons { public static final Icon CreatePatch = IconLoader.getIcon("/actions/createPatch.png"); // 16x16 public static final Icon Cross = IconLoader.getIcon("/actions/cross.png"); // 12x12 public static final Icon Delete = IconLoader.getIcon("/actions/delete.png"); // 16x16 + public static final Icon DiagramDiff = IconLoader.getIcon("/actions/diagramDiff.png"); // 16x16 public static final Icon Diff = IconLoader.getIcon("/actions/diff.png"); // 16x16 + public static final Icon DiffPreview = IconLoader.getIcon("/actions/diffPreview.png"); // 16x16 + public static final Icon DiffWithClipboard = IconLoader.getIcon("/actions/diffWithClipboard.png"); // 16x16 public static final Icon DiffWithCurrent = IconLoader.getIcon("/actions/diffWithCurrent.png"); // 16x16 public static final Icon Down = IconLoader.getIcon("/actions/down.png"); // 16x16 public static final Icon Download = IconLoader.getIcon("/actions/download.png"); // 16x16 @@ -96,6 +99,7 @@ public class AllIcons { public static final Icon IntentionBulb = IconLoader.getIcon("/actions/intentionBulb.png"); // 16x16 public static final Icon Left = IconLoader.getIcon("/actions/left.png"); // 16x16 public static final Icon Lightning = IconLoader.getIcon("/actions/lightning.png"); // 16x16 + public static final Icon ListChanges = IconLoader.getIcon("/actions/listChanges.png"); // 16x16 public static final Icon Menu_cut = IconLoader.getIcon("/actions/menu-cut.png"); // 16x16 public static final Icon Menu_find = IconLoader.getIcon("/actions/menu-find.png"); // 16x16 public static final Icon Menu_help = IconLoader.getIcon("/actions/menu-help.png"); // 16x16 @@ -1248,7 +1252,6 @@ public class AllIcons { } public static class Vcs { - public static final Icon AllRevisions = IconLoader.getIcon("/vcs/allRevisions.png"); // 16x16 public static final Icon Arrow_left = IconLoader.getIcon("/vcs/arrow_left.png"); // 16x16 public static final Icon Arrow_right = IconLoader.getIcon("/vcs/arrow_right.png"); // 16x16 public static final Icon CheckSpelling = IconLoader.getIcon("/vcs/checkSpelling.png"); // 16x16 diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java index 75731b69b64a..06cdf881e9cf 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java @@ -503,7 +503,7 @@ public class ChangesViewManager implements ChangesViewI, ProjectComponent, Persi private class ToggleDetailsAction extends ToggleAction implements DumbAware { private ToggleDetailsAction() { - super("Preview Diff", null, AllIcons.Actions.PreviewDetails); + super("Preview Diff", null, AllIcons.Actions.DiffPreview); } @Override diff --git a/platform/vcs-log/impl/src/META-INF/vcs-log.xml b/platform/vcs-log/impl/src/META-INF/vcs-log.xml index 36de272862f3..1ef23acc2ace 100644 --- a/platform/vcs-log/impl/src/META-INF/vcs-log.xml +++ b/platform/vcs-log/impl/src/META-INF/vcs-log.xml @@ -96,7 +96,7 @@ use-shortcut-of="Annotate" text="Annotate" description="Annotate Revision" icon="AllIcons.Actions.Annotate"/> diff --git a/plugins/git4idea/src/git4idea/rebase/GitRebaseEditor.java b/plugins/git4idea/src/git4idea/rebase/GitRebaseEditor.java index 6d881754d0a9..1ac433cf41d1 100644 --- a/plugins/git4idea/src/git4idea/rebase/GitRebaseEditor.java +++ b/plugins/git4idea/src/git4idea/rebase/GitRebaseEditor.java @@ -393,7 +393,7 @@ public class GitRebaseEditor extends DialogWrapper implements DataProvider { private class MyDiffAction extends ToolbarDecorator.ElementActionButton implements DumbAware { MyDiffAction() { - super("View", "View commit contents", AllIcons.Actions.Diff); + super("View", "View commit contents", AllIcons.Actions.ListChanges); registerCustomShortcutSet(CommonShortcuts.getDiff(), myCommitsTable); } diff --git a/plugins/git4idea/src/git4idea/ui/branch/GitCompareBranchesDialog.java b/plugins/git4idea/src/git4idea/ui/branch/GitCompareBranchesDialog.java index ab81088c375e..038dee32dc34 100644 --- a/plugins/git4idea/src/git4idea/ui/branch/GitCompareBranchesDialog.java +++ b/plugins/git4idea/src/git4idea/ui/branch/GitCompareBranchesDialog.java @@ -75,7 +75,7 @@ public class GitCompareBranchesDialog { myTabbedPane = new TabbedPaneImpl(SwingConstants.TOP); myTabbedPane.addTab("Log", VcsLogIcons.Branch, myLogPanel); - myTabbedPane.addTab("Diff", AllIcons.Actions.Diff, diffPanel); + myTabbedPane.addTab("Diff", AllIcons.Actions.ListChanges, diffPanel); myTabbedPane.setKeyboardNavigation(TabbedPaneImpl.DEFAULT_PREV_NEXT_SHORTCUTS); } From 27cf580f8fa61bcd7e0313dc2a167ef16f2ae696 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 13 Apr 2017 15:41:36 +0300 Subject: [PATCH 40/86] git: rename tab in "Compare Branches" --- .../src/git4idea/ui/branch/GitCompareBranchesDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/git4idea/src/git4idea/ui/branch/GitCompareBranchesDialog.java b/plugins/git4idea/src/git4idea/ui/branch/GitCompareBranchesDialog.java index 038dee32dc34..ccd91cf1ca6d 100644 --- a/plugins/git4idea/src/git4idea/ui/branch/GitCompareBranchesDialog.java +++ b/plugins/git4idea/src/git4idea/ui/branch/GitCompareBranchesDialog.java @@ -75,7 +75,7 @@ public class GitCompareBranchesDialog { myTabbedPane = new TabbedPaneImpl(SwingConstants.TOP); myTabbedPane.addTab("Log", VcsLogIcons.Branch, myLogPanel); - myTabbedPane.addTab("Diff", AllIcons.Actions.ListChanges, diffPanel); + myTabbedPane.addTab("Files", AllIcons.Actions.ListChanges, diffPanel); myTabbedPane.setKeyboardNavigation(TabbedPaneImpl.DEFAULT_PREV_NEXT_SHORTCUTS); } From ebf66032e8d9d930302c85abca5eab7a87114197 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 13 Apr 2017 12:52:27 +0300 Subject: [PATCH 41/86] diff: deprecate icon --- .../diff-impl/src/com/intellij/diff/merge/TextMergeViewer.java | 2 +- platform/icons/src/icon-robots.txt | 3 ++- platform/util/src/com/intellij/icons/AllIcons.java | 3 +++ .../openapi/vcs/changes/patch/tool/ApplyPatchViewer.java | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/platform/diff-impl/src/com/intellij/diff/merge/TextMergeViewer.java b/platform/diff-impl/src/com/intellij/diff/merge/TextMergeViewer.java index 7d1274659e29..cb75fdd794be 100644 --- a/platform/diff-impl/src/com/intellij/diff/merge/TextMergeViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/merge/TextMergeViewer.java @@ -243,7 +243,7 @@ public class TextMergeViewer implements MergeTool.MergeViewer { group.add(myEditorSettingsAction); DefaultActionGroup diffGroup = new DefaultActionGroup("Compare With", true); - diffGroup.getTemplatePresentation().setIcon(AllIcons.Diff.Diff); + diffGroup.getTemplatePresentation().setIcon(AllIcons.Actions.Diff); diffGroup.add(new TextShowPartialDiffAction(PartialDiffMode.LEFT_MIDDLE)); diffGroup.add(new TextShowPartialDiffAction(PartialDiffMode.RIGHT_MIDDLE)); diffGroup.add(new TextShowPartialDiffAction(PartialDiffMode.LEFT_RIGHT)); diff --git a/platform/icons/src/icon-robots.txt b/platform/icons/src/icon-robots.txt index e9a17d2af1c5..2445ec12391c 100644 --- a/platform/icons/src/icon-robots.txt +++ b/platform/icons/src/icon-robots.txt @@ -1 +1,2 @@ -skip: diff_frame* \ No newline at end of file +skip: diff_frame* +deprecated: diff/Diff.png \ No newline at end of file diff --git a/platform/util/src/com/intellij/icons/AllIcons.java b/platform/util/src/com/intellij/icons/AllIcons.java index e020588d4d42..5f17e193984e 100644 --- a/platform/util/src/com/intellij/icons/AllIcons.java +++ b/platform/util/src/com/intellij/icons/AllIcons.java @@ -344,6 +344,9 @@ public class AllIcons { public static final Icon ArrowRightDown = IconLoader.getIcon("/diff/arrowRightDown.png"); // 11x11 public static final Icon BranchDiff = IconLoader.getIcon("/diff/branchDiff.png"); // 16x16 public static final Icon CurrentLine = IconLoader.getIcon("/diff/currentLine.png"); // 16x16 + + @SuppressWarnings("unused") + @Deprecated public static final Icon Diff = IconLoader.getIcon("/diff/Diff.png"); // 16x16 public static final Icon LeftDiff = IconLoader.getIcon("/diff/leftDiff.png"); // 16x16 public static final Icon MagicResolve = IconLoader.getIcon("/diff/magicResolve.png"); // 12x12 diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/tool/ApplyPatchViewer.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/tool/ApplyPatchViewer.java index 39de8c081eed..6c81ab815550 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/tool/ApplyPatchViewer.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/patch/tool/ApplyPatchViewer.java @@ -664,7 +664,7 @@ class ApplyPatchViewer implements DataProvider, Disposable { private class ShowDiffWithLocalAction extends DumbAwareAction { public ShowDiffWithLocalAction() { - super("Compare with local content", null, AllIcons.Diff.Diff); + super("Compare with local content", null, AllIcons.Actions.Diff); } @Override From 3f37b60c7b2b6c72369406e4dc7cf98ad1821512 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 13 Apr 2017 15:44:11 +0300 Subject: [PATCH 42/86] merge: update icons --- platform/icons/src/diff/applyNotConflicts.png | Bin 432 -> 210 bytes .../icons/src/diff/applyNotConflicts@2x.png | Bin 1155 -> 261 bytes .../src/diff/applyNotConflicts@2x_dark.png | Bin 1087 -> 0 bytes .../icons/src/diff/applyNotConflictsLeft.png | Bin 266 -> 175 bytes .../src/diff/applyNotConflictsLeft@2x.png | Bin 520 -> 220 bytes .../src/diff/applyNotConflictsLeft@2x_dark.png | Bin 571 -> 0 bytes .../src/diff/applyNotConflictsLeft_dark.png | Bin 271 -> 0 bytes .../icons/src/diff/applyNotConflictsRight.png | Bin 264 -> 150 bytes .../src/diff/applyNotConflictsRight@2x.png | Bin 569 -> 191 bytes .../diff/applyNotConflictsRight@2x_dark.png | Bin 542 -> 0 bytes .../src/diff/applyNotConflictsRight_dark.png | Bin 266 -> 0 bytes .../icons/src/diff/applyNotConflicts_dark.png | Bin 468 -> 0 bytes 12 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 platform/icons/src/diff/applyNotConflicts@2x_dark.png delete mode 100644 platform/icons/src/diff/applyNotConflictsLeft@2x_dark.png delete mode 100644 platform/icons/src/diff/applyNotConflictsLeft_dark.png delete mode 100644 platform/icons/src/diff/applyNotConflictsRight@2x_dark.png delete mode 100644 platform/icons/src/diff/applyNotConflictsRight_dark.png delete mode 100644 platform/icons/src/diff/applyNotConflicts_dark.png diff --git a/platform/icons/src/diff/applyNotConflicts.png b/platform/icons/src/diff/applyNotConflicts.png index ea3923e5b478ae0286be2b534058cbb9b2b3f771..0f86aa5edfa4e491bed6d11684bc7b9caddaae90 100644 GIT binary patch delta 183 zcmV;o07(C^1JVJIBYyyyNkl&9KGtn_t#cnHhOby8ih3y3YDwuAU#$N@{XW)KKi zY-S3TD@NAGfTWoZ8VgT-mg>f%S%MNS$YF*v9gwXVJ;0CxH!ut-a8D3Qi8HC@0&>Fu lBhGQg0xkov;2N6bTmaLA#7({8{=)zO002ovPDHLkV1kb_N%Q~! delta 407 zcmV;I0cifx0k8v*BYy#RNkl9Qu_enf+It zVFkt@Lx?e86%czFRob@6w(0#-o@`FC0iLFn4)roEx_=cXn1B9PnQHOZve%;r<{cyh z`hYkIh(m$c2W)_7sWPW#mFavW&A)(jG%WP>TWsdR3~;aTOIE1VJtkSL@m;!F^OabI zYAFLS)a&J24PGntn|{}xXnV}3B{T&VjoQ`bb72OFSExoyHE8{k>oE8)-);0)uhn(| zFqSxBUhsiBD}M>Gy^~`0eMHS(sBtX*%M^|mdu3d0!p(p0CxKCA`k)&5eWbQ002ovPDHLkV1lWu BxzGRr diff --git a/platform/icons/src/diff/applyNotConflicts@2x.png b/platform/icons/src/diff/applyNotConflicts@2x.png index 6961b00223a3bf108772be0f5696e4dbbeec611e..556d7ec0efd8ebaf58bf22d81f5b532637ba6135 100644 GIT binary patch delta 234 zcmVUuV4R%|h^c0Hw zNs+_jP_i9>VG%w#YC51FmqqyGsOA7_JA&*)NG(TDlnbcg2#T{IrH-J519lN3N2@5< z1;l)WuQkIdX$!KrF{sz|h6=LG6G6j{(gKBz7B1zb0|qXD zSYU%~Y`VdkVKc*Ggx97?5FamL$oysE;HQqru0DP|W1S;CJ~c5@ z8#n@bK|2|y$ntU9k_@2wb=dvlOm@JMAaP@|`1c666=NH~NpK#;>RJ1g`$h@_t+FC- zu8|spsDG-nIfIrvR5h~(gT1uMu{(B(6Dbg)#TH5Z4=yJ89x$ z{De@V_DhH59`R`7<&_4S<@SC0A=@`ulE4sAM#)T7lYY~4mMq*`H)MK2haVR)C_!JU z3AbE4;fOZ9e_-Tbvti1i%RN#=20|XWs}EZ>&VMf=3A_vrfB_Q6oSoT{Wsb!1M(ynB z$OeZ0SF5JsxFfMKRQF!qtHn>K5x}Y+$3viCLcAqJE9Wfn>OYHPn{HK1Z@IQ3-0S6~ zcyI1Vp$@K918s-4de`~Q3)OOC2+!O3b$k%iLcBlwkYyfb+4^H;Y7(32q+mO(vD&+y z$bZfNk5*C=c50xc*~ur3Q9pnv(aKZ<&naDAx`^@vMYp*DiaN7qxckSwWBd2<1ibh#cY)fFkT_4SkSEyfrQ&29-MDC=$tF49NtHvkc`{*cc z|AQsy{6sC+;pC!ajn~}m3O~P}Z|S8+y^d2Fz_Dbs-|AhFT&{m@kM#I>Yj=J%{Xj|s zREE`tWLjKVw0>)y=%&8%8E|H`4atKI@I+ISZMpdGLd-?NbzmYL9nk{~P_k+J0%*GP{mt6>0qd=_d8~s4ph&1 zUbfR`AjOMGJ(Xf}RMa5~E4N_v5yiAKU@~&=qEP30ws?h3zBoG|UILizQ$WSPe=* z5h$G3kSP&(E)ehNKdZnD>?9z}Ze{{s9|R z3#I$=nP#A9)&!iU6j|rikpBl!ub)UQ~yronQ%U(=!Vz$tB#A~d5#27YQ7?%4pf0sA=oDDDxwLno86_Y zNlx8JipRh*dZ$(VJ4B)wb~0!Kog`qTx2z|I0CFgow^Y_@nv8c-8uc&neoWDz9!hIk z`U1~8z+5f>56NnW@v*|CWhu1t2QXQ!O&dj6NBg|H~@BoeOy3emO<&zy`~nOa?ZdOb{W~Co)vs!)JqKAmM5q$ z6;DBuOFJj|-=*927v&e~fINgShn57buk!oL?r!t#sTHkw8y1ojPVJ-s+F6cE?xhHb zaa;rP;oPKX*1S#bSi;h}m-FMRzAp1Z)&(sirT(fm5v^%8P!gw~4)m`dDhjzHuG+I6}&k2}@|$4`)c(DJ_8TXR?xVDFF20)8PO=c2f{02)Bl z9fbh1?6RFj4UMXz)R1n_GF;`|dr)lZ_KyyuaRFbdn+q7vXC4W#=DVzINafgM-hwL1c*_b*Ri?_RUV>_nc<(>H{g7wW_lrsDS(_(z9Xk3e(#6PO5ljc zjVPvo$a{fsehLwpxIN3_#@sL~0%$a61`1hfXAW<_IJyiS(<_FTGw}kDj&vMPIuX24 zq3_dt$#$B2aTgHf!^A|b821AyN(yEkfrNgV{n1~?p8;P$&eNZ{r^o;R002ovPDHLk FV1gsj{5b#s diff --git a/platform/icons/src/diff/applyNotConflictsLeft.png b/platform/icons/src/diff/applyNotConflictsLeft.png index dc8d5b20c5799f11e7d4a107aa8b3323eeb67262..3a5277cf0f8d26dcd17a3397475b486ba2cec740 100644 GIT binary patch delta 147 zcmV;E0Brw?0jgaJ;?gbaXb z=7Yw`D0W(Jpz|2S_89)pG0FMlc`A>I;+YA5z002ovPDHLkV1kS* BJ4FBh delta 238 zcmVNdK2u=1vkf3AbATE oux(HpuNR__@bn>;lqt>50776Q*Q5G9fB*mh07*qoM6N<$f(DIi7XSbN diff --git a/platform/icons/src/diff/applyNotConflictsLeft@2x.png b/platform/icons/src/diff/applyNotConflictsLeft@2x.png index 996899a61ad96014cc1a40491b1645befbe9d6e4..5d694f67d28ccfcb2c5840805e461a06bfd1922e 100644 GIT binary patch delta 193 zcmV;y06zbS1l$3TBYyy+NklUuV4R%|h^c0Hw zNs+_jP_i9>VG%w#YC51FmqqyGsOA7_JA&*)NG(TDlnbcg2#T{IrH-J519lN3N2@5< z1;l)WZ82aGyk)BywCGa6V23>yFdy2ts|Ax!=i00000NkvXXu0mjfIpa(o delta 495 zcmVUBYy$UNkl@nr~^hFFzNt8 z4(J2o1T+j&mw*RT&jALd*6T%zmHrcpsqO%ffyUK#>m_S7{u9CyRccgs0JdmgQ0zA; z1LFVaSgu2#CJun%Ss=p|Czxg_Pd5LjGTrjO>I^Fs3~~gm9DlGFWUzgW$870loqr0w z#{X5OTF}h_D}XrJvD|Ztc%|B3nO5EZN)t{0(<=nPmb;bv_DNK#{g!Fb{SS-+49o5M zeb>^$0c$~)dzA-vNLH%-lxfxhTc9!x#qxhnz5a_pmVz8bO$UH1PxCJiZIY}||0a#a zana3KKCyVX_lx^|03Ol)#pFFJHsbJEt?0;9aM8bf^C`W zEb$7pU($`*{}uXxDSjGCivJ9Bj5ElQ(A)tsD8Z`JeLckv02ZZks-*^}#4A+)OE+O! zt})&A1JH6asKG1H3oFYG_w{5uK(s`uQM6R~r$n{-e`s)O2M0UCa>FUk7g8ECi|`oS zhlELYfOw@Ut5m&KiblJ|4V4Mz-+(^-r!~#)x#=XgLm}<4tx%s;(W5#}Lo54pfw&2p lGe%oPqYfD64j9qBV*oj+)!aTw6n6js002ovPDHLkV1l@g={5iW diff --git a/platform/icons/src/diff/applyNotConflictsLeft@2x_dark.png b/platform/icons/src/diff/applyNotConflictsLeft@2x_dark.png deleted file mode 100644 index 07fd5c7c5136f444cffb403d357c860231a40af6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u4^P) zug+h^S*HJiq41wxApo{KtUs<#rdRj3!b}samV2#?SxXBCtOZ#f-Jjec+oSsvZ259q zbj$w*EKgVjvQ%q>GgTb`vOFzuLPnEJkM1{Myn_u#wp?eU>)+6&DYIa?LvxJ-)f_Mn zbZ?YKu0kEqXk!q3B#m2K)OepRc?x5ioram z8(J$JzX5~!pW%AX=MHN^4y7+DYK8i&N`9IVgH*RR^{ZpqN%{=R^DRIc($K2bTp(_O z=8Q8^-CCf~qP_#9`*azA*^QtEkmUsGjL|09r~}A%z=-Z00|2sNmVg+qV6OlG002ov JPDHLkV1kHJ2$%o> diff --git a/platform/icons/src/diff/applyNotConflictsLeft_dark.png b/platform/icons/src/diff/applyNotConflictsLeft_dark.png deleted file mode 100644 index 0fb8f52b71cdd44a240535f0f9d140233295465d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271 zcmV+q0r38bP)Huwx!48&nj%z(s37Q<^mn`OV-YMBXo|79oY!?8@C?tfwp zfV)6-iS>WAWwv0fJkOkH16G3+y3Gukr?JZZzxGBKFa{Yyi~;LFirgm#O;eg<_D^HA z1IY%2c~1-?YA1Q0W$r%^=h*%-vKrMFkR_=E^S_Z1(LTw0ow+p@p>T&2~QtlNtx2@3;@&5 VV)kha>&5^8002ovPDHLkV1oT6bh7{e diff --git a/platform/icons/src/diff/applyNotConflictsRight.png b/platform/icons/src/diff/applyNotConflictsRight.png index ac824b76388d01701563b3d800de7876c1d2cf6c..0d9be054847f1bf42cc39becba3c8b0280452028 100644 GIT binary patch delta 121 zcmV-<0EYjF0+s=gBywFzL_t(|+GAj#CaCY8I1?Kt$pB)+MxX&T6d4e(*v!;zh0=8( zE(Y;|bUzS3CCUJxLT#w#>rggWGl(W=0LhxM7;plrAq=Q(X0mUw$I1I>+1uVFR bftCOOQ}2kSqxgF200000NkvXXu0mjfXbLaT delta 236 zcmVb@M2ih>1H#ZSve;sx43MZ& z`!89m0ml;6>i-QYtyTl&+K4hhu0#L7V!sI(EA$%uC)oucjjA)Oz*uRL*?-GM*LhF_ zR+DUi@?`V>vTb_*tSeonK@C|)&;XdT9lCvIt4y`{t2n{*zhz8|?q9n~_X)6o#cO~` zv*T)*zk!;gRi|41h8pruzshQjXsI$MJ_8m*LwhmIxxvjb6?zlw&nfkr{!nN&cn6H7 m5>gY=bRdpG!h$efPwfq~PJ}0BWflb-<_tMjbHh9Z)ln z4yXZQu7Pv_*mAcOO8r3m6ok>$;FF_D+#*|mZV5g)syG1M0uY}VIjT5-W|kA<0Ge7( z$N@CB9G?T|V)>wUz<@`=ph$#+A{!2hf@n|_#Wb&sh`_Y1jva}0#As)hTmS$BTkE(u SM(_my00006|ED;?Gz)6+ESe=ktbY!eYVlv8*Z9A5v(7*J z8jsmfM=YkF1Arl*G|}|GOsnpH@k+J7j^&TIVAt=v7TpoRDEKeaqWfQ> zQth`}xo;m1M^NqnkYymYQ?LIbpymJIj+kZ%PLMLqI{zgr)qZ-F2X;Umv6iY104BKq zu$1oB6Ff_8hJW>6bVo>o98sbE&A&Xf38*d&$q|%002I_v2h0P}-ksqSftLTka6}W> z5nuevLzF^?(^uH4z?{(s%o&Z^|HUiRe%Y3}&V=fr z%mJ1i?$}DW6`(>0=m;~7>9!wGvM0z9O&~|8{#PwEIDZK&qU9)YKpzrDQ3nie2B2jO zDUF#$hEtr+BZmYyVS;i;wfcY2QstkbB}$D{ua3nkR2hK54N?aJ2_fyVt)`RQ4rxuZ zdkzele<~BqziG5v+>ol*N)fMAWu>|UfWBf7D_4Q31EqLS>d!^18`5ajAOW=nK#mw~ jl8rimWEuyI*xoS!-`>rgtS*2^00000NkvXXu0mjf5a;)c diff --git a/platform/icons/src/diff/applyNotConflictsRight@2x_dark.png b/platform/icons/src/diff/applyNotConflictsRight@2x_dark.png deleted file mode 100644 index acd14a87b2e93f0665008fd0cc5befe4d615e50e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmV+(0^$9MP)P8(f>VQ!PP~w0DJQ$`9UA&K~4v=V5|4%Ho?si*G zbqC1w>He3Us80~vPx4tulMqmzXZ~MpnJqS4iX{sAsGbHumT7NvLBU$`rJ%^gZl?eM;QN? z>e2qM(`9uMSVYTF;($IRj8$Fr+{PlSwE^c*903e9#aY1I(XabovQzV?M7u^KEvw@y zPza?jDr$9D6LQFKz2|da^!(FW>G;iHp3@DvDTXQ1J=(0aZV!M`JSg?&qSXy)qb;IQ g2Mj(3jM&~W09&un84ppV-~a#s07*qoM6N<$g0txR2LJ#7 diff --git a/platform/icons/src/diff/applyNotConflictsRight_dark.png b/platform/icons/src/diff/applyNotConflictsRight_dark.png deleted file mode 100644 index e7e0c13640bab6845295b8f87277ed666db40165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmV+l0rmcgP)x*pYDIziTZFXGePgaWxv~Mpj;bK1}M)n z|F5>p7K~MwSpO&41t5*u8(qLyW0n1Xx0%87pa!fa-GJ2&|CQ#L{qvX@JPm5dI)Vnk zob9tDW{%c6r@!he?EWjxGWqK>F>C@XVDTDYKih9L%-=xG(OPSrf2%JC8}iR`g4-I& z4oyyc1}uh#_F|ZG)8^$@n6C6b2Q=h|+HA{rz*s6FH6ejO6cQdRNtqH10Cr+x>@_T8 Q+yDRo07*qoM6N<$g0Hi1=>Px# diff --git a/platform/icons/src/diff/applyNotConflicts_dark.png b/platform/icons/src/diff/applyNotConflicts_dark.png deleted file mode 100644 index 77e0b6c766ca244d852419e31ee813f78e1ec5e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmV;_0W1EAP)xNVXY-_>zW=RYpNy!Ye;X zeE>n2Pv?xy78y*u_%V2Ro*(D@&lyDsp{9YVR4PahxCA(WnJIekj4`5}^^D+|QE(pN zw2pbaTJq=T?$!p*R*bmX>k8dqAMCe5i{8SnRu-1W!(~+f7u50@ku8B#amx&Wd=##I zP{6if#J{HS6AqM%4;_stanvFNznBfQH{5>A6)|uO9@_s$plu=sh$F?RK(Hh&?Frhh z$m90lj{rxgj}s+Y9-Ovx6AGXbY=;&y60W@|fe~nj8e74%zw Date: Thu, 13 Apr 2017 15:48:20 +0300 Subject: [PATCH 43/86] merge: add new icons --- .../com/intellij/diff/merge/TextMergeViewer.java | 6 +++--- .../tools/simple/SimpleThreesideDiffViewer.java | 6 +++--- .../diff/tools/util/side/ThreesideDiffViewer.java | 10 +++++++++- .../tools/util/side/ThreesideTextDiffViewer.java | 4 ++-- platform/icons/src/diff/compare4LeftBottom.png | Bin 0 -> 102 bytes platform/icons/src/diff/compare4LeftBottom@2x.png | Bin 0 -> 127 bytes platform/icons/src/diff/compare4LeftMiddle.png | Bin 0 -> 100 bytes platform/icons/src/diff/compare4LeftMiddle@2x.png | Bin 0 -> 123 bytes platform/icons/src/diff/compare4LeftRight.png | Bin 0 -> 102 bytes platform/icons/src/diff/compare4LeftRight@2x.png | Bin 0 -> 124 bytes platform/icons/src/diff/compare4MiddleBottom.png | Bin 0 -> 102 bytes .../icons/src/diff/compare4MiddleBottom@2x.png | Bin 0 -> 126 bytes platform/icons/src/diff/compare4MiddleRight.png | Bin 0 -> 100 bytes .../icons/src/diff/compare4MiddleRight@2x.png | Bin 0 -> 123 bytes platform/icons/src/diff/compare4RightBottom.png | Bin 0 -> 99 bytes .../icons/src/diff/compare4RightBottom@2x.png | Bin 0 -> 124 bytes .../src/idea/PlatformActions.xml | 12 ++++++------ .../util/src/com/intellij/icons/AllIcons.java | 6 ++++++ 18 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 platform/icons/src/diff/compare4LeftBottom.png create mode 100644 platform/icons/src/diff/compare4LeftBottom@2x.png create mode 100644 platform/icons/src/diff/compare4LeftMiddle.png create mode 100644 platform/icons/src/diff/compare4LeftMiddle@2x.png create mode 100644 platform/icons/src/diff/compare4LeftRight.png create mode 100644 platform/icons/src/diff/compare4LeftRight@2x.png create mode 100644 platform/icons/src/diff/compare4MiddleBottom.png create mode 100644 platform/icons/src/diff/compare4MiddleBottom@2x.png create mode 100644 platform/icons/src/diff/compare4MiddleRight.png create mode 100644 platform/icons/src/diff/compare4MiddleRight@2x.png create mode 100644 platform/icons/src/diff/compare4RightBottom.png create mode 100644 platform/icons/src/diff/compare4RightBottom@2x.png diff --git a/platform/diff-impl/src/com/intellij/diff/merge/TextMergeViewer.java b/platform/diff-impl/src/com/intellij/diff/merge/TextMergeViewer.java index cb75fdd794be..cdecff9a2af6 100644 --- a/platform/diff-impl/src/com/intellij/diff/merge/TextMergeViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/merge/TextMergeViewer.java @@ -244,9 +244,9 @@ public class TextMergeViewer implements MergeTool.MergeViewer { DefaultActionGroup diffGroup = new DefaultActionGroup("Compare With", true); diffGroup.getTemplatePresentation().setIcon(AllIcons.Actions.Diff); - diffGroup.add(new TextShowPartialDiffAction(PartialDiffMode.LEFT_MIDDLE)); - diffGroup.add(new TextShowPartialDiffAction(PartialDiffMode.RIGHT_MIDDLE)); - diffGroup.add(new TextShowPartialDiffAction(PartialDiffMode.LEFT_RIGHT)); + diffGroup.add(new TextShowPartialDiffAction(PartialDiffMode.LEFT_MIDDLE, true)); + diffGroup.add(new TextShowPartialDiffAction(PartialDiffMode.RIGHT_MIDDLE, true)); + diffGroup.add(new TextShowPartialDiffAction(PartialDiffMode.LEFT_RIGHT, true)); diffGroup.add(new ShowDiffWithBaseAction(ThreeSide.LEFT)); diffGroup.add(new ShowDiffWithBaseAction(ThreeSide.BASE)); diffGroup.add(new ShowDiffWithBaseAction(ThreeSide.RIGHT)); diff --git a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java index 8b96b57d2f5d..3e2c1321c9a0 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java @@ -64,9 +64,9 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewerEx { group.add(myEditorSettingsAction); group.add(Separator.getInstance()); - group.add(new TextShowPartialDiffAction(PartialDiffMode.MIDDLE_LEFT)); - group.add(new TextShowPartialDiffAction(PartialDiffMode.MIDDLE_RIGHT)); - group.add(new TextShowPartialDiffAction(PartialDiffMode.LEFT_RIGHT)); + group.add(new TextShowPartialDiffAction(PartialDiffMode.MIDDLE_LEFT, false)); + group.add(new TextShowPartialDiffAction(PartialDiffMode.MIDDLE_RIGHT, false)); + group.add(new TextShowPartialDiffAction(PartialDiffMode.LEFT_RIGHT, false)); group.add(Separator.getInstance()); group.addAll(super.createToolbarActions()); diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/side/ThreesideDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/util/side/ThreesideDiffViewer.java index d66e650b6027..c8f9a3722fee 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/util/side/ThreesideDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/side/ThreesideDiffViewer.java @@ -30,6 +30,7 @@ import com.intellij.diff.tools.util.SimpleDiffPanel; import com.intellij.diff.tools.util.base.ListenerDiffViewerBase; import com.intellij.diff.util.DiffUtil; import com.intellij.diff.util.ThreeSide; +import com.intellij.icons.AllIcons; import com.intellij.idea.ActionsBundle; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.ex.ActionUtil; @@ -196,39 +197,46 @@ public abstract class ThreesideDiffViewer extends Listen @NotNull protected final ThreeSide mySide1; @NotNull protected final ThreeSide mySide2; - public ShowPartialDiffAction(@NotNull PartialDiffMode mode) { + public ShowPartialDiffAction(@NotNull PartialDiffMode mode, boolean hasFourSides) { String id; + Icon icon = null; switch (mode) { case LEFT_MIDDLE: mySide1 = ThreeSide.LEFT; mySide2 = ThreeSide.BASE; id = "Diff.ComparePartial.Base.Left"; + if (!hasFourSides) icon = AllIcons.Diff.LeftDiff; break; case RIGHT_MIDDLE: mySide1 = ThreeSide.RIGHT; mySide2 = ThreeSide.BASE; id = "Diff.ComparePartial.Base.Right"; + if (!hasFourSides) icon = AllIcons.Diff.RightDiff; break; case MIDDLE_LEFT: mySide1 = ThreeSide.BASE; mySide2 = ThreeSide.LEFT; id = "Diff.ComparePartial.Base.Left"; + if (!hasFourSides) icon = AllIcons.Diff.LeftDiff; break; case MIDDLE_RIGHT: mySide1 = ThreeSide.BASE; mySide2 = ThreeSide.RIGHT; id = "Diff.ComparePartial.Base.Right"; + if (!hasFourSides) icon = AllIcons.Diff.RightDiff; break; case LEFT_RIGHT: mySide1 = ThreeSide.LEFT; mySide2 = ThreeSide.RIGHT; id = "Diff.ComparePartial.Left.Right"; + if (!hasFourSides) icon = AllIcons.Diff.BranchDiff; break; default: throw new IllegalArgumentException(); } String text = ActionsBundle.message("action.Diff.ComparePartial.Generic", mySide1.getIndex(), mySide2.getIndex()); getTemplatePresentation().setText(text); + getTemplatePresentation().setIcon(icon); ActionUtil.mergeFrom(this, id); } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/side/ThreesideTextDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/util/side/ThreesideTextDiffViewer.java index cfc8727b16ab..2cb02c6348e4 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/util/side/ThreesideTextDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/side/ThreesideTextDiffViewer.java @@ -364,8 +364,8 @@ public abstract class ThreesideTextDiffViewer extends ThreesideDiffViewerIRRr3Wq)ANY{X-^1h-=#XmzmHJ?raD<8B$<_qf US1+EG0!?J_boFyt=akR{0Kw=faR2}S literal 0 HcmV?d00001 diff --git a/platform/icons/src/diff/compare4LeftMiddle.png b/platform/icons/src/diff/compare4LeftMiddle.png new file mode 100644 index 0000000000000000000000000000000000000000..7903ef42201a49cbc44fb997c04d2b9287951e05 GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`+MX_sAr-fh6Be+oct5X#P4cnO x;x0yqGG>l`DT5`v5=R)GnI{>3<&`jCU|4tK&u@mg@}@v-44$rjF6*2UngG7>8}3FthDvc01U?%+Ngh Wi`bFmlRtr`F?hQAxvX*)Y zzUeFz?lK%&%*K<+e8N|snI++$s#x&-21aHEtCByz6}Zn_18QXOboFyt=akR{02SjM AiU0rr literal 0 HcmV?d00001 diff --git a/platform/icons/src/diff/compare4LeftRight@2x.png b/platform/icons/src/diff/compare4LeftRight@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bc364e788a4c0544b811a998183e25c27ad141fa GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzXHOT$kcwN$2@pe3qT&kUVm^t|11p%_WDQ<5Onlz(@VcA?>tcrRZ;Q<2N)J3JKcFE|$iVQx W{)?E#|1u7saSWcWelF{r5}E*fx+o+7 literal 0 HcmV?d00001 diff --git a/platform/icons/src/diff/compare4MiddleBottom.png b/platform/icons/src/diff/compare4MiddleBottom.png new file mode 100644 index 0000000000000000000000000000000000000000..6c2f0e29ea53078a7c6f8735de0c25a490fc17b1 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`x}GkMAr-fh6BdZBct5X#O;ULA zLdF(O$%b`#R~j5s8IHbeShcb*!e$Q70u}}aog@hk?Pqm6ff^Y+UHx3vIVCg!05C%x A&Hw-a literal 0 HcmV?d00001 diff --git a/platform/icons/src/diff/compare4MiddleBottom@2x.png b/platform/icons/src/diff/compare4MiddleBottom@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e12cc808b7d929084aada9b8f085a2db75cdf728 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzS5FtmkcwN$2@!n2{js T_dWAF&_D)HS3j3^P6~ literal 0 HcmV?d00001 diff --git a/platform/icons/src/diff/compare4MiddleRight@2x.png b/platform/icons/src/diff/compare4MiddleRight@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b36982e33b2d3c459bf87659867568265b0a00db GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzCr=m0kcwN$2@;#Qy>+kR%ZgB{EaHlMzT U9nv}&3^a|w)78&qol`;+05LNsDF6Tf literal 0 HcmV?d00001 diff --git a/platform/icons/src/diff/compare4RightBottom.png b/platform/icons/src/diff/compare4RightBottom.png new file mode 100644 index 0000000000000000000000000000000000000000..bd460441f4d287f2ad7e112b135de297ab5e4b08 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`TAnVBAr-fh6Bekict5X#O>(if wS%ZPy#z1Day^JEunO7|{Ncvb{)F8ybu>HLRhx6}MqCi~?p00i_>zopr0IYNy#{d8T literal 0 HcmV?d00001 diff --git a/platform/icons/src/diff/compare4RightBottom@2x.png b/platform/icons/src/diff/compare4RightBottom@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9610fed405a289a73757034251125a097af9443 GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzXHOT$kcwN$2@xfWFqp%TsK8I{Et80PUL$ey%% RJ{f2ngQu&X%Q~loCIDjQCY%5O literal 0 HcmV?d00001 diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml index 54155575829a..e65aa5b81f49 100644 --- a/platform/platform-resources/src/idea/PlatformActions.xml +++ b/platform/platform-resources/src/idea/PlatformActions.xml @@ -206,13 +206,13 @@ - - - + + + - - - + + + diff --git a/platform/util/src/com/intellij/icons/AllIcons.java b/platform/util/src/com/intellij/icons/AllIcons.java index 5f17e193984e..5a23c329e9b0 100644 --- a/platform/util/src/com/intellij/icons/AllIcons.java +++ b/platform/util/src/com/intellij/icons/AllIcons.java @@ -343,6 +343,12 @@ public class AllIcons { public static final Icon ArrowRight = IconLoader.getIcon("/diff/arrowRight.png"); // 11x11 public static final Icon ArrowRightDown = IconLoader.getIcon("/diff/arrowRightDown.png"); // 11x11 public static final Icon BranchDiff = IconLoader.getIcon("/diff/branchDiff.png"); // 16x16 + public static final Icon Compare4LeftBottom = IconLoader.getIcon("/diff/compare4LeftBottom.png"); // 16x16 + public static final Icon Compare4LeftMiddle = IconLoader.getIcon("/diff/compare4LeftMiddle.png"); // 16x16 + public static final Icon Compare4LeftRight = IconLoader.getIcon("/diff/compare4LeftRight.png"); // 16x16 + public static final Icon Compare4MiddleBottom = IconLoader.getIcon("/diff/compare4MiddleBottom.png"); // 16x16 + public static final Icon Compare4MiddleRight = IconLoader.getIcon("/diff/compare4MiddleRight.png"); // 16x16 + public static final Icon Compare4RightBottom = IconLoader.getIcon("/diff/compare4RightBottom.png"); // 16x16 public static final Icon CurrentLine = IconLoader.getIcon("/diff/currentLine.png"); // 16x16 @SuppressWarnings("unused") From e5391ed7714f1eaa70706055226a76e5bcbe3a43 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 13 Apr 2017 15:03:16 +0200 Subject: [PATCH 44/86] unused declaration inspection: ensure correct presentation is used --- .../Java9UnusedServiceImplementationsTest.kt | 8 ++++---- .../com/intellij/testFramework/InspectionTestCase.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/Java9UnusedServiceImplementationsTest.kt b/java/java-tests/testSrc/com/intellij/codeInspection/Java9UnusedServiceImplementationsTest.kt index 1976ef5ebe94..c423f01fdb51 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/Java9UnusedServiceImplementationsTest.kt +++ b/java/java-tests/testSrc/com/intellij/codeInspection/Java9UnusedServiceImplementationsTest.kt @@ -16,16 +16,16 @@ package com.intellij.codeInspection import com.intellij.analysis.AnalysisScope -import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection -import com.intellij.codeInspection.ex.GlobalInspectionToolWrapper import com.intellij.idea.Bombed import com.intellij.openapi.application.ex.PathManagerEx import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil.loadFileText +import com.intellij.testFramework.InspectionTestCase import com.intellij.testFramework.InspectionTestUtil import com.intellij.testFramework.createGlobalContextForTool import com.intellij.testFramework.fixtures.LightJava9ModulesCodeInsightFixtureTestCase -import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor.* +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor.M2 +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor.MAIN import org.intellij.lang.annotations.Language import org.jetbrains.annotations.NonNls @@ -78,7 +78,7 @@ class Java9UnusedServiceImplementationsTest : LightJava9ModulesCodeInsightFixtur val implText = String(loadFileText(sourceFile!!)) addFile("my/impl/MyServiceImpl.java", implText, M2) - val toolWrapper = GlobalInspectionToolWrapper(UnusedDeclarationInspection()) + val toolWrapper = InspectionTestCase.getUnusedDeclarationWrapper() val scope = AnalysisScope(project) val globalContext = createGlobalContextForTool(scope, project, listOf(toolWrapper)) InspectionTestUtil.runTool(toolWrapper, scope, globalContext) diff --git a/java/testFramework/src/com/intellij/testFramework/InspectionTestCase.java b/java/testFramework/src/com/intellij/testFramework/InspectionTestCase.java index 5ad8b8655f5b..5f384c27294e 100644 --- a/java/testFramework/src/com/intellij/testFramework/InspectionTestCase.java +++ b/java/testFramework/src/com/intellij/testFramework/InspectionTestCase.java @@ -62,7 +62,7 @@ public abstract class InspectionTestCase extends PsiTestCase { private EntryPoint myUnusedCodeExtension; private VirtualFile ext_src; - protected static GlobalInspectionToolWrapper getUnusedDeclarationWrapper() { + public static GlobalInspectionToolWrapper getUnusedDeclarationWrapper() { InspectionEP ep = new InspectionEP(); ep.presentation = UnusedDeclarationPresentation.class.getName(); ep.implementationClass = UnusedDeclarationInspection.class.getName(); From 69577a0c03c3015d43631ed5c90ff0fd781082a1 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 13 Apr 2017 16:05:31 +0300 Subject: [PATCH 45/86] use "null" editor highlighter (which doesn't provide any attributes) in editor by default (should resolve IDEA-171119) there's no need to return attributes for HighlighterColors.TEXT key - they will be applied by IterationState anyway --- .../intellij/openapi/editor/impl/EditorImpl.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index f2f6f014f445..8081f9fdde73 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -507,7 +507,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } }); - EditorHighlighter highlighter = new EmptyEditorHighlighter(myScheme.getAttributes(HighlighterColors.TEXT)); + EditorHighlighter highlighter = new NullEditorHighlighter(); setHighlighter(highlighter); myEditorComponent = new EditorComponentImpl(this); @@ -4602,4 +4602,18 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi myView.drawChars(g, data, start, end, x, y, color, fontInfo); } } + + private static class NullEditorHighlighter extends EmptyEditorHighlighter { + private static final TextAttributes NULL_ATTRIBUTES = new TextAttributes(); + + public NullEditorHighlighter() { + super(NULL_ATTRIBUTES); + } + + @Override + public void setAttributes(TextAttributes attributes) {} + + @Override + public void setColorScheme(@NotNull EditorColorsScheme scheme) {} + } } From ea6807a89adb0e02ebf953b4f8b53552ca3cc37c Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 13 Apr 2017 16:16:24 +0300 Subject: [PATCH 46/86] restored Kotlin plugin version --- build/dependencies/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/dependencies/gradle.properties b/build/dependencies/gradle.properties index 677173d30e4f..512b8b26ec8c 100644 --- a/build/dependencies/gradle.properties +++ b/build/dependencies/gradle.properties @@ -1,5 +1,5 @@ #The file might be automatically updated. Comments and empty lines will be removed. #Thu Apr 13 15:04:25 MSK 2017 -kotlinPluginBuild=1.1.1-release-IJ2017.1-1 +kotlinPluginBuild=1.1.2-eap-69-IJ2017.2-1:EAP-1.1 jetSignBuild=42.30 jdkBuild=u152b819.2 From 1d77df03bc5f1ebf5ff12f04d37da63213895f9f Mon Sep 17 00:00:00 2001 From: Alexey Utkin Date: Thu, 13 Apr 2017 16:18:38 +0300 Subject: [PATCH 47/86] CPP-9359 Freeze while calculating run configuration for Google Test #3 (+rename, +goto, test-macro-in-context fast probe) --- .../intellij/openapi/progress/util/PotemkinProgress.java | 8 ++++++-- .../intellij/openapi/progress/util/ProgressWindow.java | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/progress/util/PotemkinProgress.java b/platform/platform-impl/src/com/intellij/openapi/progress/util/PotemkinProgress.java index b78f1b570a4e..9e1caefe6072 100644 --- a/platform/platform-impl/src/com/intellij/openapi/progress/util/PotemkinProgress.java +++ b/platform/platform-impl/src/com/intellij/openapi/progress/util/PotemkinProgress.java @@ -127,8 +127,8 @@ public class PotemkinProgress extends ProgressWindow { } @Nullable - private JRootPane considerShowingDialog(long now) { - if (now - myLastUiUpdate > DEFAULT_PROGRESS_DIALOG_POSTPONE_TIME_MILLIS) { + protected JRootPane considerShowingDialog(long now) { + if (isReadyShowing(now)) { getDialog().myRepaintRunnable.run(); showDialog(); return getDialog().getPanel().getRootPane(); @@ -136,6 +136,10 @@ public class PotemkinProgress extends ProgressWindow { return null; } + protected boolean isReadyShowing(long now) { + return now - myLastUiUpdate > myDelayInMillis; + } + private boolean timeToPaint(long now) { if (now - myLastUiUpdate <= ProgressDialog.UPDATE_INTERVAL) { return false; diff --git a/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressWindow.java b/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressWindow.java index 9caffb4da0a3..8404c0b9e994 100644 --- a/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressWindow.java +++ b/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressWindow.java @@ -61,7 +61,7 @@ public class ProgressWindow extends ProgressIndicatorBase implements BlockingPro protected boolean myBackgrounded; private String myProcessId = ""; @Nullable private volatile Runnable myBackgroundHandler; - private int myDelayInMillis = DEFAULT_PROGRESS_DIALOG_POSTPONE_TIME_MILLIS; + protected int myDelayInMillis = DEFAULT_PROGRESS_DIALOG_POSTPONE_TIME_MILLIS; @FunctionalInterface public interface Listener { @@ -293,7 +293,7 @@ public class ProgressWindow extends ProgressIndicatorBase implements BlockingPro SwingUtilities.invokeLater(EmptyRunnable.INSTANCE); // Just to give blocking dispatching a chance to go out. } - private boolean isDialogShowing() { + protected boolean isDialogShowing() { return myDialog != null && myDialog.getPanel() != null && myDialog.getPanel().isShowing(); } From ab242e1db51bce87c62afbfce8fbd34c4718aa44 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 12 Apr 2017 13:24:25 +0300 Subject: [PATCH 48/86] IDEA-169924 add utility methods to BreadcrumbsInfoProvider --- .../yaml/breadcrumbs/YAMLBreadcrumbsTest.java | 3 +-- .../breadcrumbs/BreadcrumbsXmlWrapper.java | 10 +------ .../breadcrumbs/BreadcrumbsInfoProvider.java | 26 ++++++++++++++++++- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java b/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java index bff722295383..58370e072462 100644 --- a/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java +++ b/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java @@ -100,8 +100,7 @@ public class YAMLBreadcrumbsTest extends LightPlatformCodeInsightFixtureTestCase } final Language language = element.getContainingFile().getLanguage(); - final BreadcrumbsInfoProvider provider = ContainerUtil.find(Extensions.getExtensions(BreadcrumbsInfoProvider.EP_NAME), - (p) -> Arrays.asList(p.getLanguages()).contains(language)); + final BreadcrumbsInfoProvider provider = BreadcrumbsInfoProvider.find(language::equals); if (provider == null) { return Collections.emptyList(); } diff --git a/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java b/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java index 2a1729cd84e3..eb0f31205fa4 100644 --- a/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java +++ b/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java @@ -449,15 +449,7 @@ public class BreadcrumbsXmlWrapper extends JComponent implements Disposable { @Nullable private static BreadcrumbsInfoProvider getInfoProvider(@NotNull final Language language) { - for (final BreadcrumbsInfoProvider provider : Extensions.getExtensions(BreadcrumbsInfoProvider.EP_NAME)) { - for (final Language language1 : provider.getLanguages()) { - if (language.isKindOf(language1)) { - return provider; - } - } - } - - return null; + return BreadcrumbsInfoProvider.find(supported -> supported.isKindOf(language)); } private static class MyUpdate extends Update { diff --git a/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsInfoProvider.java b/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsInfoProvider.java index 9ddf8875132b..56d87d74034a 100644 --- a/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsInfoProvider.java +++ b/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsInfoProvider.java @@ -28,8 +28,12 @@ import com.intellij.openapi.extensions.ExtensionPointName; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.LinkedHashMap; +import java.util.function.Predicate; + public abstract class BreadcrumbsInfoProvider { - public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.breadcrumbsInfoProvider"); + public static final ExtensionPointName EP_NAME + = ExtensionPointName.create("com.intellij.breadcrumbsInfoProvider"); public abstract Language[] getLanguages(); @@ -45,4 +49,24 @@ public abstract class BreadcrumbsInfoProvider { @Nullable public abstract String getElementTooltip(@NotNull final PsiElement e); + + @NotNull + public static Iterable getSupportedLanguages() { + LinkedHashMap map = new LinkedHashMap<>(); + for (BreadcrumbsInfoProvider provider : EP_NAME.getExtensions()) { + for (Language language : provider.getLanguages()) { + map.put(language.getID(), language); + } + } + return map.values(); + } + + public static BreadcrumbsInfoProvider find(Predicate predicate) { + for (BreadcrumbsInfoProvider provider : EP_NAME.getExtensions()) { + for (Language language : provider.getLanguages()) { + if (predicate.test(language)) return provider; + } + } + return null; + } } \ No newline at end of file From 0d150c7f0256245d071a3854ca2fd15743581583 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 12 Apr 2017 22:10:33 +0300 Subject: [PATCH 49/86] add helper methods to search something when configurable is selected --- .../options/colors/ColorAndFontOptions.java | 24 +++++++++++++++++++ .../colors/JumpToColorsAndFontsAction.java | 14 ++++------- .../ex/SeverityEditorDialog.java | 16 +++---------- .../intellij/openapi/options/ex/Settings.java | 12 ++++++++++ 4 files changed, 43 insertions(+), 23 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java index 7abc51bb7456..dbea5da7dd00 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java @@ -27,6 +27,8 @@ import com.intellij.ide.ui.laf.darcula.DarculaInstaller; import com.intellij.ide.ui.laf.darcula.DarculaLookAndFeelInfo; import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.Disposable; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.application.ApplicationBundle; import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.openapi.editor.colors.*; @@ -40,6 +42,7 @@ import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SchemeManager; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.options.colors.*; +import com.intellij.openapi.options.ex.Settings; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.ui.DialogWrapper; @@ -71,6 +74,7 @@ import javax.swing.*; import java.awt.*; import java.util.*; import java.util.List; +import java.util.function.Function; public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract implements EditorOptionsProvider, SchemesModel { @@ -1401,4 +1405,24 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract return "Color And Fonts for "+getDisplayName(); } } + + public static Runnable getColorSelector(DataProvider provider, String search, String name) { + return getSelector(Settings.KEY.getData(provider), search, options -> options.findSubConfigurable(name)); + } + + public static Runnable getColorSelector(DataContext context, String search, Class type) { + return getSelector(Settings.KEY.getData(context), search, options -> options.findSubConfigurable(type)); + } + + private static Runnable getSelector(Settings settings, String search, Function function) { + if (settings == null) return null; + + ColorAndFontOptions options = settings.find(ColorAndFontOptions.class); + if (options == null) return null; + + SearchableConfigurable page = function.apply(options); + if (page == null) return null; + + return () -> settings.select(page, search); + } } diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/JumpToColorsAndFontsAction.java b/platform/lang-impl/src/com/intellij/application/options/colors/JumpToColorsAndFontsAction.java index 047f24a8286e..d33363b579f5 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/JumpToColorsAndFontsAction.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/JumpToColorsAndFontsAction.java @@ -36,16 +36,13 @@ import com.intellij.openapi.editor.markup.EffectType; import com.intellij.openapi.editor.markup.MarkupModel; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.fileTypes.SyntaxHighlighter; -import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.options.colors.AttributesDescriptor; import com.intellij.openapi.options.colors.ColorSettingsPage; import com.intellij.openapi.options.colors.ColorSettingsPages; -import com.intellij.openapi.options.ex.Settings; import com.intellij.openapi.options.newEditor.SettingsDialog; import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopupFactory; -import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; @@ -65,6 +62,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import static com.intellij.application.options.colors.ColorAndFontOptions.getColorSelector; import static com.intellij.ui.SimpleTextAttributes.*; /** @@ -189,13 +187,9 @@ public class JumpToColorsAndFontsAction extends DumbAwareAction { private static boolean openSettingsAndSelectKey(@NotNull Project project, @NotNull ColorSettingsPage page, @NotNull AttributesDescriptor descriptor) { SettingsDialog dialog = (SettingsDialog)ShowSettingsUtilImpl.getDialog( project, ShowSettingsUtilImpl.getConfigurableGroups(project, true), null); - Settings settings = Settings.KEY.getData(dialog); - ColorAndFontOptions configurable0 = settings == null ? null : settings.find(ColorAndFontOptions.class); - SearchableConfigurable configurable = configurable0 == null ? null : configurable0.findSubConfigurable(page.getDisplayName()); - if (configurable == null) return false; - Runnable runnable = configurable.enableSearch(descriptor.getDisplayName()); - ActionCallback callback = settings.select(configurable); - if (runnable != null) callback.doWhenDone(runnable); + Runnable selector = getColorSelector(dialog, descriptor.getDisplayName(), page.getDisplayName()); + if (selector == null) return false; + selector.run(); dialog.show(); return true; } diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/SeverityEditorDialog.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/SeverityEditorDialog.java index 666abce56f06..67126078cb59 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/SeverityEditorDialog.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/SeverityEditorDialog.java @@ -36,7 +36,6 @@ import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.options.ShowSettingsUtil; -import com.intellij.openapi.options.ex.Settings; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.InputValidator; import com.intellij.openapi.ui.Messages; @@ -238,18 +237,9 @@ public class SeverityEditorDialog extends DialogWrapper { } myOptionsList.clearSelection(); final DataContext dataContext = DataManager.getInstance().getDataContext(myPanel); - Settings settings = Settings.KEY.getData(dataContext); - if (settings != null) { - ColorAndFontOptions colorAndFontOptions = settings.find(ColorAndFontOptions.class); - assert colorAndFontOptions != null; - final SearchableConfigurable javaPage = colorAndFontOptions.findSubConfigurable(InspectionColorSettingsPage.class); - LOG.assertTrue(javaPage != null); - settings.select(javaPage).doWhenDone(() -> { - final Runnable runnable = javaPage.enableSearch(toConfigure); - if (runnable != null) { - SwingUtilities.invokeLater(runnable); - } - }); + Runnable selector = ColorAndFontOptions.getColorSelector(dataContext, toConfigure, InspectionColorSettingsPage.class); + if (selector != null) { + selector.run(); } else { ColorAndFontOptions colorAndFontOptions = new ColorAndFontOptions(); diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/Settings.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/Settings.java index 829f2e2dd63a..7fd93878c44f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/ex/Settings.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/Settings.java @@ -18,6 +18,7 @@ package com.intellij.openapi.options.ex; import com.intellij.openapi.actionSystem.DataKey; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurableGroup; +import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.options.UnnamedConfigurable; import com.intellij.openapi.util.ActionCallback; import org.jetbrains.annotations.NotNull; @@ -56,6 +57,17 @@ public abstract class Settings { : ActionCallback.REJECTED; } + @NotNull + public final ActionCallback select(Configurable configurable, String option) { + ActionCallback callback = select(configurable); + if (configurable instanceof SearchableConfigurable) { + SearchableConfigurable searchable = (SearchableConfigurable)configurable; + Runnable search = searchable.enableSearch(option); + if (search != null) callback.doWhenDone(search); + } + return callback; + } + protected abstract ActionCallback selectImpl(Configurable configurable); private T unwrap(Configurable configurable, Class type) { From 96a53d63c5073539b7e2479b7a42490172e61a87 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Thu, 13 Apr 2017 15:03:08 +0300 Subject: [PATCH 50/86] IDEA-169924 Registry option to use small font for breadcrumbs --- platform/util/resources/misc/registry.properties | 3 +++ xml/impl/src/com/intellij/xml/breadcrumbs/PsiBreadcrumbs.java | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index e0227d8464ad..7bbe4ba24b8e 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -935,6 +935,9 @@ editor.breadcrumbs.highlight.on.hover.description=Highlight corresponding ranges editor.breadcrumbs.above=false editor.breadcrumbs.above.description=Show breadcrumbs above or below an editor +editor.breadcrumbs.small=false +editor.breadcrumbs.small.description=Use small font to show breadcrumbs + testDiscovery.enabled=false testDiscovery.enabled.description=Enable instrumentation during tests to be able to start 'tests which pass this code' later diff --git a/xml/impl/src/com/intellij/xml/breadcrumbs/PsiBreadcrumbs.java b/xml/impl/src/com/intellij/xml/breadcrumbs/PsiBreadcrumbs.java index ce1f7cc82ed1..cf721a04b826 100644 --- a/xml/impl/src/com/intellij/xml/breadcrumbs/PsiBreadcrumbs.java +++ b/xml/impl/src/com/intellij/xml/breadcrumbs/PsiBreadcrumbs.java @@ -45,7 +45,9 @@ final class PsiBreadcrumbs extends Breadcrumbs { @Override public void setFont(Font font) { - super.setFont(RelativeFont.SMALL.derive(font)); + super.setFont(Registry.is("editor.breadcrumbs.small") + ? RelativeFont.SMALL.derive(font) + : font); } @Override From ecbf01467461a86f13fb34d07aab54b75bd7bc32 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Thu, 13 Apr 2017 15:38:16 +0300 Subject: [PATCH 51/86] IDEA-169924 update default colors for breadcrumbs --- .../platform-resources/src/DefaultColorSchemesManager.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/platform-resources/src/DefaultColorSchemesManager.xml b/platform/platform-resources/src/DefaultColorSchemesManager.xml index 0cddc35dc6e1..474265c208a4 100644 --- a/platform/platform-resources/src/DefaultColorSchemesManager.xml +++ b/platform/platform-resources/src/DefaultColorSchemesManager.xml @@ -1045,7 +1045,7 @@