/*
 * Copyright 2017 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.gradle.api.internal.tasks.properties;

import org.gradle.api.tasks.FileNormalizer;
import org.gradle.internal.fingerprint.DirectorySensitivity;
import org.gradle.internal.fingerprint.LineEndingSensitivity;
import org.gradle.internal.scan.UsedByScanPlugin;

import javax.annotation.Nullable;

/**
 * Visits properties of beans which are inputs, outputs, destroyables or local state.
 */
@UsedByScanPlugin("test-distribution")
public interface PropertyVisitor {
    void visitInputFileProperty(String propertyName, boolean optional, boolean skipWhenEmpty, DirectorySensitivity directorySensitivity, LineEndingSensitivity lineEndingSensitivity, boolean incremental, @Nullable Class<? extends FileNormalizer> fileNormalizer, PropertyValue value, InputFilePropertyType filePropertyType, ContentTracking contentTracking);

    void visitInputProperty(String propertyName, PropertyValue value, boolean optional);

    void visitOutputFileProperty(String propertyName, boolean optional, ContentTracking contentTracking, PropertyValue value, OutputFilePropertyType filePropertyType);

    void visitDestroyableProperty(Object value);

    void visitLocalStateProperty(Object value);

    @UsedByScanPlugin("test-distribution")
    class Adapter implements PropertyVisitor {
        @Override
        public void visitInputFileProperty(String propertyName, boolean optional, boolean skipWhenEmpty, DirectorySensitivity directorySensitivity, LineEndingSensitivity lineEndingSensitivity, boolean incremental, @Nullable Class<? extends FileNormalizer> fileNormalizer, PropertyValue value, InputFilePropertyType filePropertyType, ContentTracking contentTracking) {
            visitInputFileProperty(propertyName, optional, skipWhenEmpty, directorySensitivity, lineEndingSensitivity, incremental, fileNormalizer, value, filePropertyType);
        }

        /**
         * @deprecated Retained for compatibility with test distribution.
         */
        @Deprecated
        @SuppressWarnings("unused")
        @UsedByScanPlugin("test-distribution")
        protected void visitInputFileProperty(String propertyName, boolean optional, boolean skipWhenEmpty, DirectorySensitivity directorySensitivity, LineEndingSensitivity lineEndingSensitivity, boolean incremental, @Nullable Class<? extends FileNormalizer> fileNormalizer, PropertyValue value, InputFilePropertyType filePropertyType) {
        }

        @Override
        public void visitInputProperty(String propertyName, PropertyValue value, boolean optional) {
        }

        @Override
        @UsedByScanPlugin("test-distribution")
        public void visitOutputFileProperty(String propertyName, boolean optional, ContentTracking contentTracking, PropertyValue value, OutputFilePropertyType filePropertyType) {
            visitOutputFileProperty(propertyName, optional, value, filePropertyType);
        }

        /**
         * @deprecated Retained for compatibility with test distribution.
         */
        @Deprecated
        @SuppressWarnings("unused")
        @UsedByScanPlugin("test-distribution")
        protected void visitOutputFileProperty(String propertyName, boolean optional, PropertyValue value, OutputFilePropertyType filePropertyType) {
        }

        @Override
        public void visitDestroyableProperty(Object value) {
        }

        @Override
        public void visitLocalStateProperty(Object value) {
        }
    }
}

@@ -1883,24 +1883,71 @@
 tyVisitor %7B%0A
+        @UsedByScanPlugin(%22test-distribution%22)%0A
         @Ove
@@ -2332,1492 +2332,320 @@
     
-    visitInputFileProperty(propertyName, optional, skipWhenEmpty, directorySensitivity, lineEndingSensitivity, incremental, fileNormalizer, value, filePropertyType);%0A        %7D%0A%0A        /**%0A         * @deprecated Retained for compatibility with test distribution.%0A         */%0A        @Deprecated%0A        @SuppressWarnings(%22unused%22)%0A        @UsedByScanPlugin(%22test-distribution%22)%0A        protected void visitInputFileProperty(String propertyName, boolean optional, boolean skipWhenEmpty, DirectorySensitivity directorySensitivity, LineEndingSensitivity lineEndingSensitivity, boolean incremental, @Nullable Class%3C? extends FileNormalizer%3E fileNormalizer, PropertyValue value, InputFilePropertyType filePropertyType) %7B%0A        %7D%0A%0A        @Override%0A        public void visitInputProperty(String propertyName, PropertyValue value, boolean optional) %7B%0A        %7D%0A%0A        @Override%0A        @UsedByScanPlugin(%22test-distribution%22)%0A        public void visitOutputFileProperty(String propertyName, boolean optional, ContentTracking contentTracking, PropertyValue value, OutputFilePropertyType filePropertyType) %7B%0A            visitOutputFileProperty(propertyName, optional, value, filePropertyType);%0A        %7D%0A%0A        /**%0A         * @deprecated Retained for compatibility with test distribution.%0A         */%0A        @Deprecated%0A        @SuppressWarnings(%22unused%22)%0A        @UsedByScanPlugin(%22test-distribution%22)%0A        protected void visitOutputFileProperty(String propertyName, boolean optional
+%7D%0A%0A        @Override%0A        public void visitInputProperty(String propertyName, PropertyValue value, boolean optional) %7B%0A        %7D%0A%0A        @Override%0A        @UsedByScanPlugin(%22test-distribution%22)%0A        public void visitOutputFileProperty(String propertyName, boolean optional, ContentTracking contentTracking
 , Pr

Revert "Keep test distribution plugin compatible with untracked task properties"