Skip to content

Commit bf69445

Browse files
committed
Optimize the resolving a little bit
1 parent 1f0a4ee commit bf69445

File tree

7 files changed

+24
-4
lines changed

7 files changed

+24
-4
lines changed

src/ro/redeul/google/go/lang/packages/GoPackages.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public GoPackage getBuiltinPackage() {
163163

164164
@NotNull
165165
public static GoPackage getPackageFor(@Nullable PsiElement element) {
166-
if ( element == null )
166+
if ( element == null || !(element.isValid()))
167167
return GoPackages.Invalid;
168168

169169
GoPackages goPackages = getInstance(element.getProject());

src/ro/redeul/google/go/lang/psi/impl/GoPsiElementBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ final public PsiReference getReference() {
7979
@Override
8080
final public PsiReference[] getReferences() {
8181
// System.out.println("" + hashCode() + ", refs: " + myReferences + " text: " + getText() + " ");
82-
// if (myReferences == null)
82+
if (myReferences == null)
8383
myReferences = defineReferences();
8484

8585
return myReferences;

src/ro/redeul/google/go/lang/psi/impl/expressions/binary/GoMultiplicativeExpressionImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ protected GoType computeConstant(@NotNull GoTypeConstant left, @NotNull GoTypeCo
123123

124124
return GoTypes.constant(Integer, leftValue.divide(rightValue));
125125
case Remainder:
126+
if ( rightValue.compareTo(BigInteger.ZERO) == 0 )
127+
return GoType.Unknown;
128+
126129
return GoTypes.constant(Integer, leftValue.divideAndRemainder(rightValue)[1]);
127130
case BitAnd:
128131
return GoTypes.constant(Integer, leftValue.and(rightValue));

src/ro/redeul/google/go/lang/psi/impl/toplevel/GoMethodDeclarationImpl.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,5 @@ public boolean processDeclarations(@NotNull PsiScopeProcessor processor,
4545
// if we are coming from a child then we should expose the
4646
// method receiver as a declaration
4747
return !(lastParent != null && !processor.execute(getMethodReceiver(), state));
48-
4948
}
5049
}

src/ro/redeul/google/go/lang/psi/resolve/refs/PackageReference.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.intellij.patterns.ElementPattern;
44
import com.intellij.psi.PsiElement;
55
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
7+
import ro.redeul.google.go.lang.packages.GoPackages;
68
import ro.redeul.google.go.lang.psi.expressions.literals.GoLiteralIdentifier;
79
import ro.redeul.google.go.lang.psi.expressions.primary.GoLiteralExpression;
810
import ro.redeul.google.go.lang.psi.expressions.primary.GoSelectorExpression;
@@ -43,6 +45,12 @@ public void walkSolver(PackageSolver solver) {
4345
ResolveStates.initial());
4446
}
4547

48+
@Nullable
49+
@Override
50+
public PsiElement resolve() {
51+
PsiElement resolved = super.resolve();
52+
return resolved == GoPackages.Invalid ? null : resolved;
53+
}
4654

4755
@Override
4856
public boolean isReferenceTo(PsiElement element) {

src/ro/redeul/google/go/lang/psi/resolve/refs/PackageSolver.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package ro.redeul.google.go.lang.psi.resolve.refs;
22

3+
import com.intellij.psi.PsiElement;
4+
import org.jetbrains.annotations.NotNull;
5+
import ro.redeul.google.go.lang.packages.GoPackages;
36
import ro.redeul.google.go.lang.psi.GoPackage;
47
import ro.redeul.google.go.lang.psi.GoPackageReference;
58
import ro.redeul.google.go.lang.psi.resolve.ReferenceSolvingVisitor;
@@ -27,11 +30,17 @@ boolean isReferenceTo(GoImportDeclaration importDeclaration) {
2730
packageName = packageReference.getString();
2831
else {
2932
GoPackage goPackage = importDeclaration.getPackage();
30-
packageName = goPackage != null ? goPackage.getName() : "";
33+
packageName = goPackage.getName();
3134
}
3235

3336
return packageName != null && matchNames(reference.name(), packageName);
3437
}
3538
});
3639
}
40+
41+
@Override
42+
public PsiElement resolve(@NotNull PackageReference reference, boolean incompleteCode) {
43+
PsiElement resolve = super.resolve(reference, incompleteCode);
44+
return resolve == null ? GoPackages.Invalid : resolve;
45+
}
3746
}

src/ro/redeul/google/go/lang/psi/resolve/refs/ShortVarReference.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ protected void walkSolver(ShortVarSolver solver) {
4545
GoBlockStatement blockStatement = getAs(GoBlockStatement.class, declaration.getParent());
4646

4747
if ( blockStatement != null ) {
48+
// System.out.println(blockStatement.getText());
4849
if ( !blockStatement.processDeclarations(solver, ResolveStates.initial(), declaration, this.getElement()))
4950
return;
5051

0 commit comments

Comments
 (0)