blob: a6c6dcd8347b0b80c0a0b73c6255bc4e1dee795d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 Google Inc and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* John Glassmyer <jogl@google.com> - import group sorting is broken - https://bugs.eclipse.org/430303
*******************************************************************************/
package org.aspectj.org.eclipse.jdt.internal.core.dom.rewrite.imports;
import org.aspectj.org.eclipse.jdt.core.Signature;
import org.aspectj.org.eclipse.jdt.core.dom.ImportDeclaration;
/**
* Encapsulates an import's fully qualified name, whether it is on-demand, and whether it is static.
* <p>
* The fully qualified name is divided into two parts:
* <ul>
* <li>a container name, which is everything preceding the last dot ('.').
* <li>a simple name, which is the part following the last dot ("*" for an on-demand import).
* </ul>
*/
public final class ImportName {
static ImportName createFor(ImportDeclaration importDeclaration) {
String declName = importDeclaration.getName().getFullyQualifiedName();
if (importDeclaration.isOnDemand()) {
return createOnDemand(importDeclaration.isStatic(), declName);
}
return createFor(importDeclaration.isStatic(), declName);
}
static ImportName createOnDemand(boolean isStatic, String containerName) {
return new ImportName(isStatic, containerName, "*"); //$NON-NLS-1$
}
public static ImportName createFor(boolean isStatic, String qualifiedName) {
String containerName = Signature.getQualifier(qualifiedName);
String simpleName = Signature.getSimpleName(qualifiedName);
return new ImportName(isStatic, containerName, simpleName);
}
public final boolean isStatic;
public final String containerName;
public final String simpleName;
public final String qualifiedName;
private ImportName(boolean isStatic, String containerName, String simpleName) {
this.isStatic = isStatic;
this.containerName = containerName;
this.simpleName = simpleName;
this.qualifiedName = containerName.isEmpty() ? simpleName : containerName + "." + simpleName; //$NON-NLS-1$;
}
@Override
public String toString() {
String template = this.isStatic ? "staticImport(%s)" : "typeImport(%s)"; //$NON-NLS-1$ //$NON-NLS-2$
return String.format(template, this.qualifiedName);
}
@Override
public int hashCode() {
int result = this.qualifiedName.hashCode();
result = 31 * result + (this.isStatic ? 1 : 0);
return result;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof ImportName)) {
return false;
}
ImportName other = (ImportName) obj;
return this.qualifiedName.equals(other.qualifiedName) && this.isStatic == other.isStatic;
}
public boolean isOnDemand() {
return this.simpleName.equals("*"); //$NON-NLS-1$
}
/**
* Returns an on-demand ImportName with the same isStatic and containerName as this ImportName.
*/
ImportName getContainerOnDemand() {
if (this.isOnDemand()) {
return this;
}
return ImportName.createOnDemand(this.isStatic, this.containerName);
}
}