| /******************************************************************************* |
| * Copyright (c) 2000, 2007 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| |
| *******************************************************************************/ |
| package org.eclipse.dltk.compiler.env.lookup; |
| |
| import org.eclipse.dltk.internal.compiler.lookup.LookupEnvironment; |
| import org.eclipse.dltk.internal.compiler.lookup.MethodScope; |
| import org.eclipse.dltk.internal.compiler.lookup.SourceModuleScope; |
| import org.eclipse.dltk.internal.compiler.lookup.TypeScope; |
| |
| public abstract class Scope { |
| |
| /* Scope kinds */ |
| public final static int BLOCK_SCOPE = 1; |
| public final static int METHOD_SCOPE = 2; |
| public final static int CLASS_SCOPE = 3; |
| public final static int COMPILATION_UNIT_SCOPE = 4; |
| |
| /* Argument Compatibilities */ |
| public final static int NOT_COMPATIBLE = -1; |
| public final static int COMPATIBLE = 0; |
| public final static int AUTOBOX_COMPATIBLE = 1; |
| public final static int VARARGS_COMPATIBLE = 2; |
| |
| /* Type Compatibilities */ |
| public static final int EQUAL_OR_MORE_SPECIFIC = -1; |
| public static final int NOT_RELATED = 0; |
| public static final int MORE_GENERIC = 1; |
| |
| public int kind; |
| public Scope parent; |
| |
| protected Scope(int kind, Scope parent) { |
| this.kind = kind; |
| this.parent = parent; |
| } |
| |
| public final TypeScope classScope() { |
| Scope scope = this; |
| do { |
| if (scope instanceof TypeScope) |
| return (TypeScope) scope; |
| scope = scope.parent; |
| } while (scope != null); |
| return null; |
| } |
| |
| public final SourceModuleScope sourceModuleScope() { |
| Scope lastScope = null; |
| Scope scope = this; |
| do { |
| lastScope = scope; |
| scope = scope.parent; |
| } while (scope != null); |
| return (SourceModuleScope) lastScope; |
| } |
| |
| public final TypeScope enclosingClassScope() { |
| Scope scope = this; |
| while ((scope = scope.parent) != null) { |
| if (scope instanceof TypeScope) |
| return (TypeScope) scope; |
| } |
| return null; // may answer null if no type around |
| } |
| |
| public final MethodScope enclosingMethodScope() { |
| Scope scope = this; |
| while ((scope = scope.parent) != null) { |
| if (scope instanceof MethodScope) |
| return (MethodScope) scope; |
| } |
| return null; // may answer null if no method around |
| } |
| |
| public final LookupEnvironment environment() { |
| Scope scope, unitScope = this; |
| while ((scope = unitScope.parent) != null) |
| unitScope = scope; |
| return ((SourceModuleScope) unitScope).environment; |
| } |
| |
| // start position in this scope - for ordering scopes vs. variables |
| public int startIndex() { |
| return 0; |
| } |
| } |