Java 类com.intellij.psi.impl.source.PsiImmediateClassType 实例源码
项目:intellij-ce-playground
文件:SmartTypePointerManagerImpl.java
@Override
protected PsiClassType calcType() {
final PsiElement classElement = myClass.getElement();
if (!(classElement instanceof PsiClass)) return null;
Map<PsiTypeParameter, PsiType> resurrected = new HashMap<PsiTypeParameter, PsiType>();
final Set<Map.Entry<SmartPsiElementPointer, SmartTypePointer>> set = myMap.entrySet();
for (Map.Entry<SmartPsiElementPointer, SmartTypePointer> entry : set) {
PsiElement element = entry.getKey().getElement();
if (element instanceof PsiTypeParameter) {
SmartTypePointer typePointer = entry.getValue();
resurrected.put((PsiTypeParameter)element, typePointer == null ? null : typePointer.getType());
}
}
for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable((PsiClass)classElement)) {
if (!resurrected.containsKey(typeParameter)) {
resurrected.put(typeParameter, null);
}
}
final PsiSubstitutor resurrectedSubstitutor = PsiSubstitutorImpl.createSubstitutor(resurrected);
return new PsiImmediateClassType((PsiClass)classElement, resurrectedSubstitutor);
}
项目:intellij-ce-playground
文件:PsiThisExpressionImpl.java
@Override
public PsiType getType() {
PsiJavaCodeReferenceElement qualifier = getQualifier();
if (qualifier != null){
PsiElement qualifierResolve = qualifier.resolve();
if (qualifierResolve instanceof PsiClass) return new PsiImmediateClassType((PsiClass)qualifierResolve, PsiSubstitutor.EMPTY);
return new PsiClassReferenceType(qualifier, null);
}
for(PsiElement scope = getContext(); scope != null; scope = scope.getContext()){
if (scope instanceof PsiClass){
PsiClass aClass = (PsiClass)scope;
return new PsiImmediateClassType(aClass, PsiSubstitutor.EMPTY);
}
else if (scope instanceof PsiExpressionList && scope.getParent() instanceof PsiAnonymousClass){
scope = scope.getParent();
}
else if (scope instanceof JavaCodeFragment){
PsiType fragmentThisType = ((JavaCodeFragment)scope).getThisType();
if (fragmentThisType != null) return fragmentThisType;
}
}
return null;
}
项目:intellij-ce-playground
文件:DuplicatesFinder.java
private static boolean canTypesBeEquivalent(PsiType type1, PsiType type2) {
if (type1 == null || type2 == null) return false;
if (!type2.isAssignableFrom(type1)) {
if (type1 instanceof PsiImmediateClassType && type2 instanceof PsiImmediateClassType) {
final PsiClass psiClass1 = ((PsiImmediateClassType)type1).resolve();
final PsiClass psiClass2 = ((PsiImmediateClassType)type2).resolve();
if (!(psiClass1 instanceof PsiAnonymousClass &&
psiClass2 instanceof PsiAnonymousClass &&
psiClass1.getManager().areElementsEquivalent(((PsiAnonymousClass)psiClass1).getBaseClassType().resolve(),
((PsiAnonymousClass)psiClass2).getBaseClassType().resolve()))) {
return false;
}
}
else {
return false;
}
}
return true;
}
项目:tools-idea
文件:SmartTypePointerManagerImpl.java
@Override
protected PsiClassType calcType() {
final PsiElement classElement = myClass.getElement();
if (!(classElement instanceof PsiClass)) return null;
Map<PsiTypeParameter, PsiType> resurrected = new HashMap<PsiTypeParameter, PsiType>();
final Set<Map.Entry<SmartPsiElementPointer, SmartTypePointer>> set = myMap.entrySet();
for (Map.Entry<SmartPsiElementPointer, SmartTypePointer> entry : set) {
PsiElement element = entry.getKey().getElement();
if (element instanceof PsiTypeParameter) {
SmartTypePointer typePointer = entry.getValue();
resurrected.put((PsiTypeParameter)element, typePointer == null ? null : typePointer.getType());
}
}
for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable((PsiClass)classElement)) {
if (!resurrected.containsKey(typeParameter)) {
resurrected.put(typeParameter, null);
}
}
final PsiSubstitutor resurrectedSubstitutor = PsiSubstitutorImpl.createSubstitutor(resurrected);
return new PsiImmediateClassType((PsiClass)classElement, resurrectedSubstitutor);
}
项目:tools-idea
文件:PsiThisExpressionImpl.java
@Override
public PsiType getType() {
PsiJavaCodeReferenceElement qualifier = getQualifier();
if (qualifier != null){
PsiElement qualifierResolve = qualifier.resolve();
if (qualifierResolve instanceof PsiClass) return new PsiImmediateClassType((PsiClass)qualifierResolve, PsiSubstitutor.EMPTY);
return new PsiClassReferenceType(qualifier, null);
}
for(PsiElement scope = getContext(); scope != null; scope = scope.getContext()){
if (scope instanceof PsiClass){
PsiClass aClass = (PsiClass)scope;
return new PsiImmediateClassType(aClass, PsiSubstitutor.EMPTY);
}
else if (scope instanceof PsiExpressionList && scope.getParent() instanceof PsiAnonymousClass){
scope = scope.getParent();
}
else if (scope instanceof JavaCodeFragment){
PsiType fragmentThisType = ((JavaCodeFragment)scope).getThisType();
if (fragmentThisType != null) return fragmentThisType;
}
}
return null;
}
项目:tools-idea
文件:DuplicatesFinder.java
private static boolean canTypesBeEquivalent(PsiType type1, PsiType type2) {
if (type1 == null || type2 == null) return false;
if (!type2.isAssignableFrom(type1)) {
if (type1 instanceof PsiImmediateClassType && type2 instanceof PsiImmediateClassType) {
final PsiClass psiClass1 = ((PsiImmediateClassType)type1).resolve();
final PsiClass psiClass2 = ((PsiImmediateClassType)type2).resolve();
if (!(psiClass1 instanceof PsiAnonymousClass &&
psiClass2 instanceof PsiAnonymousClass &&
psiClass1.getManager().areElementsEquivalent(((PsiAnonymousClass)psiClass1).getBaseClassType().resolve(),
((PsiAnonymousClass)psiClass2).getBaseClassType().resolve()))) {
return false;
}
}
else {
return false;
}
}
return true;
}
项目:consulo-java
文件:JavaEnumAugmentProvider.java
@NotNull
@Override
@SuppressWarnings("unchecked")
public <Psi extends PsiElement> List<Psi> getAugments(@NotNull PsiElement element, @NotNull Class<Psi> type)
{
if(type == PsiMethod.class && element instanceof PsiClass && element.getUserData(FLAG) == Boolean.TRUE && ((PsiClass) element).isEnum())
{
List<Psi> list = new ArrayList<Psi>(2);
LightMethodBuilder valuesMethod = new LightMethodBuilder(element.getManager(), JavaLanguage.INSTANCE, VALUES_METHOD_NAME);
valuesMethod.setContainingClass((PsiClass) element);
valuesMethod.setMethodReturnType(new PsiArrayType(new PsiImmediateClassType((PsiClass)element, PsiSubstitutor.EMPTY)));
valuesMethod.addModifiers(PsiModifier.PUBLIC, PsiModifier.STATIC);
list.add((Psi) valuesMethod);
LightMethodBuilder valueOfMethod = new LightMethodBuilder(element.getManager(), JavaLanguage.INSTANCE, VALUE_OF_METHOD_NAME);
valueOfMethod.setContainingClass((PsiClass) element);
valueOfMethod.setMethodReturnType(new PsiImmediateClassType((PsiClass) element, PsiSubstitutor.EMPTY));
valueOfMethod.addModifiers(PsiModifier.PUBLIC, PsiModifier.STATIC);
valueOfMethod.addParameter("name", JavaClassNames.JAVA_LANG_STRING);
valueOfMethod.addException(JavaClassNames.JAVA_LANG_ILLEGAL_ARGUMENT_EXCEPTION);
list.add((Psi) valueOfMethod);
return list;
}
return Collections.emptyList();
}
项目:consulo-java
文件:PsiThisExpressionImpl.java
@Override
public PsiType getType() {
PsiJavaCodeReferenceElement qualifier = getQualifier();
if (qualifier != null){
PsiClass qualifierResolve = (PsiClass)qualifier.resolve();
if (qualifierResolve != null) return new PsiImmediateClassType(qualifierResolve, PsiSubstitutor.EMPTY);
return new PsiClassReferenceType(qualifier, null);
}
for(PsiElement scope = getContext(); scope != null; scope = scope.getContext()){
if (scope instanceof PsiClass){
PsiClass aClass = (PsiClass)scope;
return new PsiImmediateClassType(aClass, PsiSubstitutor.EMPTY);
}
else if (scope instanceof PsiExpressionList && scope.getParent() instanceof PsiAnonymousClass){
scope = scope.getParent();
}
else if (scope instanceof JavaCodeFragment){
PsiType fragmentThisType = ((JavaCodeFragment)scope).getThisType();
if (fragmentThisType != null) return fragmentThisType;
}
}
return null;
}
项目:consulo-java
文件:DuplicatesFinder.java
private static boolean canTypesBeEquivalent(PsiType type1, PsiType type2)
{
if(type1 == null || type2 == null)
{
return false;
}
if(!type2.isAssignableFrom(type1))
{
if(type1 instanceof PsiImmediateClassType && type2 instanceof PsiImmediateClassType)
{
final PsiClass psiClass1 = ((PsiImmediateClassType) type1).resolve();
final PsiClass psiClass2 = ((PsiImmediateClassType) type2).resolve();
if(!(psiClass1 instanceof PsiAnonymousClass &&
psiClass2 instanceof PsiAnonymousClass &&
psiClass1.getManager().areElementsEquivalent(((PsiAnonymousClass) psiClass1).getBaseClassType().resolve(), ((PsiAnonymousClass) psiClass2).getBaseClassType().resolve())))
{
return false;
}
}
else
{
return false;
}
}
return true;
}
项目:consulo-java
文件:GuavaLineMarkerProvider.java
@NotNull
private static Query<PsiMember> createQuery(@NotNull PsiClass target, @NotNull PsiClass annClass)
{
PsiImmediateClassType type = new PsiImmediateClassType(target, PsiSubstitutor.EMPTY);
return new FilteredQuery<>(AnnotatedMembersSearch.search(annClass), psiMember -> ReadAction.compute(() ->
{
if(psiMember instanceof PsiMethod && !psiMember.hasModifierProperty(PsiModifier.STATIC))
{
PsiParameterList parameterList = ((PsiMethod) psiMember).getParameterList();
PsiParameter[] parameters = parameterList.getParameters();
if(parameters.length == 1 && parameters[0].getType().equals(type))
{
return true;
}
}
return false;
}));
}
项目:intellij-ce-playground
文件:JavaResolveCache.java
@Nullable
public <T extends PsiExpression> PsiType getType(@NotNull T expr, @NotNull Function<T, PsiType> f) {
final boolean isOverloadCheck = MethodCandidateInfo.isOverloadCheck();
PsiType type = isOverloadCheck ? null : myCalculatedTypes.get(expr);
if (type == null) {
final RecursionGuard.StackStamp dStackStamp = PsiDiamondType.ourDiamondGuard.markStack();
type = f.fun(expr);
if (!dStackStamp.mayCacheNow() || isOverloadCheck) {
return type;
}
if (type == null) type = TypeConversionUtil.NULL_TYPE;
myCalculatedTypes.put(expr, type);
if (type instanceof PsiClassReferenceType) {
// convert reference-based class type to the PsiImmediateClassType, since the reference may become invalid
PsiClassType.ClassResolveResult result = ((PsiClassReferenceType)type).resolveGenerics();
PsiClass psiClass = result.getElement();
type = psiClass == null
? type // for type with unresolved reference, leave it in the cache
// for clients still might be able to retrieve its getCanonicalText() from the reference text
: new PsiImmediateClassType(psiClass, result.getSubstitutor(), ((PsiClassReferenceType)type).getLanguageLevel(), type.getAnnotations());
}
}
if (!type.isValid()) {
if (expr.isValid()) {
PsiJavaCodeReferenceElement refInside = type instanceof PsiClassReferenceType ? ((PsiClassReferenceType)type).getReference() : null;
@NonNls String typeinfo = type + " (" + type.getClass() + ")" + (refInside == null ? "" : "; ref inside: "+refInside + " ("+refInside.getClass()+") valid:"+refInside.isValid());
LOG.error("Type is invalid: " + typeinfo + "; expr: '" + expr + "' (" + expr.getClass() + ") is valid");
}
else {
LOG.error("Expression: '"+expr+"' is invalid, must not be used for getType()");
}
}
return type == TypeConversionUtil.NULL_TYPE ? null : type;
}
项目:intellij-ce-playground
文件:PsiImplUtil.java
@NotNull
public static PsiType getType(@NotNull PsiClassObjectAccessExpression classAccessExpression) {
GlobalSearchScope resolveScope = classAccessExpression.getResolveScope();
PsiManager manager = classAccessExpression.getManager();
final PsiClass classClass = JavaPsiFacade.getInstance(manager.getProject()).findClass("java.lang.Class", resolveScope);
if (classClass == null) {
return new PsiClassReferenceType(new LightClassReference(manager, "Class", "java.lang.Class", resolveScope), null);
}
if (!PsiUtil.isLanguageLevel5OrHigher(classAccessExpression)) {
//Raw java.lang.Class
return JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().createType(classClass);
}
PsiSubstitutor substitutor = PsiSubstitutor.EMPTY;
PsiType operandType = classAccessExpression.getOperand().getType();
if (operandType instanceof PsiPrimitiveType && !PsiType.NULL.equals(operandType)) {
if (PsiType.VOID.equals(operandType)) {
operandType = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory()
.createTypeByFQClassName("java.lang.Void", classAccessExpression.getResolveScope());
}
else {
operandType = ((PsiPrimitiveType)operandType).getBoxedType(classAccessExpression);
}
}
final PsiTypeParameter[] typeParameters = classClass.getTypeParameters();
if (typeParameters.length == 1) {
substitutor = substitutor.put(typeParameters[0], operandType);
}
return new PsiImmediateClassType(classClass, substitutor);
}
项目:intellij-ce-playground
文件:AnnotationsHighlightUtil.java
@Nullable
private static String doCheckRepeatableAnnotation(@NotNull PsiAnnotation annotation) {
PsiAnnotationOwner owner = annotation.getOwner();
if (!(owner instanceof PsiModifierList)) return null;
PsiElement target = ((PsiModifierList)owner).getParent();
if (!(target instanceof PsiClass) || !((PsiClass)target).isAnnotationType()) return null;
PsiClass container = getRepeatableContainer(annotation);
if (container == null) return null;
PsiMethod[] methods = container.findMethodsByName("value", false);
if (methods.length == 0) {
return JavaErrorMessages.message("annotation.container.no.value", container.getQualifiedName());
}
if (methods.length == 1) {
PsiType expected = new PsiImmediateClassType((PsiClass)target, PsiSubstitutor.EMPTY).createArrayType();
if (!expected.equals(methods[0].getReturnType())) {
return JavaErrorMessages.message("annotation.container.bad.type", container.getQualifiedName(), JavaHighlightUtil.formatType(expected));
}
}
RetentionPolicy targetPolicy = getRetentionPolicy((PsiClass)target);
if (targetPolicy != null) {
RetentionPolicy containerPolicy = getRetentionPolicy(container);
if (containerPolicy != null && targetPolicy.compareTo(containerPolicy) > 0) {
return JavaErrorMessages.message("annotation.container.low.retention", container.getQualifiedName(), containerPolicy);
}
}
Set<PsiAnnotation.TargetType> repeatableTargets = PsiImplUtil.getAnnotationTargets((PsiClass)target);
if (repeatableTargets != null) {
Set<PsiAnnotation.TargetType> containerTargets = PsiImplUtil.getAnnotationTargets(container);
if (containerTargets != null && !repeatableTargets.containsAll(containerTargets)) {
return JavaErrorMessages.message("annotation.container.wide.target", container.getQualifiedName());
}
}
return null;
}
项目:intellij-ce-playground
文件:GroovyShellCodeFragment.java
public void addVariable(String name, GrExpression expr) {
PsiType type = expr.getType();
if (type instanceof GrClassReferenceType) {
final PsiClassType.ClassResolveResult resolveResult = ((GrClassReferenceType)type).resolveGenerics();
final PsiClass psiClass = resolveResult.getElement();
type = psiClass == null ? null : new PsiImmediateClassType(psiClass, resolveResult.getSubstitutor());
}
if (type != null) {
myVariables.put(name, new GrLightVariable(getManager(), name, type, this));
}
}
项目:tools-idea
文件:JavaResolveCache.java
@Nullable
public <T extends PsiExpression> PsiType getType(@NotNull T expr, @NotNull Function<T, PsiType> f) {
PsiType type = getCachedType(expr);
if (type == null) {
final RecursionGuard.StackStamp dStackStamp = PsiDiamondType.ourDiamondGuard.markStack();
final RecursionGuard.StackStamp gStackStamp = PsiResolveHelper.ourGraphGuard.markStack();
type = f.fun(expr);
if (!dStackStamp.mayCacheNow() || !gStackStamp.mayCacheNow()) {
return type;
}
if (type == null) type = TypeConversionUtil.NULL_TYPE;
Reference<PsiType> ref = new SoftReference<PsiType>(type);
myCalculatedTypes.put(expr, ref);
if (type instanceof PsiClassReferenceType) {
// convert reference-based class type to the PsiImmediateClassType, since the reference may become invalid
PsiClassType.ClassResolveResult result = ((PsiClassReferenceType)type).resolveGenerics();
PsiClass psiClass = result.getElement();
type = psiClass == null
? type // for type with unresolved reference, leave it in the cache
// for clients still might be able to retrieve its getCanonicalText() from the reference text
: new PsiImmediateClassType(psiClass, result.getSubstitutor(), ((PsiClassReferenceType)type).getLanguageLevel(), type.getAnnotations());
}
}
if (!type.isValid()) {
if (expr.isValid()) {
PsiJavaCodeReferenceElement refInside = type instanceof PsiClassReferenceType ? ((PsiClassReferenceType)type).getReference() : null;
@NonNls String typeinfo = type + " (" + type.getClass() + ")" + (refInside == null ? "" : "; ref inside: "+refInside + " ("+refInside.getClass()+") valid:"+refInside.isValid());
LOG.error("Type is invalid: " + typeinfo + "; expr: '" + expr + "' (" + expr.getClass() + ") is valid");
}
else {
LOG.error("Expression: '"+expr+"' is invalid, must not be used for getType()");
}
}
return type == TypeConversionUtil.NULL_TYPE ? null : type;
}
项目:tools-idea
文件:PsiImplUtil.java
public static PsiType getType(@NotNull PsiClassObjectAccessExpression classAccessExpression) {
GlobalSearchScope resolveScope = classAccessExpression.getResolveScope();
PsiManager manager = classAccessExpression.getManager();
final PsiClass classClass = JavaPsiFacade.getInstance(manager.getProject()).findClass("java.lang.Class", resolveScope);
if (classClass == null) {
return new PsiClassReferenceType(new LightClassReference(manager, "Class", "java.lang.Class", resolveScope), null);
}
if (!PsiUtil.isLanguageLevel5OrHigher(classAccessExpression)) {
//Raw java.lang.Class
return JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().createType(classClass);
}
PsiSubstitutor substitutor = PsiSubstitutor.EMPTY;
PsiType operandType = classAccessExpression.getOperand().getType();
if (operandType instanceof PsiPrimitiveType && !PsiType.NULL.equals(operandType)) {
if (PsiType.VOID.equals(operandType)) {
operandType = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory()
.createTypeByFQClassName("java.lang.Void", classAccessExpression.getResolveScope());
}
else {
operandType = ((PsiPrimitiveType)operandType).getBoxedType(classAccessExpression);
}
}
final PsiTypeParameter[] typeParameters = classClass.getTypeParameters();
if (typeParameters.length == 1) {
substitutor = substitutor.put(typeParameters[0], operandType);
}
return new PsiImmediateClassType(classClass, substitutor);
}
项目:tools-idea
文件:AnnotationsHighlightUtil.java
@Nullable
private static String doCheckRepeatableAnnotation(PsiAnnotation annotation) {
PsiAnnotationOwner owner = annotation.getOwner();
if (!(owner instanceof PsiModifierList)) return null;
PsiElement target = ((PsiModifierList)owner).getParent();
if (!(target instanceof PsiClass) || !((PsiClass)target).isAnnotationType()) return null;
PsiClass container = getRepeatableContainer(annotation);
if (container == null) return null;
PsiMethod[] methods = container.findMethodsByName("value", false);
if (methods.length == 0) {
return JavaErrorMessages.message("annotation.container.no.value", container.getQualifiedName());
}
if (methods.length == 1) {
PsiType expected = new PsiImmediateClassType((PsiClass)target, PsiSubstitutor.EMPTY).createArrayType();
if (!expected.equals(methods[0].getReturnType())) {
return JavaErrorMessages.message("annotation.container.bad.type", container.getQualifiedName(), JavaHighlightUtil
.formatType(expected));
}
}
RetentionPolicy targetPolicy = getRetentionPolicy((PsiClass)target);
if (targetPolicy != null) {
RetentionPolicy containerPolicy = getRetentionPolicy(container);
if (containerPolicy != null && targetPolicy.compareTo(containerPolicy) > 0) {
return JavaErrorMessages.message("annotation.container.low.retention", container.getQualifiedName(), containerPolicy);
}
}
Set<PsiAnnotation.TargetType> repeatableTargets = PsiImplUtil.getAnnotationTargets((PsiClass)target);
if (repeatableTargets != null) {
Set<PsiAnnotation.TargetType> containerTargets = PsiImplUtil.getAnnotationTargets(container);
if (containerTargets != null && !repeatableTargets.containsAll(containerTargets)) {
return JavaErrorMessages.message("annotation.container.wide.target", container.getQualifiedName());
}
}
return null;
}
项目:consulo-ikvm
文件:BaseStubBuilder.java
@NotNull
private PsiType fromQName(String qName)
{
PsiClass aClass = JavaPsiFacade.getInstance(myNavTarget.getProject()).findClass(qName, myNavTarget.getResolveScope());
if(aClass == null)
{
return fromText(qName);
}
return new PsiImmediateClassType(aClass, PsiSubstitutor.EMPTY);
}
项目:consulo-java
文件:SmartTypePointerManagerImpl.java
@Override
protected PsiClassType calcType()
{
final PsiElement classElement = myClass.getElement();
if(!(classElement instanceof PsiClass))
{
return null;
}
Map<PsiTypeParameter, PsiType> resurrected = new HashMap<PsiTypeParameter, PsiType>();
final Set<Map.Entry<SmartPsiElementPointer, SmartTypePointer>> set = myMap.entrySet();
for(Map.Entry<SmartPsiElementPointer, SmartTypePointer> entry : set)
{
PsiElement element = entry.getKey().getElement();
if(element instanceof PsiTypeParameter)
{
SmartTypePointer typePointer = entry.getValue();
resurrected.put((PsiTypeParameter) element, typePointer == null ? null : typePointer.getType());
}
}
for(PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable((PsiClass) classElement))
{
if(!resurrected.containsKey(typeParameter))
{
resurrected.put(typeParameter, null);
}
}
final PsiSubstitutor resurrectedSubstitutor = PsiSubstitutorImpl.createSubstitutor(resurrected);
return new PsiImmediateClassType((PsiClass) classElement, resurrectedSubstitutor);
}
项目:consulo-java
文件:PsiImplUtil.java
@NotNull
public static PsiType getType(@NotNull PsiClassObjectAccessExpression classAccessExpression)
{
GlobalSearchScope resolveScope = classAccessExpression.getResolveScope();
PsiManager manager = classAccessExpression.getManager();
final PsiClass classClass = JavaPsiFacade.getInstance(manager.getProject()).findClass("java.lang.Class", resolveScope);
if(classClass == null)
{
return new PsiClassReferenceType(new LightClassReference(manager, "Class", "java.lang.Class", resolveScope), null);
}
if(!PsiUtil.isLanguageLevel5OrHigher(classAccessExpression))
{
//Raw java.lang.Class
return JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().createType(classClass);
}
PsiSubstitutor substitutor = PsiSubstitutor.EMPTY;
PsiType operandType = classAccessExpression.getOperand().getType();
if(operandType instanceof PsiPrimitiveType && !PsiType.NULL.equals(operandType))
{
if(PsiType.VOID.equals(operandType))
{
operandType = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().createTypeByFQClassName("java.lang.Void", classAccessExpression.getResolveScope());
}
else
{
operandType = ((PsiPrimitiveType) operandType).getBoxedType(classAccessExpression);
}
}
final PsiTypeParameter[] typeParameters = classClass.getTypeParameters();
if(typeParameters.length == 1)
{
substitutor = substitutor.put(typeParameters[0], operandType);
}
return new PsiImmediateClassType(classClass, substitutor);
}
项目:consulo-java
文件:GsonDescriptionByAnotherPsiElementProvider.java
@Override
public void fillRootObject(@NotNull PsiClass psiClass, @NotNull JsonObjectDescriptor jsonObjectDescriptor)
{
PropertyType type = toType(psiClass.getProject(), null, new PsiImmediateClassType(psiClass, PsiSubstitutor.EMPTY));
if(type != null && type.myValue instanceof JsonObjectDescriptor)
{
for(Map.Entry<String, JsonPropertyDescriptor> entry : ((JsonObjectDescriptor) type.myValue).getProperties().entrySet())
{
jsonObjectDescriptor.getProperties().put(entry.getKey(), entry.getValue());
}
}
}
项目:intellij-ce-playground
文件:MethodsChainsCompletionContributor.java
private static List<LookupElement> searchForLookups(final TargetType target,
final Set<String> contextRelevantTypes,
final ChainCompletionContext completionContext) {
final Project project = completionContext.getProject();
final MethodsUsageIndexReader methodsUsageIndexReader = MethodsUsageIndexReader.getInstance(project);
final List<MethodsChain> searchResult =
searchChains(target, contextRelevantTypes, MAX_SEARCH_RESULT_SIZE, MAX_CHAIN_SIZE, completionContext, methodsUsageIndexReader);
if (searchResult.size() < MAX_SEARCH_RESULT_SIZE) {
if (!target.isArray()) {
final List<MethodsChain> inheritorFilteredSearchResult = new SmartList<MethodsChain>();
final Processor<TargetType> consumer = new Processor<TargetType>() {
@Override
public boolean process(final TargetType targetType) {
for (final MethodsChain chain : searchChains(targetType,
contextRelevantTypes,
MAX_SEARCH_RESULT_SIZE,
MAX_CHAIN_SIZE,
completionContext,
methodsUsageIndexReader)) {
boolean insert = true;
for (final MethodsChain baseChain : searchResult) {
final MethodsChain.CompareResult r = MethodsChain.compare(baseChain, chain, completionContext.getPsiManager());
if (r != MethodsChain.CompareResult.NOT_EQUAL) {
insert = false;
break;
}
}
if (insert) {
inheritorFilteredSearchResult.add(chain);
}
}
searchResult.addAll(inheritorFilteredSearchResult);
return searchResult.size() < MAX_SEARCH_RESULT_SIZE;
}
};
DirectClassInheritorsSearch.search(((PsiClassType)target.getPsiType()).resolve()).forEach(new Processor<PsiClass>() {
@Override
public boolean process(final PsiClass psiClass) {
final String inheritorQName = psiClass.getQualifiedName();
if (inheritorQName == null) {
return true;
}
return consumer.process(new TargetType(inheritorQName, false, new PsiImmediateClassType(psiClass, PsiSubstitutor.EMPTY)));
}
});
}
}
final List<MethodsChain> chains = searchResult.size() > MAX_CHAIN_SIZE ? chooseHead(searchResult) : searchResult;
return MethodsChainLookupRangingHelper
.chainsToWeightableLookupElements(filterTailAndGetSumLastMethodOccurrence(chains), completionContext);
}
项目:consulo-java
文件:PsiElementFactoryImpl.java
@NotNull
@Override
public PsiClassType createType(@NotNull PsiClass resolve, @NotNull PsiSubstitutor substitutor)
{
return new PsiImmediateClassType(resolve, substitutor);
}
项目:consulo-java
文件:PsiElementFactoryImpl.java
@NotNull
@Override
public PsiClassType createType(@NotNull PsiClass resolve, @NotNull PsiSubstitutor substitutor, @Nullable LanguageLevel languageLevel)
{
return new PsiImmediateClassType(resolve, substitutor, languageLevel);
}
项目:consulo-java
文件:PsiElementFactoryImpl.java
@NotNull
@Override
public PsiClassType createType(@NotNull PsiClass resolve, @NotNull PsiSubstitutor substitutor, @Nullable LanguageLevel languageLevel, @NotNull PsiAnnotation[] annotations)
{
return new PsiImmediateClassType(resolve, substitutor, languageLevel, annotations);
}
项目:consulo-java
文件:PsiElementFactoryImpl.java
@NotNull
@Override
public PsiClassType createType(@NotNull final PsiClass aClass)
{
return new PsiImmediateClassType(aClass, aClass instanceof PsiTypeParameter ? PsiSubstitutor.EMPTY : createRawSubstitutor(aClass));
}
项目:consulo-java
文件:JavaResolveCache.java
@Nullable
public <T extends PsiExpression> PsiType getType(@NotNull T expr, @NotNull Function<T, PsiType> f)
{
final boolean isOverloadCheck = MethodCandidateInfo.isOverloadCheck() || LambdaUtil.isLambdaParameterCheck();
final boolean polyExpression = PsiPolyExpressionUtil.isPolyExpression(expr);
PsiType type = isOverloadCheck && polyExpression ? null : myCalculatedTypes.get(expr);
if(type == null)
{
final RecursionGuard.StackStamp dStackStamp = PsiDiamondType.ourDiamondGuard.markStack();
type = f.fun(expr);
if(!dStackStamp.mayCacheNow())
{
return type;
}
//cache standalone expression types as they do not depend on the context
if(isOverloadCheck && polyExpression)
{
return type;
}
if(type == null)
{
type = TypeConversionUtil.NULL_TYPE;
}
myCalculatedTypes.put(expr, type);
if(type instanceof PsiClassReferenceType)
{
// convert reference-based class type to the PsiImmediateClassType, since the reference may become invalid
PsiClassType.ClassResolveResult result = ((PsiClassReferenceType) type).resolveGenerics();
PsiClass psiClass = result.getElement();
type = psiClass == null ? type // for type with unresolved reference, leave it in the cache
// for clients still might be able to retrieve its getCanonicalText() from the reference text
: new PsiImmediateClassType(psiClass, result.getSubstitutor(), ((PsiClassReferenceType) type).getLanguageLevel(), type.getAnnotationProvider());
}
}
if(!type.isValid())
{
if(expr.isValid())
{
PsiJavaCodeReferenceElement refInside = type instanceof PsiClassReferenceType ? ((PsiClassReferenceType) type).getReference() : null;
@NonNls String typeinfo = type + " (" + type.getClass() + ")" + (refInside == null ? "" : "; ref inside: " + refInside + " (" + refInside.getClass() + ") valid:" + refInside.isValid
());
LOG.error("Type is invalid: " + typeinfo + "; expr: '" + expr + "' (" + expr.getClass() + ") is valid");
}
else
{
LOG.error("Expression: '" + expr + "' is invalid, must not be used for getType()");
}
}
return type == TypeConversionUtil.NULL_TYPE ? null : type;
}
项目:consulo-java
文件:AnnotationsHighlightUtil.java
@Nullable
private static String doCheckRepeatableAnnotation(@NotNull PsiAnnotation annotation)
{
PsiAnnotationOwner owner = annotation.getOwner();
if(!(owner instanceof PsiModifierList))
{
return null;
}
PsiElement target = ((PsiModifierList) owner).getParent();
if(!(target instanceof PsiClass) || !((PsiClass) target).isAnnotationType())
{
return null;
}
PsiClass container = getRepeatableContainer(annotation);
if(container == null)
{
return null;
}
PsiMethod[] methods = container.findMethodsByName("value", false);
if(methods.length == 0)
{
return JavaErrorMessages.message("annotation.container.no.value", container.getQualifiedName());
}
if(methods.length == 1)
{
PsiType expected = new PsiImmediateClassType((PsiClass) target, PsiSubstitutor.EMPTY).createArrayType();
if(!expected.equals(methods[0].getReturnType()))
{
return JavaErrorMessages.message("annotation.container.bad.type", container.getQualifiedName(), JavaHighlightUtil.formatType(expected));
}
}
RetentionPolicy targetPolicy = getRetentionPolicy((PsiClass) target);
if(targetPolicy != null)
{
RetentionPolicy containerPolicy = getRetentionPolicy(container);
if(containerPolicy != null && targetPolicy.compareTo(containerPolicy) > 0)
{
return JavaErrorMessages.message("annotation.container.low.retention", container.getQualifiedName(), containerPolicy);
}
}
Set<PsiAnnotation.TargetType> repeatableTargets = AnnotationTargetUtil.getAnnotationTargets((PsiClass) target);
if(repeatableTargets != null)
{
Set<PsiAnnotation.TargetType> containerTargets = AnnotationTargetUtil.getAnnotationTargets(container);
if(containerTargets != null && !repeatableTargets.containsAll(containerTargets))
{
return JavaErrorMessages.message("annotation.container.wide.target", container.getQualifiedName());
}
}
return null;
}