blob: 3b9e6bf5eef1a3a9ea9adb58e62d0a774fe811a5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2013 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.aspectj.org.eclipse.jdt.internal.codeassist.impl;
import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.aspectj.org.eclipse.jdt.core.IAnnotation;
import org.aspectj.org.eclipse.jdt.core.IField;
import org.aspectj.org.eclipse.jdt.core.IInitializer;
import org.aspectj.org.eclipse.jdt.core.IMethod;
import org.aspectj.org.eclipse.jdt.core.IType;
import org.aspectj.org.eclipse.jdt.core.ITypeParameter;
import org.aspectj.org.eclipse.jdt.core.JavaModelException;
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding;
import org.aspectj.org.eclipse.jdt.internal.core.JavaElement;
import org.aspectj.org.eclipse.jdt.internal.core.ResolvedSourceType;
@SuppressWarnings("rawtypes")
public class AssistSourceType extends ResolvedSourceType {
private Map bindingCache;
private Map infoCache;
private String uniqueKey;
private boolean isResolved;
public AssistSourceType(JavaElement parent, String name, Map bindingCache, Map infoCache) {
super(parent, name, null);
this.bindingCache = bindingCache;
this.infoCache = infoCache;
}
@Override
public Object getElementInfo(IProgressMonitor monitor) throws JavaModelException {
return this.infoCache.get(this);
}
@Override
public String getFullyQualifiedParameterizedName() throws JavaModelException {
if (isResolved()) {
return getFullyQualifiedParameterizedName(getFullyQualifiedName('.'), this.getKey());
}
return getFullyQualifiedName('.', true/*show parameters*/);
}
@Override
public String getKey() {
if (this.uniqueKey == null) {
Binding binding = (Binding) this.bindingCache.get(this);
if (binding != null) {
this.isResolved = true;
this.uniqueKey = new String(binding.computeUniqueKey());
} else {
this.isResolved = false;
try {
this.uniqueKey = getKey(this, false/*don't open*/);
} catch (JavaModelException e) {
// happen only if force open is true
return null;
}
}
}
return this.uniqueKey;
}
@Override
public boolean isResolved() {
getKey();
return this.isResolved;
}
@Override
protected void toStringInfo(int tab, StringBuffer buffer, Object info,boolean showResolvedInfo) {
super.toStringInfo(tab, buffer, info, showResolvedInfo && isResolved());
}
@Override
public IAnnotation getAnnotation(String annotationName) {
return new AssistAnnotation(this, annotationName, this.infoCache);
}
@Override
public IField getField(String fieldName) {
return new AssistSourceField(this, fieldName, this.bindingCache, this.infoCache);
}
@Override
public IInitializer getInitializer(int count) {
return new AssistInitializer(this, count, this.bindingCache, this.infoCache);
}
@Override
public IMethod getMethod(String selector, String[] parameterTypeSignatures) {
return new AssistSourceMethod(this, selector, parameterTypeSignatures, this.bindingCache, this.infoCache);
}
@Override
public IType getType(String typeName) {
return new AssistSourceType(this, typeName, this.bindingCache, this.infoCache);
}
@Override
public IType getType(String typeName, int count) {
AssistSourceType type = new AssistSourceType(this, typeName, this.bindingCache, this.infoCache);
type.occurrenceCount = count;
return type;
}
@Override
public ITypeParameter getTypeParameter(String typeParameterName) {
return new AssistTypeParameter(this, typeParameterName, this.infoCache);
}
}