From e1146c697b926038ca7a308a3d42df101a871936 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 27 Aug 2015 11:36:20 +0200 Subject: [PATCH] IDEA-133514 (Malformed format string inspection doesn't seem to understand Java 8's java.time classes) --- .../src/com/siyeh/ig/bugs/FormatDecode.java | 3 +- .../MalformedFormatString.java | 1 + .../MalformedFormatStringInspectionTest.java | 48 +++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/FormatDecode.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/FormatDecode.java index 36dea6861de2..3685c7238a26 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/FormatDecode.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/FormatDecode.java @@ -260,7 +260,8 @@ class FormatDecode { return PsiType.LONG.equals(type) || CommonClassNames.JAVA_LANG_LONG.equals(text) || InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_UTIL_DATE) || - InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_UTIL_CALENDAR); + InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_UTIL_CALENDAR) || + InheritanceUtil.isInheritor(type, "java.time.temporal.TemporalAccessor"); } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/malformed_format_string/MalformedFormatString.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/malformed_format_string/MalformedFormatString.java index 773ab2bccce2..1bceb24493b8 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/malformed_format_string/MalformedFormatString.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/malformed_format_string/MalformedFormatString.java @@ -89,5 +89,6 @@ public class MalformedFormatString { void goodStrings() { String.format("%-B", true); // left justify flag String.format("%,d", 34567890); + System.out.printf("%tF %n", java.time.ZonedDateTime.now()); // java.time.temporal.TemporalAccessor, new in Java 8 } } diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/MalformedFormatStringInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/MalformedFormatStringInspectionTest.java index c3ea5da0f6b4..326b108c6b6c 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/MalformedFormatStringInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/MalformedFormatStringInspectionTest.java @@ -18,4 +18,52 @@ public class MalformedFormatStringInspectionTest extends LightInspectionTestCase inspection.methodNames.add("d"); return inspection; } + + @Override + protected String[] getEnvironmentClasses() { + return new String[] { + "package java.time.temporal;\n" + + "public interface TemporalAccessor {\n" + + " boolean isSupported(TemporalField field);\n" + + " default ValueRange range(TemporalField field) {\n" + + " return null;\n" + + " }\n" + + " default int get(TemporalField field) {\n" + + " return 0;\n" + + " }\n" + + " long getLong(TemporalField field);\n" + + " default R query(TemporalQuery query) {\n" + + " return null;\n" + + " }\n" + + "}", + + "package java.time.temporal;\n" + + "public interface Temporal extends TemporalAccessor {\n" + + " boolean isSupported(TemporalUnit unit);\n" + + " default Temporal with(TemporalAdjuster adjuster) {\n" + + " return null;\n" + + " }\n" + + " Temporal with(TemporalField field, long newValue);\n" + + " default Temporal plus(TemporalAmount amount) {\n" + + " return null;\n" + + " }\n" + + " Temporal plus(long amountToAdd, TemporalUnit unit);\n" + + " default Temporal minus(TemporalAmount amount) {\n" + + " return null;\n" + + " }\n" + + " default Temporal minus(long amountToSubtract, TemporalUnit unit) {\n" + + " return null;\n" + + " }\n" + + " long until(Temporal endExclusive, TemporalUnit unit);\n" + + "}", + + "package java.time;\n" + + "import java.time.temporal.Temporal;\n" + + "public abstract class ZonedDateTime implements Temporal {\n" + + " public static ZonedDateTime now() {\n" + + " return null;\n" + + " }\n" + + "}" + }; + } } \ No newline at end of file