Skip to content

Commit

Permalink
Make some best-practices changes to the plugin.
Browse files Browse the repository at this point in the history
Since the last plugin update was almost half a year ago, I thought it would be prudent to update it and resolve most of the issues regarding updating the plugin.

It took around half an hour once I managed to correctly set up the module due to the gradle plugin version 1.2.1 + intellij version 2020.3 requiring java 11 to develop.

All of the included annotation changes were requested by IntelliJ to add since the overrides added them as well.

The change of `<? extends TextRange>` to `<TextRange>` was to resolve the syntax errors introduced by a change removing the wildcard requirement.

NotificationGroup was deprecated and moved into the plugin xml file as per the SDK docs
The same was required for `StdFileTypes.JAVA` being deprecated with the fix being `JavaFileType.INSTANCE` + changing the depend module to add that fix.

I had to change the project SDK to JDK 11 on my end to have the gradle build work.

I also tested the plugin with 1.12 and 1.10 on some test files such as from #653 and #654. Would be good to have some double checking though because I've had issues trying to get the test file reformatted in #558 working. Probably because it's locked behind an experimental flag?

Fixes #688

COPYBARA_INTEGRATE_REVIEW=#688 from ze:idea-1.12.0 53f216c
PiperOrigin-RevId: 426491735
  • Loading branch information
ze authored and google-java-format Team committed Feb 4, 2022
1 parent af804c6 commit d86e930
Show file tree
Hide file tree
Showing 8 changed files with 87 additions and 62 deletions.
5 changes: 5 additions & 0 deletions idea_plugin/.gitignore
@@ -0,0 +1,5 @@
build
.gradle
gradle
gradlew
gradlew.bat
24 changes: 14 additions & 10 deletions idea_plugin/build.gradle
Expand Up @@ -15,31 +15,35 @@
*/

plugins {
id "org.jetbrains.intellij" version "1.3.0"
id "org.jetbrains.intellij" version "1.3.1"
}

repositories {
mavenCentral()
}

ext {
googleJavaFormatVersion = '1.13.0'
googleJavaFormatVersion = "1.13.0"
}

apply plugin: 'org.jetbrains.intellij'
apply plugin: 'java'
apply plugin: "org.jetbrains.intellij"
apply plugin: "java"

sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11

intellij {
pluginName = "google-java-format"
version = "IC-213.5744.18-EAP-SNAPSHOT"
plugins = ["java"]
version = "221.3427-EAP-CANDIDATE-SNAPSHOT"
}

patchPluginXml {
pluginDescription = "Formats source code using the google-java-format tool. This version of " +
"the plugin uses version ${googleJavaFormatVersion} of the tool."
version = "${googleJavaFormatVersion}.0"
sinceBuild = '201'
untilBuild = ''
version.set("${googleJavaFormatVersion}.0")
sinceBuild = "203"
untilBuild = ""
}

publishPlugin {
Expand All @@ -48,8 +52,8 @@ publishPlugin {

sourceSets {
main {
java.srcDir 'src'
resources.srcDir 'resources'
java.srcDir "src"
resources.srcDir "resources"
}
}

Expand Down
24 changes: 15 additions & 9 deletions idea_plugin/resources/META-INF/plugin.xml
Expand Up @@ -14,7 +14,8 @@
limitations under the License.
-->

<idea-plugin url="https://github.com/google/google-java-format/tree/master/idea_plugin" require-restart="true">
<idea-plugin url="https://github.com/google/google-java-format/tree/master/idea_plugin"
require-restart="true">
<id>google-java-format</id>
<name>google-java-format</name>
<vendor url="https://github.com/google/google-java-format">
Expand All @@ -24,7 +25,7 @@
<!-- Mark it as available on all JetBrains IDEs. It's really only useful in
IDEA and Android Studio, but there's no way to specify that for some
reason. It won't crash PyCharm or anything, so whatever. -->
<depends>com.intellij.modules.lang</depends>
<depends>com.intellij.java</depends>

<change-notes><![CDATA[
<dl>
Expand Down Expand Up @@ -58,17 +59,22 @@
]]></change-notes>

<applicationListeners>
<listener class="com.google.googlejavaformat.intellij.InitialConfigurationProjectManagerListener"
topic="com.intellij.openapi.project.ProjectManagerListener"/>
<listener
class="com.google.googlejavaformat.intellij.InitialConfigurationProjectManagerListener"
topic="com.intellij.openapi.project.ProjectManagerListener"/>
<listener class="com.google.googlejavaformat.intellij.GoogleJavaFormatInstaller"
topic="com.intellij.openapi.project.ProjectManagerListener"/>
topic="com.intellij.openapi.project.ProjectManagerListener"/>
</applicationListeners>

<extensions defaultExtensionNs="com.intellij">
<projectConfigurable instance="com.google.googlejavaformat.intellij.GoogleJavaFormatConfigurable"
id="google-java-format.settings"
displayName="google-java-format Settings"/>
<projectService serviceImplementation="com.google.googlejavaformat.intellij.GoogleJavaFormatSettings"/>
<projectConfigurable
instance="com.google.googlejavaformat.intellij.GoogleJavaFormatConfigurable"
id="google-java-format.settings"
displayName="google-java-format Settings"/>
<projectService
serviceImplementation="com.google.googlejavaformat.intellij.GoogleJavaFormatSettings"/>
<notificationGroup displayType="STICKY_BALLOON" id="Enable google-java-format"
isLogByDefault="true"/>
</extensions>

</idea-plugin>
Expand Up @@ -34,10 +34,11 @@
import com.intellij.util.ThrowableRunnable;
import java.util.Collection;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.jetbrains.annotations.NotNull;

/**
* Decorates the {@link CodeStyleManager} abstract class by delegating to a concrete implementation
* instance (likely IJ's default instance).
* instance (likely IntelliJ's default instance).
*/
@SuppressWarnings("deprecation")
class CodeStyleManagerDecorator extends CodeStyleManager
Expand All @@ -54,98 +55,102 @@ CodeStyleManager getDelegate() {
}

@Override
public Project getProject() {
public @NotNull Project getProject() {
return delegate.getProject();
}

@Override
public PsiElement reformat(PsiElement element) throws IncorrectOperationException {
public @NotNull PsiElement reformat(@NotNull PsiElement element)
throws IncorrectOperationException {
return delegate.reformat(element);
}

@Override
public PsiElement reformat(PsiElement element, boolean canChangeWhiteSpacesOnly)
public @NotNull PsiElement reformat(@NotNull PsiElement element, boolean canChangeWhiteSpacesOnly)
throws IncorrectOperationException {
return delegate.reformat(element, canChangeWhiteSpacesOnly);
}

@Override
public PsiElement reformatRange(PsiElement element, int startOffset, int endOffset)
public PsiElement reformatRange(@NotNull PsiElement element, int startOffset, int endOffset)
throws IncorrectOperationException {
return delegate.reformatRange(element, startOffset, endOffset);
}

@Override
public PsiElement reformatRange(
PsiElement element, int startOffset, int endOffset, boolean canChangeWhiteSpacesOnly)
@NotNull PsiElement element, int startOffset, int endOffset, boolean canChangeWhiteSpacesOnly)
throws IncorrectOperationException {
return delegate.reformatRange(element, startOffset, endOffset, canChangeWhiteSpacesOnly);
}

@Override
public void reformatText(PsiFile file, int startOffset, int endOffset)
public void reformatText(@NotNull PsiFile file, int startOffset, int endOffset)
throws IncorrectOperationException {
delegate.reformatText(file, startOffset, endOffset);
}

@Override
public void reformatText(PsiFile file, Collection<? extends TextRange> ranges)
public void reformatText(@NotNull PsiFile file, @NotNull Collection<? extends TextRange> ranges)
throws IncorrectOperationException {
delegate.reformatText(file, ranges);
}

@Override
public void reformatTextWithContext(PsiFile psiFile, ChangedRangesInfo changedRangesInfo)
public void reformatTextWithContext(
@NotNull PsiFile psiFile, @NotNull ChangedRangesInfo changedRangesInfo)
throws IncorrectOperationException {
delegate.reformatTextWithContext(psiFile, changedRangesInfo);
}

@Override
public void reformatTextWithContext(PsiFile file, Collection<? extends TextRange> ranges)
public void reformatTextWithContext(
@NotNull PsiFile file, @NotNull Collection<? extends TextRange> ranges)
throws IncorrectOperationException {
delegate.reformatTextWithContext(file, ranges);
}

@Override
public void adjustLineIndent(PsiFile file, TextRange rangeToAdjust)
public void adjustLineIndent(@NotNull PsiFile file, TextRange rangeToAdjust)
throws IncorrectOperationException {
delegate.adjustLineIndent(file, rangeToAdjust);
}

@Override
public int adjustLineIndent(PsiFile file, int offset) throws IncorrectOperationException {
public int adjustLineIndent(@NotNull PsiFile file, int offset)
throws IncorrectOperationException {
return delegate.adjustLineIndent(file, offset);
}

@Override
public int adjustLineIndent(Document document, int offset) {
public int adjustLineIndent(@NotNull Document document, int offset) {
return delegate.adjustLineIndent(document, offset);
}

public void scheduleIndentAdjustment(Document document, int offset) {
public void scheduleIndentAdjustment(@NotNull Document document, int offset) {
delegate.scheduleIndentAdjustment(document, offset);
}

@Override
public boolean isLineToBeIndented(PsiFile file, int offset) {
public boolean isLineToBeIndented(@NotNull PsiFile file, int offset) {
return delegate.isLineToBeIndented(file, offset);
}

@Override
@Nullable
public String getLineIndent(PsiFile file, int offset) {
public String getLineIndent(@NotNull PsiFile file, int offset) {
return delegate.getLineIndent(file, offset);
}

@Override
@Nullable
public String getLineIndent(PsiFile file, int offset, FormattingMode mode) {
public String getLineIndent(@NotNull PsiFile file, int offset, FormattingMode mode) {
return delegate.getLineIndent(file, offset, mode);
}

@Override
@Nullable
public String getLineIndent(Document document, int offset) {
public String getLineIndent(@NotNull Document document, int offset) {
return delegate.getLineIndent(document, offset);
}

Expand All @@ -165,7 +170,7 @@ public Indent zeroIndent() {
}

@Override
public void reformatNewlyAddedElement(ASTNode block, ASTNode addedElement)
public void reformatNewlyAddedElement(@NotNull ASTNode block, @NotNull ASTNode addedElement)
throws IncorrectOperationException {
delegate.reformatNewlyAddedElement(block, addedElement);
}
Expand All @@ -192,22 +197,23 @@ public <T> T performActionWithFormatterDisabled(Computable<T> r) {
}

@Override
public int getSpacing(PsiFile file, int offset) {
public int getSpacing(@NotNull PsiFile file, int offset) {
return delegate.getSpacing(file, offset);
}

@Override
public int getMinLineFeeds(PsiFile file, int offset) {
public int getMinLineFeeds(@NotNull PsiFile file, int offset) {
return delegate.getMinLineFeeds(file, offset);
}

@Override
public void runWithDocCommentFormattingDisabled(PsiFile file, Runnable runnable) {
public void runWithDocCommentFormattingDisabled(
@NotNull PsiFile file, @NotNull Runnable runnable) {
delegate.runWithDocCommentFormattingDisabled(file, runnable);
}

@Override
public DocCommentSettings getDocCommentSettings(PsiFile file) {
public @NotNull DocCommentSettings getDocCommentSettings(@NotNull PsiFile file) {
return delegate.getDocCommentSettings(file);
}

Expand All @@ -223,7 +229,8 @@ public FormattingMode getCurrentFormattingMode() {
}

@Override
public int adjustLineIndent(final Document document, final int offset, FormattingMode mode)
public int adjustLineIndent(
final @NotNull Document document, final int offset, FormattingMode mode)
throws IncorrectOperationException {
if (delegate instanceof FormattingModeAwareIndentAdjuster) {
return ((FormattingModeAwareIndentAdjuster) delegate)
Expand All @@ -233,7 +240,7 @@ public int adjustLineIndent(final Document document, final int offset, Formattin
}

@Override
public void scheduleReformatWhenSettingsComputed(PsiFile file) {
public void scheduleReformatWhenSettingsComputed(@NotNull PsiFile file) {
delegate.scheduleReformatWhenSettingsComputed(file);
}
}
Expand Up @@ -50,8 +50,7 @@ static Map<TextRange, String> getReplacements(
}

private static Collection<Range<Integer>> toRanges(Collection<? extends TextRange> textRanges) {
return textRanges
.stream()
return textRanges.stream()
.map(textRange -> Range.closedOpen(textRange.getStartOffset(), textRange.getEndOffset()))
.collect(Collectors.toList());
}
Expand Down

0 comments on commit d86e930

Please sign in to comment.