/*******************************************************************************
* Copyright (c) 2009 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.java;
import org.eclipse.core.resources.IResource;
/**
*
* @author Viacheslav Kabanovich
*
*/
public class TypeDeclaration extends ParametedType implements ITypeDeclaration {
IResource resource;
int length;
int startPosition;
Lazy lazy = null;
public static interface Lazy {
void init(TypeDeclaration d);
}
public TypeDeclaration(ParametedType type, IResource resource, Lazy lazy) {
this(type, resource, 0, 0);
this.lazy = lazy;
}
public TypeDeclaration(ParametedType type, IResource resource, int startPosition, int length) {
this.setFactory(type.getFactory());
this.type = type.getType();
arrayIndex = type.arrayIndex;
this.resource = resource;
this.length = length;
this.startPosition = startPosition;
signature = type.signature;
parameterTypes = type.parameterTypes;
allInheritedTypes = type.allInheritedTypes;
inheritanceIsBuilt = type.inheritanceIsBuilt;
inheritedTypes = type.inheritedTypes;
superType = type.superType;
primitive = type.primitive;
isLower = type.isLower;
isUpper = type.isUpper;
isVariable = type.isVariable;
if(type instanceof TypeDeclaration) {
this.lazy = ((TypeDeclaration)type).lazy;
}
}
public void init(int startPosition, int length) {
this.startPosition = startPosition;
this.length = length;
}
private void init() {
if(lazy != null) {
synchronized (this) {
lazy.init(this);
lazy = null;
}
}
}
public int getLength() {
init();
return length;
}
public int getStartPosition() {
init();
return startPosition;
}
public IResource getResource() {
return resource;
}
}