matthiasblaesing commented on code in PR #8253:
URL: https://github.com/apache/netbeans/pull/8253#discussion_r2019239706
##########
java/java.hints/src/org/netbeans/modules/java/hints/errors/MagicSurroundWithTryCatchFix.java:
##########
@@ -396,36 +417,65 @@ private static StatementTree
createLogStatement(CompilationInfo info, TreeMaker
boolean useFQN = false;
for (ImportTree dovoz : info.getCompilationUnit().getImports()) {
MemberSelectTree id = (MemberSelectTree)
dovoz.getQualifiedIdentifier();
- if ("Logger".equals(id.getIdentifier()) &&
!"java.util.logging.Logger".equals(id.toString())) {
+ if ("Logger".equals(id.getIdentifier()) &&
!loggerFQN.equals(id.toString())) {
useFQN = true;
}
}
+
+ // check if there's a declared logger to use
+ VariableElement existingLogger = null;
+ if (info instanceof CompilationController controller
+ &&
ErrorFixesFakeHint.isUseExistingLogger(ErrorFixesFakeHint.getPreferences(info.getFileObject(),
FixKind.SURROUND_WITH_TRY_CATCH))) {
+ try {
+ controller.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
+ TreePath typePath =
info.getTrees().getPath(info.getCompilationUnit(), containingTopLevel);
+ TypeElement typeElement = (TypeElement)
info.getTrees().getElement(typePath);
+ for (VariableElement ve :
ElementFilter.fieldsIn(typeElement.getEnclosedElements())) {
+ TypeMirror type = ve.asType();
+ // System.Logger.class.getName() is
"java.lang.System$Logger", note '$',
+ // and "contentEquals" fails, so HACK! use litteral class
name.
+ if (type.getKind() == TypeKind.DECLARED &&
((TypeElement)((DeclaredType)type).asElement()).getQualifiedName().contentEquals(loggerFQN))
{
+ existingLogger = ve;
+ }
+ }
+ } catch(IOException ex) {
+ }
+ }
+
// finally, make the invocation
- ExpressionTree etExpression = make.MethodInvocation(
- Collections.<ExpressionTree>emptyList(),
- make.MemberSelect(
- useFQN ? make.Identifier(logger.toString()) :
make.QualIdent(logger),
- "getLogger"),
- Collections.<ExpressionTree>singletonList(arg));
- ExpressionTree levelExpression =
make.MemberSelect(make.QualIdent(level), "SEVERE");
-
- return
make.ExpressionStatement(make.MethodInvocation(Collections.<ExpressionTree>emptyList(),
make.MemberSelect(etExpression, "log"), Arrays.asList(levelExpression,
make.Literal(null), make.Identifier(name))));
- }
+ ExpressionTree etExpression;
+ if (existingLogger != null) {
+ etExpression = make.Identifier(existingLogger);
+ } else {
+ etExpression = make.MethodInvocation(
+ Collections.<ExpressionTree>emptyList(),
+ make.MemberSelect(
+ useFQN ? make.Identifier(loggerFactory.toString()) :
make.QualIdent(loggerFactory),
+ "getLogger"),
+ Collections.<ExpressionTree>singletonList(arg));
+ }
+ ExpressionTree levelExpression =
make.MemberSelect(make.QualIdent(level), levelName);
+ ExpressionTree nullMsgArg = isSystemLogger
+ ?
(ExpressionTree)org.netbeans.modules.java.hints.spiimpl.Utilities.parseAndAttribute(info,
"(String)null", null)
+ : make.Literal(null);
+ return
make.ExpressionStatement(make.MethodInvocation(Collections.<ExpressionTree>emptyList(),
make.MemberSelect(etExpression, "log"), Arrays.asList(levelExpression,
nullMsgArg, make.Identifier(name))));
+ }
+
private static StatementTree
createRethrowAsRuntimeExceptionStatement(WorkingCopy info, TreeMaker make,
String name) {
if
(!ErrorFixesFakeHint.isRethrowAsRuntimeException(ErrorFixesFakeHint.getPreferences(info.getFileObject(),
FixKind.SURROUND_WITH_TRY_CATCH))) {
return null;
}
-
+
TypeElement runtimeException =
info.getElements().getTypeElement("java.lang.RuntimeException");
-
+
if (runtimeException == null) {
return null;
}
-
+
ExpressionTree exceptionName = make.QualIdent(runtimeException);
StatementTree result = make.Throw(make.NewClass(null,
Collections.<ExpressionTree>emptyList(), exceptionName,
Arrays.asList(make.Identifier(name)), null));
-
+
Review Comment:
Nitpick: New whitespace introduced.
##########
java/java.editor/src/org/netbeans/modules/java/editor/codegen/LoggerGenerator.java:
##########
@@ -152,15 +164,66 @@ public void run(WorkingCopy copy) throws IOException {
}
}
+ public static String getBaseLoggerName() {
+ // // Undocumented feature/property subject to change/removal. Need a
UI.
+ // String name =
System.getProperty("LOGGER_GENERATOR_BASE_LOGGER_NAME");
+ // return name == null ? "LOG" : name;
+ return "LOG";
+ }
Review Comment:
I can accept, that this akin to the tab-vs-space or "the right IDE" wars,
but if we want to parametrize this, should this be project level configurable?
And for the wording I would suggest:
```suggestion
public static String getBaseLoggerName() {
// Preparation for a potential future configurability of the loggers
field name
return "LOG";
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists