I can change it for the former (you need to use a string array, though),
the latter is only possible in Java 1.8+.

On 21 February 2016 at 22:22, Remko Popma <[email protected]> wrote:

> Can an annotation have multiple values?
> @PerformanceSensitive("AllocationFree", "CriticalPath")
>
> Or can a method be annotated with the same annotation appear multiple
> times?
> Both @PerformanceSensitive("AllocationFree")
> and @PerformanceSensitive("CriticalPath")?
>
>
> On Monday, 22 February 2016, Remko Popma <[email protected]> wrote:
>
>> I like @PerformanceSensitive very much!
>>
>> I can then see specific variations like
>> @PerformanceSensitive("InlineSize")
>> @PerformanceSensitive("AllocationFree")
>>
>>
>>
>> Sent from my iPhone
>>
>> On 2016/02/22, at 12:48, Gary Gregory <[email protected]> wrote:
>>
>> Well, a method can be on the critical path and not have been
>> hand-optimized either because it is already as fast as can be or we have
>> not gotten around to it (which make you want to have a @NeedsOptimization,
>> rabbit hole warning!). So we could have both. Some methods would
>> be @CriticalPath, and some both @CriticalPath and @HandOptimized. But you
>> would not have just @HandOptimized or if you did it would
>> imply @CriticalPath. which is a bit too clever ....
>>
>> Gary
>>
>> On Sun, Feb 21, 2016 at 7:43 PM, Matt Sicker <[email protected]> wrote:
>>
>>> Those both sound better, but I can't decide on which.
>>>
>>> On 21 February 2016 at 21:32, Gary Gregory <[email protected]>
>>> wrote:
>>>
>>>> I wonder if @CriticalPath or @HandOptimized would convey better what we
>>>> are trying to express?
>>>>
>>>> Gary
>>>>
>>>>
>>>> ---------- Forwarded message ----------
>>>> From: <[email protected]>
>>>> Date: Sun, Feb 21, 2016 at 7:02 PM
>>>> Subject: logging-log4j2 git commit: Add PerformanceSensitive annotation.
>>>> To: [email protected]
>>>>
>>>>
>>>> Repository: logging-log4j2
>>>> Updated Branches:
>>>>   refs/heads/master f884234a8 -> 4aa7df826
>>>>
>>>>
>>>> Add PerformanceSensitive annotation.
>>>>
>>>>
>>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>> Commit:
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4aa7df82
>>>> Tree:
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4aa7df82
>>>> Diff:
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4aa7df82
>>>>
>>>> Branch: refs/heads/master
>>>> Commit: 4aa7df826de7e359ac3bde98597fe5ca6e4b5901
>>>> Parents: f884234
>>>> Author: Matt Sicker <[email protected]>
>>>> Authored: Sun Feb 21 21:02:51 2016 -0600
>>>> Committer: Matt Sicker <[email protected]>
>>>> Committed: Sun Feb 21 21:02:51 2016 -0600
>>>>
>>>> ----------------------------------------------------------------------
>>>>  .../log4j/util/PerformanceSensitive.java        | 29
>>>> ++++++++++++++++++++
>>>>  .../logging/log4j/util/ReflectionUtil.java      |  5 ++++
>>>>  .../log4j/core/config/AppenderControl.java      |  4 +++
>>>>  .../core/config/AppenderControlArraySet.java    |  8 ++++--
>>>>  4 files changed, 43 insertions(+), 3 deletions(-)
>>>> ----------------------------------------------------------------------
>>>>
>>>>
>>>>
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>>> ----------------------------------------------------------------------
>>>> diff --git
>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>>> new file mode 100644
>>>> index 0000000..3fbb058
>>>> --- /dev/null
>>>> +++
>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>>> @@ -0,0 +1,29 @@
>>>> +/*
>>>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>>>> + * contributor license agreements. See the NOTICE file distributed with
>>>> + * this work for additional information regarding copyright ownership.
>>>> + * The ASF licenses this file to You 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.apache.logging.log4j.util;
>>>> +
>>>> +/**
>>>> + * Indicates that a particular annotated construct was written with
>>>> certain performance constraints in mind that
>>>> + * should be considered when modifying or testing.
>>>> + *
>>>> + * @since 2.6
>>>> + */
>>>> +public @interface PerformanceSensitive {
>>>> +    /** Description of why this is written the way it is. */
>>>> +    String value() default "";
>>>> +}
>>>>
>>>>
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>>> ----------------------------------------------------------------------
>>>> diff --git
>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>>> index 6e7ce4a..dec2350 100644
>>>> ---
>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>>> +++
>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>>> @@ -117,6 +117,7 @@ public final class ReflectionUtil {
>>>>      // (MS) I believe this would work without any modifications
>>>> elsewhere, but I could be wrong
>>>>
>>>>      // migrated from ReflectiveCallerClassUtility
>>>> +    @PerformanceSensitive
>>>>      public static Class<?> getCallerClass(final int depth) {
>>>>          if (depth < 0) {
>>>>              throw new
>>>> IndexOutOfBoundsException(Integer.toString(depth));
>>>> @@ -193,11 +194,13 @@ public final class ReflectionUtil {
>>>>      }
>>>>
>>>>      // migrated from ClassLoaderContextSelector
>>>> +    @PerformanceSensitive
>>>>      public static Class<?> getCallerClass(final String fqcn) {
>>>>          return getCallerClass(fqcn, Strings.EMPTY);
>>>>      }
>>>>
>>>>      // migrated from Log4jLoggerFactory
>>>> +    @PerformanceSensitive
>>>>      public static Class<?> getCallerClass(final String fqcn, final
>>>> String pkg) {
>>>>          if (supportsFastReflection()) {
>>>>              boolean next = false;
>>>> @@ -227,6 +230,7 @@ public final class ReflectionUtil {
>>>>      }
>>>>
>>>>      // added for use in LoggerAdapter implementations mainly
>>>> +    @PerformanceSensitive
>>>>      public static Class<?> getCallerClass(final Class<?> anchor) {
>>>>          if (supportsFastReflection()) {
>>>>              boolean next = false;
>>>> @@ -270,6 +274,7 @@ public final class ReflectionUtil {
>>>>      }
>>>>
>>>>      // migrated from ThrowableProxy
>>>> +    @PerformanceSensitive
>>>>      public static Stack<Class<?>> getCurrentStackTrace() {
>>>>          // benchmarks show that using the SecurityManager is much
>>>> faster than looping through getCallerClass(int)
>>>>          if (SECURITY_MANAGER != null) {
>>>>
>>>>
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>>> ----------------------------------------------------------------------
>>>> diff --git
>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>>> index f65011d..175c9e1 100644
>>>> ---
>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>>> +++
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>>> @@ -25,6 +25,7 @@ import org.apache.logging.log4j.core.LogEvent;
>>>>  import org.apache.logging.log4j.core.appender.AppenderLoggingException;
>>>>  import org.apache.logging.log4j.core.filter.AbstractFilterable;
>>>>  import org.apache.logging.log4j.core.filter.Filterable;
>>>> +import org.apache.logging.log4j.util.PerformanceSensitive;
>>>>
>>>>  /**
>>>>   * Wraps an {@link Appender} with details an appender implementation
>>>> shouldn't need to know about.
>>>> @@ -88,14 +89,17 @@ public class AppenderControl extends
>>>> AbstractFilterable {
>>>>          return isFilteredByAppenderControl(event) ||
>>>> isFilteredByLevel(event) || isRecursiveCall();
>>>>      }
>>>>
>>>> +    @PerformanceSensitive
>>>>      private boolean isFilteredByAppenderControl(final LogEvent event) {
>>>>          return getFilter() != null && Filter.Result.DENY ==
>>>> getFilter().filter(event);
>>>>      }
>>>>
>>>> +    @PerformanceSensitive
>>>>      private boolean isFilteredByLevel(final LogEvent event) {
>>>>          return level != null && intLevel < event.getLevel().intLevel();
>>>>      }
>>>>
>>>> +    @PerformanceSensitive
>>>>      private boolean isRecursiveCall() {
>>>>          if (recursive.get() != null) {
>>>>              appenderErrorHandlerMessage("Recursive call to appender ");
>>>>
>>>>
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>>> ----------------------------------------------------------------------
>>>> diff --git
>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>>> index 78a42b3..d30ce32 100644
>>>> ---
>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>>> +++
>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>>> @@ -16,17 +16,19 @@
>>>>   */
>>>>  package org.apache.logging.log4j.core.config;
>>>>
>>>> -import org.apache.logging.log4j.core.Appender;
>>>> -
>>>>  import java.util.Arrays;
>>>>  import java.util.HashMap;
>>>>  import java.util.Map;
>>>>  import java.util.Objects;
>>>>  import java.util.concurrent.atomic.AtomicReference;
>>>>
>>>> +import org.apache.logging.log4j.core.Appender;
>>>> +import org.apache.logging.log4j.util.PerformanceSensitive;
>>>> +
>>>>  /**
>>>>   * Data structure with similar semantics to CopyOnWriteArraySet, but
>>>> giving direct access to the underlying array.
>>>>   */
>>>> +@PerformanceSensitive
>>>>  public class AppenderControlArraySet {
>>>>      private final AtomicReference<AppenderControl[]> appenderArray =
>>>> new AtomicReference<>(new AppenderControl[0]);
>>>>
>>>> @@ -117,4 +119,4 @@ public class AppenderControlArraySet {
>>>>      public AppenderControl[] get() {
>>>>          return appenderArray.get();
>>>>      }
>>>> -}
>>>> \ No newline at end of file
>>>> +}
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> E-Mail: [email protected] | [email protected]
>>>> Java Persistence with Hibernate, Second Edition
>>>> <http://www.manning.com/bauer3/>
>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>> Blog: http://garygregory.wordpress.com
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>>>
>>>
>>>
>>>
>>> --
>>> Matt Sicker <[email protected]>
>>>
>>
>>
>>
>> --
>> E-Mail: [email protected] | [email protected]
>> Java Persistence with Hibernate, Second Edition
>> <http://www.manning.com/bauer3/>
>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> Spring Batch in Action <http://www.manning.com/templier/>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>>


-- 
Matt Sicker <[email protected]>

Reply via email to