[groovy] load code style samples from resources

This commit is contained in:
Daniil Ovchinnikov
2018-06-08 17:12:16 +03:00
parent a294812909
commit e522772ecc
5 changed files with 194 additions and 203 deletions
@@ -0,0 +1,32 @@
/*
* This is a sample file.
*/
package com.intellij.samples
import com.intellij.idea.Main
import javax.swing.*
import java.util.Vector
public class Foo {
private int field1
private int field2
public void foo1() {
new Runnable() {
public void run() {
}
}
}
public class InnerClass {
}
}
class AnotherClass {
}
interface TestInterface {
int MAX = 10
int MIN = 1
def method1()
void method2()
}
@@ -0,0 +1,25 @@
def foo(int arg) {
label1:
for (i in 1..10) {
label2:
foo(i)
}
return Math.max(arg,
0)
}
class HelloSpock extends spock.lang.Specification {
def "length of Spock's and his friends' names"() {
expect:
name.size() == length
where:
name | length | foo
"Spock" | 5
"Kirk" | 4 | xxx | yyy
"Scotty" | 6 |dddddddddd | fff
//aaa
a | b | c
}
}
@@ -0,0 +1,39 @@
class Foo {
@Annotation(param="foo")
@Ann([1, 2])
public static <T1, T2> void foo(int x, int y) {
for (int i = 0; i < x; i++) {
y += (y ^ 0x123) << 2
}
10.times {
print it
}
int j = 0
while (j < 10) {
try {
if (0 < x && x < 10) {
while (x != y) {
x = f(x * 3 + 5)
}
} else {
synchronized (this) {
switch (e.getCode()) {
//...
}
}
}
} catch (MyException e) {
logError(method: "foo", exception: e)
} finally {
int[] arr = (int[]) g(y)
x = y >= 0 ? arr[y] : -1
y = [1, 2, 3] ?: 4
}
}
def cl = {Math.sin(it)}
print ckl(2)
}
def inject(x) {"cos($x) = ${Math.cos(x)}"}
}
@@ -0,0 +1,66 @@
/*
* This is a sample file.
*/
public class ThisIsASampleClass extends C1 implements I1, I2, I3, I4, I5 {
private int f1 = 1
private String field2 = ""
public void foo1(int i1, int i2, int i3, int i4, int i5, int i6, int i7) {}
public static void longerMethod() throws Exception1, Exception2, Exception3 {
// todo something
int
i = 0
int var1 = 1; int var2 = 2
foo1(0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057)
int x = (3 + 4 + 5 + 6) * (7 + 8 + 9 + 10) * (11 + 12 + 13 + 14 + 0xFFFFFFFF)
String s1, s2, s3
s1 = s2 = s3 = "012345678901456"
assert i + j + k + l + n+ m <= 2 : "assert description"
int y = 2 > 3 ? 7 + 8 + 9 : 11 + 12 + 13
super.getFoo().foo().getBar().bar()
label:
if (2 < 3) return else if (2 > 3) return else return
for (int i = 0; i < 0xFFFFFF; i += 2) System.out.println(i)
print([
l1: expr1,
label2: expr2
])
while (x < 50000) x++
switch (a) {
case 0:
doCase0()
break
default:
doDefault()
}
try {
doSomething()
} catch (Exception e) {
processException(e)
} finally {
processFinally()
}
}
public static void test()
throws Exception {
foo.foo().bar("arg1",
"arg2")
new Object() {}
}
class TestInnerClass {}
interface TestInnerInterface {}
}
enum Breed {
Dalmatian(), Labrador(), Dachshund()
}
@Annotation1 @Annotation2 @Annotation3(param1="value1", param2="value2") @Annotation4 class Foo {
@Annotation1 @Annotation3(param1="value1", param2="value2") public static void foo(){
}
@Annotation1 @Annotation3(param1="value1", param2="value2") public static int myFoo
public void method(@Annotation1 @Annotation3(param1="value1", param2="value2") final int param){
@Annotation1 @Annotation3(param1="value1", param2="value2") final int localVariable
}
}
@@ -1,18 +1,4 @@
/*
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.plugins.groovy.codeStyle;
import com.intellij.application.options.IndentOptionsEditor;
@@ -28,6 +14,13 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.groovy.GroovyLanguage;
import javax.swing.*;
import java.io.IOException;
import java.util.EnumMap;
import java.util.Map;
import static com.intellij.openapi.util.io.StreamUtil.readText;
import static com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider.SettingsType.*;
import static java.nio.charset.StandardCharsets.UTF_8;
/**
* @author Rustam Vishnyakov
@@ -47,7 +40,7 @@ public class GroovyLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSe
@Override
public void customizeSettings(@NotNull CodeStyleSettingsCustomizable consumer,
@NotNull SettingsType settingsType) {
if (settingsType == SettingsType.WRAPPING_AND_BRACES_SETTINGS) {
if (settingsType == WRAPPING_AND_BRACES_SETTINGS) {
consumer.showStandardOptions(
"RIGHT_MARGIN",
"WRAP_ON_TYPING",
@@ -158,7 +151,7 @@ public class GroovyLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSe
CodeStyleSettingsCustomizable.WRAP_OPTIONS, CodeStyleSettingsCustomizable.WRAP_VALUES);
return;
}
if (settingsType == SettingsType.SPACING_SETTINGS) {
if (settingsType == SPACING_SETTINGS) {
consumer.showStandardOptions("INSERT_FIRST_SPACE_IN_LINE",
"SPACE_AROUND_ASSIGNMENT_OPERATORS",
"SPACE_AROUND_LOGICAL_OPERATORS",
@@ -236,7 +229,7 @@ public class GroovyLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSe
consumer.showCustomOption(GroovyCodeStyleSettings.class, "SPACE_AROUND_REGEX_OPERATORS", "Regexp expression (==~, =~)", CodeStyleSettingsCustomizable.SPACES_AROUND_OPERATORS);
return;
}
if (settingsType == SettingsType.BLANK_LINES_SETTINGS) {
if (settingsType == BLANK_LINES_SETTINGS) {
consumer.showStandardOptions(
"KEEP_BLANK_LINES_IN_DECLARATIONS",
@@ -273,17 +266,30 @@ public class GroovyLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSe
@Override
public String getCodeSample(@NotNull SettingsType settingsType) {
switch (settingsType) {
case INDENT_SETTINGS: return INDENT_OPTIONS_SAMPLE;
case SPACING_SETTINGS: return SPACING_SAMPLE;
case WRAPPING_AND_BRACES_SETTINGS: return WRAPPING_CODE_SAMPLE;
case BLANK_LINES_SETTINGS: return BLANK_LINE_SAMPLE;
default:
return "";
}
return SAMPLES.get(settingsType);
}
private static final Map<SettingsType, String> SAMPLES;
static {
Map<SettingsType, String> samples = new EnumMap<>(SettingsType.class);
for (SettingsType type: new SettingsType[]{BLANK_LINES_SETTINGS, SPACING_SETTINGS, WRAPPING_AND_BRACES_SETTINGS, INDENT_SETTINGS}) {
samples.put(type, loadSample(type));
}
SAMPLES = samples;
}
private static String loadSample(@NotNull SettingsType settingsType) {
String name = "/samples/" + settingsType.name() + ".txt";
try {
return readText(
GroovyLanguageCodeStyleSettingsProvider.class.getResourceAsStream(name), UTF_8
);
}
catch (IOException ignored) {
}
return "";
}
@Override
public IndentOptionsEditor getIndentOptionsEditor() {
@@ -361,181 +367,4 @@ public class GroovyLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSe
}
};
}
private static final String INDENT_OPTIONS_SAMPLE =
/*
"topLevelLabel:\n" +
"foo(42)\n" +
*/
"def foo(int arg) {\n" +
" label1:\n" +
" for (i in 1..10) {\n" +
" label2:\n" +
" foo(i)\n" +
" }\n" +
" return Math.max(arg,\n" +
" 0)\n" +
"}\n\n" +
"class HelloSpock extends spock.lang.Specification {\n" +
" def \"length of Spock's and his friends' names\"() {\n" +
" expect:\n" +
" name.size() == length\n" +
"\n" +
" where:\n" +
" name | length | foo\n" +
" \"Spock\" | 5\n" +
" \"Kirk\" | 4 | xxx | yyy\n" +
" \"Scotty\" | 6 |dddddddddd | fff\n" +
"\n" +
" //aaa\n" +
" a | b | c\n" +
" }\n" +
"}\n";
private static final String SPACING_SAMPLE =
"class Foo {\n" +
" @Annotation(param=\"foo\")\n"+
" @Ann([1, 2])\n" +
" public static <T1, T2> void foo(int x, int y) {\n" +
" for (int i = 0; i < x; i++) {\n" +
" y += (y ^ 0x123) << 2\n" +
" }\n" +
" \n" +
" 10.times {\n" +
" print it\n" +
" }\n" +
" int j = 0\n" +
" while (j < 10) {\n" +
" try {\n" +
" if (0 < x && x < 10) {\n" +
" while (x != y) {\n" +
" x = f(x * 3 + 5)\n" +
" }\n" +
" } else {\n" +
" synchronized (this) {\n" +
" switch (e.getCode()) {\n" +
" //...\n" +
" }\n" +
" }\n" +
" }\n" +
" } catch (MyException e) {\n" +
" logError(method: \"foo\", exception: e)\n" +
" } finally {\n" +
" int[] arr = (int[]) g(y)\n" +
" x = y >= 0 ? arr[y] : -1\n" +
" y = [1, 2, 3] ?: 4\n" +
" }\n" +
" }\n" +
" def cl = {Math.sin(it)}\n" +
" print ckl(2) " +
" }\n" +
" \n" +
" def inject(x) {\"cos($x) = ${Math.cos(x)}\"} \n" +
"\n" +
"}";
private static final String WRAPPING_CODE_SAMPLE =
"/*\n" +
" * This is a sample file.\n" +
" */\n" +
"\n" +
"public class ThisIsASampleClass extends C1 implements I1, I2, I3, I4, I5 {\n" +
" private int f1 = 1\n" +
" private String field2 = \"\"\n" +
" public void foo1(int i1, int i2, int i3, int i4, int i5, int i6, int i7) {}\n" +
" public static void longerMethod() throws Exception1, Exception2, Exception3 {\n" +
"// todo something\n" +
" int\n" +
"i = 0\n" +
" int var1 = 1; int var2 = 2\n" +
" foo1(0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057)\n" +
" int x = (3 + 4 + 5 + 6) * (7 + 8 + 9 + 10) * (11 + 12 + 13 + 14 + 0xFFFFFFFF)\n" +
" String s1, s2, s3\n" +
" s1 = s2 = s3 = \"012345678901456\"\n" +
" assert i + j + k + l + n+ m <= 2 : \"assert description\"\n" +
" int y = 2 > 3 ? 7 + 8 + 9 : 11 + 12 + 13\n" +
" super.getFoo().foo().getBar().bar()\n" +
"\n" +
" label: \n" +
" if (2 < 3) return else if (2 > 3) return else return\n" +
" for (int i = 0; i < 0xFFFFFF; i += 2) System.out.println(i)\n" +
" print([\n" +
" l1: expr1,\n" +
" label2: expr2\n" +
" ])\n" +
" while (x < 50000) x++\n" +
" switch (a) {\n" +
" case 0:\n" +
" doCase0()\n" +
" break\n" +
" default:\n" +
" doDefault()\n" +
" }\n" +
" try {\n" +
" doSomething()\n" +
" } catch (Exception e) {\n" +
" processException(e)\n" +
" } finally {\n" +
" processFinally()\n" +
" }\n" +
" }\n" +
" public static void test() \n" +
" throws Exception { \n" +
" foo.foo().bar(\"arg1\", \n" +
" \"arg2\") \n" +
" new Object() {}\n" +
" } \n" +
" class TestInnerClass {}\n" +
" interface TestInnerInterface {}\n" +
"}\n" +
"\n" +
"enum Breed {\n" +
" Dalmatian(), Labrador(), Dachshund()\n" +
"}\n" +
"\n" +
"@Annotation1 @Annotation2 @Annotation3(param1=\"value1\", param2=\"value2\") @Annotation4 class Foo {\n" +
" @Annotation1 @Annotation3(param1=\"value1\", param2=\"value2\") public static void foo(){\n" +
" }\n" +
" @Annotation1 @Annotation3(param1=\"value1\", param2=\"value2\") public static int myFoo\n" +
" public void method(@Annotation1 @Annotation3(param1=\"value1\", param2=\"value2\") final int param){\n" +
" @Annotation1 @Annotation3(param1=\"value1\", param2=\"value2\") final int localVariable\n" +
" }\n" +
"}";
private static final String BLANK_LINE_SAMPLE =
"/*\n" +
" * This is a sample file.\n" +
" */\n" +
"package com.intellij.samples\n" +
"\n" +
"import com.intellij.idea.Main\n" +
"\n" +
"import javax.swing.*\n" +
"import java.util.Vector\n" +
"\n" +
"public class Foo {\n" +
" private int field1\n" +
" private int field2\n" +
"\n" +
" public void foo1() {\n" +
" new Runnable() {\n" +
" public void run() {\n" +
" }\n" +
" }\n" +
" }\n" +
"\n" +
" public class InnerClass {\n" +
" }\n" +
"}\n" +
"class AnotherClass {\n" +
"}\n" +
"interface TestInterface {\n" +
" int MAX = 10\n" +
" int MIN = 1\n" +
" def method1()\n" +
" void method2()\n" +
"}";
}