blob: 8e58c1280755a4c754b8fec8c345b8d7702c0d91 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 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.aspectj.org.eclipse.jdt.core.dom;
import org.aspectj.org.eclipse.jdt.core.IJavaElement;
import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ModuleBinding;
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
import org.aspectj.org.eclipse.jdt.internal.compiler.util.Util;
/**
* This class represents the recovered binding for a package
*/
class RecoveredPackageBinding implements IPackageBinding {
private static final String[] NO_NAME_COMPONENTS = CharOperation.NO_STRINGS;
private static final String UNNAMED = Util.EMPTY_STRING;
private static final char PACKAGE_NAME_SEPARATOR = '.';
private PackageBinding binding;
private BindingResolver resolver;
private String name = null;
private String[] components = null;
RecoveredPackageBinding(org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding binding, BindingResolver resolver) {
this.binding = binding;
this.resolver = resolver;
}
@Override
public IAnnotationBinding[] getAnnotations() {
return AnnotationBinding.NoAnnotations;
}
@Override
public int getKind() {
return IBinding.PACKAGE;
}
@Override
public int getModifiers() {
return Modifier.NONE;
}
@Override
public boolean isDeprecated() {
return false;
}
@Override
public boolean isRecovered() {
return true;
}
@Override
public boolean isSynthetic() {
return false;
}
@Override
public IJavaElement getJavaElement() {
return null;
}
@Override
public String getKey() {
StringBuffer buffer = new StringBuffer();
buffer.append("Recovered#"); //$NON-NLS-1$
buffer.append(this.binding.computeUniqueKey());
return buffer.toString();
}
@Override
public boolean isEqualTo(IBinding other) {
if (!other.isRecovered() || other.getKind() != IBinding.PACKAGE) return false;
return getKey().equals(other.getKey());
}
@Override
public String getName() {
if (this.name == null) {
computeNameAndComponents();
}
return this.name;
}
@Override
public boolean isUnnamed() {
return false;
}
@Override
public String[] getNameComponents() {
if (this.components == null) {
computeNameAndComponents();
}
return this.components;
}
@Override
public IModuleBinding getModule() {
ModuleBinding moduleBinding = this.binding.enclosingModule;
return moduleBinding != null ? this.resolver.getModuleBinding(moduleBinding) : null;
}
private void computeNameAndComponents() {
char[][] compoundName = this.binding.compoundName;
if (compoundName == CharOperation.NO_CHAR_CHAR || compoundName == null) {
this.name = UNNAMED;
this.components = NO_NAME_COMPONENTS;
} else {
int length = compoundName.length;
this.components = new String[length];
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < length - 1; i++) {
this.components[i] = new String(compoundName[i]);
buffer.append(compoundName[i]).append(PACKAGE_NAME_SEPARATOR);
}
this.components[length - 1] = new String(compoundName[length - 1]);
buffer.append(compoundName[length - 1]);
this.name = buffer.toString();
}
}
}