blob: b4a681ae441b802ba28f2b8756dc26a08638818b [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.internal.core;
import org.eclipse.dltk.compiler.env.ISourceField;
import org.eclipse.dltk.compiler.env.ISourceMethod;
import org.eclipse.dltk.compiler.env.ISourceType;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.IType;
import org.eclipse.dltk.core.ModelException;
public class SourceTypeElementInfo extends MemberElementInfo implements
ISourceType {
protected static final SourceField[] NO_FIELDS = new SourceField[0];
protected static final SourceMethod[] NO_METHODS = new SourceMethod[0];
protected static final SourceType[] NO_TYPES = new SourceType[0];
/**
* The name of the superclasses for this type.
*/
protected String[] superclassNames;
/**
* Backpointer to my type handle - useful for translation from info to
* handle.
*/
protected IType handle = null;
/**
* Sets the handle for this type info
*/
protected void setHandle(IType handle) {
this.handle = handle;
}
protected void setSuperclassNames(String[] superclassNames) {
this.superclassNames = superclassNames;
}
public String[] getSuperclassNames() {
return superclassNames;
}
@Override
public ISourceType getEnclosingType() {
IModelElement parent = this.handle.getParent();
if (parent != null && parent.getElementType() == IModelElement.TYPE) {
try {
return (ISourceType) ((ModelElement) parent).getElementInfo();
} catch (ModelException e) {
return null;
}
} else {
return null;
}
}
@Override
public ISourceField[] getFields() {
SourceField[] fieldHandles = getFieldHandles();
int length = fieldHandles.length;
ISourceField[] fields = new ISourceField[length];
for (int i = 0; i < length; i++) {
try {
ISourceField field = (ISourceField) fieldHandles[i]
.getElementInfo();
fields[i] = field;
} catch (ModelException e) {
// ignore
}
}
return fields;
}
@Override
public ISourceType[] getMemberTypes() {
// TODO Auto-generated method stub
return null;
}
@Override
public ISourceMethod[] getMethods() {
// TODO Auto-generated method stub
return null;
}
@Override
public char[] getName() {
// TODO Auto-generated method stub
return null;
}
@Override
public char[] getSuperclassName() {
// TODO Auto-generated method stub
return null;
}
@Override
public char[][][] getTypeParameterBounds() {
// TODO Auto-generated method stub
return null;
}
@Override
public char[][] getTypeParameterNames() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isBinaryType() {
// TODO Auto-generated method stub
return false;
}
@Override
public String getFileName() {
// TODO Auto-generated method stub
return null;
}
public SourceField[] getFieldHandles() {
int length = size();
if (length == 0)
return NO_FIELDS;
SourceField[] fields = new SourceField[length];
int fieldIndex = 0;
for (int i = 0; i < length; i++) {
IModelElement child = get(i);
if (child instanceof SourceField)
fields[fieldIndex++] = (SourceField) child;
}
if (fieldIndex == 0)
return NO_FIELDS;
if (fieldIndex < length)
System.arraycopy(fields, 0, fields = new SourceField[fieldIndex],
0, fieldIndex);
return fields;
}
public IType getHandle() {
return this.handle;
}
}