[groovy] GrTraitType: add code comments & swap some code back.

This commit is contained in:
Daniil Ovchinnikov
2015-11-10 20:02:02 +03:00
parent 70bcea7250
commit f0ecfd837d
2 changed files with 15 additions and 10 deletions
@@ -166,16 +166,17 @@ public class GrReferenceResolveRunner {
? ((PsiDisjunctionType)originalQualifierType).getLeastUpperBound()
: originalQualifierType;
if (qualifierType instanceof GrTraitType) {
return processTraitType((GrTraitType)qualifierType, state);
}
else if (qualifierType instanceof PsiIntersectionType) {
if (qualifierType instanceof PsiIntersectionType) {
for (PsiType conjunct : ((PsiIntersectionType)qualifierType).getConjuncts()) {
if (!processQualifierType(conjunct, state)) return false;
}
return true;
}
if (qualifierType instanceof GrTraitType) {
return processTraitType((GrTraitType)qualifierType, state);
}
if (qualifierType instanceof PsiClassType) {
PsiClassType.ClassResolveResult qualifierResult = ((PsiClassType)qualifierType).resolveGenerics();
PsiClass qualifierClass = qualifierResult.getElement();
@@ -204,6 +205,9 @@ public class GrReferenceResolveRunner {
return true;
}
/**
* Process trait type conjuncts in reversed order because last applied trait matters.
*/
private boolean processTraitType(@NotNull GrTraitType traitType, @NotNull ResolveState state) {
final PsiType[] conjuncts = traitType.getConjuncts();
for (int i = conjuncts.length - 1; i >= 0; i--) {
@@ -300,17 +300,18 @@ public class CompleteReferenceExpression {
}
getVariantsFromQualifierType(TypesUtil.getJavaLangObject(qualifier), project);
}
else if (qualifierType instanceof GrTraitType) {
PsiType[] conjuncts = ((GrTraitType)qualifierType).getConjuncts();
for (int i = conjuncts.length - 1; i >= 0; i--) {
getVariantsFromQualifierType(conjuncts[i], project);
}
}
else if (qualifierType instanceof PsiIntersectionType) {
for (PsiType conjunct : ((PsiIntersectionType)qualifierType).getConjuncts()) {
getVariantsFromQualifierType(conjunct, project);
}
}
else if (qualifierType instanceof GrTraitType) {
// Process trait type conjuncts in reversed order because last applied trait matters.
PsiType[] conjuncts = ((GrTraitType)qualifierType).getConjuncts();
for (int i = conjuncts.length - 1; i >= 0; i--) {
getVariantsFromQualifierType(conjuncts[i], project);
}
}
else {
getVariantsFromQualifierType(qualifierType, project);
if (qualifier instanceof GrReferenceExpression && !PsiUtil.isSuperReference(qualifier) && !PsiUtil.isInstanceThisRef(qualifier)) {