blob: 31047ddedb1b22cc8c35df46b8afb842f297c88f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2004 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
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.dom;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.internal.compiler.env.INameEnvironment;
import org.eclipse.jdt.internal.core.NameLookup;
import org.eclipse.jdt.internal.core.SearchableEnvironment;
/**
* Internal implementation of package bindings.
*/
class PackageBinding implements IPackageBinding {
private static final String[] NO_NAME_COMPONENTS = new String[0];
private static final String UNNAMED = ""; //$NON-NLS-1$
private static final char PACKAGE_NAME_SEPARATOR = '.';
private org.eclipse.jdt.internal.compiler.lookup.PackageBinding binding;
private String name;
private String[] components;
PackageBinding(org.eclipse.jdt.internal.compiler.lookup.PackageBinding binding) {
this.binding = binding;
}
/*
* @see IBinding#getName()
*/
public String getName() {
if (name == null) {
computeNameAndComponents();
}
return name;
}
/*
* @see IPackageBinding#isUnnamed()
*/
public boolean isUnnamed() {
return getName().equals(UNNAMED);
}
/*
* @see IPackageBinding#getNameComponents()
*/
public String[] getNameComponents() {
if (components == null) {
computeNameAndComponents();
}
return components;
}
/*
* @see IBinding#getKind()
*/
public int getKind() {
return IBinding.PACKAGE;
}
/*
* @see IBinding#getModifiers()
*/
public int getModifiers() {
return -1;
}
/*
* @see IBinding#isDeprecated()
*/
public boolean isDeprecated() {
return false;
}
/**
* @see IBinding#isSynthetic()
*/
public boolean isSynthetic() {
return false;
}
/*
* @see IBinding#getJavaElement()
*/
public IJavaElement getJavaElement() {
INameEnvironment nameEnvironment = this.binding.environment.nameEnvironment; // a package binding always has a LooupEnvironment set
if (!(nameEnvironment instanceof SearchableEnvironment)) return null;
NameLookup nameLookup = ((SearchableEnvironment) nameEnvironment).nameLookup;
if (nameLookup == null) return null;
IJavaElement[] pkgs = nameLookup.findPackageFragments(getName(), false/*exact match*/);
if (pkgs == null) return null;
return pkgs[0];
}
/*
* @see IBinding#getKey()
*/
public String getKey() {
return new String(this.binding.computeUniqueKey());
}
/*
* @see IBinding#isEqualTo(Binding)
* @since 3.1
*/
public boolean isEqualTo(IBinding other) {
if (other == this) {
// identical binding - equal (key or no key)
return true;
}
if (other == null) {
// other binding missing
return false;
}
if (!(other instanceof PackageBinding)) {
return false;
}
org.eclipse.jdt.internal.compiler.lookup.PackageBinding packageBinding2 = ((PackageBinding) other).binding;
return CharOperation.equals(this.binding.compoundName, packageBinding2.compoundName);
}
private void computeNameAndComponents() {
char[][] compoundName = this.binding.compoundName;
if (compoundName == CharOperation.NO_CHAR_CHAR || compoundName == null) {
name = UNNAMED;
components = NO_NAME_COMPONENTS;
} else {
int length = compoundName.length;
components = new String[length];
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < length - 1; i++) {
components[i] = new String(compoundName[i]);
buffer.append(compoundName[i]).append(PACKAGE_NAME_SEPARATOR);
}
components[length - 1] = new String(compoundName[length - 1]);
buffer.append(compoundName[length - 1]);
name = buffer.toString();
}
}
/*
* For debugging purpose only.
* @see java.lang.Object#toString()
*/
public String toString() {
return this.binding.toString();
}
}