/*******************************************************************************
* Copyright (c) 2005, 2012 eBay Inc.
* 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.mod.internal.core;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.dltk.mod.core.Flags;
import org.eclipse.dltk.mod.core.IMember;
import org.eclipse.dltk.mod.core.IModelElement;
import org.eclipse.dltk.mod.core.IModelStatusConstants;
import org.eclipse.dltk.mod.core.ISourceManipulation;
import org.eclipse.dltk.mod.core.ISourceRange;
import org.eclipse.dltk.mod.core.ModelException;
import org.eclipse.dltk.mod.internal.core.util.Util;
import org.eclipse.dltk.mod.utils.CorePrinter;
import org.eclipse.vjet.eclipse.core.IJSType;
/**
* @see IJSInitializer
*/
public class JSInitializer extends Member implements IJSInitializer {
public static final char JEM_INITIALIZER = '|';
public JSInitializer(ModelElement parent, int count) {
super(parent);
// 0 is not valid: this first occurrence is occurrence 1.
if (count <= 0)
throw new IllegalArgumentException();
this.occurrenceCount = count;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof JSInitializer))
return false;
return super.equals(o);
}
/**
* @see IJavaElement
*/
public int getElementType() {
return ELEMENT_TYPE;
}
/**
* @see JavaElement#getHandleMemento(StringBuffer)
*/
@Override
protected void getHandleMemento(StringBuffer buff) {
((ModelElement) getParent()).getHandleMemento(buff);
buff.append(getHandleMementoDelimiter());
buff.append(this.occurrenceCount);
}
/**
* @see JavaElement#getHandleMemento()
*/
@Override
protected char getHandleMementoDelimiter() {
return JEM_INITIALIZER;
}
/**
* @see IMember
*/
@Override
public ISourceRange getNameRange() {
return null;
}
/*
* @see ModelElement#getPrimaryElement(boolean)
*/
@Override
public IModelElement getPrimaryElement(boolean checkOwner) {
if (checkOwner) {
SourceModule cu = (SourceModule) getAncestor(SOURCE_MODULE);
if (cu == null || cu.isPrimary())
return this;
}
IModelElement primaryParent = this.parent.getPrimaryElement(false);
return ((IJSType) primaryParent).getInitializer(this.occurrenceCount);
}
@Override
public int hashCode() {
return Util.combineHashCodes(this.parent.hashCode(),
this.occurrenceCount);
}
@Override
public void printNode(CorePrinter output) {
}
/**
*/
public String readableName() {
return ((ModelElement) getDeclaringType()).getElementName();
}
/**
* @see ISourceManipulation
*/
public void rename(String newName, boolean force, IProgressMonitor monitor)
throws ModelException {
throw new ModelException(new ModelStatus(
IModelStatusConstants.INVALID_ELEMENT_TYPES, this));
}
/**
* @private Debugging purposes
*/
@Override
protected void toStringInfo(int tab, StringBuffer buffer, Object info,
boolean showResolvedInfo) {
buffer.append(this.tabString(tab));
if (info == null) {
buffer.append("<initializer #"); //$NON-NLS-1$
buffer.append(this.occurrenceCount);
buffer.append("> (not open)"); //$NON-NLS-1$
} else if (info == NO_INFO) {
buffer.append("<initializer #"); //$NON-NLS-1$
buffer.append(this.occurrenceCount);
buffer.append(">"); //$NON-NLS-1$
} else {
try {
buffer.append("<"); //$NON-NLS-1$
if (Flags.isStatic(this.getFlags())) {
buffer.append("static "); //$NON-NLS-1$
}
buffer.append("initializer #"); //$NON-NLS-1$
buffer.append(this.occurrenceCount);
buffer.append(">"); //$NON-NLS-1$
} catch (ModelException e) {
buffer
.append("<ModelException in toString of " + getElementName()); //$NON-NLS-1$
}
}
}
}