From 4cab2771b4a9fc3b4685d7d405f50d1446b8cc90 Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Thu, 22 Jan 2015 18:47:59 +0300 Subject: [PATCH 1/9] Added getIcon() method to FileIndentOptionsProvider (CR-IC-7180) --- .../psi/codeStyle/FileIndentOptionsProvider.java | 10 ++++++++++ .../DetectedIndentOptionsNotificationProvider.java | 3 +++ 2 files changed, 13 insertions(+) diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/FileIndentOptionsProvider.java b/platform/lang-api/src/com/intellij/psi/codeStyle/FileIndentOptionsProvider.java index bc4d6cf63065..3003d23e4f06 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/FileIndentOptionsProvider.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/FileIndentOptionsProvider.java @@ -22,6 +22,8 @@ import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; + /** * @author Rustam Vishnyakov */ @@ -54,6 +56,14 @@ public abstract class FileIndentOptionsProvider { return null; } + /** + * @return The icon to be displayed in a notification message, can be null (no icon). + */ + @Nullable + public Icon getIcon() { + return null; + } + /** * @return True if the provider can be disabled (default is false). */ diff --git a/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/DetectedIndentOptionsNotificationProvider.java b/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/DetectedIndentOptionsNotificationProvider.java index 9514d4c3bb8b..1a9f18571ae3 100644 --- a/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/DetectedIndentOptionsNotificationProvider.java +++ b/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/DetectedIndentOptionsNotificationProvider.java @@ -80,6 +80,9 @@ public class DetectedIndentOptionsNotificationProvider extends EditorNotificatio final EditorNotificationPanel panel = new EditorNotificationPanel() .text(ApplicationBundle.message("code.style.indents.detector.message", provider.getDisplayName())); + if (provider.getIcon() != null) { + panel.icon(provider.getIcon()); + } panel.createActionLabel( ApplicationBundle.message("code.style.indents.detector.accept"), new Runnable() { From 8a6d1489b8f08b5f704074a255231ee937f9a2b0 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 22 Jan 2015 16:38:57 +0100 Subject: [PATCH 2/9] make IG test light --- .../UnnecessaryExplicitNumericCast.java | 30 ++--- .../expected.xml | 110 ------------------ ...saryExplicitNumericCastInspectionTest.java | 17 ++- 3 files changed, 27 insertions(+), 130 deletions(-) delete mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/expected.xml diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/UnnecessaryExplicitNumericCast.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/UnnecessaryExplicitNumericCast.java index a625c87f7062..f51a507dcc40 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/UnnecessaryExplicitNumericCast.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/UnnecessaryExplicitNumericCast.java @@ -6,32 +6,32 @@ package com.siyeh.igtest.numeric.unnecessary_explicit_numeric_cast; public class UnnecessaryExplicitNumericCast { void a(byte b) { - double d = (double) 1; - d = (double) 1.0f; - d = (double) b; - char c = (char) 1; + double d = (double) 1; + d = (double) 1.0f; + d = (double) b; + char c = (char) 1; b = (int)7; } double b(int a, byte b) { - return (double)a * (double) b; + return (double)a * (double) b; } public static void main(String[] args) { int i = 10; - double d = 123.0 / (456.0 * (double) i); + double d = 123.0 / (456.0 * (double) i); } void unary() { byte b = 2; - int a[] = new int[(int)b]; - final int c = a[((int) b)]; - int[] a2 = new int[]{(int)b}; - int[] a3 = {(int)b}; - final int result = (int) b << 1; - c((int)b); - new UnnecessaryExplicitNumericCast((long)b); + int a[] = new int[(int)b]; + final int c = a[((int) b)]; + int[] a2 = new int[]{(int)b}; + int[] a3 = {(int)b}; + final int result = (int) b << 1; + c((int)b); + new UnnecessaryExplicitNumericCast((long)b); } void c(int i) {} @@ -43,7 +43,7 @@ public class UnnecessaryExplicitNumericCast { void source() { target((int)'a'); - target2((int)'b'); + target2((int)'b'); } void target(int c) {} void target(char c) {} @@ -56,7 +56,7 @@ public class UnnecessaryExplicitNumericCast { void a(float angleFromTo) { float f = (float) Math.cos(0.5) * 1.0f; // necessary - final long l = (long) i() * 9L; + final long l = (long) i() * 9L; float angle2 = angleFromTo + (float) (Math.PI / 2); } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/expected.xml deleted file mode 100644 index 1e24f7ab3d58..000000000000 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/expected.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - UnnecessaryExplicitNumericCast.java - 9 - Unnecessary explicit numeric cast - '1' unnecessarily cast to <code>double</code> - - - - UnnecessaryExplicitNumericCast.java - 10 - Unnecessary explicit numeric cast - '1.0f' unnecessarily cast to <code>double</code> - - - - UnnecessaryExplicitNumericCast.java - 11 - Unnecessary explicit numeric cast - 'b' unnecessarily cast to <code>double</code> - - - - UnnecessaryExplicitNumericCast.java - 12 - Unnecessary explicit numeric cast - '1' unnecessarily cast to <code>char</code> - - - - UnnecessaryExplicitNumericCast.java - 17 - Unnecessary explicit numeric cast - 'a' unnecessarily cast to <code>double</code> - - - - UnnecessaryExplicitNumericCast.java - 17 - Unnecessary explicit numeric cast - 'b' unnecessarily cast to <code>double</code> - - - - UnnecessaryExplicitNumericCast.java - 23 - Unnecessary explicit numeric cast - 'i' unnecessarily cast to <code>double</code> - - - - UnnecessaryExplicitNumericCast.java - 28 - Unnecessary explicit numeric cast - 'b' unnecessarily cast to <code>int</code> - - - - UnnecessaryExplicitNumericCast.java - 29 - Unnecessary explicit numeric cast - 'b' unnecessarily cast to <code>int</code> - - - - UnnecessaryExplicitNumericCast.java - 30 Unnecessary explicit numeric cast - 'b' unnecessarily cast to <code>int</code> - - - - UnnecessaryExplicitNumericCast.java - 31 Unnecessary explicit numeric cast - 'b' unnecessarily cast to <code>int</code> - - - - UnnecessaryExplicitNumericCast.java - 32 - Unnecessary explicit numeric cast - 'b' unnecessarily cast to <code>int</code> - - - - UnnecessaryExplicitNumericCast.java - 33 Unnecessary explicit numeric cast - 'b' unnecessarily cast to <code>int</code> - - - - UnnecessaryExplicitNumericCast.java - 34 Unnecessary explicit numeric cast - 'b' unnecessarily cast to <code>long</code> - - - - UnnecessaryExplicitNumericCast.java - 46 - Unnecessary explicit numeric cast - ''b'' unnecessarily cast to <code>int</code> #loc - - - - UnnecessaryExplicitNumericCast.java - 59 - Unnecessary explicit numeric cast - 'i()' unnecessarily cast to <code>long</code> #loc - - \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/UnnecessaryExplicitNumericCastInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/UnnecessaryExplicitNumericCastInspectionTest.java index b76290d4e401..856ec0034d1f 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/UnnecessaryExplicitNumericCastInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/UnnecessaryExplicitNumericCastInspectionTest.java @@ -1,11 +1,18 @@ package com.siyeh.ig.numeric; -import com.siyeh.ig.IGInspectionTestCase; +import com.intellij.codeInspection.InspectionProfileEntry; +import com.siyeh.ig.LightInspectionTestCase; +import org.jetbrains.annotations.Nullable; -public class UnnecessaryExplicitNumericCastInspectionTest extends IGInspectionTestCase { +public class UnnecessaryExplicitNumericCastInspectionTest extends LightInspectionTestCase { - public void test() throws Exception { - doTest("com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast", - new UnnecessaryExplicitNumericCastInspection()); + public void testUnnecessaryExplicitNumericCast() throws Exception { + doTest(); + } + + @Nullable + @Override + protected InspectionProfileEntry getInspection() { + return new UnnecessaryExplicitNumericCastInspection(); } } \ No newline at end of file From 767c82e8daadbd970dd35b8279bf03b9bbbf1033 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 22 Jan 2015 16:50:23 +0100 Subject: [PATCH 3/9] IDEA-135509 (Numeric issues | Unnecessary explicit numeric cast inspection Incorrect warning) --- .../UnnecessaryExplicitNumericCastInspection.java | 5 ++++- .../UnnecessaryExplicitNumericCast.java | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/UnnecessaryExplicitNumericCastInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/UnnecessaryExplicitNumericCastInspection.java index 30a1e66f4f16..01af00508ac1 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/UnnecessaryExplicitNumericCastInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/UnnecessaryExplicitNumericCastInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2013 Bas Leijdekkers + * Copyright 2011-2015 Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -163,6 +163,9 @@ public class UnnecessaryExplicitNumericCastInspection extends BaseInspection { return true; } if (PsiType.INT.equals(castType)) { + if (PsiType.CHAR.equals(operandType) && TypeUtils.getStringType(polyadicExpression).equals(polyadicExpression.getType())) { + return true; + } return PsiType.LONG.equals(operandType) || PsiType.FLOAT.equals(operandType) || PsiType.DOUBLE.equals(operandType); } if (PsiType.LONG.equals(castType) || PsiType.FLOAT.equals(castType) || PsiType.DOUBLE.equals(castType)) { diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/UnnecessaryExplicitNumericCast.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/UnnecessaryExplicitNumericCast.java index f51a507dcc40..8f98a9dedba3 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/UnnecessaryExplicitNumericCast.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/numeric/unnecessary_explicit_numeric_cast/UnnecessaryExplicitNumericCast.java @@ -67,4 +67,19 @@ public class UnnecessaryExplicitNumericCast { boolean redundantTypeCast(long l) { return 0L == (long)l; } + + void necessary() { + char[] keyChar = {'\t', '\n', '\r', '\f', 'a', '0'}; + for (char cc : keyChar) { + String result; + if (cc < 28) { + result = "Ascii " + (int)cc; + } + else { + result = "k " + cc + " (" + (int)cc + ')'; + } + System.out.println(result); + } + } + } From 85c98cce78b80efbb8a43d087868d291f57cfc4c Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 22 Jan 2015 17:28:59 +0100 Subject: [PATCH 4/9] NotNull --- .../intellij/xdebugger/impl/breakpoints/XBreakpointBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointBase.java index 4ee505afec81..83f1220b6d32 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointBase.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointBase.java @@ -15,7 +15,6 @@ */ package com.intellij.xdebugger.impl.breakpoints; -import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.ActionGroup; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.components.ComponentSerializationUtil; @@ -318,6 +317,7 @@ public class XBreakpointBase, P extends XBreakpointP return Collections.emptyList(); } + @NotNull public String getDescription() { @NonNls StringBuilder builder = StringBuilderSpinAllocator.alloc(); try { From a9a3532c3c591c1f23b4f3a6a1f2b5b45f03f8bf Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 22 Jan 2015 17:29:52 +0100 Subject: [PATCH 5/9] use all found locations to set breakpoint WEB-11389 NullPointerException in plugin JavaScript Debugger --- platform/platform-impl/src/org/jetbrains/io/JsonUtil.java | 3 ++- .../src/org/jetbrains/io/jsonRpc/JsonRpcServer.java | 4 ++-- .../backend/src/org/jetbrains/concurrency/Promise.java | 5 +++-- .../src/org/jetbrains/debugger/BreakpointManagerBase.java | 1 + .../backend/src/org/jetbrains/debugger/Script.java | 1 + .../backend/src/org/jetbrains/debugger/ScriptManager.java | 4 +--- .../src/org/jetbrains/debugger/ScriptManagerBase.java | 3 +-- 7 files changed, 11 insertions(+), 10 deletions(-) diff --git a/platform/platform-impl/src/org/jetbrains/io/JsonUtil.java b/platform/platform-impl/src/org/jetbrains/io/JsonUtil.java index ebc46a882d57..04f5e1406d01 100644 --- a/platform/platform-impl/src/org/jetbrains/io/JsonUtil.java +++ b/platform/platform-impl/src/org/jetbrains/io/JsonUtil.java @@ -1,5 +1,6 @@ package org.jetbrains.io; +import com.intellij.util.ArrayUtil; import com.intellij.util.SmartList; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; @@ -76,7 +77,7 @@ public class JsonUtil { public static Object[] nextArray(JsonReaderEx reader) { List list = nextList(reader); - return list.toArray(new Object[list.size()]); + return ArrayUtil.toObjectArray(list); } public static Map nextObject(JsonReaderEx reader) { diff --git a/platform/platform-impl/src/org/jetbrains/io/jsonRpc/JsonRpcServer.java b/platform/platform-impl/src/org/jetbrains/io/jsonRpc/JsonRpcServer.java index f1fb05038398..73dee8c76ad6 100644 --- a/platform/platform-impl/src/org/jetbrains/io/jsonRpc/JsonRpcServer.java +++ b/platform/platform-impl/src/org/jetbrains/io/jsonRpc/JsonRpcServer.java @@ -135,7 +135,7 @@ public class JsonRpcServer implements MessageServer { if (reader.hasNext()) { List list = new SmartList(); JsonUtil.readListBody(reader, list); - parameters = list.toArray(new Object[list.size()]); + parameters = ArrayUtil.toObjectArray(list); } else { parameters = ArrayUtilRt.EMPTY_OBJECT_ARRAY; @@ -360,7 +360,7 @@ public class JsonRpcServer implements MessageServer { } @Override - public T read(@SuppressWarnings("UnnecessaryFullyQualifiedName") com.google.gson.stream.JsonReader in) throws IOException { + public T read(com.google.gson.stream.JsonReader in) throws IOException { throw new UnsupportedOperationException(); } } diff --git a/platform/script-debugger/backend/src/org/jetbrains/concurrency/Promise.java b/platform/script-debugger/backend/src/org/jetbrains/concurrency/Promise.java index 221ee48fe4a6..a8d99229e738 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/concurrency/Promise.java +++ b/platform/script-debugger/backend/src/org/jetbrains/concurrency/Promise.java @@ -14,7 +14,7 @@ public abstract class Promise { public static final Promise REJECTED = new RejectedPromise(createError("rejected")); @NotNull - public static Throwable createError(@NotNull String error) { + public static RuntimeException createError(@NotNull String error) { return new MessageError(error); } @@ -173,7 +173,8 @@ public abstract class Promise { }); } - public static class MessageError extends Throwable { + @SuppressWarnings("ExceptionClassNameDoesntEndWithException") + public static class MessageError extends RuntimeException { public MessageError(@NotNull String error) { super(error); } diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/BreakpointManagerBase.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/BreakpointManagerBase.java index 87d374204439..c738035e4dd3 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/BreakpointManagerBase.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/BreakpointManagerBase.java @@ -110,6 +110,7 @@ public abstract class BreakpointManagerBase> impleme return Promise.all(promises); } + @NotNull protected abstract Promise doClearBreakpoint(@NotNull T breakpoint); @Override diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/Script.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/Script.java index e44d308977d3..fd09ff059e37 100755 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/Script.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/Script.java @@ -25,6 +25,7 @@ public interface Script extends UserDataHolderEx, HasUrl { @Nullable SourceMap getSourceMap(); + @Override @NotNull Url getUrl(); diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java index 982e0d58f849..1132b284e16d 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java @@ -1,7 +1,5 @@ package org.jetbrains.debugger; -import com.intellij.openapi.util.ActionCallback; -import com.intellij.openapi.util.AsyncResult; import com.intellij.util.CommonProcessors; import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; @@ -43,5 +41,5 @@ public interface ScriptManager { Script findScriptById(@NotNull String id); @Nullable - ActionCallback getScriptSourceMapLoadCallback(@NotNull Script script); + Promise getScriptSourceMapPromise(@NotNull Script script); } \ No newline at end of file diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBase.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBase.java index 9b3a225e4272..ceb019afb41d 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBase.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBase.java @@ -1,6 +1,5 @@ package org.jetbrains.debugger; -import com.intellij.openapi.util.ActionCallback; import com.intellij.util.CommonProcessors; import com.intellij.util.Processor; import com.intellij.util.Url; @@ -44,7 +43,7 @@ public abstract class ScriptManagerBase