###############################################################################
# Copyright (c) 2019 Mia-Software and others.
#
# This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
#     Unknown - initial API and implementation
###############################################################################
###############################################################################
# Copyright (c) 2010, 2018 Mia-Software
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v2.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v20.html
# 
# Contributors:
#    Fabien Giquel (Mia-Software) - initial API and implementation
#    Nicolas Guyomar (Mia-Software) - initial API and implementatio
#	 Fabien Giquel (Mia-Software) - Bug 533168 - (releng) OutOfMemory during quality postprocessing because large number of checkstyle warnings
# 
bin.includes = .,\
               model/,\
               META-INF/,\
               plugin.xml,\
               about.html,\
               javaToKdmShortcuts.facetSet,\
               javaCompositionShortcuts.querySet,\
               kdmToJavaShortcuts.facetSet,\
               filterJavaComposition.uiCustom,\
               OSGI-INF/
output.. = bin/
jars.compile.order = .
src.includes = about.html
source.. = src/,\
           src-gen/
