All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.gradle.internal.action.InstantiatingAction Maven / Gradle / Ivy

There is a newer version: 8.6
Show newest version
/*
 * Copyright 2018 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.internal.action;

import org.gradle.api.Action;
import org.gradle.api.internal.ReusableAction;
import org.gradle.internal.Actions;
import org.gradle.internal.reflect.Instantiator;

import java.util.List;

public class InstantiatingAction
implements Action
{ private final ConfigurableRules
rules; private final Instantiator instantiator; private final ExceptionHandler
exceptionHandler; private final Action
[] reusableRules; @SuppressWarnings("unchecked") public InstantiatingAction(ConfigurableRules
rules, Instantiator instantiator, ExceptionHandler
exceptionHandler) { this.rules = rules; this.instantiator = instantiator; this.exceptionHandler = exceptionHandler; this.reusableRules = new Action[rules.getConfigurableRules().size()]; } public InstantiatingAction
withInstantiator(Instantiator instantiator) { return new InstantiatingAction
(rules, instantiator, exceptionHandler); } @Override public void execute(DETAILS target) { List> configurableRules = rules.getConfigurableRules(); int i = 0; for (ConfigurableRule
rule : configurableRules) { try { Action
instance = reusableRules[i]; if (!(instance instanceof ReusableAction)) { instance = instantiator.newInstance(rule.getRuleClass(), rule.getRuleParams().isolate()); // This second check is only done so that we can make the difference between an uninitialized rule (never seen before) and // a rule which is not reusable if (instance instanceof ReusableAction) { reusableRules[i] = instance; } else { reusableRules[i] = Actions.doNothing(); } } instance.execute(target); } catch (Throwable t) { exceptionHandler.handleException(target, t); } i++; } } public ConfigurableRules
getRules() { return rules; } public Instantiator getInstantiator() { return instantiator; } public interface ExceptionHandler { void handleException(U target, Throwable throwable); } }