diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index a7cb59efcc590f9a942d4d4183342712afcfee98..e3eaf3525514195606822d02676d4cb7f8ff4446 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -2168,13 +2168,8 @@ build_jni_stub (method)
   TREE_PUBLIC (meth_var) = 0;
   DECL_EXTERNAL (meth_var) = 0;
   DECL_CONTEXT (meth_var) = method;
-  DECL_ARTIFICIAL (meth_var) = 1;
-  DECL_INITIAL (meth_var) = null_pointer_node;
-  TREE_USED (meth_var) = 1;
-  chainon (env_var, meth_var);
-  layout_decl (meth_var, 0);
   make_decl_rtl (meth_var, NULL);
-  rest_of_decl_compilation (meth_var, NULL, 0, 0);
+  meth_var = pushdecl_top_level (meth_var);
 
   /* One strange way that the front ends are different is that they
      store arguments differently.  */
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 8b33fadf85c0399e22985e341b3e0adf8502bbfd..a75e3f97ecc859e4eacb0b1c660fc86505b0d308 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -1,6 +1,6 @@
 /* Source code parsing and tree node generation for the GNU compiler
    for the Java(TM) language.
-   Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
 
 This file is part of GNU CC.
@@ -7723,9 +7723,7 @@ java_complete_expand_methods (class_decl)
 
       if (METHOD_NATIVE (decl))
  	{
- 	  tree body;
-	  current_function_decl = decl;
-	  body = build_jni_stub (decl);
+ 	  tree body = build_jni_stub (decl);
  	  BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (decl)) = body;
  	}