Upgrade rust/crates/pin-project-internal to 1.0.2 am: 9398947e97 am: 39eb6a2f44

Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/pin-project-internal/+/1504214

Change-Id: I7c7767f2c20fdd35b5e2de81a60e2d0db3328d02
diff --git a/Cargo.toml b/Cargo.toml
index 234def0..57fba47 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,7 +13,7 @@
 [package]
 edition = "2018"
 name = "pin-project-internal"
-version = "1.0.1"
+version = "1.0.2"
 authors = ["Taiki Endo <te316e89@gmail.com>"]
 description = "Implementation detail of the `pin-project` crate.\n"
 homepage = "https://github.com/taiki-e/pin-project"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index 4a4d1d2..0f018e8 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,6 +1,6 @@
 [package]
 name = "pin-project-internal"
-version = "1.0.1"
+version = "1.0.2"
 authors = ["Taiki Endo <te316e89@gmail.com>"]
 edition = "2018"
 license = "Apache-2.0 OR MIT"
diff --git a/METADATA b/METADATA
index 69b7fd9..dd0e798 100644
--- a/METADATA
+++ b/METADATA
@@ -7,13 +7,13 @@
   }
   url {
     type: ARCHIVE
-    value: "https://static.crates.io/crates/pin-project-internal/pin-project-internal-1.0.1.crate"
+    value: "https://static.crates.io/crates/pin-project-internal/pin-project-internal-1.0.2.crate"
   }
-  version: "1.0.1"
+  version: "1.0.2"
   license_type: NOTICE
   last_upgrade_date {
     year: 2020
-    month: 10
-    day: 26
+    month: 11
+    day: 18
   }
 }
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 89ed5be..195e52f 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -4,13 +4,6 @@
     {
       "host": true,
       "name": "pin-project-internal_host_test_src_lib"
-    },
-    {
-      "host": true,
-      "name": "futures-util_host_test_src_lib"
-    },
-    {
-      "name": "futures-util_device_test_src_lib"
     }
   ]
 }
diff --git a/src/lib.rs b/src/lib.rs
index 0fdb9c4..05c2b49 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,6 +1,6 @@
 //! Implementation detail of the `pin-project` crate. - **do not use directly**
 
-#![doc(html_root_url = "https://docs.rs/pin-project-internal/1.0.1")]
+#![doc(html_root_url = "https://docs.rs/pin-project-internal/1.0.2")]
 #![doc(test(
     no_crate_inject,
     attr(deny(warnings, rust_2018_idioms, single_use_lifetimes), allow(dead_code))
@@ -8,11 +8,14 @@
 #![warn(unsafe_code)]
 #![warn(future_incompatible, rust_2018_idioms, single_use_lifetimes, unreachable_pub)]
 #![warn(clippy::all, clippy::default_trait_access)]
-// mem::take and #[non_exhaustive] requires Rust 1.40, matches! requires Rust 1.42
+// mem::take, #[non_exhaustive], and Option::{as_deref, as_deref_mut} require Rust 1.40,
+// matches! requires Rust 1.42, str::{strip_prefix, strip_suffix} requires Rust 1.45
 #![allow(
     clippy::mem_replace_with_default,
     clippy::manual_non_exhaustive,
-    clippy::match_like_matches_macro
+    clippy::option_as_ref_deref,
+    clippy::match_like_matches_macro,
+    clippy::manual_strip
 )]
 #![allow(clippy::needless_doctest_main)]
 
@@ -302,7 +305,7 @@
 /// #[pin_project]
 /// struct Struct<T> {
 ///     field: T,
-///     #[pin]
+///     #[pin] // <------ This `#[pin]` is required to make `Struct` to `!Unpin`.
 ///     _pin: PhantomPinned,
 /// }
 /// ```
diff --git a/src/pin_project/args.rs b/src/pin_project/args.rs
index 38e43d4..c321260 100644
--- a/src/pin_project/args.rs
+++ b/src/pin_project/args.rs
@@ -3,7 +3,7 @@
 use syn::{
     parse::{Parse, ParseStream},
     spanned::Spanned,
-    *,
+    Attribute, Error, Ident, Result, Token,
 };
 
 use super::PIN;
@@ -45,11 +45,11 @@
         // As the `#[pin]` attribute generated by `#[pin_project]`
         // has the same span as `#[pin_project]`, it is possible
         // that a useless error message will be generated.
+        // So, use the span of `prev_attr` if it is not a valid attribute.
         let res = syn::parse2::<Input>(attr.tokens.clone()).unwrap().0;
         let span = match (prev_res, res) {
             (Some(_), _) => attr,
-            (_, Some(_)) => prev_attr,
-            (None, None) => prev_attr,
+            (None, _) => prev_attr,
         };
         Err(error!(span, "duplicate #[pin] attribute"))
     } else {
@@ -236,6 +236,7 @@
         span: Span,
     },
     /// `project_replace = <ident>`.
+    #[allow(dead_code)] // false positive that fixed in Rust 1.38
     Named {
         span: Span,
         ident: Ident,
@@ -246,12 +247,12 @@
     /// Return the span of this argument.
     pub(super) fn span(&self) -> Option<Span> {
         match self {
-            ProjReplace::None => None,
-            ProjReplace::Named { span, .. } | ProjReplace::Unnamed { span, .. } => Some(*span),
+            Self::None => None,
+            Self::Named { span, .. } | Self::Unnamed { span, .. } => Some(*span),
         }
     }
 
     pub(super) fn ident(&self) -> Option<&Ident> {
-        if let ProjReplace::Named { ident, .. } = self { Some(ident) } else { None }
+        if let Self::Named { ident, .. } = self { Some(ident) } else { None }
     }
 }
diff --git a/src/pin_project/attribute.rs b/src/pin_project/attribute.rs
index 7945aba..92ed547 100644
--- a/src/pin_project/attribute.rs
+++ b/src/pin_project/attribute.rs
@@ -2,7 +2,7 @@
 use quote::quote;
 use syn::{
     parse::{Parse, ParseStream},
-    *,
+    Attribute, Result, Token, Visibility,
 };
 
 use super::PIN;
@@ -36,7 +36,7 @@
     })
 }
 
-#[allow(dead_code)] // https://github.com/rust-lang/rust/issues/56750
+#[allow(dead_code)] // false positive that fixed in Rust 1.39
 struct Input {
     attrs: Vec<Attribute>,
     body: TokenStream,
diff --git a/src/pin_project/derive.rs b/src/pin_project/derive.rs
index 1a598b7..63cd142 100644
--- a/src/pin_project/derive.rs
+++ b/src/pin_project/derive.rs
@@ -1,6 +1,10 @@
 use proc_macro2::{Delimiter, Group, Span, TokenStream};
 use quote::{format_ident, quote, quote_spanned, ToTokens};
-use syn::{visit_mut::VisitMut, *};
+use syn::{
+    parse_quote, token, visit_mut::VisitMut, Attribute, Data, DataEnum, DeriveInput, Error, Field,
+    Fields, FieldsNamed, FieldsUnnamed, Generics, Ident, Index, Lifetime, LifetimeDef, Meta,
+    MetaList, NestedMeta, Result, Token, Type, Variant, Visibility, WhereClause,
+};
 
 use super::{
     args::{parse_args, Args, ProjReplace, UnpinImpl},
@@ -101,6 +105,9 @@
         #[allow(explicit_outlives_requirements)] // https://github.com/rust-lang/rust/issues/60993
         #[allow(single_use_lifetimes)] // https://github.com/rust-lang/rust/issues/55058
         #[allow(unreachable_pub)] // This lint warns `pub` field in private struct.
+        // This lint warns of `clippy::*` generated by external macros.
+        // We allow this lint for compatibility with older compilers.
+        #[allow(clippy::unknown_clippy_lints)]
         #[allow(clippy::pattern_type_mismatch)]
         #[allow(clippy::redundant_pub_crate)] // This lint warns `pub(crate)` field in private struct.
     }
@@ -118,20 +125,20 @@
     };
     let global_allowed_lints = global_allowed_lints();
     let proj_mut = quote! {
+        #global_allowed_lints
         #[allow(dead_code)] // This lint warns unused fields/variants.
         #[allow(clippy::mut_mut)] // This lint warns `&mut &mut <ty>`.
         #[allow(clippy::type_repetition_in_bounds)] // https://github.com/rust-lang/rust-clippy/issues/4326}
-        #global_allowed_lints
     };
     let proj_ref = quote! {
+        #global_allowed_lints
         #[allow(dead_code)] // This lint warns unused fields/variants.
         #[allow(clippy::type_repetition_in_bounds)] // https://github.com/rust-lang/rust-clippy/issues/4326
-        #global_allowed_lints
     };
     let proj_own = quote! {
+        #global_allowed_lints
         #[allow(dead_code)] // This lint warns unused fields/variants.
         #large_enum_variant
-        #global_allowed_lints
     };
     (proj_mut, proj_ref, proj_own)
 }
@@ -500,7 +507,6 @@
             },
         };
 
-        let orig_ident = cx.orig.ident;
         let proj_ident = &cx.proj.mut_ident;
         let proj_ref_ident = &cx.proj.ref_ident;
         proj_variants.extend(quote! {
@@ -513,19 +519,13 @@
             #ident #proj_own_fields,
         });
         proj_arms.extend(quote! {
-            #orig_ident::#ident #proj_pat => {
-                #proj_ident::#ident #proj_body
-            }
+            Self::#ident #proj_pat => #proj_ident::#ident #proj_body,
         });
         proj_ref_arms.extend(quote! {
-            #orig_ident::#ident #proj_pat => {
-                #proj_ref_ident::#ident #proj_body
-            }
+            Self::#ident #proj_pat => #proj_ref_ident::#ident #proj_body,
         });
         proj_own_arms.extend(quote! {
-            #orig_ident::#ident #proj_pat => {
-                #proj_own_body
-            }
+            Self::#ident #proj_pat => { #proj_own_body }
         });
     }
 
@@ -545,6 +545,10 @@
     fields: &Fields,
     delim: Delimiter,
 ) -> Result<ProjectedFields> {
+    fn surround(delim: Delimiter, tokens: TokenStream) -> TokenStream {
+        Group::new(delim, tokens).into_token_stream()
+    }
+
     let mut proj_pat = TokenStream::new();
     let mut proj_body = TokenStream::new();
     let mut proj_fields = TokenStream::new();
@@ -553,7 +557,7 @@
     let mut proj_move = TokenStream::new();
     let mut pinned_bindings = Vec::with_capacity(fields.len());
 
-    for (i, Field { attrs, vis, ident, colon_token, ty, .. }) in fields.iter().enumerate() {
+    for (i, Field { attrs, vis, ident, colon_token, ty }) in fields.iter().enumerate() {
         let binding = ident.clone().unwrap_or_else(|| format_ident!("_{}", i));
         proj_pat.extend(quote!(#binding,));
         if attrs.position_exact(PIN)?.is_some() {
@@ -596,10 +600,6 @@
         }
     }
 
-    fn surround(delim: Delimiter, tokens: TokenStream) -> TokenStream {
-        Group::new(delim, tokens).into_token_stream()
-    }
-
     let proj_pat = surround(delim, proj_pat);
     let proj_body = surround(delim, proj_body);
     let proj_fields = surround(delim, proj_fields);
diff --git a/src/pinned_drop.rs b/src/pinned_drop.rs
index 86b0f47..ecf52dd 100644
--- a/src/pinned_drop.rs
+++ b/src/pinned_drop.rs
@@ -1,6 +1,10 @@
 use proc_macro2::TokenStream;
-use quote::{quote, ToTokens};
-use syn::{spanned::Spanned, visit_mut::VisitMut, *};
+use quote::{format_ident, quote, ToTokens};
+use syn::{
+    parse_quote, spanned::Spanned, visit_mut::VisitMut, Error, FnArg, GenericArgument, ImplItem,
+    ItemImpl, Pat, PatIdent, Path, PathArguments, Result, ReturnType, Signature, Token, Type,
+    TypePath, TypeReference,
+};
 
 use crate::utils::{parse_as_empty, prepend_underscore_to_self, ReplaceReceiver, SliceExt};
 
@@ -196,7 +200,7 @@
     // `fn drop(mut self: Pin<&mut Self>)` -> `fn __drop_inner<T>(mut __self: Pin<&mut Receiver>)`
     let drop_inner = {
         let mut drop_inner = method.clone();
-        let ident = Ident::new("__drop_inner", drop_inner.sig.ident.span());
+        let ident = format_ident!("__drop_inner");
         // Add a dummy `__drop_inner` function to prevent users call outer `__drop_inner`.
         drop_inner.block.stmts.insert(0, parse_quote!(fn #ident() {}));
         drop_inner.sig.ident = ident;
diff --git a/src/utils.rs b/src/utils.rs
index 2fd8a61..fe1bf35 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -3,9 +3,13 @@
 use std::{iter::FromIterator, mem};
 use syn::{
     parse::{Parse, ParseBuffer, ParseStream},
+    parse_quote,
     punctuated::Punctuated,
+    token,
     visit_mut::{self, VisitMut},
-    *,
+    Attribute, ExprPath, ExprStruct, Generics, Ident, Item, Lifetime, LifetimeDef, Macro, PatPath,
+    PatStruct, PatTupleStruct, Path, PathArguments, PredicateType, QSelf, Result, Token, Type,
+    TypeParamBound, TypePath, Variant, Visibility, WherePredicate,
 };
 
 pub(crate) type Variants = Punctuated<Variant, Token![,]>;