diff --git a/bin/WinLauncher/WinLauncher.exe b/bin/WinLauncher/WinLauncher.exe index e98b3601acb0..749a855aaa0e 100644 Binary files a/bin/WinLauncher/WinLauncher.exe and b/bin/WinLauncher/WinLauncher.exe differ diff --git a/bin/WinLauncher/WinLauncher64.exe b/bin/WinLauncher/WinLauncher64.exe index e5f616575b9c..e0855845243e 100644 Binary files a/bin/WinLauncher/WinLauncher64.exe and b/bin/WinLauncher/WinLauncher64.exe differ diff --git a/build/scripts/tests.gant b/build/scripts/tests.gant index 1c6be2927d7d..e4aada4b821a 100644 --- a/build/scripts/tests.gant +++ b/build/scripts/tests.gant @@ -17,8 +17,6 @@ import static org.jetbrains.jps.idea.IdeaProjectLoader.guessHome def home = guessHome(this) -setProperty("testcases", ["com.intellij.AllTests"]) - includeTargets << new File("${home}/build/scripts/common_tests.gant") if ("GIT_TESTS".equalsIgnoreCase(System.getProperty("idea.test.group"))) { @@ -40,3 +38,5 @@ if (System.getProperty("os.name").toLowerCase().startsWith("mac")) { }; setProperty("jvm_args", args) + +setProperty("testcases", ["com.intellij.AllTests"]) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java index 97b1a99bbc99..33ef7d22442c 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/LambdaCanBeMethodReferenceInspection.java @@ -420,21 +420,24 @@ public class LambdaCanBeMethodReferenceInspection extends BaseJavaBatchLocalInsp if (!FileModificationService.getInstance().preparePsiElementForWrite(element)) return; final PsiLambdaExpression lambdaExpression = PsiTreeUtil.getParentOfType(element, PsiLambdaExpression.class); if (lambdaExpression == null) return; - final PsiType functionalInterfaceType = lambdaExpression.getFunctionalInterfaceType(); + PsiType functionalInterfaceType = lambdaExpression.getFunctionalInterfaceType(); if (functionalInterfaceType == null || !functionalInterfaceType.isValid()) return; final String methodRefText = createMethodReferenceText(element, functionalInterfaceType, lambdaExpression.getParameterList().getParameters()); if (methodRefText != null) { final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); - final PsiExpression psiExpression = - factory.createExpressionFromText(methodRefText, lambdaExpression); + final PsiExpression psiExpression = factory.createExpressionFromText(methodRefText, lambdaExpression); + final SmartTypePointer typePointer = SmartTypePointerManager.getInstance(project).createSmartTypePointer(functionalInterfaceType); PsiElement replace = lambdaExpression.replace(psiExpression); if (((PsiMethodReferenceExpression)replace).getFunctionalInterfaceType() == null) { //ambiguity final PsiTypeCastExpression cast = (PsiTypeCastExpression)factory.createExpressionFromText("(A)a", replace); - cast.getCastType().replace(factory.createTypeElement(functionalInterfaceType)); - cast.getOperand().replace(replace); - replace = replace.replace(cast); + functionalInterfaceType = typePointer.getType(); + if (functionalInterfaceType != null) { + cast.getCastType().replace(factory.createTypeElement(functionalInterfaceType)); + cast.getOperand().replace(replace); + replace = replace.replace(cast); + } } JavaCodeStyleManager.getInstance(project).shortenClassReferences(replace); } diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/util/StringUtil.java b/java/java-analysis-impl/src/org/jetbrains/generate/tostring/util/StringUtil.java deleted file mode 100644 index 51711778bb01..000000000000 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/util/StringUtil.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright 2001-2007 the original author or authors. - * - * 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. - */ -package org.jetbrains.generate.tostring.util; - -/** - * String utility methods. - */ -public class StringUtil { - - /** - * Private constructor, to prevent instances of this class, since it only has static members. - */ - private StringUtil() { - } - - /** - * Is the string empty (null, or contains just whitespace) - * - * @param s string to test. - * @return true if it's an empty string. - */ - public static boolean isEmpty(String s) { - return s == null || s.trim().length() == 0; - } - - /** - * Does the string contain some chars (whitespace is consideres as empty) - * - * @param s string to test. - * @return true if it's NOT an empty string. - */ - public static boolean isNotEmpty(String s) { - return ! isEmpty(s); - } - - /** - * Does the string have an uppercase character? - * @param s the string to test. - * @return true if the string has an uppercase character, false if not. - */ - public static boolean hasUpperCaseChar(String s) { - char[] chars = s.toCharArray(); - for (char c : chars) { - if (Character.isUpperCase(c)) { - return true; - } - } - return false; - } - - /** - * Does the string have a lowercase character? - * @param s the string to test. - * @return true if the string has a lowercase character, false if not. - */ - public static boolean hasLowerCaseChar(String s) { - char[] chars = s.toCharArray(); - for (char c : chars) { - if (Character.isLowerCase(c)) { - return true; - } - } - return false; - } - - /** - * Returns the part of s after the token. - *

- *
Example: after("helloWorldThisIsMe", "World") will return "ThisIsMe". - *
Example: after("helloWorldThisIsMe", "Dog") will return null. - * - * @param s the string to test. - * @param token the token. - * @return the part of s that is after the token. - */ - public static String after(String s, String token) { - if (s == null) { - return null; - } - - int i = s.indexOf(token); - if (i == -1) { - return s; - } - - return s.substring(i + token.length()); - } - - /** - * Returns the part of s before the token. - *

- *
Example: before("helloWorldThisIsMe", "World") will return "hello". - *
Example: before("helloWorldThisIsMe", "Dog") will return "helloWorldThisIsMe". - *

- * If the token is not in the string, the entire string is returned. - * - * @param s the string to test. - * @param token the token. - * @return the part of s that is before the token. - */ - public static String before(String s, String token) { - if (s == null) { - return null; - } - - int i = s.indexOf(token); - if (i == -1) { - return s; - } - - return s.substring(0, i); - } - - /** - * Returns the middle part of s between before and after tokens. - *

- *
Example: middle("helloWorldThisIsMe", "World", "Me") will return "ThisIs". - *
Example: middle("helloWorldThisIsMe", "World", Dog") will return "ThisIsMe". - * - * @param s the string to test - * @param before the before token - * @param after the after token - * @return the middle part - */ - public static String middle(String s, String before, String after) { - String first = after(s, before); - return before(first, after); - } - - /** - * Converts the first letter to lowercase - *

- *
Example: FirstName => firstName - *
Example: name => name - *
Example: S => s - * - * @param s the string - * @return the string with the first letter in lowercase. - */ - public static String firstLetterToLowerCase(String s) { - if (s.length() > 1) { - return Character.toLowerCase(s.charAt(0)) + s.substring(1); - } else if (s.length() == 1) { - return String.valueOf(Character.toLowerCase(s.charAt(0))); - } else { - return s; - } - } -} diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/GenerateToStringActionHandler.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/GenerateToStringActionHandler.java similarity index 96% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/GenerateToStringActionHandler.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/GenerateToStringActionHandler.java index 2e15736ccdee..7c8faf236790 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/GenerateToStringActionHandler.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/GenerateToStringActionHandler.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring; +package org.jetbrains.java.generate; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/GenerateToStringContext.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/GenerateToStringContext.java similarity index 93% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/GenerateToStringContext.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/GenerateToStringContext.java index 37e19542bc03..9a433929e681 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/GenerateToStringContext.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/GenerateToStringContext.java @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring; +package org.jetbrains.java.generate; import com.intellij.openapi.components.*; -import org.jetbrains.generate.tostring.config.Config; +import org.jetbrains.java.generate.config.Config; /** * Application context for this plugin. diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/GenerateToStringUtils.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/GenerateToStringUtils.java similarity index 92% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/GenerateToStringUtils.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/GenerateToStringUtils.java index 0fdb14de5106..cb0a10834414 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/GenerateToStringUtils.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/GenerateToStringUtils.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring; +package org.jetbrains.java.generate; import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; -import org.jetbrains.generate.tostring.config.FilterPattern; -import org.jetbrains.generate.tostring.psi.PsiAdapter; +import org.jetbrains.java.generate.config.FilterPattern; +import org.jetbrains.java.generate.psi.PsiAdapter; import java.util.ArrayList; import java.util.List; @@ -29,12 +29,12 @@ import java.util.List; */ public class GenerateToStringUtils { - private static final Logger log = Logger.getInstance("#org.jetbrains.generate.tostring.GenerateToStringUtils"); + private static final Logger log = Logger.getInstance("#GenerateToStringUtils"); private GenerateToStringUtils() {} /** - * Filters the list of fields from the class with the given parameters from the {@link org.jetbrains.generate.tostring.config.Config config} settings. + * Filters the list of fields from the class with the given parameters from the {@link org.jetbrains.java.generate.config.Config config} settings. * * @param clazz the class to filter it's fields * @param pattern the filter pattern to filter out unwanted fields diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/CancelPolicy.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/CancelPolicy.java similarity index 96% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/CancelPolicy.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/config/CancelPolicy.java index 47f9e9ed8717..da340e131dfc 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/CancelPolicy.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/CancelPolicy.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiClass; diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/Config.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/Config.java similarity index 99% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/Config.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/config/Config.java index facdfa526150..95b93d9f9028 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/Config.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/Config.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; /** * The configuration is stored standard xmlb.XmlSerializer that automatically stores the diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/ConflictResolutionPolicy.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/ConflictResolutionPolicy.java similarity index 97% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/ConflictResolutionPolicy.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/config/ConflictResolutionPolicy.java index c726b88e8e2f..52d7c6a5fd82 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/ConflictResolutionPolicy.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/ConflictResolutionPolicy.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiClass; diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/DuplicationPolicy.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/DuplicationPolicy.java similarity index 95% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/DuplicationPolicy.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/config/DuplicationPolicy.java index 27ba0057de53..5e8555a09090 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/DuplicationPolicy.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/DuplicationPolicy.java @@ -17,7 +17,7 @@ /* * @author max */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; public enum DuplicationPolicy { ASK("Ask"), diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/FilterPattern.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/FilterPattern.java similarity index 97% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/FilterPattern.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/config/FilterPattern.java index a1cbe9761861..e56ac4f3d0ee 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/FilterPattern.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/FilterPattern.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.text.StringUtil; @@ -23,7 +23,7 @@ import com.intellij.psi.PsiModifier; import com.intellij.psi.PsiType; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; -import org.jetbrains.generate.tostring.psi.PsiAdapter; +import org.jetbrains.java.generate.psi.PsiAdapter; import java.util.Collections; import java.util.Set; @@ -35,7 +35,7 @@ import java.util.regex.PatternSyntaxException; */ public class FilterPattern { - private static final Logger LOG = Logger.getInstance("#org.jetbrains.generate.tostring.config.FilterPattern"); + private static final Logger LOG = Logger.getInstance("#FilterPattern"); private static final Set loggerNames = new THashSet(); static { Collections.addAll(loggerNames, diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/InsertLastStrategy.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/InsertLastStrategy.java similarity index 95% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/InsertLastStrategy.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/config/InsertLastStrategy.java index c3b059107d70..71e99a9f45b0 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/InsertLastStrategy.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/InsertLastStrategy.java @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; import org.jetbrains.annotations.NotNull; -import org.jetbrains.generate.tostring.psi.PsiAdapter; +import org.jetbrains.java.generate.psi.PsiAdapter; /** * Inserts the method last in the javafile. diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/InsertNewMethodStrategy.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/InsertNewMethodStrategy.java similarity index 96% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/InsertNewMethodStrategy.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/config/InsertNewMethodStrategy.java index 42fff861b785..be9bc241775b 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/InsertNewMethodStrategy.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/InsertNewMethodStrategy.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiClass; diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/InsertWhere.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/InsertWhere.java similarity index 95% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/InsertWhere.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/config/InsertWhere.java index 05b6d4a01f77..497994911d0e 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/InsertWhere.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/InsertWhere.java @@ -17,7 +17,7 @@ /* * @author max */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; public enum InsertWhere { AT_CARET("At caret"), diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/PolicyOptions.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/PolicyOptions.java similarity index 96% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/PolicyOptions.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/config/PolicyOptions.java index 40e830bb9a4c..53381892e3cf 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/config/PolicyOptions.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/config/PolicyOptions.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; /** * Options for the various policies. diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/exception/GenerateCodeException.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/exception/GenerateCodeException.java similarity index 96% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/exception/GenerateCodeException.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/exception/GenerateCodeException.java index 94e8920cbf11..8081574e9811 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/exception/GenerateCodeException.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/exception/GenerateCodeException.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.exception; +package org.jetbrains.java.generate.exception; /** * Error generating the javacode for the toString method. diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/exception/PluginException.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/exception/PluginException.java similarity index 96% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/exception/PluginException.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/exception/PluginException.java index 891dbe7757f0..8cdbfff08ab0 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/exception/PluginException.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/exception/PluginException.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.exception; +package org.jetbrains.java.generate.exception; /** * Base plugin exception. diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/AbstractToStringInspection.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/AbstractToStringInspection.java similarity index 84% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/AbstractToStringInspection.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/AbstractToStringInspection.java index d60baa9c7c52..f0eac792e4c5 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/AbstractToStringInspection.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/AbstractToStringInspection.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.inspection; +package org.jetbrains.java.generate.inspection; import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.openapi.diagnostic.Logger; @@ -23,7 +23,7 @@ import org.jetbrains.annotations.NotNull; * Base class for inspection support. */ public abstract class AbstractToStringInspection extends LocalInspectionTool { - protected static final Logger log = Logger.getInstance("#org.jetbrains.generate.tostring.inspection.AbstractToStringInspection"); + protected static final Logger log = Logger.getInstance("#AbstractToStringInspection"); @Override @NotNull diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/ClassHasNoToStringMethodInspection.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/ClassHasNoToStringMethodInspection.java similarity index 98% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/ClassHasNoToStringMethodInspection.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/ClassHasNoToStringMethodInspection.java index cd1a7f7ddba8..a5359d5a1392 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/ClassHasNoToStringMethodInspection.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/ClassHasNoToStringMethodInspection.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.inspection; +package org.jetbrains.java.generate.inspection; import com.intellij.codeInsight.TestFrameworks; import com.intellij.codeInspection.ProblemHighlightType; @@ -26,8 +26,8 @@ import com.intellij.ui.DocumentAdapter; import com.intellij.util.ui.CheckBox; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.generate.tostring.GenerateToStringContext; -import org.jetbrains.generate.tostring.GenerateToStringUtils; +import org.jetbrains.java.generate.GenerateToStringContext; +import org.jetbrains.java.generate.GenerateToStringUtils; import javax.swing.*; import javax.swing.event.DocumentEvent; diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/FieldNotUsedInToStringInspection.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/FieldNotUsedInToStringInspection.java similarity index 97% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/FieldNotUsedInToStringInspection.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/FieldNotUsedInToStringInspection.java index be69a8240cb0..b794e03047ba 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/FieldNotUsedInToStringInspection.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/FieldNotUsedInToStringInspection.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.inspection; +package org.jetbrains.java.generate.inspection; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.codeInspection.ProblemsHolder; @@ -22,8 +22,8 @@ import com.intellij.psi.util.PropertyUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -import org.jetbrains.generate.tostring.GenerateToStringContext; -import org.jetbrains.generate.tostring.GenerateToStringUtils; +import org.jetbrains.java.generate.GenerateToStringContext; +import org.jetbrains.java.generate.GenerateToStringUtils; import java.util.Collections; diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/GenerateToStringQuickFix.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/GenerateToStringQuickFix.java similarity index 93% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/GenerateToStringQuickFix.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/GenerateToStringQuickFix.java index 63afe18ccbb3..440a3b38667c 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/inspection/GenerateToStringQuickFix.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/inspection/GenerateToStringQuickFix.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.inspection; +package org.jetbrains.java.generate.inspection; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; @@ -22,7 +22,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.generate.tostring.GenerateToStringActionHandler; +import org.jetbrains.java.generate.GenerateToStringActionHandler; /** * Quick fix to run Generate toString() to fix any code inspection problems. diff --git a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/psi/PsiAdapter.java b/java/java-analysis-impl/src/org/jetbrains/java/generate/psi/PsiAdapter.java similarity index 98% rename from java/java-analysis-impl/src/org/jetbrains/generate/tostring/psi/PsiAdapter.java rename to java/java-analysis-impl/src/org/jetbrains/java/generate/psi/PsiAdapter.java index a886f29c84f1..4bf4f6c7d96e 100644 --- a/java/java-analysis-impl/src/org/jetbrains/generate/tostring/psi/PsiAdapter.java +++ b/java/java-analysis-impl/src/org/jetbrains/java/generate/psi/PsiAdapter.java @@ -13,9 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.psi; +package org.jetbrains.java.generate.psi; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; @@ -28,7 +29,6 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.Nullable; -import org.jetbrains.generate.tostring.util.StringUtil; import static com.intellij.psi.CommonClassNames.*; @@ -137,7 +137,7 @@ public class PsiAdapter { * @return true if it's a Map type. */ public static boolean isMapType(PsiElementFactory factory, PsiType type) { - return isTypeOf(factory, type, CommonClassNames.JAVA_UTIL_MAP); + return isTypeOf(factory, type, JAVA_UTIL_MAP); } /** @@ -148,7 +148,7 @@ public class PsiAdapter { * @return true if it's a Map type. */ public static boolean isSetType(PsiElementFactory factory, PsiType type) { - return isTypeOf(factory, type, CommonClassNames.JAVA_UTIL_SET); + return isTypeOf(factory, type, JAVA_UTIL_SET); } /** @@ -159,7 +159,7 @@ public class PsiAdapter { * @return true if it's a Map type. */ public static boolean isListType(PsiElementFactory factory, PsiType type) { - return isTypeOf(factory, type, CommonClassNames.JAVA_UTIL_LIST); + return isTypeOf(factory, type, JAVA_UTIL_LIST); } /** @@ -517,7 +517,7 @@ public class PsiAdapter { * @return true if class is an exception. */ public static boolean isExceptionClass(PsiClass clazz) { - return InheritanceUtil.isInheritor(clazz, CommonClassNames.JAVA_LANG_THROWABLE); + return InheritanceUtil.isInheritor(clazz, JAVA_LANG_THROWABLE); } /** @@ -689,6 +689,9 @@ public class PsiAdapter { case JDK_1_8: version = 8; break; + case JDK_1_9: + version = 9; + break; } return version; } diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/EqualsHashCodeTemplatesManager.java b/java/java-impl/src/com/intellij/codeInsight/generation/EqualsHashCodeTemplatesManager.java new file mode 100644 index 000000000000..5c4b59d3a53e --- /dev/null +++ b/java/java-impl/src/com/intellij/codeInsight/generation/EqualsHashCodeTemplatesManager.java @@ -0,0 +1,60 @@ +/* + * Copyright 2000-2015 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. + */ +package com.intellij.codeInsight.generation; + +import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.components.State; +import com.intellij.openapi.components.Storage; +import com.intellij.openapi.components.StoragePathMacros; +import org.jetbrains.java.generate.exception.TemplateResourceException; +import org.jetbrains.java.generate.template.TemplateResource; +import org.jetbrains.java.generate.template.TemplatesManager; + +import java.io.IOException; + +@State( + name = "EqualsHashCodeTemplates", + storages = { + @Storage( + file = StoragePathMacros.APP_CONFIG + "/equalsHashCodeTemplates.xml" + )} +) +public class EqualsHashCodeTemplatesManager extends TemplatesManager { + private static final String DEFAULT_EQUALS = "com/intellij/codeInsight/generation/defaultEquals.vm"; + private static final String DEFAULT_HASH_CODE = "com/intellij/codeInsight/generation/defaultHashCode.vm"; + + + public static TemplatesManager getInstance() { + return ServiceManager.getService(EqualsHashCodeTemplatesManager.class); + } + + @Override + public TemplateResource[] getDefaultTemplates() { + try { + return new TemplateResource[] { + new TemplateResource("Default equals", readFile(DEFAULT_EQUALS), true), + new TemplateResource("Default hashCode", readFile(DEFAULT_HASH_CODE), true), + }; + } + catch (IOException e) { + throw new TemplateResourceException("Error loading default templates", e); + } + } + + private static String readFile(String resourceName) throws IOException { + return readFile(resourceName, EqualsHashCodeTemplatesManager.class); + } +} diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/defaultEquals.vm b/java/java-impl/src/com/intellij/codeInsight/generation/defaultEquals.vm new file mode 100644 index 000000000000..f07eab114ffd --- /dev/null +++ b/java/java-impl/src/com/intellij/codeInsight/generation/defaultEquals.vm @@ -0,0 +1,2 @@ +//todo +//equals template to place here \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/defaultHashCode.vm b/java/java-impl/src/com/intellij/codeInsight/generation/defaultHashCode.vm new file mode 100644 index 000000000000..bbcfca6fa125 --- /dev/null +++ b/java/java-impl/src/com/intellij/codeInsight/generation/defaultHashCode.vm @@ -0,0 +1,2 @@ +//todo +//hashCode template to place here \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/codeInspection/dataFlow/EditContractIntention.java b/java/java-impl/src/com/intellij/codeInspection/dataFlow/EditContractIntention.java index 66c438dd337e..72326bd843c0 100644 --- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/EditContractIntention.java +++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/EditContractIntention.java @@ -32,7 +32,6 @@ import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.generate.tostring.util.StringUtil; /** * @author peter @@ -81,7 +80,7 @@ public class EditContractIntention extends BaseIntentionAction { @Nullable @Override public String getErrorText(String inputString) { - if (StringUtil.isEmpty(inputString)) return null; + if (com.intellij.openapi.util.text.StringUtil.isEmpty(inputString)) return null; return ContractInspection.checkContract(method, inputString); } @@ -102,7 +101,7 @@ public class EditContractIntention extends BaseIntentionAction { try { ExternalAnnotationsManager manager = ExternalAnnotationsManager.getInstance(project); manager.deannotate(method, ControlFlowAnalyzer.ORG_JETBRAINS_ANNOTATIONS_CONTRACT); - if (StringUtil.isNotEmpty(newContract)) { + if (!com.intellij.openapi.util.text.StringUtil.isEmpty(newContract)) { PsiAnnotation mockAnno = JavaPsiFacade.getElementFactory(project).createAnnotationFromText("@Foo(\"" + newContract + "\")", null); manager.annotateExternally(method, ControlFlowAnalyzer.ORG_JETBRAINS_ANNOTATIONS_CONTRACT, file, mockAnno.getParameterList().getAttributes()); diff --git a/java/java-impl/src/com/intellij/ide/actions/CreatePackageInfoAction.java b/java/java-impl/src/com/intellij/ide/actions/CreatePackageInfoAction.java index 12607efd927e..be70cc8a5d8a 100644 --- a/java/java-impl/src/com/intellij/ide/actions/CreatePackageInfoAction.java +++ b/java/java-impl/src/com/intellij/ide/actions/CreatePackageInfoAction.java @@ -33,7 +33,6 @@ import com.intellij.openapi.ui.Messages; import com.intellij.psi.*; import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.Nullable; -import org.jetbrains.generate.tostring.util.StringUtil; import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes; /** @@ -99,7 +98,7 @@ public class CreatePackageInfoAction extends CreateFromTemplateActionBase implem final PsiPackage aPackage = directoryService.getPackage(directory); if (aPackage != null) { final String qualifiedName = aPackage.getQualifiedName(); - if (StringUtil.isEmpty(qualifiedName) || nameHelper.isQualifiedName(qualifiedName)) { + if (com.intellij.openapi.util.text.StringUtil.isEmpty(qualifiedName) || nameHelper.isQualifiedName(qualifiedName)) { return true; } } diff --git a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java index e7918134afe5..6c0eb5c41f53 100644 --- a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java @@ -15,6 +15,7 @@ */ package com.intellij.refactoring.wrapreturnvalue; +import com.intellij.psi.util.PsiUtil; import com.intellij.ui.ListCellRendererWrapper; import com.intellij.ide.util.TreeClassChooser; import com.intellij.ide.util.TreeClassChooserFactory; @@ -215,12 +216,18 @@ class WrapReturnValueDialog extends RefactoringDialog { final PsiClass currentClass = facade.findClass(existingClassField.getText(), GlobalSearchScope.allScope(myProject)); if (currentClass != null) { model.removeAllElements(); + final PsiType returnType = sourceMethod.getReturnType(); + assert returnType != null; for (PsiField field : currentClass.getFields()) { - final PsiType returnType = sourceMethod.getReturnType(); - assert returnType != null; - if (TypeConversionUtil.isAssignable(field.getType(), returnType)) { + final PsiType fieldType = field.getType(); + if (TypeConversionUtil.isAssignable(fieldType, returnType)) { model.addElement(field); } + else { + if (WrapReturnValueProcessor.getInferredType(fieldType, returnType, currentClass, sourceMethod) != null) { + model.addElement(field); + } + } } } } diff --git a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java index d410252f5528..6d7ed2ffd939 100644 --- a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java @@ -31,6 +31,7 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.searches.OverridingMethodsSearch; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PropertyUtil; +import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; import com.intellij.refactoring.MoveDestination; import com.intellij.refactoring.RefactorJBundle; @@ -157,9 +158,32 @@ public class WrapReturnValueProcessor extends FixableUsagesRefactoringProcessor }, ",")); returnTypeBuffer.append('>'); } + else if (myDelegateField != null) { + final PsiType type = myDelegateField.getType(); + final PsiType returnType = myMethod.getReturnType(); + final PsiClass containingClass = myDelegateField.getContainingClass(); + final PsiType inferredType = getInferredType(type, returnType, containingClass, myMethod); + if (inferredType != null) { + returnTypeBuffer.append("<").append(inferredType.getCanonicalText()).append(">"); + } + } return returnTypeBuffer.toString(); } + protected static PsiType getInferredType(PsiType type, PsiType returnType, PsiClass containingClass, PsiMethod method) { + if (containingClass != null && containingClass.getTypeParameters().length == 1) { + final PsiSubstitutor substitutor = PsiResolveHelper.SERVICE.getInstance(method.getProject()) + .inferTypeArguments(containingClass.getTypeParameters(), new PsiType[]{type}, new PsiType[]{returnType}, PsiUtil.getLanguageLevel( + method)); + final PsiTypeParameter typeParameter = containingClass.getTypeParameters()[0]; + final PsiType substituted = substitutor.substitute(typeParameter); + if (substituted != null && !typeParameter.equals(PsiUtil.resolveClassInClassTypeOnly(substituted))) { + return substituted; + } + } + return null; + } + @Override protected boolean preprocessUsages(final Ref refUsages) { MultiMap conflicts = new MultiMap(); @@ -198,7 +222,7 @@ public class WrapReturnValueProcessor extends FixableUsagesRefactoringProcessor final PsiParameter parameter = parameters[0]; final PsiType parameterType = parameter.getType(); for (PsiType returnType : returnTypes) { - if (!TypeConversionUtil.isAssignable(parameterType, returnType)) { + if (getInferredType(parameterType, returnType, existingClass, myMethod) == null && !TypeConversionUtil.isAssignable(parameterType, returnType)) { continue constr; } } diff --git a/java/java-psi-api/src/com/intellij/psi/PsiClassObjectAccessExpression.java b/java/java-psi-api/src/com/intellij/psi/PsiClassObjectAccessExpression.java index d1a8cdb7d085..e97089098f84 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiClassObjectAccessExpression.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiClassObjectAccessExpression.java @@ -28,4 +28,8 @@ public interface PsiClassObjectAccessExpression extends PsiExpression { */ @NotNull PsiTypeElement getOperand(); + + @NotNull + @Override + PsiType getType(); } diff --git a/java/java-psi-api/src/com/intellij/psi/util/TypesDistinctProver.java b/java/java-psi-api/src/com/intellij/psi/util/TypesDistinctProver.java index 5e13c8f780fc..9a3fc135e16f 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/TypesDistinctProver.java +++ b/java/java-psi-api/src/com/intellij/psi/util/TypesDistinctProver.java @@ -260,7 +260,11 @@ public class TypesDistinctProver { } else if (bound instanceof PsiWildcardType) { final PsiType boundBound = ((PsiWildcardType)bound).getBound(); - return boundBound != null && !boundBound.equals(type); + if (boundBound != null && !boundBound.equals(type)) { + final PsiClass psiClass = PsiUtil.resolveClassInClassTypeOnly(boundBound); + return psiClass == null || !(((PsiWildcardType)bound).isExtends() && possibleClasses.contains(psiClass)); + } + return false; } return true; } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java index 7641f629fa24..a55d7d53b3d5 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java @@ -273,6 +273,7 @@ public class PsiImplUtil { return types; } + @NotNull public static PsiType getType(@NotNull PsiClassObjectAccessExpression classAccessExpression) { GlobalSearchScope resolveScope = classAccessExpression.getResolveScope(); PsiManager manager = classAccessExpression.getManager(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiClassObjectAccessExpressionImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiClassObjectAccessExpressionImpl.java index b0c633d9c030..6e81bfcb114a 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiClassObjectAccessExpressionImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiClassObjectAccessExpressionImpl.java @@ -37,6 +37,7 @@ public class PsiClassObjectAccessExpressionImpl extends ExpressionPsiElement imp super(CLASS_OBJECT_ACCESS_EXPRESSION); } + @NotNull @Override public PsiType getType() { return PsiImplUtil.getType(this); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AssignabilityBetweenWildcardsAndArrays.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AssignabilityBetweenWildcardsAndArrays.java new file mode 100644 index 000000000000..709249ddb8b1 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AssignabilityBetweenWildcardsAndArrays.java @@ -0,0 +1,24 @@ +import java.io.Serializable; + +class B {} +abstract class A { + abstract Class get(); + abstract Class get1(); + abstract Class get2(); + + abstract Class get3(); + abstract Class get4(); + + abstract Class get5(); + abstract Class get6(); + + { + if (get() == byte[].class); + if (get1() == byte[].class); + if (get2() == byte[].class); + if (get3() == byte[].class); + if (get4() == byte[].class); + if (get5() == byte[].class); + if (get6() == byte[].class); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterLambdaWithFormalParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterLambdaWithFormalParams.java new file mode 100644 index 000000000000..a33ef0f367a3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/afterLambdaWithFormalParams.java @@ -0,0 +1,16 @@ +// "Replace lambda with method reference" "true" +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.function.Supplier; + +class Test { + public Test(String s) {} + + public static void define(Supplier moduleConstructor){} + public static void define(Function moduleConstructor){} + public static void define(BiFunction moduleConstructor){} + + { + define((Function) Test::new); + } +} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeLambdaWithFormalParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeLambdaWithFormalParams.java new file mode 100644 index 000000000000..d8e1d887674c --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambda2methodReference/beforeLambdaWithFormalParams.java @@ -0,0 +1,16 @@ +// "Replace lambda with method reference" "true" +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.function.Supplier; + +class Test { + public Test(String s) {} + + public static void define(Supplier moduleConstructor){} + public static void define(Function moduleConstructor){} + public static void define(BiFunction moduleConstructor){} + + { + define((String s) -> new Test(s)); + } +} diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/after/Test.java new file mode 100644 index 000000000000..af4bb0191954 --- /dev/null +++ b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/after/Test.java @@ -0,0 +1,10 @@ +class Test { + Wrapper foo() { + return new Wrapper(""); + } + + void bar() { + String s = foo().getMyField(); + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/after/Wrapper.java new file mode 100644 index 000000000000..4562e93899f4 --- /dev/null +++ b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/after/Wrapper.java @@ -0,0 +1,10 @@ +class Wrapper { + T myField; + Wrapper(T s) { + myField = s; + } + + String getMyField() { + return myField; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/before/Test.java new file mode 100644 index 000000000000..df1a8dfc9115 --- /dev/null +++ b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/before/Test.java @@ -0,0 +1,10 @@ +class Test { + String foo() { + return ""; + } + + void bar() { + String s = foo(); + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/before/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/before/Wrapper.java new file mode 100644 index 000000000000..4562e93899f4 --- /dev/null +++ b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldType/before/Wrapper.java @@ -0,0 +1,10 @@ +class Wrapper { + T myField; + Wrapper(T s) { + myField = s; + } + + String getMyField() { + return myField; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/after/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/after/Test.java new file mode 100644 index 000000000000..249a8bc66deb --- /dev/null +++ b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/after/Test.java @@ -0,0 +1,12 @@ +import java.util.List; + +class Test { + Wrapper foo() { + return new Wrapper(null); + } + + void bar() { + List s = foo().getMyField(); + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/after/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/after/Wrapper.java new file mode 100644 index 000000000000..46a4678d8d0a --- /dev/null +++ b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/after/Wrapper.java @@ -0,0 +1,11 @@ +import java.util.List; +class Wrapper { + List myField; + Wrapper(List s) { + myField = s; + } + + List getMyField() { + return myField; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/before/Test.java b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/before/Test.java new file mode 100644 index 000000000000..0ecc3827e600 --- /dev/null +++ b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/before/Test.java @@ -0,0 +1,12 @@ +import java.util.List; + +class Test { + List foo() { + return null; + } + + void bar() { + List s = foo(); + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/before/Wrapper.java b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/before/Wrapper.java new file mode 100644 index 000000000000..46a4678d8d0a --- /dev/null +++ b/java/java-tests/testData/refactoring/wrapReturnValue/inferFieldTypeArg/before/Wrapper.java @@ -0,0 +1,11 @@ +import java.util.List; +class Wrapper { + List myField; + Wrapper(List s) { + myField = s; + } + + List getMyField() { + return myField; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java index bb377400bd06..87677f08bf2a 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -450,6 +450,10 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); } + public void testAssignabilityBetweenWildcardsAndArrays() throws Exception { + doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); + } + public void testJavaUtilCollections_NoVerify() throws Exception { PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule())); assertNotNull(collectionsClass); diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisTest.java index 2c684b72c4a6..d9c7c8707702 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisTest.java @@ -213,8 +213,8 @@ public class BytecodeAnalysisTest extends JavaCodeInsightFixtureTestCase { Assert.assertEquals(asmKey, psiKey); } - private void setUpDataClasses() throws IOException { - File classesDir = new File(Test01.class.getResource("/" + Test01.class.getPackage().getName().replace('.', '/')).getFile()); + private void setUpDataClasses() throws Exception { + File classesDir = new File(Test01.class.getResource("/" + Test01.class.getPackage().getName().replace('.', '/')).toURI()); File destDir = new File(myModule.getProject().getBaseDir().getPath() + myClassesProjectRelativePath); FileUtil.copyDir(classesDir, destDir); VirtualFile vFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(destDir); diff --git a/java/java-tests/testSrc/com/intellij/refactoring/WrapReturnValueTest.java b/java/java-tests/testSrc/com/intellij/refactoring/WrapReturnValueTest.java index b1efc20c4523..a6e362073bb9 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/WrapReturnValueTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/WrapReturnValueTest.java @@ -51,6 +51,8 @@ public class WrapReturnValueTest extends MultiFileTestCase { public void testHierarchy() { doTest(false, null, true); } public void testAnonymous() { doTest(true, null, false); } public void testWrongFieldAssignment() { doTest(true, "Existing class does not have appropriate constructor", false); } + public void testInferFieldType() { doTest(true, null, false); } + public void testInferFieldTypeArg() { doTest(true, null, false); } public void testWrongFieldType() { doTest(true, "Existing class does not have appropriate constructor", false); } public void testStaticMethodInnerClass() { doTest(false, null, true); } public void testRawReturnType() { doTest(true, "Existing class does not have appropriate constructor"); } diff --git a/java/java-tests/testSrc/com/intellij/run/JavaPathMacroCollectorTest.groovy b/java/java-tests/testSrc/com/intellij/run/JavaPathMacroCollectorTest.groovy new file mode 100644 index 000000000000..129d9d39aaf5 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/run/JavaPathMacroCollectorTest.groovy @@ -0,0 +1,63 @@ +/* + * Copyright 2000-2015 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. + */ +package com.intellij.run + +import com.intellij.application.options.PathMacrosCollector +import com.intellij.openapi.util.JDOMUtil; +import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; + +public class JavaPathMacroCollectorTest extends LightCodeInsightFixtureTestCase { + public void testJunitConfiguration() { + String text = ''' + + + + + + + + + + + + + + + + + + + + +''' + def element = JDOMUtil.loadDocument(text).rootElement + assert PathMacrosCollector.getMacroNames(element).empty + } + +} diff --git a/native/WinLauncher/WinLauncher/WinLauncher.manifest b/native/WinLauncher/WinLauncher/WinLauncher.manifest deleted file mode 100644 index a43d169a456d..000000000000 --- a/native/WinLauncher/WinLauncher/WinLauncher.manifest +++ /dev/null @@ -1,9 +0,0 @@ - - - - - true - - - diff --git a/native/WinLauncher/WinLauncher/WinLauncher.rc b/native/WinLauncher/WinLauncher/WinLauncher.rc index ceedc4d25153..b973671bec00 100644 Binary files a/native/WinLauncher/WinLauncher/WinLauncher.rc and b/native/WinLauncher/WinLauncher/WinLauncher.rc differ diff --git a/native/WinLauncher/WinLauncher/WinLauncher.vcxproj b/native/WinLauncher/WinLauncher/WinLauncher.vcxproj index f140ec2fe7af..812ad622c9ab 100644 --- a/native/WinLauncher/WinLauncher/WinLauncher.vcxproj +++ b/native/WinLauncher/WinLauncher/WinLauncher.vcxproj @@ -89,6 +89,9 @@ Windows true + + true + @@ -101,6 +104,9 @@ Windows true + + true + @@ -118,6 +124,9 @@ true true + + true + @@ -136,6 +145,9 @@ true $(OutDir)WinLauncher64.exe + + true + diff --git a/platform/analysis-api/src/com/intellij/codeInspection/CleanupLocalInspectionTool.java b/platform/analysis-api/src/com/intellij/codeInspection/CleanupLocalInspectionTool.java index 930ae2d76dfb..729870ad78d1 100644 --- a/platform/analysis-api/src/com/intellij/codeInspection/CleanupLocalInspectionTool.java +++ b/platform/analysis-api/src/com/intellij/codeInspection/CleanupLocalInspectionTool.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -15,5 +15,10 @@ */ package com.intellij.codeInspection; +/** + * Marker interface for inspections which can be executed as part of "Code Cleanup" action. + * Such inspections need to provide some quickfixes which can run without user input and + * are generally safe to apply. + */ public interface CleanupLocalInspectionTool { } diff --git a/platform/analysis-api/src/com/intellij/codeInspection/InspectionEP.java b/platform/analysis-api/src/com/intellij/codeInspection/InspectionEP.java index 66d8b7d41ba3..630d53006d87 100644 --- a/platform/analysis-api/src/com/intellij/codeInspection/InspectionEP.java +++ b/platform/analysis-api/src/com/intellij/codeInspection/InspectionEP.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -109,6 +109,9 @@ public class InspectionEP extends LanguageExtensionPoint implements InspectionPr @Attribute("applyToDialects") public boolean applyToDialects = true; + /** + * If true, the inspection can run as part of the code cleanup action. + */ @Attribute("cleanupTool") public boolean cleanupTool = false; diff --git a/platform/analysis-impl/src/com/intellij/codeInspection/inspection-black-list.txt b/platform/analysis-impl/src/com/intellij/codeInspection/inspection-black-list.txt index 45a62d073e62..f5e8d6c01451 100644 --- a/platform/analysis-impl/src/com/intellij/codeInspection/inspection-black-list.txt +++ b/platform/analysis-impl/src/com/intellij/codeInspection/inspection-black-list.txt @@ -239,7 +239,7 @@ org.intellij.lang.xpath.validation.inspections.ImplicitTypeConversion org.intellij.lang.xpath.validation.inspections.RedundantTypeConversion org.intellij.plugins.intelliLang.inject.java.validation.LanguageMismatch org.intellij.plugins.intelliLang.pattern.PatternValidator -org.jetbrains.generate.tostring.inspection.ClassHasNoToStringMethodInspection +org.jetbrains.java.generate.inspection.ClassHasNoToStringMethodInspection org.jetbrains.idea.devkit.inspections.ComponentNotRegisteredInspection org.jetbrains.plugins.groovy.codeInspection.assignment.GroovyAssignmentCanBeOperatorAssignmentInspection org.jetbrains.plugins.groovy.codeInspection.confusing.GroovyOverlyComplexArithmeticExpressionInspection diff --git a/platform/core-api/src/com/intellij/psi/PsiElement.java b/platform/core-api/src/com/intellij/psi/PsiElement.java index 1be6c2db7ff8..ddb590b9c4aa 100644 --- a/platform/core-api/src/com/intellij/psi/PsiElement.java +++ b/platform/core-api/src/com/intellij/psi/PsiElement.java @@ -432,20 +432,21 @@ public interface PsiElement extends UserDataHolder, Iconable { boolean isWritable(); /** - * Returns the reference associated with this PSI element. If the element has multiple - * associated references (see {@link #getReferences()} for an example), returns the first - * associated reference. + * Returns the reference from this PSI element to another PSI element (or elements), if one exists. + * If the element has multiple associated references (see {@link #getReferences()} + * for an example), returns the first associated reference. * * @return the reference instance, or null if the PSI element does not have any * associated references. + * @see com.intellij.psi.search.searches.ReferencesSearch */ @Nullable @Contract(pure=true) PsiReference getReference(); /** - * Returns all references associated with this PSI element. An element can be associated - * with multiple references when, for example, the element is a string literal containing + * Returns all references from this PSI element to other PSI elements. An element can + * have multiple references when, for example, the element is a string literal containing * multiple sub-strings which are valid full-qualified class names. If an element * contains only one text fragment which acts as a reference but the reference has * multiple possible targets, {@link PsiPolyVariantReference} should be used instead @@ -457,6 +458,7 @@ public interface PsiElement extends UserDataHolder, Iconable { * @return the array of references, or an empty array if the element has no associated * references. * @see com.intellij.psi.PsiReferenceService#getReferences + * @see com.intellij.psi.search.searches.ReferencesSearch */ @NotNull @Contract(pure=true) diff --git a/platform/core-api/src/com/intellij/psi/PsiReference.java b/platform/core-api/src/com/intellij/psi/PsiReference.java index c296bf9227ed..f06e30d1c946 100644 --- a/platform/core-api/src/com/intellij/psi/PsiReference.java +++ b/platform/core-api/src/com/intellij/psi/PsiReference.java @@ -33,6 +33,7 @@ import org.jetbrains.annotations.Nullable; * @see com.intellij.psi.PsiReferenceService#getReferences(PsiElement, com.intellij.psi.PsiReferenceService.Hints) * @see com.intellij.psi.PsiReferenceBase * @see com.intellij.psi.PsiReferenceContributor + * @see com.intellij.psi.search.searches.ReferencesSearch */ public interface PsiReference { diff --git a/platform/indexing-api/src/com/intellij/psi/search/searches/ReferencesSearch.java b/platform/indexing-api/src/com/intellij/psi/search/searches/ReferencesSearch.java index f6dd16c898ec..fe9221a4489c 100644 --- a/platform/indexing-api/src/com/intellij/psi/search/searches/ReferencesSearch.java +++ b/platform/indexing-api/src/com/intellij/psi/search/searches/ReferencesSearch.java @@ -26,6 +26,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** + * Locates all references to a specified PSI element. + * + * @see com.intellij.psi.PsiReference * @author max */ public class ReferencesSearch extends ExtensibleQueryFactory { @@ -96,21 +99,50 @@ public class ReferencesSearch extends ExtensibleQueryFactory search(@NotNull PsiElement element) { return search(element, GlobalSearchScope.allScope(PsiUtilCore.getProjectInReadAction(element)), false); } + /** + * Searches for references to the specified element in the specified scope. + * + * @param element the element (declaration) the references to which are requested. + * @param searchScope the scope in which the search is performed. + * @return the query allowing to enumerate the references. + */ @NotNull public static Query search(@NotNull PsiElement element, @NotNull SearchScope searchScope) { return search(element, searchScope, false); } + /** + * Searches for references to the specified element in the specified scope, optionally returning also references which + * are invalid because of access rules (e.g. references to a private method from a different class). + * + * @param element the element (declaration) the references to which are requested. + * @param searchScope the scope in which the search is performed. + * @param ignoreAccessScope if true, references which are invalid because of access rules are included in the results. + * @return the query allowing to enumerate the references. + */ @NotNull public static Query search(@NotNull PsiElement element, @NotNull SearchScope searchScope, boolean ignoreAccessScope) { return search(new SearchParameters(element, searchScope, ignoreAccessScope)); } + /** + * Searches for references to the specified element according to the specified parameters. + * + * @param parameters the parameters for the search (contain also the element the references to which are requested). + * @return the query allowing to enumerate the references. + */ @NotNull public static Query search(@NotNull final SearchParameters parameters) { final Query result = INSTANCE.createQuery(parameters); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyHandler.java index 1b8acbccc56e..e780e3922b29 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyHandler.java @@ -90,7 +90,7 @@ public class CopyHandler extends EditorActionHandler { List transferableDatas = new ArrayList(); CopyPastePostProcessor[] postProcessors = Extensions.getExtensions(CopyPastePostProcessor.EP_NAME); - for (CopyPastePostProcessor processor : DumbService.getInstance(project).filterByDumbAwareness( Arrays.asList(postProcessors))) { + for (CopyPastePostProcessor processor : DumbService.getInstance(project).filterByDumbAwareness(Arrays.asList(postProcessors))) { transferableDatas.addAll(processor.collectTransferableData(file, editor, startOffsets, endOffsets)); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyPastePostProcessor.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyPastePostProcessor.java index e95410218a1e..f34488917b27 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyPastePostProcessor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyPastePostProcessor.java @@ -19,6 +19,7 @@ package com.intellij.codeInsight.editorActions; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; import com.intellij.psi.PsiFile; @@ -29,6 +30,10 @@ import java.util.Collections; import java.util.List; /** + * An extension to collect and apply additional transferable data when performing copy-paste in editors.

+ * + * Can be {@link DumbAware} + * * @author yole */ public abstract class CopyPastePostProcessor { diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java index 7a9a54414c52..21d9aedbb18b 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java @@ -380,17 +380,17 @@ public class GlobalInspectionContextImpl extends GlobalInspectionContextBase imp final List lTools = getWrappersFromTools(localTools, file); pass.doInspectInBatch(this, inspectionManager, lTools); - JobLauncher.getInstance().invokeConcurrentlyUnderProgress(globalSimpleTools, myProgressIndicator, false, new Processor() { + final List tools = getWrappersFromTools(globalSimpleTools, file); + JobLauncher.getInstance().invokeConcurrentlyUnderProgress(tools, myProgressIndicator, false, new Processor() { @Override - public boolean process(Tools tools) { - GlobalInspectionToolWrapper toolWrapper = (GlobalInspectionToolWrapper)tools.getTool(); - GlobalSimpleInspectionTool tool = (GlobalSimpleInspectionTool)toolWrapper.getTool(); - ProblemsHolder problemsHolder = new ProblemsHolder(inspectionManager, file, false); - ProblemDescriptionsProcessor problemDescriptionProcessor = getProblemDescriptionProcessor(toolWrapper, wrappersMap); - tool.checkFile(file, inspectionManager, problemsHolder, GlobalInspectionContextImpl.this, problemDescriptionProcessor); - InspectionToolPresentation toolPresentation = getPresentation(toolWrapper); - LocalDescriptorsUtil.addProblemDescriptors(problemsHolder.getResults(), false, GlobalInspectionContextImpl.this, null, - CONVERT, toolPresentation); + public boolean process(GlobalInspectionToolWrapper toolWrapper) { + GlobalSimpleInspectionTool tool = (GlobalSimpleInspectionTool)toolWrapper.getTool(); + ProblemsHolder problemsHolder = new ProblemsHolder(inspectionManager, file, false); + ProblemDescriptionsProcessor problemDescriptionProcessor = getProblemDescriptionProcessor(toolWrapper, wrappersMap); + tool.checkFile(file, inspectionManager, problemsHolder, GlobalInspectionContextImpl.this, problemDescriptionProcessor); + InspectionToolPresentation toolPresentation = getPresentation(toolWrapper); + LocalDescriptorsUtil.addProblemDescriptors(problemsHolder.getResults(), false, GlobalInspectionContextImpl.this, null, + CONVERT, toolPresentation); return true; } }); @@ -575,10 +575,10 @@ public class GlobalInspectionContextImpl extends GlobalInspectionContextBase imp } } - private static List getWrappersFromTools(List localTools, PsiFile file) { - final List lTools = new ArrayList(); + private static List getWrappersFromTools(List localTools, PsiFile file) { + final List lTools = new ArrayList(); for (Tools tool : localTools) { - final LocalInspectionToolWrapper enabledTool = (LocalInspectionToolWrapper)tool.getEnabledTool(file); + final T enabledTool = (T)tool.getEnabledTool(file); if (enabledTool != null) { lTools.add(enabledTool); } diff --git a/platform/lang-impl/src/com/intellij/execution/configuration/RunConfigurationPathMacroFilter.java b/platform/lang-impl/src/com/intellij/execution/configuration/RunConfigurationPathMacroFilter.java index afa589fb7dbb..84adf3cfb1f0 100644 --- a/platform/lang-impl/src/com/intellij/execution/configuration/RunConfigurationPathMacroFilter.java +++ b/platform/lang-impl/src/com/intellij/execution/configuration/RunConfigurationPathMacroFilter.java @@ -28,9 +28,23 @@ public class RunConfigurationPathMacroFilter extends PathMacroFilter { final Element parent = attribute.getParent(); final String attrName = attribute.getName(); String tagName = parent.getName(); - return tagName.equals(EnvironmentVariablesComponent.ENV) && - (attrName.equals(EnvironmentVariablesComponent.NAME) || attrName.equals(EnvironmentVariablesComponent.VALUE)) - || tagName.equals("option") && "MAIN_CLASS_NAME".equals(parent.getAttributeValue("name")); + if (tagName.equals(EnvironmentVariablesComponent.ENV) && + (attrName.equals(EnvironmentVariablesComponent.NAME) || attrName.equals(EnvironmentVariablesComponent.VALUE))) { + return true; + } + + if (tagName.equals("configuration") && attrName.equals("name")) { + return true; + } + + if (tagName.equals("option")) { + String optionName = parent.getAttributeValue("name"); + if ("MAIN_CLASS_NAME".equals(optionName) || "METHOD_NAME".equals(optionName)) { + return true; + } + } + + return false; } @Override diff --git a/platform/lang-impl/src/com/intellij/execution/filters/FileHyperlinkParsedData.java b/platform/lang-impl/src/com/intellij/execution/filters/FileHyperlinkParsedData.java new file mode 100644 index 000000000000..bab166e77b79 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/execution/filters/FileHyperlinkParsedData.java @@ -0,0 +1,45 @@ +package com.intellij.execution.filters; + +import org.jetbrains.annotations.NotNull; + +public class FileHyperlinkParsedData { + + private final String myFilePath; + private final int myDocumentLine; + private final int myDocumentColumn; + private final int myHyperlinkStartOffset; + private final int myHyperlinkEndOffset; + + public FileHyperlinkParsedData(@NotNull String filePath, + int documentLine, + int documentColumn, + int hyperlinkStartOffset, + int hyperlinkEndOffset) { + myFilePath = filePath; + myDocumentLine = documentLine; + myDocumentColumn = documentColumn; + myHyperlinkStartOffset = hyperlinkStartOffset; + myHyperlinkEndOffset = hyperlinkEndOffset; + } + + @NotNull + public String getFilePath() { + return myFilePath; + } + + public int getDocumentLine() { + return myDocumentLine; + } + + public int getDocumentColumn() { + return myDocumentColumn; + } + + public int getHyperlinkStartOffset() { + return myHyperlinkStartOffset; + } + + public int getHyperlinkEndOffset() { + return myHyperlinkEndOffset; + } +} diff --git a/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteDialog.java b/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteDialog.java index 9086841fa211..1d997a30d0af 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteDialog.java @@ -134,20 +134,13 @@ public class SafeDeleteDialog extends DialogWrapper { panel.add(myCbSearchTextOccurrences, gbc); } - if (myDelegate == null) { - final RefactoringSettings refactoringSettings = RefactoringSettings.getInstance(); - myCbSearchInComments.setSelected(refactoringSettings.SAFE_DELETE_SEARCH_IN_COMMENTS); - if (myCbSearchTextOccurrences != null) { - myCbSearchTextOccurrences.setSelected(refactoringSettings.SAFE_DELETE_SEARCH_IN_NON_JAVA); - } - if (myCbSafeDelete != null) { - myCbSafeDelete.setSelected(refactoringSettings.SAFE_DELETE_WHEN_DELETE); - } - } else { - myCbSearchInComments.setSelected(myDelegate.isToSearchInComments(myElements[0])); - if (myCbSearchTextOccurrences != null) { - myCbSearchTextOccurrences.setSelected(myDelegate.isToSearchForTextOccurrences(myElements[0])); - } + final RefactoringSettings refactoringSettings = RefactoringSettings.getInstance(); + if (myCbSafeDelete != null) { + myCbSafeDelete.setSelected(refactoringSettings.SAFE_DELETE_WHEN_DELETE); + } + myCbSearchInComments.setSelected(myDelegate != null ? myDelegate.isToSearchInComments(myElements[0]) : refactoringSettings.SAFE_DELETE_SEARCH_IN_COMMENTS); + if (myCbSearchTextOccurrences != null) { + myCbSearchTextOccurrences.setSelected(myDelegate != null ? myDelegate.isToSearchForTextOccurrences(myElements[0]) : refactoringSettings.SAFE_DELETE_SEARCH_IN_NON_JAVA); } updateControls(myCbSearchTextOccurrences); updateControls(myCbSearchInComments); @@ -203,20 +196,22 @@ public class SafeDeleteDialog extends DialogWrapper { super.doOKAction(); } - if (myDelegate == null) { - final RefactoringSettings refactoringSettings = RefactoringSettings.getInstance(); - refactoringSettings.SAFE_DELETE_SEARCH_IN_COMMENTS = isSearchInComments(); - if (myCbSearchTextOccurrences != null) { - refactoringSettings.SAFE_DELETE_SEARCH_IN_NON_JAVA = isSearchForTextOccurences(); - } - if (myCbSafeDelete != null) { - refactoringSettings.SAFE_DELETE_WHEN_DELETE = myCbSafeDelete.isSelected(); - } - } else { - myDelegate.setToSearchInComments(myElements[0], isSearchInComments()); - - if (myCbSearchTextOccurrences != null) { - myDelegate.setToSearchForTextOccurrences(myElements[0], isSearchForTextOccurences()); + final RefactoringSettings refactoringSettings = RefactoringSettings.getInstance(); + if (myCbSafeDelete != null) { + refactoringSettings.SAFE_DELETE_WHEN_DELETE = myCbSafeDelete.isSelected(); + } + if (isSafeDelete()) { + if (myDelegate == null) { + refactoringSettings.SAFE_DELETE_SEARCH_IN_COMMENTS = isSearchInComments(); + if (myCbSearchTextOccurrences != null) { + refactoringSettings.SAFE_DELETE_SEARCH_IN_NON_JAVA = isSearchForTextOccurences(); + } + } else { + myDelegate.setToSearchInComments(myElements[0], isSearchInComments()); + + if (myCbSearchTextOccurrences != null) { + myDelegate.setToSearchForTextOccurrences(myElements[0], isSearchForTextOccurences()); + } } } } diff --git a/platform/lang-impl/src/com/intellij/ui/StringComboboxEditor.java b/platform/lang-impl/src/com/intellij/ui/StringComboboxEditor.java index 1d43ebb362a5..68afc2b26b6b 100644 --- a/platform/lang-impl/src/com/intellij/ui/StringComboboxEditor.java +++ b/platform/lang-impl/src/com/intellij/ui/StringComboboxEditor.java @@ -18,7 +18,6 @@ package com.intellij.ui; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; -import com.intellij.openapi.command.undo.UndoConstants; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; @@ -58,7 +57,7 @@ public class StringComboboxEditor extends EditorComboBoxEditor { if (usePlainMatcher) { document.putUserData(USE_PLAIN_PREFIX_MATCHER, true); } - document.putUserData(UndoConstants.DONT_RECORD_UNDO, true); + super.setItem(document); } diff --git a/platform/platform-impl/src/com/intellij/platform/ProjectTemplateEP.java b/platform/platform-impl/src/com/intellij/platform/ProjectTemplateEP.java index 314cd74ce871..352f11bde2dd 100644 --- a/platform/platform-impl/src/com/intellij/platform/ProjectTemplateEP.java +++ b/platform/platform-impl/src/com/intellij/platform/ProjectTemplateEP.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -20,6 +20,8 @@ import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.util.xmlb.annotations.Attribute; /** + * Allows to define a project template in plugin.xml. + * * @author Dmitry Avdeev * Date: 07.11.13 */ @@ -27,12 +29,31 @@ public class ProjectTemplateEP extends AbstractExtensionPointBean { public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.projectTemplate"); + /** + * If the category attribute is set to true, specifies the title under which the template appears in the first page + * of the new project dialog. If the category attribute is set to false, specifies the module type ID for which + * the template is displayed in the "Create project from template" list. + */ @Attribute("projectType") public String projectType; + /** + * The path to a .zip file containing the template contents of the project. The top level directory of the archive + * is ignored (i.e. the contents of the archive must be a single directory, which is going to be renamed to the + * name of the project the user is creating). Under that directory, .idea/description.html specifies the description + * of the template and .idea/project-template.xml specifies additional metadata for the template. + */ @Attribute("templatePath") public String templatePath; + /** + * If true, this template will be offered on the first page of the new project wizard dialog, and the value + * of the projectType attribute will define the top-level category under which the template will appear. + * + * If false, the template will be offered on the second page of the dialog, under the "[x] Create project from template" + * option, and the projectType attribute is the module type ID for which the template will be available + * (for example, "JAVA_MODULE" for a regular Java module). + */ @Attribute("category") public boolean category; } diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/GlobalMatchingVisitor.java b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/GlobalMatchingVisitor.java index f7451649974d..2f53da09cd12 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/GlobalMatchingVisitor.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/GlobalMatchingVisitor.java @@ -39,9 +39,7 @@ public class GlobalMatchingVisitor extends AbstractMatchingVisitor { // context of matching private MatchContext matchContext; - private MatchingHandler myLastHandler; - - private Map myLanguage2MatchingVisitor = new HashMap(1); + private final Map myLanguage2MatchingVisitor = new HashMap(1); public PsiElement getElement() { return myElement; @@ -162,8 +160,7 @@ public class GlobalMatchingVisitor extends AbstractMatchingVisitor { return nodes.hasNext() == nodes2.hasNext(); } - myLastHandler = matchContext.getPattern().getHandler(nodes.current()); - return myLastHandler.matchSequentially( + return matchContext.getPattern().getHandler(nodes.current()).matchSequentially( nodes, nodes2, matchContext diff --git a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java index eb3147012c76..f95039d7b40a 100644 --- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java +++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java @@ -3063,6 +3063,36 @@ public class StringUtil extends StringUtilRt { return builder.toString().replaceAll("\\.{4,}", "..."); } + /** + * Does the string have an uppercase character? + * @param s the string to test. + * @return true if the string has an uppercase character, false if not. + */ + public static boolean hasUpperCaseChar(String s) { + char[] chars = s.toCharArray(); + for (char c : chars) { + if (Character.isUpperCase(c)) { + return true; + } + } + return false; + } + + /** + * Does the string have a lowercase character? + * @param s the string to test. + * @return true if the string has a lowercase character, false if not. + */ + public static boolean hasLowerCaseChar(String s) { + char[] chars = s.toCharArray(); + for (char c : chars) { + if (Character.isLowerCase(c)) { + return true; + } + } + return false; + } + /** * Expirable CharSequence. Very useful to control external library execution time, * i.e. when java.util.regex.Pattern match goes out of control. diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java index 02554ab35332..3a0c68d2f1fc 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java @@ -15,6 +15,7 @@ */ package com.siyeh.ig.style; +import com.intellij.codeInspection.CleanupLocalInspectionTool; import com.intellij.codeInspection.canBeFinal.CanBeFinalHandler; import com.intellij.psi.PsiField; import com.intellij.psi.PsiModifier; @@ -26,7 +27,7 @@ import com.siyeh.ig.fixes.MakeFieldFinalFix; import com.siyeh.ig.psiutils.FinalUtils; import org.jetbrains.annotations.NotNull; -public class FieldMayBeFinalInspection extends BaseInspection { +public class FieldMayBeFinalInspection extends BaseInspection implements CleanupLocalInspectionTool { @Override @NotNull diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/VariableAccessVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/VariableAccessVisitor.java index e51038168227..ccf65acb98df 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/VariableAccessVisitor.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/VariableAccessVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2015 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -46,7 +46,6 @@ class VariableAccessVisitor extends JavaRecursiveElementVisitor { private final boolean countGettersAndSetters; VariableAccessVisitor(PsiClass aClass, boolean countGettersAndSetters) { - super(); this.aClass = aClass; this.countGettersAndSetters = countGettersAndSetters; } @@ -54,7 +53,12 @@ class VariableAccessVisitor extends JavaRecursiveElementVisitor { @Override public void visitClass(PsiClass classToVisit) { calculatePrivateMethodUsagesIfNecessary(); + final boolean wasInSync = m_inSynchronizedContext; + if (!classToVisit.equals(aClass)) { + m_inSynchronizedContext = false; + } super.visitClass(classToVisit); + m_inSynchronizedContext = wasInSync; } @Override @@ -131,11 +135,11 @@ class VariableAccessVisitor extends JavaRecursiveElementVisitor { return; } } - final boolean methodIsSynchonized = + final boolean methodIsSynchronized = method.hasModifierProperty(PsiModifier.SYNCHRONIZED) || methodIsAlwaysUsedSynchronized(method); boolean wasInSync = false; - if (methodIsSynchonized) { + if (methodIsSynchronized) { wasInSync = m_inSynchronizedContext; m_inSynchronizedContext = true; } @@ -144,7 +148,7 @@ class VariableAccessVisitor extends JavaRecursiveElementVisitor { m_inInitializer = true; } super.visitMethod(method); - if (methodIsSynchonized) { + if (methodIsSynchronized) { m_inSynchronizedContext = wasInSync; } if (isConstructor) { diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/threading/FieldAccessedSynchronizedAndUnsynchronized.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/threading/FieldAccessedSynchronizedAndUnsynchronized.java deleted file mode 100644 index 5f747c982084..000000000000 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/threading/FieldAccessedSynchronizedAndUnsynchronized.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.siyeh.igtest.threading; - -public class FieldAccessedSynchronizedAndUnsynchronized -{ - private final Object m_lock = new Object(); - private Object m_contents = new Object(); - - public void foo() - { - synchronized(m_lock) - { - m_contents = new Object(); - } - getContents(); - } - - private Object getContents() - { - getContents2(); - return m_contents; - } - - private void getContents2() { - getContents(); - } - -} diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/threading/field_accessed_synchronized_and_unsynchronized/FieldAccessedSynchronizedAndUnsynchronized.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/threading/field_accessed_synchronized_and_unsynchronized/FieldAccessedSynchronizedAndUnsynchronized.java new file mode 100644 index 000000000000..61e2e8a45bcd --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/threading/field_accessed_synchronized_and_unsynchronized/FieldAccessedSynchronizedAndUnsynchronized.java @@ -0,0 +1,42 @@ +package com.siyeh.igtest.threading.field_accessed_synchronized_and_unsynchronized; + +public class FieldAccessedSynchronizedAndUnsynchronized +{ + private final Object m_lock = new Object(); + private Object m_contents = new Object(); + + public void foo() + { + synchronized(m_lock) + { + m_contents = new Object(); + } + getContents(); + } + + private Object getContents() + { + getContents2(); + return m_contents; + } + + private void getContents2() { + getContents(); + } + +} +class Test { + private Object object; + + synchronized Runnable method() { + return new Runnable() { + @Override public void run() { + System.out.println(object); + } + }; + } + + synchronized void setObject(Object object) { + this.object = object; + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/threading/FieldAccessedSynchronizedAndUnsynchronizedInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/threading/FieldAccessedSynchronizedAndUnsynchronizedInspectionTest.java new file mode 100644 index 000000000000..952b13601be1 --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/threading/FieldAccessedSynchronizedAndUnsynchronizedInspectionTest.java @@ -0,0 +1,36 @@ +/* + * Copyright 2000-2015 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. + */ +package com.siyeh.ig.threading; + +import com.intellij.codeInspection.InspectionProfileEntry; +import com.siyeh.ig.LightInspectionTestCase; +import org.jetbrains.annotations.Nullable; + +/** + * @author Bas Leijdekkers + */ +public class FieldAccessedSynchronizedAndUnsynchronizedInspectionTest extends LightInspectionTestCase { + + public void testFieldAccessedSynchronizedAndUnsynchronized() { + doTest(); + } + + @Nullable + @Override + protected InspectionProfileEntry getInspection() { + return new FieldAccessedSynchronizedAndUnsynchronizedInspection(); + } +} diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplateResourceLocator.java b/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplateResourceLocator.java deleted file mode 100644 index 82cff7dca1cc..000000000000 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplateResourceLocator.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2001-2013 the original author or authors. - * - * 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. - */ -package org.jetbrains.generate.tostring.template; - -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.CharsetToolkit; -import org.jetbrains.generate.tostring.exception.TemplateResourceException; - -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStreamReader; - -/** - * Resource locator for default method body templates. - */ -public class TemplateResourceLocator { - - private static final String DEFAULT_CONCAT = "/org/jetbrains/generate/tostring/template/DefaultConcatMember.vm"; - private static final String DEFAULT_CONCAT_GROOVY = "/org/jetbrains/generate/tostring/template/DefaultConcatMemberGroovy.vm"; - private static final String DEFAULT_CONCAT_SUPER = "/org/jetbrains/generate/tostring/template/DefaultConcatMemberSuper.vm"; - private static final String DEFAULT_BUFFER = "/org/jetbrains/generate/tostring/template/DefaultBuffer.vm"; - private static final String DEFAULT_BUILDER = "/org/jetbrains/generate/tostring/template/DefaultBuilder.vm"; - private static final String DEFAULT_TOSTRINGBUILDER = "/org/jetbrains/generate/tostring/template/DefaultToStringBuilder.vm"; - private static final String DEFAULT_TOSTRINGBUILDER3 = "/org/jetbrains/generate/tostring/template/DefaultToStringBuilder3.vm"; - private static final String DEFAULT_GUAVA = "/org/jetbrains/generate/tostring/template/DefaultGuava.vm"; - - private TemplateResourceLocator() {} - - /** - * Get the default templates. - */ - public static TemplateResource[] getDefaultTemplates() { - try { - return new TemplateResource[]{ - new TemplateResource("String concat (+)", readFile(DEFAULT_CONCAT), true), - new TemplateResource("String concat (+) and super.toString()", readFile(DEFAULT_CONCAT_SUPER), true), - new TemplateResource("StringBuffer", readFile(DEFAULT_BUFFER), true), - new TemplateResource("StringBuilder (JDK 1.5)", readFile(DEFAULT_BUILDER), true), - new TemplateResource("ToStringBuilder (Apache commons-lang)", readFile(DEFAULT_TOSTRINGBUILDER), true), - new TemplateResource("ToStringBuilder (Apache commons-lang 3)", readFile(DEFAULT_TOSTRINGBUILDER3), true), - new TemplateResource("Objects.toStringHelper (Guava)", readFile(DEFAULT_GUAVA), true), - new TemplateResource("Groovy: String concat (+)", readFile(DEFAULT_CONCAT_GROOVY), true), - }; - } - catch (IOException e) { - throw new TemplateResourceException("Error loading default templates", e); - } - } - - /** - * Reads the content of the resource and return it as a String. - *

Uses the class loader that loaded this class to find the resource in its classpath. - * - * @param resource the resource name. Will lookup using the classpath. - * @return the content if the resource - * @throws IOException error reading the file. - */ - private static String readFile(String resource) throws IOException { - BufferedInputStream in = new BufferedInputStream(TemplateResourceLocator.class.getResourceAsStream(resource)); - return StringUtil.convertLineSeparators(FileUtil.loadTextAndClose(new InputStreamReader(in, CharsetToolkit.UTF8_CHARSET))); - } -} diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringAction.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringAction.java similarity index 96% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringAction.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringAction.java index cbfaff7ec686..c46b70b1d4cc 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringAction.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringAction.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring; +package org.jetbrains.java.generate; import com.intellij.openapi.editor.actionSystem.EditorAction; diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringActionHandlerImpl.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringActionHandlerImpl.java similarity index 90% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringActionHandlerImpl.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringActionHandlerImpl.java index 0e7f6a84c086..38631f596d73 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringActionHandlerImpl.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringActionHandlerImpl.java @@ -13,12 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring; +package org.jetbrains.java.generate; import com.intellij.codeInsight.generation.PsiElementClassMember; import com.intellij.codeInsight.hint.HintManager; import com.intellij.ide.util.MemberChooser; -import com.intellij.ide.util.MemberChooserBuilder; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; @@ -39,10 +38,11 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.generate.tostring.config.Config; -import org.jetbrains.generate.tostring.template.TemplateResource; -import org.jetbrains.generate.tostring.template.TemplatesManager; -import org.jetbrains.generate.tostring.view.TemplatesPanel; +import org.jetbrains.generate.tostring.GenerateToStringClassFilter; +import org.jetbrains.java.generate.config.Config; +import org.jetbrains.java.generate.template.TemplateResource; +import org.jetbrains.java.generate.template.toString.ToStringTemplatesManager; +import org.jetbrains.java.generate.view.TemplatesPanel; import javax.swing.*; import java.awt.*; @@ -57,7 +57,7 @@ import java.util.List; * The action-handler that does the code generation. */ public class GenerateToStringActionHandlerImpl extends EditorWriteActionHandler implements GenerateToStringActionHandler { - private static final Logger logger = Logger.getInstance("#org.jetbrains.generate.tostring.GenerateToStringActionHandlerImpl"); + private static final Logger logger = Logger.getInstance("#GenerateToStringActionHandlerImpl"); public void executeWriteAction(Editor editor, DataContext dataContext) { final Project project = CommonDataKeys.PROJECT.getData(dataContext); @@ -107,7 +107,7 @@ public class GenerateToStringActionHandlerImpl extends EditorWriteActionHandler Collection selectedMembers = GenerationUtil.convertClassMembersToPsiMembers(chooser.getSelectedElements()); final TemplateResource template = header.getSelectedTemplate(); - TemplatesManager.getInstance().setDefaultTemplate(template); + ToStringTemplatesManager.getInstance().setDefaultTemplate(template); if (template.isValidTemplate()) { GenerateToStringWorker.executeGenerateActionLater(clazz, editor, selectedMembers, template, @@ -183,7 +183,7 @@ public class GenerateToStringActionHandlerImpl extends EditorWriteActionHandler public MemberChooserHeaderPanel(final PsiClass clazz) { super(new GridBagLayout()); - final Collection templates = TemplatesManager.getInstance().getAllTemplates(); + final Collection templates = ToStringTemplatesManager.getInstance().getAllTemplates(); final TemplateResource[] all = templates.toArray(new TemplateResource[templates.size()]); final JButton settingsButton = new JButton("Settings"); @@ -216,23 +216,23 @@ public class GenerateToStringActionHandlerImpl extends EditorWriteActionHandler updateDialog(clazz, chooser); comboBox.removeAllItems(); - for (TemplateResource resource : TemplatesManager.getInstance().getAllTemplates()) { + for (TemplateResource resource : ToStringTemplatesManager.getInstance().getAllTemplates()) { comboBox.addItem(resource); } - comboBox.setSelectedItem(TemplatesManager.getInstance().getDefaultTemplate()); + comboBox.setSelectedItem(ToStringTemplatesManager.getInstance().getDefaultTemplate()); } }; ShowSettingsUtil.getInstance().editConfigurable(MemberChooserHeaderPanel.this, composite, new Runnable() { public void run() { - ui.selectItem(TemplatesManager.getInstance().getDefaultTemplate()); + ui.selectItem(ToStringTemplatesManager.getInstance().getDefaultTemplate()); } }); Disposer.dispose(disposable); } }); - comboBox.setSelectedItem(TemplatesManager.getInstance().getDefaultTemplate()); + comboBox.setSelectedItem(ToStringTemplatesManager.getInstance().getDefaultTemplate()); final JLabel templatesLabel = new JLabel("Template: "); templatesLabel.setDisplayedMnemonic('T'); diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringConfigurable.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringConfigurable.java similarity index 87% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringConfigurable.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringConfigurable.java index 59b9602ba281..3514cee42ad8 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringConfigurable.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringConfigurable.java @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring; +package org.jetbrains.java.generate; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; -import org.jetbrains.generate.tostring.config.Config; -import org.jetbrains.generate.tostring.view.ConfigUI; +import org.jetbrains.java.generate.config.Config; +import org.jetbrains.java.generate.view.ConfigUI; import javax.swing.*; @@ -28,7 +28,7 @@ import javax.swing.*; * @author yole */ public class GenerateToStringConfigurable implements Configurable { - private static final Logger log = Logger.getInstance("#org.jetbrains.generate.tostring.GenerateToStringConfigurable"); + private static final Logger log = Logger.getInstance("#GenerateToStringConfigurable"); private ConfigUI configUI; private final Project myProject; diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringWorker.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringWorker.java similarity index 72% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringWorker.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringWorker.java index aff07225bf17..cde95464b439 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerateToStringWorker.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/GenerateToStringWorker.java @@ -17,7 +17,7 @@ /* * @author max */ -package org.jetbrains.generate.tostring; +package org.jetbrains.java.generate; import com.intellij.codeInsight.hint.HintManager; import com.intellij.openapi.application.ApplicationManager; @@ -32,22 +32,17 @@ import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.util.IncorrectOperationException; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.VelocityEngine; import org.jetbrains.annotations.Nullable; -import org.jetbrains.generate.tostring.config.*; -import org.jetbrains.generate.tostring.element.*; -import org.jetbrains.generate.tostring.exception.GenerateCodeException; -import org.jetbrains.generate.tostring.psi.PsiAdapter; -import org.jetbrains.generate.tostring.template.TemplateResource; -import org.jetbrains.generate.tostring.velocity.VelocityFactory; -import org.jetbrains.generate.tostring.view.MethodExistsDialog; +import org.jetbrains.java.generate.config.*; +import org.jetbrains.java.generate.exception.GenerateCodeException; +import org.jetbrains.java.generate.psi.PsiAdapter; +import org.jetbrains.java.generate.template.TemplateResource; +import org.jetbrains.java.generate.view.MethodExistsDialog; -import java.io.StringWriter; import java.util.*; public class GenerateToStringWorker { - private static final Logger logger = Logger.getInstance("#org.jetbrains.generate.tostring.GenerateToStringWorker"); + private static final Logger logger = Logger.getInstance("#" + GenerateToStringWorker.class.getName()); private final Editor editor; private final PsiClass clazz; @@ -61,6 +56,70 @@ public class GenerateToStringWorker { this.hasOverrideAnnotation = insertAtOverride; } + /** + * Creates the toString method. + * + * @param selectedMembers the selected members as both {@link com.intellij.psi.PsiField} and {@link com.intellij.psi.PsiMethod}. + * @param policy conflict resolution policy + * @param params additional parameters stored with key/value in the map. + * @param template the template to use + * @return the created method, null if the method is not created due the user cancels this operation + * @throws GenerateCodeException is thrown when there is an error generating the javacode. + * @throws IncorrectOperationException is thrown by IDEA. + */ + @Nullable + private PsiMethod createToStringMethod(Collection selectedMembers, + ConflictResolutionPolicy policy, + Map params, + TemplateResource template) throws IncorrectOperationException, GenerateCodeException { + // generate code using velocity + String body = GenerationUtil.velocityGenerateCode(clazz, selectedMembers, params, template.getMethodBody(), config.getSortElements(), config.isUseFullyQualifiedName()); + if (logger.isDebugEnabled()) logger.debug("Method body generated from Velocity:\n" + body); + + // fix weird linebreak problem in IDEA #3296 and later + body = StringUtil.convertLineSeparators(body); + + // create psi newMethod named toString() + final JVMElementFactory topLevelFactory = JVMElementFactories.getFactory(clazz.getLanguage(), clazz.getProject()); + if (topLevelFactory == null) { + return null; + } + PsiMethod newMethod; + try { + newMethod = topLevelFactory.createMethodFromText(template.getMethodSignature() + " { " + body + " }", clazz); + CodeStyleManager.getInstance(clazz.getProject()).reformat(newMethod); + } catch (IncorrectOperationException ignore) { + HintManager.getInstance().showErrorHint(editor, "'toString()' method could not be created from template '" + + template.getFileName() + '\''); + return null; + } + + // insertNewMethod conflict resolution policy (add/replace, duplicate, cancel) + PsiMethod existingMethod = clazz.findMethodBySignature(newMethod, false); + PsiMethod toStringMethod = policy.applyMethod(clazz, existingMethod, newMethod, editor); + if (toStringMethod == null) { + return null; // user cancelled so return null + } + + if (hasOverrideAnnotation) { + toStringMethod.getModifierList().addAnnotation("java.lang.Override"); + } + + // applyJavaDoc conflict resolution policy (add or keep existing) + String existingJavaDoc = params.get("existingJavaDoc"); + String newJavaDoc = template.getJavaDoc(); + if (existingJavaDoc != null || newJavaDoc != null) { + // generate javadoc using velocity + newJavaDoc = GenerationUtil.velocityGenerateCode(clazz, selectedMembers, params, newJavaDoc, config.getSortElements(), config.isUseFullyQualifiedName()); + if (logger.isDebugEnabled()) logger.debug("JavaDoc body generated from Velocity:\n" + newJavaDoc); + + GenerationUtil.applyJavaDoc(toStringMethod, existingJavaDoc, newJavaDoc); + } + + // return the created method + return toStringMethod; + } + public void execute(Collection members, TemplateResource template) throws IncorrectOperationException, GenerateCodeException { // decide what to do if the method already exists ConflictResolutionPolicy resolutionPolicy = exitsMethodDialog(template); @@ -74,7 +133,8 @@ public class GenerateToStringWorker { beforeCreateToStringMethod(params, template); // generate method - PsiMethod method = createToStringMethod(members, resolutionPolicy, params, template); + PsiMethod method = + createToStringMethod(members, resolutionPolicy, params, template); // after, if method was generated (not cancel policy) if (method != null) { @@ -135,75 +195,6 @@ public class GenerateToStringWorker { } } - /** - * Creates the toString method. - * - * @param selectedMembers the selected members as both {@link com.intellij.psi.PsiField} and {@link com.intellij.psi.PsiMethod}. - * @param policy conflict resolution policy - * @param params additional parameters stored with key/value in the map. - * @param template the template to use - * @return the created method, null if the method is not created due the user cancels this operation - * @throws GenerateCodeException is thrown when there is an error generating the javacode. - * @throws IncorrectOperationException is thrown by IDEA. - */ - @Nullable - private PsiMethod createToStringMethod(Collection selectedMembers, - ConflictResolutionPolicy policy, - Map params, - TemplateResource template) throws IncorrectOperationException, GenerateCodeException { - // generate code using velocity - String body = velocityGenerateCode(selectedMembers, params, template.getMethodBody()); - if (logger.isDebugEnabled()) logger.debug("Method body generated from Velocity:\n" + body); - - // fix weird linebreak problem in IDEA #3296 and later - body = StringUtil.convertLineSeparators(body); - - // create psi newMethod named toString() - final JVMElementFactory topLevelFactory = JVMElementFactories.getFactory(clazz.getLanguage(), clazz.getProject()); - if (topLevelFactory == null) { - return null; - } - PsiMethod newMethod; - try { - newMethod = topLevelFactory.createMethodFromText(template.getMethodSignature() + " { " + body + " }", clazz); - CodeStyleManager.getInstance(clazz.getProject()).reformat(newMethod); - } catch (IncorrectOperationException ignore) { - HintManager.getInstance().showErrorHint(editor, "'toString()' method could not be created from template '" + - template.getFileName() + '\''); - return null; - } - - // insertNewMethod conflict resolution policy (add/replace, duplicate, cancel) - PsiMethod existingMethod = clazz.findMethodBySignature(newMethod, false); - PsiMethod toStringMethod = policy.applyMethod(clazz, existingMethod, newMethod, editor); - if (toStringMethod == null) { - return null; // user cancelled so return null - } - - if (hasOverrideAnnotation) { - toStringMethod.getModifierList().addAnnotation("java.lang.Override"); - } - - // applyJavaDoc conflict resolution policy (add or keep existing) - String existingJavaDoc = params.get("existingJavaDoc"); - String newJavaDoc = template.getJavaDoc(); - if (existingJavaDoc != null || newJavaDoc != null) { - // generate javadoc using velocity - newJavaDoc = velocityGenerateCode(selectedMembers, params, newJavaDoc); - if (logger.isDebugEnabled()) logger.debug("JavaDoc body generated from Velocity:\n" + newJavaDoc); - - applyJavaDoc(toStringMethod, existingJavaDoc, newJavaDoc); - } - - // return the created method - return toStringMethod; - } - - private static void applyJavaDoc(PsiMethod newMethod, String existingJavaDoc, String newJavaDoc) { - String text = newJavaDoc != null ? newJavaDoc : existingJavaDoc; // prefer to use new javadoc - PsiAdapter.addOrReplaceJavadoc(newMethod, text, true); - } - /** * This method is executed just after the toString method is created or updated. @@ -253,75 +244,6 @@ public class GenerateToStringWorker { } } - /** - * Generates the code using Velocity. - *

- * This is used to create the toString method body and it's javadoc. - * - * @param selectedMembers the selected members as both {@link com.intellij.psi.PsiField} and {@link com.intellij.psi.PsiMethod}. - * @param params additional parameters stored with key/value in the map. - * @param templateMacro the velocity macro template - * @return code (usually javacode). Returns null if templateMacro is null. - * @throws GenerateCodeException is thrown when there is an error generating the javacode. - */ - private String velocityGenerateCode(Collection selectedMembers, Map params, String templateMacro) - throws GenerateCodeException { - if (templateMacro == null) { - return null; - } - - StringWriter sw = new StringWriter(); - try { - VelocityContext vc = new VelocityContext(); - - vc.put("java_version", PsiAdapter.getJavaVersion(clazz)); - - // field information - logger.debug("Velocity Context - adding fields"); - vc.put("fields", ElementUtils.getOnlyAsFieldElements(selectedMembers)); - - // method information - logger.debug("Velocity Context - adding methods"); - vc.put("methods", ElementUtils.getOnlyAsMethodElements(selectedMembers)); - - // element information (both fields and methods) - logger.debug("Velocity Context - adding members (fields and methods)"); - List elements = ElementUtils.getOnlyAsFieldAndMethodElements(selectedMembers); - // sort elements if enabled and not using chooser dialog - if (config.getSortElements() != 0) { - Collections.sort(elements, new ElementComparator(config.getSortElements())); - } - vc.put("members", elements); - - // class information - ClassElement ce = ElementFactory.newClassElement(clazz); - vc.put("class", ce); - if (logger.isDebugEnabled()) logger.debug("Velocity Context - adding class: " + ce); - - // information to keep as it is to avoid breaking compatibility with prior releases - vc.put("classname", config.isUseFullyQualifiedName() ? ce.getQualifiedName() : ce.getName()); - vc.put("FQClassname", ce.getQualifiedName()); - - if (logger.isDebugEnabled()) logger.debug("Velocity Macro:\n" + templateMacro); - - // velocity - VelocityEngine velocity = VelocityFactory.getVelocityEngine(); - logger.debug("Executing velocity +++ START +++"); - velocity.evaluate(vc, sw, this.getClass().getName(), templateMacro); - logger.debug("Executing velocity +++ END +++"); - - // any additional packages to import returned from velocity? - if (vc.get("autoImportPackages") != null) { - params.put("autoImportPackages", (String)vc.get("autoImportPackages")); - } - } - catch (Exception e) { - throw new GenerateCodeException("Error in Velocity code generator", e); - } - - return sw.getBuffer().toString(); - } - /** * Generates the toString() code for the specified class and selected * fields, doing the work through a WriteAction ran by a CommandProcessor. diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerationUtil.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/GenerationUtil.java similarity index 51% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerationUtil.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/GenerationUtil.java index 1c5b2fed439d..362709a503c0 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/GenerationUtil.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/GenerationUtil.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring; +package org.jetbrains.java.generate; import com.intellij.codeInsight.generation.PsiElementClassMember; import com.intellij.codeInsight.generation.PsiFieldMember; @@ -21,19 +21,25 @@ import com.intellij.codeInsight.generation.PsiMethodMember; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; +import com.intellij.psi.PsiClass; import com.intellij.psi.PsiField; import com.intellij.psi.PsiMember; import com.intellij.psi.PsiMethod; +import com.intellij.psi.codeStyle.CodeStyleSettingsManager; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.VelocityEngine; import org.jetbrains.annotations.Nullable; -import org.jetbrains.generate.tostring.exception.GenerateCodeException; -import org.jetbrains.generate.tostring.exception.PluginException; +import org.jetbrains.java.generate.element.*; +import org.jetbrains.java.generate.exception.GenerateCodeException; +import org.jetbrains.java.generate.exception.PluginException; +import org.jetbrains.java.generate.psi.PsiAdapter; +import org.jetbrains.java.generate.velocity.VelocityFactory; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.io.StringWriter; +import java.util.*; public class GenerationUtil { - private static final Logger log = Logger.getInstance("#org.jetbrains.generate.tostring.GenerationUtil"); + private static final Logger logger = Logger.getInstance("#" + GenerationUtil.class.getName()); /** * Handles any exception during the executing on this plugin. @@ -43,7 +49,7 @@ public class GenerationUtil { * @throws RuntimeException is thrown for severe exceptions */ public static void handleException(Project project, Exception e) throws RuntimeException { - log.info(e); + logger.info(e); if (e instanceof GenerateCodeException) { // code generation error - display velocity error in error dialog so user can identify problem quicker @@ -105,4 +111,84 @@ public class GenerationUtil { return psiMemberList; } + + public static void applyJavaDoc(PsiMethod newMethod, String existingJavaDoc, String newJavaDoc) { + String text = newJavaDoc != null ? newJavaDoc : existingJavaDoc; // prefer to use new javadoc + PsiAdapter.addOrReplaceJavadoc(newMethod, text, true); + } + + /** + * Generates the code using Velocity. + *

+ * This is used to create the toString method body and it's javadoc. + * + * @param selectedMembers the selected members as both {@link com.intellij.psi.PsiField} and {@link com.intellij.psi.PsiMethod}. + * @param params additional parameters stored with key/value in the map. + * @param templateMacro the velocity macro template + * @return code (usually javacode). Returns null if templateMacro is null. + * @throws org.jetbrains.java.generate.exception.GenerateCodeException is thrown when there is an error generating the javacode. + */ + public static String velocityGenerateCode(PsiClass clazz, + Collection selectedMembers, + Map params, + String templateMacro, + int sortElements, + boolean useFullyQualifiedName) + throws GenerateCodeException { + if (templateMacro == null) { + return null; + } + + StringWriter sw = new StringWriter(); + try { + VelocityContext vc = new VelocityContext(); + + vc.put("java_version", PsiAdapter.getJavaVersion(clazz)); + + // field information + logger.debug("Velocity Context - adding fields"); + vc.put("fields", ElementUtils.getOnlyAsFieldElements(selectedMembers)); + + // method information + logger.debug("Velocity Context - adding methods"); + vc.put("methods", ElementUtils.getOnlyAsMethodElements(selectedMembers)); + + // element information (both fields and methods) + logger.debug("Velocity Context - adding members (fields and methods)"); + List elements = ElementUtils.getOnlyAsFieldAndMethodElements(selectedMembers); + // sort elements if enabled and not using chooser dialog + if (sortElements != 0) { + Collections.sort(elements, new ElementComparator(sortElements)); + } + vc.put("members", elements); + + // class information + ClassElement ce = ElementFactory.newClassElement(clazz); + vc.put("class", ce); + if (logger.isDebugEnabled()) logger.debug("Velocity Context - adding class: " + ce); + + // information to keep as it is to avoid breaking compatibility with prior releases + vc.put("classname", useFullyQualifiedName ? ce.getQualifiedName() : ce.getName()); + vc.put("FQClassname", ce.getQualifiedName()); + vc.put("settings", CodeStyleSettingsManager.getSettings(clazz.getProject())); + + if (logger.isDebugEnabled()) logger.debug("Velocity Macro:\n" + templateMacro); + + // velocity + VelocityEngine velocity = VelocityFactory.getVelocityEngine(); + logger.debug("Executing velocity +++ START +++"); + velocity.evaluate(vc, sw, GenerateToStringWorker.class.getName(), templateMacro); + logger.debug("Executing velocity +++ END +++"); + + // any additional packages to import returned from velocity? + if (vc.get("autoImportPackages") != null) { + params.put("autoImportPackages", (String)vc.get("autoImportPackages")); + } + } + catch (Exception e) { + throw new GenerateCodeException("Error in Velocity code generator", e); + } + + return sw.getBuffer().toString(); + } } \ No newline at end of file diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/DuplicatePolicy.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/config/DuplicatePolicy.java similarity index 93% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/DuplicatePolicy.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/config/DuplicatePolicy.java index 5de932ede689..da8f9e4018bf 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/DuplicatePolicy.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/config/DuplicatePolicy.java @@ -13,12 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; -import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; /** diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/InsertAfterEqualsHashCodeStrategy.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/config/InsertAfterEqualsHashCodeStrategy.java similarity index 95% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/InsertAfterEqualsHashCodeStrategy.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/config/InsertAfterEqualsHashCodeStrategy.java index d9757947531a..d5e2f5b3fbef 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/InsertAfterEqualsHashCodeStrategy.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/config/InsertAfterEqualsHashCodeStrategy.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import org.jetbrains.annotations.NotNull; -import org.jetbrains.generate.tostring.psi.PsiAdapter; +import org.jetbrains.java.generate.psi.PsiAdapter; /** * Inserts the method after the hashCode/equals methods in the javafile. diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/InsertAtCaretStrategy.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/config/InsertAtCaretStrategy.java similarity index 91% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/InsertAtCaretStrategy.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/config/InsertAtCaretStrategy.java index f41c60196921..fadc7f9c7fa6 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/InsertAtCaretStrategy.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/config/InsertAtCaretStrategy.java @@ -13,15 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; import com.intellij.codeInsight.generation.GenerateMembersUtil; -import com.intellij.codeInsight.generation.OverrideImplementUtil; import com.intellij.codeInsight.generation.PsiGenerationInfo; import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; -import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import java.util.Arrays; diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/ReplacePolicy.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/config/ReplacePolicy.java similarity index 97% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/ReplacePolicy.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/config/ReplacePolicy.java index e070573d1dad..ab6a2a2e0ca6 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/config/ReplacePolicy.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/config/ReplacePolicy.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.config; +package org.jetbrains.java.generate.config; import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiClass; diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/AbstractElement.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/AbstractElement.java similarity index 83% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/AbstractElement.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/element/AbstractElement.java index a1ff5a87ef29..ec931a1e404e 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/AbstractElement.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/AbstractElement.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.element; +package org.jetbrains.java.generate.element; /** * Base class to extends for Elements. @@ -38,6 +38,13 @@ public abstract class AbstractElement implements Element { protected boolean isDate; protected boolean isCalendar; protected boolean isBoolean; + protected boolean isLong; + protected boolean isFloat; + protected boolean isDouble; + protected boolean isVoid; + protected boolean isChar; + protected boolean isByte; + protected boolean isShort; protected String typeName; protected String typeQualifiedName; protected boolean isModifierStatic; @@ -119,6 +126,69 @@ public abstract class AbstractElement implements Element { return isBoolean; } + @Override + public boolean isLong() { + return isLong; + } + + public void setLong(boolean isLong) { + this.isLong = isLong; + } + + @Override + public boolean isFloat() { + return isFloat; + } + + public void setFloat(boolean isFloat) { + this.isFloat = isFloat; + } + + @Override + public boolean isDouble() { + return isDouble; + } + + public void setDouble(boolean isDouble) { + this.isDouble = isDouble; + } + + @Override + public boolean isVoid() { + return isVoid; + } + + public void setVoid(boolean isVoid) { + this.isVoid = isVoid; + } + + @Override + public boolean isChar() { + return isChar; + } + + public void setChar(boolean isChar) { + this.isChar = isChar; + } + + @Override + public boolean isByte() { + return isByte; + } + + public void setByte(boolean isByte) { + this.isByte = isByte; + } + + @Override + public boolean isShort() { + return isShort; + } + + public void setShort(boolean isShort) { + this.isShort = isShort; + } + public void setBoolean(boolean aBoolean) { isBoolean = aBoolean; } diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ClassElement.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ClassElement.java similarity index 99% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ClassElement.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/element/ClassElement.java index 6b9d8057419d..17eb57d9eb6b 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ClassElement.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ClassElement.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.element; +package org.jetbrains.java.generate.element; import com.intellij.openapi.util.text.StringUtil; diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/Element.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/Element.java similarity index 95% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/Element.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/element/Element.java index 04f6ec6a5808..bf23afa33e7d 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/Element.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/Element.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.element; +package org.jetbrains.java.generate.element; /** * This is an Element. @@ -146,6 +146,14 @@ public interface Element { */ boolean isBoolean(); + boolean isLong(); + boolean isShort(); + boolean isChar(); + boolean isFloat(); + boolean isDouble(); + boolean isByte(); + boolean isVoid(); + /** * Get's the elements type classname (etc. Object, String, List) * diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ElementComparator.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementComparator.java similarity index 97% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ElementComparator.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementComparator.java index 3b36260c3f10..4e6c82778722 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ElementComparator.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementComparator.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.element; +package org.jetbrains.java.generate.element; import java.util.Comparator; diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ElementFactory.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementFactory.java similarity index 92% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ElementFactory.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementFactory.java index be60bffa6c09..2c219f1900fa 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ElementFactory.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementFactory.java @@ -13,18 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.element; +package org.jetbrains.java.generate.element; import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.*; -import org.jetbrains.generate.tostring.psi.PsiAdapter; +import org.jetbrains.java.generate.psi.PsiAdapter; /** * Factory for creating {@link FieldElement} or {@link ClassElement} objects. */ public class ElementFactory { - private static final Logger log = Logger.getInstance("#org.jetbrains.generate.tostring.element.ElementFactory"); + private static final Logger log = Logger.getInstance("#ElementFactory"); private ElementFactory() { } @@ -170,6 +170,13 @@ public class ElementFactory { if (PsiAdapter.isDateType(factory, type)) element.setDate(true); if (PsiAdapter.isCalendarType(factory, type)) element.setCalendar(true); if (PsiAdapter.isBooleanType(factory, type)) element.setBoolean(true); + if (PsiType.VOID.equals(type)) element.setVoid(true); + if (PsiType.LONG.equals(type)) element.setLong(true); + if (PsiType.FLOAT.equals(type)) element.setFloat(true); + if (PsiType.DOUBLE.equals(type)) element.setDouble(true); + if (PsiType.BYTE.equals(type)) element.setByte(true); + if (PsiType.CHAR.equals(type)) element.setChar(true); + if (PsiType.SHORT.equals(type)) element.setShort(true); // modifiers if (modifiers != null) { diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ElementUtils.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementUtils.java similarity index 95% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ElementUtils.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementUtils.java index 3c2ddae6e73c..e0caa4ceee2b 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ElementUtils.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementUtils.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.element; +package org.jetbrains.java.generate.element; import com.intellij.psi.PsiField; import com.intellij.psi.PsiMember; @@ -36,7 +36,7 @@ public class ElementUtils { * @param members a list of {@link com.intellij.psi.PsiMember} objects. * @return a filtered list of only the fields as {@link FieldElement} objects. */ - public static List getOnlyAsFieldElements(Collection members) { + public static List getOnlyAsFieldElements(Collection members) { List fieldElementList = new ArrayList(); for (PsiMember member : members) { @@ -56,7 +56,7 @@ public class ElementUtils { * @param members a list of {@link com.intellij.psi.PsiMember} objects. * @return a filtered list of only the methods as a {@link MethodElement} objects. */ - public static List getOnlyAsMethodElements(Collection members) { + public static List getOnlyAsMethodElements(Collection members) { List methodElementList = new ArrayList(); for (PsiMember member : members) { @@ -76,7 +76,7 @@ public class ElementUtils { * @param members a list of {@link com.intellij.psi.PsiMember} objects. * @return a filtered list of only the methods as a {@link FieldElement} or {@link MethodElement} objects. */ - public static List getOnlyAsFieldAndMethodElements(Collection members) { + public static List getOnlyAsFieldAndMethodElements(Collection members) { List elementList = new ArrayList(); for (PsiMember member : members) { diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/FieldElement.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/FieldElement.java similarity index 98% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/FieldElement.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/element/FieldElement.java index 8be76e1edbd4..1075bf4dc882 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/FieldElement.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/FieldElement.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.element; +package org.jetbrains.java.generate.element; import com.intellij.openapi.util.text.StringUtil; diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/MethodElement.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/MethodElement.java similarity index 98% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/MethodElement.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/element/MethodElement.java index 4005a8bb3f9d..28df950de60f 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/MethodElement.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/MethodElement.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.element; +package org.jetbrains.java.generate.element; import com.intellij.openapi.util.text.StringUtil; diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/exception/TemplateResourceException.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/exception/TemplateResourceException.java similarity index 95% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/exception/TemplateResourceException.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/exception/TemplateResourceException.java index 3bf694a9de28..50a247b44638 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/exception/TemplateResourceException.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/exception/TemplateResourceException.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.exception; +package org.jetbrains.java.generate.exception; /** * Template resource related exceptions. diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/package.html b/plugins/generate-tostring/src/org/jetbrains/java/generate/package.html similarity index 100% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/package.html rename to plugins/generate-tostring/src/org/jetbrains/java/generate/package.html diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplateResource.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/TemplateResource.java similarity index 75% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplateResource.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/template/TemplateResource.java index e2a847049381..db56f816bd57 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplateResource.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/TemplateResource.java @@ -13,10 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.template; +package org.jetbrains.java.generate.template; import org.jetbrains.annotations.Nullable; -import org.jetbrains.generate.tostring.util.StringUtil; import java.io.Serializable; @@ -42,6 +41,54 @@ public class TemplateResource implements Serializable { isDefault = false; } + /** + * Returns the part of s after the token. + *

+ *
Example: after("helloWorldThisIsMe", "World") will return "ThisIsMe". + *
Example: after("helloWorldThisIsMe", "Dog") will return null. + * + * @param s the string to test. + * @param token the token. + * @return the part of s that is after the token. + */ + public static String after(String s, String token) { + if (s == null) { + return null; + } + + int i = s.indexOf(token); + if (i == -1) { + return s; + } + + return s.substring(i + token.length()); + } + + /** + * Returns the part of s before the token. + *

+ *
Example: before("helloWorldThisIsMe", "World") will return "hello". + *
Example: before("helloWorldThisIsMe", "Dog") will return "helloWorldThisIsMe". + *

+ * If the token is not in the string, the entire string is returned. + * + * @param s the string to test. + * @param token the token. + * @return the part of s that is before the token. + */ + public static String before(String s, String token) { + if (s == null) { + return null; + } + + int i = s.indexOf(token); + if (i == -1) { + return s; + } + + return s.substring(0, i); + } + public String getTemplate() { return template; } @@ -89,7 +136,7 @@ public class TemplateResource implements Serializable { @Nullable private static String getMethodBody(String template) { String signature = getMethodSignature(template); - String s = StringUtil.after(template, signature); + String s = after(template, signature); if (s == null) { return null; @@ -110,7 +157,7 @@ public class TemplateResource implements Serializable { } private static String getMethodSignature(String template) { - String s = StringUtil.after(template, "*/").trim(); + String s = after(template, "*/").trim(); StringBuffer signature = new StringBuffer(); @@ -136,7 +183,7 @@ public class TemplateResource implements Serializable { */ public String getTargetMethodName() { String s = getMethodSignature(); - s = StringUtil.before(s, "("); + s = before(s, "("); int i = s.lastIndexOf(" "); return s.substring(i).trim(); } diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplatesManager.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/TemplatesManager.java similarity index 63% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplatesManager.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/template/TemplatesManager.java index f1c462c8164a..d69e87d11f69 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplatesManager.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/TemplatesManager.java @@ -17,34 +17,38 @@ /* * @author max */ -package org.jetbrains.generate.tostring.template; +package org.jetbrains.java.generate.template; import com.intellij.openapi.components.*; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.CharsetToolkit; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStreamReader; import java.util.*; -@State( - name = "ToStringTemplates", - storages = { - @Storage( - file = StoragePathMacros.APP_CONFIG + "/toStringTemplates.xml" - )} -) -public class TemplatesManager implements PersistentStateComponent { - public static TemplatesManager getInstance() { - return ServiceManager.getService(TemplatesManager.class); - } +public abstract class TemplatesManager implements PersistentStateComponent { - private TemplatesState myState = new TemplatesState(); + private TemplatesState myState = new TemplatesState(); - public TemplatesManager() { - for (TemplateResource o : TemplateResourceLocator.getDefaultTemplates()) { - addTemplate(o); - } - } + public abstract TemplateResource[] getDefaultTemplates(); + /** + * Reads the content of the resource and return it as a String. + *

Uses the class loader that loaded this class to find the resource in its classpath. + * + * @param resource the resource name. Will lookup using the classpath. + * @return the content if the resource + * @throws java.io.IOException error reading the file. + */ + protected static String readFile(String resource, Class templatesManagerClass) throws IOException { + BufferedInputStream in = new BufferedInputStream(templatesManagerClass.getResourceAsStream(resource)); + return StringUtil.convertLineSeparators(FileUtil.loadTextAndClose(new InputStreamReader(in, CharsetToolkit.UTF8_CHARSET))); + } - public TemplatesState getState() { + public TemplatesState getState() { return myState; } @@ -67,14 +71,10 @@ public class TemplatesManager implements PersistentStateComponent getAllTemplates() { - TemplateResource[] defaultTemplates = TemplateResourceLocator.getDefaultTemplates(); HashSet names = new HashSet(); - for (TemplateResource defaultTemplate : defaultTemplates) { - names.add(defaultTemplate.getFileName()); - } - Collection templates = new LinkedHashSet(Arrays.asList(defaultTemplates)); + Collection templates = new LinkedHashSet(Arrays.asList(getDefaultTemplates())); for (TemplateResource template : myState.templates) { - if (!names.contains(template.getFileName())) { + if (names.add(template.getFileName())) { templates.add(template); } } diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplatesState.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/TemplatesState.java similarity index 94% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplatesState.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/template/TemplatesState.java index 735d6fa34fbb..c0c8e213b048 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/TemplatesState.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/TemplatesState.java @@ -17,7 +17,7 @@ /* * @author max */ -package org.jetbrains.generate.tostring.template; +package org.jetbrains.java.generate.template; import java.util.ArrayList; import java.util.List; diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultBuffer.vm b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultBuffer.vm similarity index 100% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultBuffer.vm rename to plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultBuffer.vm diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultBuilder.vm b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultBuilder.vm similarity index 100% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultBuilder.vm rename to plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultBuilder.vm diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultConcatMember.vm b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultConcatMember.vm similarity index 100% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultConcatMember.vm rename to plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultConcatMember.vm diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultConcatMemberGroovy.vm b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultConcatMemberGroovy.vm similarity index 100% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultConcatMemberGroovy.vm rename to plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultConcatMemberGroovy.vm diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultConcatMemberSuper.vm b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultConcatMemberSuper.vm similarity index 100% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultConcatMemberSuper.vm rename to plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultConcatMemberSuper.vm diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultGuava.vm b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultGuava.vm similarity index 100% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultGuava.vm rename to plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultGuava.vm diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultToStringBuilder.vm b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultToStringBuilder.vm similarity index 100% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultToStringBuilder.vm rename to plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultToStringBuilder.vm diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultToStringBuilder3.vm b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultToStringBuilder3.vm similarity index 100% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/template/DefaultToStringBuilder3.vm rename to plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/DefaultToStringBuilder3.vm diff --git a/plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/ToStringTemplatesManager.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/ToStringTemplatesManager.java new file mode 100644 index 000000000000..af2c7e99aab1 --- /dev/null +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/template/toString/ToStringTemplatesManager.java @@ -0,0 +1,71 @@ +/* + * Copyright 2000-2015 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. + */ +package org.jetbrains.java.generate.template.toString; + +import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.components.State; +import com.intellij.openapi.components.Storage; +import com.intellij.openapi.components.StoragePathMacros; +import org.jetbrains.java.generate.exception.TemplateResourceException; +import org.jetbrains.java.generate.template.TemplateResource; +import org.jetbrains.java.generate.template.TemplatesManager; + +import java.io.IOException; + +@State( + name = "ToStringTemplates", + storages = { + @Storage( + file = StoragePathMacros.APP_CONFIG + "/toStringTemplates.xml" + )} +) +public class ToStringTemplatesManager extends TemplatesManager { + private static final String DEFAULT_CONCAT = "DefaultConcatMember.vm"; + private static final String DEFAULT_CONCAT_GROOVY = "/org/jetbrains/java/generate/template/toString/DefaultConcatMemberGroovy.vm"; + private static final String DEFAULT_CONCAT_SUPER = "/org/jetbrains/java/generate/template/toString/DefaultConcatMemberSuper.vm"; + private static final String DEFAULT_BUFFER = "/org/jetbrains/java/generate/template/toString/DefaultBuffer.vm"; + private static final String DEFAULT_BUILDER = "/org/jetbrains/java/generate/template/toString/DefaultBuilder.vm"; + private static final String DEFAULT_TOSTRINGBUILDER = "/org/jetbrains/java/generate/template/toString/DefaultToStringBuilder.vm"; + private static final String DEFAULT_TOSTRINGBUILDER3 = "/org/jetbrains/java/generate/template/toString/DefaultToStringBuilder3.vm"; + private static final String DEFAULT_GUAVA = "/org/jetbrains/java/generate/template/toString/DefaultGuava.vm"; + + public static TemplatesManager getInstance() { + return ServiceManager.getService(ToStringTemplatesManager.class); + } + + @Override + public TemplateResource[] getDefaultTemplates() { + try { + return new TemplateResource[]{ + new TemplateResource("String concat (+)", readFile(DEFAULT_CONCAT), true), + new TemplateResource("String concat (+) and super.toString()", readFile(DEFAULT_CONCAT_SUPER), true), + new TemplateResource("StringBuffer", readFile(DEFAULT_BUFFER), true), + new TemplateResource("StringBuilder (JDK 1.5)", readFile(DEFAULT_BUILDER), true), + new TemplateResource("ToStringBuilder (Apache commons-lang)", readFile(DEFAULT_TOSTRINGBUILDER), true), + new TemplateResource("ToStringBuilder (Apache commons-lang 3)", readFile(DEFAULT_TOSTRINGBUILDER3), true), + new TemplateResource("Objects.toStringHelper (Guava)", readFile(DEFAULT_GUAVA), true), + new TemplateResource("Groovy: String concat (+)", readFile(DEFAULT_CONCAT_GROOVY), true), + }; + } + catch (IOException e) { + throw new TemplateResourceException("Error loading default templates", e); + } + } + + protected static String readFile(String resource) throws IOException { + return readFile(resource, ToStringTemplatesManager.class); + } +} diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/velocity/VelocityFactory.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/velocity/VelocityFactory.java similarity index 97% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/velocity/VelocityFactory.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/velocity/VelocityFactory.java index ff4a5b63c83c..542e181142ed 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/velocity/VelocityFactory.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/velocity/VelocityFactory.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.velocity; +package org.jetbrains.java.generate.velocity; import org.apache.commons.collections.ExtendedProperties; import org.apache.velocity.app.VelocityEngine; diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/ConfigUI.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/view/ConfigUI.java similarity index 98% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/ConfigUI.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/view/ConfigUI.java index fc5979d34a46..89ed39f77be7 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/ConfigUI.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/view/ConfigUI.java @@ -13,17 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.view; +package org.jetbrains.java.generate.view; import com.intellij.openapi.project.Project; import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.LanguageTextField; import org.intellij.lang.regexp.RegExpLanguage; import org.jetbrains.annotations.Nullable; -import org.jetbrains.generate.tostring.config.Config; -import org.jetbrains.generate.tostring.config.DuplicationPolicy; -import org.jetbrains.generate.tostring.config.InsertWhere; -import org.jetbrains.generate.tostring.config.PolicyOptions; +import org.jetbrains.java.generate.config.Config; +import org.jetbrains.java.generate.config.DuplicationPolicy; +import org.jetbrains.java.generate.config.InsertWhere; +import org.jetbrains.java.generate.config.PolicyOptions; import javax.swing.*; import java.awt.*; diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/ToStringTemplateConfigurable.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/view/GenerateTemplateConfigurable.java similarity index 89% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/ToStringTemplateConfigurable.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/view/GenerateTemplateConfigurable.java index 0de3284ba560..e618402cdc2f 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/ToStringTemplateConfigurable.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/view/GenerateTemplateConfigurable.java @@ -17,7 +17,7 @@ /* * @author max */ -package org.jetbrains.generate.tostring.view; +package org.jetbrains.java.generate.view; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; @@ -27,20 +27,19 @@ import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.fileTypes.FileTypes; -import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.UnnamedConfigurable; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; -import org.jetbrains.generate.tostring.template.TemplateResource; +import org.jetbrains.java.generate.template.TemplateResource; import javax.swing.*; -public class ToStringTemplateConfigurable implements UnnamedConfigurable{ +public class GenerateTemplateConfigurable implements UnnamedConfigurable{ private final TemplateResource template; private final Editor myEditor; - public ToStringTemplateConfigurable(TemplateResource template, Project project) { + public GenerateTemplateConfigurable(TemplateResource template, Project project) { this.template = template; final EditorFactory factory = EditorFactory.getInstance(); final Document doc = factory.createDocument(template.getTemplate()); diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/MethodExistsDialog.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/view/MethodExistsDialog.java similarity index 86% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/MethodExistsDialog.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/view/MethodExistsDialog.java index 8547ac5eae81..59a3a0adb4a3 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/MethodExistsDialog.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/view/MethodExistsDialog.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.view; +package org.jetbrains.java.generate.view; import com.intellij.openapi.ui.Messages; -import org.jetbrains.generate.tostring.config.CancelPolicy; -import org.jetbrains.generate.tostring.config.ConflictResolutionPolicy; -import org.jetbrains.generate.tostring.config.DuplicatePolicy; -import org.jetbrains.generate.tostring.config.ReplacePolicy; +import org.jetbrains.java.generate.config.CancelPolicy; +import org.jetbrains.java.generate.config.ConflictResolutionPolicy; +import org.jetbrains.java.generate.config.DuplicatePolicy; +import org.jetbrains.java.generate.config.ReplacePolicy; /** * This is a dialog when the toString() method already exists. diff --git a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/TemplatesPanel.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/view/TemplatesPanel.java similarity index 85% rename from plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/TemplatesPanel.java rename to plugins/generate-tostring/src/org/jetbrains/java/generate/view/TemplatesPanel.java index 2327611b540d..ed70605e5b24 100644 --- a/plugins/generate-tostring/src/org/jetbrains/generate/tostring/view/TemplatesPanel.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/view/TemplatesPanel.java @@ -17,7 +17,7 @@ /* * @author max */ -package org.jetbrains.generate.tostring.view; +package org.jetbrains.java.generate.view; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.UnnamedConfigurable; @@ -31,8 +31,8 @@ import gnu.trove.Equality; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; -import org.jetbrains.generate.tostring.template.TemplateResource; -import org.jetbrains.generate.tostring.template.TemplatesManager; +import org.jetbrains.java.generate.template.TemplateResource; +import org.jetbrains.java.generate.template.toString.ToStringTemplatesManager; import java.util.ArrayList; @@ -80,7 +80,7 @@ public class TemplatesPanel extends NamedItemsListEditor { public TemplatesPanel(Project project) { super(NAMER, FACTORY, CLONER, COMPARER, - new ArrayList(TemplatesManager.getInstance().getAllTemplates())); + new ArrayList(ToStringTemplatesManager.getInstance().getAllTemplates())); //ServiceManager.getService(project, MasterDetailsStateService.class).register("ToStringTemplates.UI", this); myProject = project; @@ -104,7 +104,7 @@ public class TemplatesPanel extends NamedItemsListEditor { @Override public boolean isModified() { - return super.isModified() || !Comparing.equal(TemplatesManager.getInstance().getDefaultTemplate(), getSelectedItem()); + return super.isModified() || !Comparing.equal(ToStringTemplatesManager.getInstance().getDefaultTemplate(), getSelectedItem()); } @Override @@ -113,16 +113,16 @@ public class TemplatesPanel extends NamedItemsListEditor { } protected UnnamedConfigurable createConfigurable(TemplateResource item) { - return new ToStringTemplateConfigurable(item, myProject); + return new GenerateTemplateConfigurable(item, myProject); } @Override public void apply() throws ConfigurationException { super.apply(); - TemplatesManager.getInstance().setTemplates(getItems()); + ToStringTemplatesManager.getInstance().setTemplates(getItems()); final TemplateResource selection = getSelectedItem(); if (selection != null) { - TemplatesManager.getInstance().setDefaultTemplate(selection); + ToStringTemplatesManager.getInstance().setDefaultTemplate(selection); } } } diff --git a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/inspection/ClassHasNoToStringMethodInspectionTest.java b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/inspection/ClassHasNoToStringMethodInspectionTest.java similarity index 96% rename from plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/inspection/ClassHasNoToStringMethodInspectionTest.java rename to plugins/generate-tostring/testSrc/org/jetbrains/java/generate/inspection/ClassHasNoToStringMethodInspectionTest.java index 32f131c16645..1494ff175883 100644 --- a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/inspection/ClassHasNoToStringMethodInspectionTest.java +++ b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/inspection/ClassHasNoToStringMethodInspectionTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.inspection; +package org.jetbrains.java.generate.inspection; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import org.jetbrains.annotations.NonNls; diff --git a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/inspection/FieldNotUsedInToStringInspectionTest.java b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/inspection/FieldNotUsedInToStringInspectionTest.java similarity index 98% rename from plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/inspection/FieldNotUsedInToStringInspectionTest.java rename to plugins/generate-tostring/testSrc/org/jetbrains/java/generate/inspection/FieldNotUsedInToStringInspectionTest.java index 79af2f576914..4f8b80b54643 100644 --- a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/inspection/FieldNotUsedInToStringInspectionTest.java +++ b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/inspection/FieldNotUsedInToStringInspectionTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.inspection; +package org.jetbrains.java.generate.inspection; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import org.jetbrains.annotations.NonNls; diff --git a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/inspection/ToStringGeneratingTest.groovy b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/inspection/ToStringGeneratingTest.groovy similarity index 87% rename from plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/inspection/ToStringGeneratingTest.groovy rename to plugins/generate-tostring/testSrc/org/jetbrains/java/generate/inspection/ToStringGeneratingTest.groovy index b4685b9403e6..df8a5aed1e93 100644 --- a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/inspection/ToStringGeneratingTest.groovy +++ b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/inspection/ToStringGeneratingTest.groovy @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.inspection +package org.jetbrains.java.generate.inspection import com.intellij.openapi.application.Result import com.intellij.openapi.command.WriteCommandAction @@ -23,11 +23,11 @@ import com.intellij.psi.PsiJavaFile import com.intellij.psi.PsiMember import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase import org.jetbrains.annotations.NotNull -import org.jetbrains.generate.tostring.GenerateToStringWorker -import org.jetbrains.generate.tostring.config.ConflictResolutionPolicy -import org.jetbrains.generate.tostring.config.ReplacePolicy -import org.jetbrains.generate.tostring.template.TemplateResource -import org.jetbrains.generate.tostring.template.TemplatesManager +import org.jetbrains.java.generate.config.ConflictResolutionPolicy +import org.jetbrains.java.generate.config.ReplacePolicy +import org.jetbrains.java.generate.template.TemplateResource +import org.jetbrains.java.generate.GenerateToStringWorker +import org.jetbrains.java.generate.template.toString.ToStringTemplatesManager /** * Created by Max Medvedev on 07/03/14 @@ -101,7 +101,7 @@ public class Foobar { @NotNull private static TemplateResource findDefaultTemplate() { - Collection templates = TemplatesManager.getInstance().getAllTemplates(); + Collection templates = ToStringTemplatesManager.getInstance().getAllTemplates(); def template = templates.find { it.fileName == "String concat (+)" } assert template != null template diff --git a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyCompleteTestBean.java b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyCompleteTestBean.java similarity index 99% rename from plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyCompleteTestBean.java rename to plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyCompleteTestBean.java index b88b15146d75..8dca2556fa06 100644 --- a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyCompleteTestBean.java +++ b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyCompleteTestBean.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.test; +package org.jetbrains.java.generate.test; import java.io.Serializable; import java.math.BigDecimal; diff --git a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyGetterTestBean.java b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyGetterTestBean.java similarity index 96% rename from plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyGetterTestBean.java rename to plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyGetterTestBean.java index 04a173304047..5c07aa5b68c7 100644 --- a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyGetterTestBean.java +++ b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyGetterTestBean.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.test; +package org.jetbrains.java.generate.test; /** * This is a dummy test bean for testing the toString() plugin. diff --git a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyModelTestBean.java b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyModelTestBean.java similarity index 97% rename from plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyModelTestBean.java rename to plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyModelTestBean.java index e1987dcb08ad..89833fe34ceb 100644 --- a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyModelTestBean.java +++ b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyModelTestBean.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.test; +package org.jetbrains.java.generate.test; import java.util.ArrayList; import java.util.Collections; diff --git a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummySortTestBean.java b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummySortTestBean.java similarity index 96% rename from plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummySortTestBean.java rename to plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummySortTestBean.java index 7c8a06c6538a..a35d0732c3cc 100644 --- a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummySortTestBean.java +++ b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummySortTestBean.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.test; +package org.jetbrains.java.generate.test; import java.util.logging.Logger; diff --git a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyTestBean.java b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyTestBean.java similarity index 95% rename from plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyTestBean.java rename to plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyTestBean.java index 904421a169f6..9277963c06b4 100644 --- a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/DummyTestBean.java +++ b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/DummyTestBean.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.test; +package org.jetbrains.java.generate.test; -import org.jetbrains.generate.tostring.config.Config; +import org.jetbrains.java.generate.config.Config; import java.io.Serializable; import java.util.Date; diff --git a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/Owner.java b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/Owner.java similarity index 98% rename from plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/Owner.java rename to plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/Owner.java index d09b8508818a..7a8fb2e8eb84 100644 --- a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/Owner.java +++ b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/Owner.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.test; +package org.jetbrains.java.generate.test; /** * To be used for testing. diff --git a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/Pet.java b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/Pet.java similarity index 97% rename from plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/Pet.java rename to plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/Pet.java index 122831cb83f7..89f1d9aa413e 100644 --- a/plugins/generate-tostring/testSrc/org/jetbrains/generate/tostring/test/Pet.java +++ b/plugins/generate-tostring/testSrc/org/jetbrains/java/generate/test/Pet.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.generate.tostring.test; +package org.jetbrains.java.generate.test; import java.util.Date; diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index a3516e47faa2..c69af6def2c5 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -1559,19 +1559,21 @@ - - - + + + + + implementationClass="org.jetbrains.java.generate.inspection.ClassHasNoToStringMethodInspection"/> + implementationClass="org.jetbrains.java.generate.inspection.FieldNotUsedInToStringInspection"/> diff --git a/resources/src/idea/JavaActions.xml b/resources/src/idea/JavaActions.xml index c7cc6e9756a7..6cc9ba83758f 100644 --- a/resources/src/idea/JavaActions.xml +++ b/resources/src/idea/JavaActions.xml @@ -11,7 +11,7 @@ - +