aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts/setup-intellij.sh
blob: a0662e9beb54bad6cf3ed47356b8a68ac352badd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/bin/bash
# Copyright 2015 Google Inc. All rights reserved.
#
# 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.
#
# Generates an IntelliJ project in Bazel.

set -o errexit
cd $(dirname "$0")
cd ..

mkdir -p .idea/
cp -R scripts/resources/idea/*.* .idea/
source scripts/get_all_bazel_paths.sh


readonly iml_file=bazel.iml
# The content root output/classes is used for generated sources, specifically
# AutoValue.
cat > $iml_file <<EOH
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager">
    <output url="file://\$MODULE_DIR\$/${IDE_OUTPUT_PATH}" />
    <exclude-output />
    <orderEntry type="inheritedJdk" />
    <content url="file://\$MODULE_DIR\$/output/classes">
      <sourceFolder url="file://\$MODULE_DIR\$/output/classes" isTestSource="false" />
      <excludeFolder url="file://\$MODULE_DIR\$/output/classes/org" />
    </content>
    <content url="file://\$MODULE_DIR\$/src">
EOH

for source in ${JAVA_PATHS}; do
     if [[ $source == *"javatests" ]]; then
       is_test_source="true"
     elif [[ $source == *"test/java" ]]; then
       is_test_source="true"
     else
       is_test_source="false"
     fi
     echo '      <sourceFolder url="file://$MODULE_DIR$/'"${source}\" isTestSource=\"${is_test_source}\" />" >> $iml_file
done
cat >> $iml_file <<'EOF'
    </content>
    <content url="file://$MODULE_DIR$/third_party/java">
EOF

THIRD_PARTY_JAVA_PATHS="$(ls third_party/java | sort -u | sed -e 's%$%/java%')"

for third_party_java_path in ${THIRD_PARTY_JAVA_PATHS}; do
  echo '      <sourceFolder url="file://$MODULE_DIR$/third_party/java/'${third_party_java_path}'" isTestSource="false" />' >> $iml_file
done
cat >> $iml_file <<'EOF'
    </content>
    <orderEntry type="sourceFolder" forTests="false" />
EOF

function write_jar_entry() {
  local jar_file=$1
  if [[ $# > 1 ]]; then
    local source_path=$2
  else
    local source_path=""
  fi
  local readonly basename=${jar_file##*/}
    cat >> $iml_file <<EOF
      <orderEntry type="module-library">
        <library name="${basename}">
          <CLASSES>
            <root url="jar://\$MODULE_DIR\$/${jar_file}!/" />
          </CLASSES>
          <JAVADOC />
EOF
  if [[ -z "${source_path}" ]]; then
    echo "          <SOURCES />" >> $iml_file
  else
    cat >> $iml_file <<EOF
          <SOURCES>
            <root url="jar:/\$MODULE_DIR\$/${source_path}!/" />
          </SOURCES>
EOF
  fi
  cat >> $iml_file <<'EOF'
      </library>
    </orderEntry>
EOF
}

for jar in ${THIRD_PARTY_JAR_PATHS}; do
  write_jar_entry $jar
done

for source_path in ${PROTOBUF_PATHS}; do
  write_jar_entry ${source_path%.proto_output} $source_path
done

for path_pair in ${GENERATED_PATHS}; do
  write_jar_entry ${path_pair//:/ }
done

write_jar_entry tools/jdk/jdk/lib/tools.jar
cat >> $iml_file <<'EOF'
  </component>
</module>
EOF