blob: e4a72e7c1771c3f82fd97d927394dd46bdbb7b43 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2016 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.ruby.core.model;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.dltk.ast.references.VariableKind;
public interface IElementKind {
public static final int FIRST_NON_VARIABLE_ID = VariableKind.LAST_VARIABLE_ID + 1;
int getId();
public static class Model implements IElementKind {
public static final int ID = FIRST_NON_VARIABLE_ID + 0;
@Override
public int getId() {
return ID;
}
}
public static class Unit implements IElementKind {
public static final int ID = FIRST_NON_VARIABLE_ID + 1;
@Override
public int getId() {
return ID;
}
}
public static class Method implements IElementKind {
public static final int ID = FIRST_NON_VARIABLE_ID + 2;
@Override
public int getId() {
return ID;
}
}
public static abstract class ClassLike implements IElementKind {
}
public static abstract class Fragment implements IElementKind {
}
public static class Class extends ClassLike {
public static final int ID = FIRST_NON_VARIABLE_ID + 3;
@Override
public int getId() {
return ID;
}
}
public static class Mixin extends ClassLike {
public static final int ID = FIRST_NON_VARIABLE_ID + 4;
@Override
public int getId() {
return ID;
}
}
public static class ClassFragment extends Fragment {
public static final int ID = FIRST_NON_VARIABLE_ID + 5;
@Override
public int getId() {
return ID;
}
}
public static class MixinFragment extends Fragment {
public static final int ID = FIRST_NON_VARIABLE_ID + 6;
@Override
public int getId() {
return ID;
}
}
public static class Variable implements IElementKind {
private final VariableKind kind;
public Variable(VariableKind kind) {
this.kind = kind;
}
public VariableKind getKind() {
return kind;
}
@Override
public int getId() {
return kind.getId();
}
protected static final Map<VariableKind, Variable> variableKindsToElementKinds = new HashMap<VariableKind, Variable>();
static {
variableKindsToElementKinds.put(VariableKind.LOCAL, new Variable(VariableKind.LOCAL));
variableKindsToElementKinds.put(VariableKind.INSTANCE, new Variable(VariableKind.INSTANCE));
variableKindsToElementKinds.put(VariableKind.CLASS, new Variable(VariableKind.CLASS));
variableKindsToElementKinds.put(VariableKind.GLOBAL, new Variable(VariableKind.GLOBAL));
variableKindsToElementKinds.put(VariableKind.MIXIN, new Variable(VariableKind.MIXIN));
variableKindsToElementKinds.put(VariableKind.ARGUMENT, new Variable(VariableKind.ARGUMENT));
}
public static Variable byVariableKind(VariableKind kind) {
return variableKindsToElementKinds.get(kind);
}
}
public static final int LAST_CORE_ID = FIRST_NON_VARIABLE_ID + 50;
public static final int LAST_ID = LAST_CORE_ID + 50;
public static final IElementKind MODEL = new Method();
public static final IElementKind METHOD = new Method();
public static final IElementKind CLASS = new Class();
public static final IElementKind MIXIN = new Mixin();
public static final IElementKind CLASS_FRAGMENT = new ClassFragment();
public static final IElementKind MIXIN_FRAGMENT = new MixinFragment();
public static final IElementKind LOCAL_VARIABLE = Variable.byVariableKind(VariableKind.LOCAL);
public static final IElementKind INSTANCE_VARIABLE = Variable.byVariableKind(VariableKind.INSTANCE);
public static final IElementKind CLASS_VARIABLE = Variable.byVariableKind(VariableKind.CLASS);
public static final IElementKind GLOBAL_VARIABLE = Variable.byVariableKind(VariableKind.GLOBAL);
public static final IElementKind MIXIN_VARIABLE = Variable.byVariableKind(VariableKind.MIXIN);
public static final IElementKind ARGUMENT_VARIABLE = Variable.byVariableKind(VariableKind.ARGUMENT);
}