diff --git a/build.gradle b/build.gradle index 24fa078dcd..4b6cc3982a 100644 --- a/build.gradle +++ b/build.gradle @@ -39,6 +39,7 @@ allprojects { } test { java.srcDir 'src/test/java' + resources.srcDirs 'src/main/resources' } } diff --git a/src/main/java/com/notzippy/intellij/go/intellij/highlighting/GoAnnotator.java b/src/main/java/com/notzippy/intellij/go/intellij/highlighting/GoAnnotator.java index 8d658c2dc1..24582fa07a 100644 --- a/src/main/java/com/notzippy/intellij/go/intellij/highlighting/GoAnnotator.java +++ b/src/main/java/com/notzippy/intellij/go/intellij/highlighting/GoAnnotator.java @@ -18,6 +18,7 @@ import com.notzippy.intellij.go.grammar.psi.*; import com.notzippy.intellij.go.intellij.GoConstants; +import com.notzippy.intellij.go.intellij.quickfix.GoEmptySignatureQuickFix; import com.notzippy.intellij.go.parser.GoTypes; import com.notzippy.intellij.go.grammar.psi.impl.GoCType; import com.notzippy.intellij.go.grammar.psi.impl.GoPsiImplUtil; @@ -185,11 +186,13 @@ else if (element instanceof GoFunctionDeclaration) { if (result != null && !result.isVoid()) { Annotation annotation = holder.createErrorAnnotation(result, declaration.getName() + " function must have no arguments and no return values"); + annotation.registerFix(new GoEmptySignatureQuickFix(declaration)); } GoParameters parameters = signature.getParameters(); if (!parameters.getParameterDeclarationList().isEmpty()) { Annotation annotation = holder.createErrorAnnotation(parameters, declaration.getName() + " function must have no arguments and no return values"); + annotation.registerFix(new GoEmptySignatureQuickFix(declaration)); } } } diff --git a/src/main/java/com/notzippy/intellij/go/intellij/intentions/GoMoveToStructInitializationIntention.java b/src/main/java/com/notzippy/intellij/go/intellij/intentions/GoMoveToStructInitializationIntention.java index 7958273147..4650bd93b5 100644 --- a/src/main/java/com/notzippy/intellij/go/intellij/intentions/GoMoveToStructInitializationIntention.java +++ b/src/main/java/com/notzippy/intellij/go/intellij/intentions/GoMoveToStructInitializationIntention.java @@ -53,12 +53,13 @@ public String getFamilyName() { @Override public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { - return getData(element) != null; + boolean available = getData(element) != null; + return available; } @Nullable private static Data getData(@NotNull PsiElement element) { - if (!element.isValid() || !element.isWritable()) return null; + if (!element.isValid()) return null; // removed || !element.isWritable()) GoAssignmentStatement assignment = getValidAssignmentParent(element); GoReferenceExpression selectedFieldReference = assignment != null ? getFieldReferenceExpression(element, assignment) : null; GoCompositeLit compositeLit = selectedFieldReference != null ? getStructLiteralByReference(selectedFieldReference, assignment) : null; @@ -71,6 +72,9 @@ private static Data getData(@NotNull PsiElement element) { @Nullable private static GoAssignmentStatement getValidAssignmentParent(@Nullable PsiElement element) { GoAssignmentStatement assignment = PsiTreeUtil.getNonStrictParentOfType(element, GoAssignmentStatement.class); + if (assignment == null) { + assignment = PsiTreeUtil.getNonStrictParentOfType(element.getPrevSibling(), GoAssignmentStatement.class); + } return assignment != null && assignment.isValid() && getLeftHandElements(assignment).size() == assignment.getExpressionList().size() ? assignment : null; } diff --git a/src/main/java/com/notzippy/intellij/go/intellij/quickfix/GoEmptySignatureQuickFix.java b/src/main/java/com/notzippy/intellij/go/intellij/quickfix/GoEmptySignatureQuickFix.java index b8a6c9eef9..c34c97c823 100644 --- a/src/main/java/com/notzippy/intellij/go/intellij/quickfix/GoEmptySignatureQuickFix.java +++ b/src/main/java/com/notzippy/intellij/go/intellij/quickfix/GoEmptySignatureQuickFix.java @@ -16,15 +16,15 @@ package com.notzippy.intellij.go.intellij.quickfix; -import com.notzippy.intellij.go.grammar.psi.GoFunctionDeclaration; -import com.notzippy.intellij.go.grammar.psi.GoSignature; -import com.notzippy.intellij.go.grammar.psi.impl.GoElementFactory; import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.ObjectUtils; +import com.notzippy.intellij.go.grammar.psi.GoFunctionDeclaration; +import com.notzippy.intellij.go.grammar.psi.GoSignature; +import com.notzippy.intellij.go.grammar.psi.impl.GoElementFactory; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/test/java/com/notzippy/intellij/go/intellij/stubs/GoPackageClauseStubTest.java b/src/test/java/com/notzippy/intellij/go/intellij/stubs/GoPackageClauseStubTest.java index 166543be1b..54d31dcc8e 100644 --- a/src/test/java/com/notzippy/intellij/go/intellij/stubs/GoPackageClauseStubTest.java +++ b/src/test/java/com/notzippy/intellij/go/intellij/stubs/GoPackageClauseStubTest.java @@ -43,7 +43,7 @@ public void tryClosure() { } catch (AssertionError e) { String message = e.getMessage(); - assertTrue(message.contains("Access to tree elements not allowed in tests")); + assertTrue(message.contains("Access to tree elements not allowed")); assertTrue(message.contains("bar.go")); throw e; }