aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAikar <[email protected]>2019-03-24 19:13:07 -0400
committerAikar <[email protected]>2019-03-24 19:13:07 -0400
commit4ae1989c4f799c1c25aefbc540784d8be5abfddc (patch)
tree658dac2c4b27dc6678109bee9d9f1fcf1d8d1c4e
parentb1777724a599e63e3d97e5270257fff69b344b33 (diff)
downloadPaper-4ae1989c4f799c1c25aefbc540784d8be5abfddc.tar.gz
Paper-4ae1989c4f799c1c25aefbc540784d8be5abfddc.zip
Restore some SANITY around nullability annotations
Some of these were wrong (scoreboard manager), others are counter to everything everyone expects (Locations world being null, which wasnt ever safe EVER) others are just too noisy. Replace some with Contract to get rid of the nullability constraint and go back to the old days of IDE not considering it strictly one way or the other. Also, stop requiring annotations on package-private. Introduces the next Developer Perk for Paper-API: Your plugin isn't yellow anymore. Also fixed random dupe code in ensureServerConversions that got mistakenly set in the update.
-rw-r--r--Spigot-API-Patches/0061-ensureServerConversions-API.patch13
-rw-r--r--Spigot-API-Patches/0062-Add-getI18NDisplayName-API.patch6
-rw-r--r--Spigot-API-Patches/0106-ItemStack-getMaxItemUseDuration.patch6
-rw-r--r--Spigot-API-Patches/0114-ItemStack-API-additions-for-quantity-flags-lore.patch6
-rw-r--r--Spigot-API-Patches/0178-Ignore-package-private-methods-for-nullability-annot.patch23
-rw-r--r--Spigot-API-Patches/0179-Flip-some-Spigot-API-null-annotations.patch130
6 files changed, 166 insertions, 18 deletions
diff --git a/Spigot-API-Patches/0061-ensureServerConversions-API.patch b/Spigot-API-Patches/0061-ensureServerConversions-API.patch
index 6a870beb35..0e170da04e 100644
--- a/Spigot-API-Patches/0061-ensureServerConversions-API.patch
+++ b/Spigot-API-Patches/0061-ensureServerConversions-API.patch
@@ -1,4 +1,4 @@
-From 4c5a58a93cd324de4bbb929a3feac630cd3a758d Mon Sep 17 00:00:00 2001
+From 20eb853456b944fc4eb760f9ee5c6bfa3433513b Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Wed, 4 May 2016 23:55:48 -0400
Subject: [PATCH] ensureServerConversions API
@@ -29,24 +29,19 @@ index cbcbe8c8a..8e602cf51 100644
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index 7b709457f..e8f97c949 100644
+index 7b709457f..4ee01be5f 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -517,7 +517,12 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
+@@ -517,7 +517,7 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
}
}
- return result;
-+ // Set damage again incase meta overwrote it
-+ if (args.containsKey("damage")) {
-+ result.setDurability(damage);
-+ }
-+
+ return result.ensureServerConversions(); // Paper
}
/**
-@@ -576,4 +581,19 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
+@@ -576,4 +576,19 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
return true;
}
diff --git a/Spigot-API-Patches/0062-Add-getI18NDisplayName-API.patch b/Spigot-API-Patches/0062-Add-getI18NDisplayName-API.patch
index 94727ace32..b0bad345f0 100644
--- a/Spigot-API-Patches/0062-Add-getI18NDisplayName-API.patch
+++ b/Spigot-API-Patches/0062-Add-getI18NDisplayName-API.patch
@@ -1,4 +1,4 @@
-From c2814c3f3d70e2834f47c4bb3beafb0d591d4985 Mon Sep 17 00:00:00 2001
+From 35bbd72e452d3c31afe5217706a2a60df856117f Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Wed, 4 May 2016 23:55:48 -0400
Subject: [PATCH] Add getI18NDisplayName API
@@ -29,10 +29,10 @@ index 8e602cf51..dca77bbaf 100644
// Paper end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index e8f97c949..b1c02ac0d 100644
+index 4ee01be5f..3ff3458e7 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -595,5 +595,17 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
+@@ -590,5 +590,17 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
public ItemStack ensureServerConversions() {
return Bukkit.getServer().getItemFactory().ensureServerConversions(this);
}
diff --git a/Spigot-API-Patches/0106-ItemStack-getMaxItemUseDuration.patch b/Spigot-API-Patches/0106-ItemStack-getMaxItemUseDuration.patch
index a921ebee72..be5e4f44b6 100644
--- a/Spigot-API-Patches/0106-ItemStack-getMaxItemUseDuration.patch
+++ b/Spigot-API-Patches/0106-ItemStack-getMaxItemUseDuration.patch
@@ -1,4 +1,4 @@
-From 25cbaf39e7634f8faad5ebb998a201df436baa71 Mon Sep 17 00:00:00 2001
+From ec59e7df8881e52fb38e05e99c430effd5afb875 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Tue, 5 Jun 2018 22:59:50 -0400
Subject: [PATCH] ItemStack#getMaxItemUseDuration
@@ -6,10 +6,10 @@ Subject: [PATCH] ItemStack#getMaxItemUseDuration
Allows you to determine how long it takes to use a usable/consumable item
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index b1c02ac0d..1c7bbbcef 100644
+index 3ff3458e7..345dc8bdc 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
-@@ -607,5 +607,13 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
+@@ -602,5 +602,13 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
public String getI18NDisplayName() {
return Bukkit.getServer().getItemFactory().getI18NDisplayName(this);
}
diff --git a/Spigot-API-Patches/0114-ItemStack-API-additions-for-quantity-flags-lore.patch b/Spigot-API-Patches/0114-ItemStack-API-additions-for-quantity-flags-lore.patch
index a61eba50cd..2ba3d88df3 100644
--- a/Spigot-API-Patches/0114-ItemStack-API-additions-for-quantity-flags-lore.patch
+++ b/Spigot-API-Patches/0114-ItemStack-API-additions-for-quantity-flags-lore.patch
@@ -1,11 +1,11 @@
-From 4d3cc2c3c2ad606f01cea7d7be635e7ef1dd9e4a Mon Sep 17 00:00:00 2001
+From 34a7e90eaaf6385e619588c697a7856732b44ffc Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Fri, 22 Jun 2018 22:59:18 -0400
Subject: [PATCH] ItemStack API additions for quantity/flags/lore
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index 1c7bbbcef..845a9255d 100644
+index 345dc8bdc..1b19f8215 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -2,7 +2,9 @@ package org.bukkit.inventory;
@@ -18,7 +18,7 @@ index 1c7bbbcef..845a9255d 100644
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
-@@ -615,5 +617,140 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
+@@ -610,5 +612,140 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
// Requires access to NMS
return ensureServerConversions().getMaxItemUseDuration();
}
diff --git a/Spigot-API-Patches/0178-Ignore-package-private-methods-for-nullability-annot.patch b/Spigot-API-Patches/0178-Ignore-package-private-methods-for-nullability-annot.patch
new file mode 100644
index 0000000000..bbc83c45fb
--- /dev/null
+++ b/Spigot-API-Patches/0178-Ignore-package-private-methods-for-nullability-annot.patch
@@ -0,0 +1,23 @@
+From 37fda0cd6fa5841548e4747e642c0e67800829e8 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Sun, 24 Mar 2019 18:44:26 -0400
+Subject: [PATCH] Ignore package-private methods for nullability annotations
+
+This isn't API
+
+diff --git a/src/test/java/org/bukkit/AnnotationTest.java b/src/test/java/org/bukkit/AnnotationTest.java
+index 596f28076..cdc0afc0c 100644
+--- a/src/test/java/org/bukkit/AnnotationTest.java
++++ b/src/test/java/org/bukkit/AnnotationTest.java
+@@ -163,7 +163,7 @@ public class AnnotationTest {
+
+ private static boolean isMethodIncluded(@NotNull ClassNode clazz, @NotNull MethodNode method, @NotNull Map<String, ClassNode> allClasses) {
+ // Exclude private, synthetic and deprecated methods
+- if ((method.access & (Opcodes.ACC_PRIVATE | Opcodes.ACC_SYNTHETIC | Opcodes.ACC_DEPRECATED)) != 0) {
++ if ((method.access & (Opcodes.ACC_PRIVATE | Opcodes.ACC_SYNTHETIC | Opcodes.ACC_DEPRECATED)) != 0 || (method.access & (Opcodes.ACC_PRIVATE | Opcodes.ACC_PROTECTED | Opcodes.ACC_PUBLIC)) == 0) { // Paper - ignore package-private
+ return false;
+ }
+
+--
+2.21.0
+
diff --git a/Spigot-API-Patches/0179-Flip-some-Spigot-API-null-annotations.patch b/Spigot-API-Patches/0179-Flip-some-Spigot-API-null-annotations.patch
new file mode 100644
index 0000000000..72fa269f1a
--- /dev/null
+++ b/Spigot-API-Patches/0179-Flip-some-Spigot-API-null-annotations.patch
@@ -0,0 +1,130 @@
+From bf5e87d656e1988c33c4854227450dcefb55e3ce Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Sun, 24 Mar 2019 18:39:01 -0400
+Subject: [PATCH] Flip some Spigot API null annotations
+
+while some of these may of been true, they are extreme cases and cause
+a ton of noise to plugin developers.
+
+These do not help plugin developers if they bring moise noise than value.
+
+diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
+index 6b0a09067..5d6c856dd 100644
+--- a/src/main/java/org/bukkit/Bukkit.java
++++ b/src/main/java/org/bukkit/Bukkit.java
+@@ -1183,7 +1183,7 @@ public final class Bukkit {
+ *
+ * @return the scoreboard manager or null if no worlds are loaded.
+ */
+- @Nullable
++ @NotNull // Paper
+ public static ScoreboardManager getScoreboardManager() {
+ return server.getScoreboardManager();
+ }
+@@ -1480,7 +1480,7 @@ public final class Bukkit {
+ * @param clazz the class of the tag entries
+ * @return the tag or null
+ */
+- @Nullable
++ @Contract("null, null, null -> fail") // Paper
+ public static <T extends Keyed> Tag<T> getTag(@NotNull String registry, @NotNull NamespacedKey tag, @NotNull Class<T> clazz) {
+ return server.getTag(registry, tag, clazz);
+ }
+diff --git a/src/main/java/org/bukkit/Location.java b/src/main/java/org/bukkit/Location.java
+index 57ce443a5..6b8dde716 100644
+--- a/src/main/java/org/bukkit/Location.java
++++ b/src/main/java/org/bukkit/Location.java
+@@ -45,7 +45,7 @@ public class Location implements Cloneable, ConfigurationSerializable {
+ * @param y The y-coordinate of this new location
+ * @param z The z-coordinate of this new location
+ */
+- public Location(@Nullable final World world, final double x, final double y, final double z) {
++ public Location(@NotNull final World world, final double x, final double y, final double z) { // Paper
+ this(world, x, y, z, 0, 0);
+ }
+
+@@ -59,7 +59,7 @@ public class Location implements Cloneable, ConfigurationSerializable {
+ * @param yaw The absolute rotation on the x-plane, in degrees
+ * @param pitch The absolute rotation on the y-plane, in degrees
+ */
+- public Location(@Nullable final World world, final double x, final double y, final double z, final float yaw, final float pitch) {
++ public Location(@NotNull final World world, final double x, final double y, final double z, final float yaw, final float pitch) { // Paper
+ this.world = world;
+ this.x = x;
+ this.y = y;
+@@ -82,7 +82,7 @@ public class Location implements Cloneable, ConfigurationSerializable {
+ *
+ * @return World that contains this location
+ */
+- @Nullable
++ @NotNull
+ public World getWorld() {
+ return world;
+ }
+diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
+index 66d22ba79..08cd7cabc 100644
+--- a/src/main/java/org/bukkit/Server.java
++++ b/src/main/java/org/bukkit/Server.java
+@@ -988,7 +988,7 @@ public interface Server extends PluginMessageRecipient {
+ *
+ * @return the scoreboard manager or null if no worlds are loaded.
+ */
+- @Nullable
++ @NotNull // Paper
+ ScoreboardManager getScoreboardManager();
+
+ /**
+@@ -1258,7 +1258,7 @@ public interface Server extends PluginMessageRecipient {
+ * @param clazz the class of the tag entries
+ * @return the tag or null
+ */
+- @Nullable
++ @Contract("null, null, null -> fail") // Paper
+ <T extends Keyed> Tag<T> getTag(@NotNull String registry, @NotNull NamespacedKey tag, @NotNull Class<T> clazz);
+
+ /**
+diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
+index dca77bbaf..8335f8a8b 100644
+--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
++++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
+@@ -6,6 +6,7 @@ import org.bukkit.Server;
+ import org.bukkit.inventory.meta.BookMeta;
+ import org.bukkit.inventory.meta.ItemMeta;
+ import org.bukkit.inventory.meta.SkullMeta;
++import org.jetbrains.annotations.Contract;
+ import org.jetbrains.annotations.NotNull;
+ import org.jetbrains.annotations.Nullable;
+
+@@ -25,7 +26,7 @@ public interface ItemFactory {
+ * @return a new ItemMeta that could be applied to an item stack of the
+ * specified material
+ */
+- @Nullable
++ @Contract() // Paper
+ ItemMeta getItemMeta(@NotNull final Material material);
+
+ /**
+diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
+index 1b19f8215..4a6dea561 100644
+--- a/src/main/java/org/bukkit/inventory/ItemStack.java
++++ b/src/main/java/org/bukkit/inventory/ItemStack.java
+@@ -15,6 +15,7 @@ import org.bukkit.enchantments.Enchantment;
+ import org.bukkit.inventory.meta.Damageable;
+ import org.bukkit.inventory.meta.ItemMeta;
+ import org.bukkit.material.MaterialData;
++import org.jetbrains.annotations.Contract;
+ import org.jetbrains.annotations.NotNull;
+ import org.jetbrains.annotations.Nullable;
+
+@@ -527,7 +528,7 @@ public class ItemStack implements Cloneable, ConfigurationSerializable {
+ *
+ * @return a copy of the current ItemStack's ItemData
+ */
+- @Nullable
++ @Contract() // Paper
+ public ItemMeta getItemMeta() {
+ return this.meta == null ? Bukkit.getItemFactory().getItemMeta(this.type) : this.meta.clone();
+ }
+--
+2.21.0
+