diff options
Diffstat (limited to 'gcc/java/parse.y')
-rw-r--r-- | gcc/java/parse.y | 49 |
1 files changed, 14 insertions, 35 deletions
diff --git a/gcc/java/parse.y b/gcc/java/parse.y index 11c2738..4d6a37f 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -3911,6 +3911,14 @@ maybe_create_class_interface_decl (tree decl, tree raw_name, /* Install a new dependency list element */ create_jdep_list (ctxp); + /* We keep the compilation unit imports in the class so that + they can be used later to resolve type dependencies that + aren't necessary to solve now. */ + TYPE_IMPORT_LIST (TREE_TYPE (decl)) = ctxp->import_list; + TYPE_IMPORT_DEMAND_LIST (TREE_TYPE (decl)) = ctxp->import_demand_list; + + TYPE_PACKAGE (TREE_TYPE (decl)) = ctxp->package; + SOURCE_FRONTEND_DEBUG (("Defining class/interface %s", IDENTIFIER_POINTER (qualified_name))); return decl; @@ -4185,12 +4193,6 @@ create_class (int flags, tree id, tree super, tree interfaces) virtual function table in java.lang.object. */ TYPE_VFIELD (TREE_TYPE (decl)) = TYPE_VFIELD (object_type_node); - /* We keep the compilation unit imports in the class so that - they can be used later to resolve type dependencies that - aren't necessary to solve now. */ - TYPE_IMPORT_LIST (TREE_TYPE (decl)) = ctxp->import_list; - TYPE_IMPORT_DEMAND_LIST (TREE_TYPE (decl)) = ctxp->import_demand_list; - /* Add the private this$<n> field, Replicate final locals still in scope as private final fields mangled like val$<local_name>. This does not occur for top level (static) inner classes. */ @@ -5644,6 +5646,9 @@ static tree jdep_resolve_class (jdep *dep) { tree decl; + + /* Set the correct context for class resolution. */ + current_class = TREE_TYPE (JDEP_ENCLOSING (dep)); if (JDEP_RESOLVED_P (dep)) decl = JDEP_RESOLVED_DECL (dep); @@ -5947,8 +5952,8 @@ do_resolve_class (tree enclosing, tree import_type, tree class_type, tree decl, /* 3- Search according to the current package definition */ if (!QUALIFIED_P (TYPE_NAME (class_type))) { - if ((new_class_decl = qualify_and_find (class_type, ctxp->package, - TYPE_NAME (class_type)))) + if ((new_class_decl = qualify_and_find (class_type, + TYPE_PACKAGE (current_class), TYPE_NAME (class_type)))) return new_class_decl; } @@ -10446,37 +10451,11 @@ check_deprecation (tree wfl, tree decl) /* Returns 1 if class was declared in the current package, 0 otherwise */ -static GTY(()) tree cicp_cache; static int class_in_current_package (tree class) { - int qualified_flag; - tree left; - - if (cicp_cache == class) - return 1; - - qualified_flag = QUALIFIED_P (DECL_NAME (TYPE_NAME (class))); - - /* If the current package is empty and the name of CLASS is - qualified, class isn't in the current package. If there is a - current package and the name of the CLASS is not qualified, class - isn't in the current package */ - if ((!ctxp->package && qualified_flag) || (ctxp->package && !qualified_flag)) - return 0; - - /* If there is not package and the name of CLASS isn't qualified, - they belong to the same unnamed package */ - if (!ctxp->package && !qualified_flag) + if (TYPE_PACKAGE (current_class) == TYPE_PACKAGE (class)) return 1; - - /* Compare the left part of the name of CLASS with the package name */ - split_qualified_name (&left, NULL, DECL_NAME (TYPE_NAME (class))); - if (ctxp->package == left) - { - cicp_cache = class; - return 1; - } return 0; } |