Replace Java based analyzer with Dart based analyzer when building SDK

* include analyzer dart files and snapshot in SDK
* modified bin/dartanalyzer to call dart based analyzer
* removed jar files in utils directory

BUG=dartbug.com/18289
R=ricow@google.com, scheglov@google.com

Review URL: https://codereview.chromium.org//240723006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35604 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
danrubel@google.com 2014-04-30 23:09:14 +00:00
parent 7d0b680f95
commit 521aef0d96
9 changed files with 245 additions and 146 deletions

View file

@ -12,7 +12,7 @@
'utils/compiler/compiler.gyp:dart2js',
'utils/pub/pub.gyp:pub',
'utils/dartfmt/dartfmt.gyp:dartfmt',
'editor/analyzer.gyp:analyzer',
'utils/dartanalyzer/dartanalyzer.gyp:dartanalyzer',
],
'actions': [
{
@ -27,7 +27,7 @@
'<(SHARED_INTERMEDIATE_DIR)/dart2js.dart.snapshot',
'<(SHARED_INTERMEDIATE_DIR)/utils_wrapper.dart.snapshot',
'<(SHARED_INTERMEDIATE_DIR)/pub.dart.snapshot',
'<(PRODUCT_DIR)/dartanalyzer/dartanalyzer.jar',
'<(SHARED_INTERMEDIATE_DIR)/dartanalyzer.dart.snapshot',
'<(SHARED_INTERMEDIATE_DIR)/dartfmt.dart.snapshot',
'tools/VERSION'
],

View file

@ -8,7 +8,7 @@
'target_name': 'most',
'type': 'none',
'dependencies': [
'analyzer',
'dartanalyzer',
'create_sdk',
'dart2js',
'editor',
@ -48,10 +48,10 @@
],
},
{
'target_name': 'analyzer',
'target_name': 'dartanalyzer',
'type': 'none',
'dependencies': [
'editor/analyzer.gyp:analyzer',
'utils/dartanalyzer/dartanalyzer.gyp:dartanalyzer',
],
},
{

View file

@ -1,9 +1,10 @@
#!/bin/bash --posix
#!/bin/bash
# Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
set -e
# Run dartanalyzer.dart on the Dart VM. This script assumes the Dart SDK's
# directory structure.
function follow_links() {
file="$1"
@ -18,73 +19,10 @@ function follow_links() {
PROG_NAME="$(follow_links "$BASH_SOURCE")"
# Handle the case where dart-sdk/bin has been symlinked to.
SCRIPT_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
DART_ANALYZER_HOME="$(cd "${SCRIPT_DIR%/*}" ; pwd -P)"
SNAPSHOT="$BIN_DIR/snapshots/dartanalyzer.dart.snapshot"
FOUND_BATCH=0
FOUND_SDK=0
for ARG in "$@"
do
case $ARG in
-batch|--batch)
FOUND_BATCH=1
;;
--dart-sdk)
FOUND_SDK=1
;;
*)
;;
esac
done
DART_SDK=""
if [ $FOUND_SDK -eq 0 ] ; then
if [ -f "$DART_ANALYZER_HOME/lib/core/core.dart" ] ; then
DART_SDK=(--dart-sdk "$DART_ANALYZER_HOME")
else
DART_SDK_HOME=$(dirname "$DART_ANALYZER_HOME")/dart-sdk
if [ -d "$DART_SDK_HOME" ] ; then
DART_SDK=(--dart-sdk "$DART_SDK_HOME")
else
DART_SDK_HOME=$(dirname "$DART_SDK_HOME")/dart-sdk
if [ -d "$DART_SDK_HOME" ] ; then
DART_SDK=(--dart-sdk "$DART_SDK_HOME")
else
echo "Couldn't find Dart SDK. Specify with --dart-sdk cmdline argument"
fi
fi
fi
fi
if [ -f "$DART_SDK_HOME/util/dartanalyzer/dartanalyzer.jar" ] ; then
DART_ANALYZER_LIBS=$DART_SDK_HOME/util/dartanalyzer
elif [ -f "$DART_ANALYZER_HOME/util/dartanalyzer/dartanalyzer.jar" ] ; then
DART_ANALYZER_LIBS=$DART_ANALYZER_HOME/util/dartanalyzer
else
echo "Configuration problem. Couldn't find dartanalyzer.jar."
exit 1
fi
if [ -x /usr/libexec/java_home ]; then
export JAVA_HOME=$(/usr/libexec/java_home -v '1.6+')
fi
EXTRA_JVMARGS="-Xss2M "
OS=`uname | tr "[A-Z]" "[a-z]"`
if [ "$OS" == "darwin" ] ; then
# Bump up the heap on Mac VMs, some of which default to 128M or less.
# Users can specify DART_JVMARGS in the environment to override this
# setting.
EXTRA_JVMARGS+=" -Xmx512M -client "
else
# On other architectures
# -batch invocations will do better with a server vm
# invocations for analyzing a single file do better with a client vm
if [ $FOUND_BATCH -eq 0 ] ; then
EXTRA_JVMARGS+=" -client "
fi
fi
exec java $EXTRA_JVMARGS $DART_JVMARGS -ea -jar \
"$DART_ANALYZER_LIBS/dartanalyzer.jar" "${DART_SDK[@]}" $@
# We are running the snapshot in the built SDK.
DART="$BIN_DIR/dart"
exec "$DART" "$SNAPSHOT" "$@"

View file

@ -1,57 +1,44 @@
@echo off
rem Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
rem for details. All rights reserved. Use of this source code is governed by a
rem BSD-style license that can be found in the LICENSE file.
set SCRIPT_DIR=%~dp0
if %SCRIPT_DIR:~-1%==\ set SCRIPT_DIR=%SCRIPT_DIR:~0,-1%
for %%I in ("%SCRIPT_DIR%\..") do set "DART_ANALYZER_HOME=%%~fI"
if %DART_ANALYZER_HOME:~-1%==\ set DART_ANALYZER_HOME=%DART_ANALYZER_HOME:~0,-1%
set FOUND_BATCH=0
set FOUND_SDK=0
for %%a in (%*) do (
if [%%a] == [--batch] set FOUND_BATCH=1
if [%%a] == [-b] set FOUND_BATCH=1
if [%%a] == [--dart-sdk] set FOUND_SDK=1
)
setlocal EnableDelayedExpansion
set DART_SDK=""
if [%FOUND_SDK%] == [0] (
if exist "%DART_ANALYZER_HOME%\lib\core\core.dart" (
set DART_SDK=--dart-sdk "%DART_ANALYZER_HOME%"
) else (
for /f %%i in ('echo %DART_ANALYZER_HOME%') do set DART_SDK_HOME=%%~dpi\dart-sdk
if exist "!DART_SDK_HOME!" (
set DART_SDK=--dart-sdk !DART_SDK_HOME!
) else (
for /f %%j in ('call echo !DART_SDK_HOME!') do set DART_SDK_HOME=%%~dpj\dart-sdk
if exist "!DART_SDK_HOME!" (
set DART_SDK=--dart-sdk !DART_SDK_HOME!
) else (
echo Couldn't find Dart SDK. Specify with --dart-sdk cmdline argument
)
)
)
)
endlocal & set DART_SDK=%DART_SDK% & set DART_SDK_HOME=%DART_SDK_HOME%
if exist "%DART_SDK_HOME%\util\dartanalyzer\dartanalyzer.jar" (
set DART_ANALYZER_LIBS=%DART_SDK_HOME%\util\dartanalyzer
) else if exist "%DART_ANALYZER_HOME%\util\dartanalyzer\dartanalyzer.jar" (
set DART_ANALYZER_LIBS=%DART_ANALYZER_HOME%\util\dartanalyzer
) else (
echo Configuration problem. Couldn't find dartanalyzer.jar.
exit /b 1
)
setlocal EnableDelayedExpansion
set EXTRA_JVMARGS=-Xss2M
if [%FOUND_BATCH%] == [1] (
set EXTRA_JVMARGS=!EXTRA_JVMARGS! -client
)
endlocal & set "EXTRA_JVMARGS=%EXTRA_JVMARGS%"
java %EXTRA_JVMARGS% %DART_JVMARGS% -ea -jar "%DART_ANALYZER_LIBS%\dartanalyzer.jar" %DART_SDK% %*
@echo off
REM Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
REM for details. All rights reserved. Use of this source code is governed by a
REM BSD-style license that can be found in the LICENSE file.
setlocal
rem Handle the case where dart-sdk/bin has been symlinked to.
set DIR_NAME_WITH_SLASH=%~dp0
set DIR_NAME=%DIR_NAME_WITH_SLASH:~0,-1%%
call :follow_links "%DIR_NAME%", RETURNED_BIN_DIR
rem Get rid of surrounding quotes.
for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi
set DART=%BIN_DIR%\dart
set SNAPSHOT=%BIN_DIR%\snapshots\dartanalyzer.dart.snapshot
"%DART%" "%SNAPSHOT%" %*
endlocal
exit /b %errorlevel%
rem Follow the symbolic links (junctions points) using `dir to determine the
rem canonical path. Output with a link looks something like this
rem
rem 01/03/2013 10:11 PM <JUNCTION> abc def
rem [c:\dart_bleeding\dart-repo.9\dart\build\ReleaseIA32\dart-sdk]
rem
rem So in the output of 'dir /a:l "targetdir"' we are looking for a filename
rem surrounded by right angle bracket and left square bracket. Once we get
rem the filename, which is name of the link, we recursively follow that.
:follow_links
setlocal
for %%i in (%1) do set result=%%~fi
set current=
for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^
^| find "> %~n1 ["`) do (
set current=%%i
)
if not "%current%"=="" call :follow_links "%current%", result
endlocal & set %~2=%result%
goto :eof
:end

90
sdk/bin/dartanalyzer_java Executable file
View file

@ -0,0 +1,90 @@
#!/bin/bash --posix
# Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
set -e
function follow_links() {
file="$1"
while [ -h "$file" ]; do
# On Mac OS, readlink -f doesn't work.
file="$(readlink "$file")"
done
echo "$file"
}
# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
PROG_NAME="$(follow_links "$BASH_SOURCE")"
# Handle the case where dart-sdk/bin has been symlinked to.
SCRIPT_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
DART_ANALYZER_HOME="$(cd "${SCRIPT_DIR%/*}" ; pwd -P)"
FOUND_BATCH=0
FOUND_SDK=0
for ARG in "$@"
do
case $ARG in
-batch|--batch)
FOUND_BATCH=1
;;
--dart-sdk)
FOUND_SDK=1
;;
*)
;;
esac
done
DART_SDK=""
if [ $FOUND_SDK -eq 0 ] ; then
if [ -f "$DART_ANALYZER_HOME/lib/core/core.dart" ] ; then
DART_SDK=(--dart-sdk "$DART_ANALYZER_HOME")
else
DART_SDK_HOME=$(dirname "$DART_ANALYZER_HOME")/dart-sdk
if [ -d "$DART_SDK_HOME" ] ; then
DART_SDK=(--dart-sdk "$DART_SDK_HOME")
else
DART_SDK_HOME=$(dirname "$DART_SDK_HOME")/dart-sdk
if [ -d "$DART_SDK_HOME" ] ; then
DART_SDK=(--dart-sdk "$DART_SDK_HOME")
else
echo "Couldn't find Dart SDK. Specify with --dart-sdk cmdline argument"
fi
fi
fi
fi
if [ -f "$DART_SDK_HOME/util/dartanalyzer/dartanalyzer.jar" ] ; then
DART_ANALYZER_LIBS=$DART_SDK_HOME/util/dartanalyzer
elif [ -f "$DART_ANALYZER_HOME/util/dartanalyzer/dartanalyzer.jar" ] ; then
DART_ANALYZER_LIBS=$DART_ANALYZER_HOME/util/dartanalyzer
else
echo "Configuration problem. Couldn't find dartanalyzer.jar."
exit 1
fi
if [ -x /usr/libexec/java_home ]; then
export JAVA_HOME=$(/usr/libexec/java_home -v '1.6+')
fi
EXTRA_JVMARGS="-Xss2M "
OS=`uname | tr "[A-Z]" "[a-z]"`
if [ "$OS" == "darwin" ] ; then
# Bump up the heap on Mac VMs, some of which default to 128M or less.
# Users can specify DART_JVMARGS in the environment to override this
# setting.
EXTRA_JVMARGS+=" -Xmx512M -client "
else
# On other architectures
# -batch invocations will do better with a server vm
# invocations for analyzing a single file do better with a client vm
if [ $FOUND_BATCH -eq 0 ] ; then
EXTRA_JVMARGS+=" -client "
fi
fi
exec java $EXTRA_JVMARGS $DART_JVMARGS -ea -jar \
"$DART_ANALYZER_LIBS/dartanalyzer.jar" "${DART_SDK[@]}" $@

View file

@ -0,0 +1,57 @@
@echo off
rem Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
rem for details. All rights reserved. Use of this source code is governed by a
rem BSD-style license that can be found in the LICENSE file.
set SCRIPT_DIR=%~dp0
if %SCRIPT_DIR:~-1%==\ set SCRIPT_DIR=%SCRIPT_DIR:~0,-1%
for %%I in ("%SCRIPT_DIR%\..") do set "DART_ANALYZER_HOME=%%~fI"
if %DART_ANALYZER_HOME:~-1%==\ set DART_ANALYZER_HOME=%DART_ANALYZER_HOME:~0,-1%
set FOUND_BATCH=0
set FOUND_SDK=0
for %%a in (%*) do (
if [%%a] == [--batch] set FOUND_BATCH=1
if [%%a] == [-b] set FOUND_BATCH=1
if [%%a] == [--dart-sdk] set FOUND_SDK=1
)
setlocal EnableDelayedExpansion
set DART_SDK=""
if [%FOUND_SDK%] == [0] (
if exist "%DART_ANALYZER_HOME%\lib\core\core.dart" (
set DART_SDK=--dart-sdk "%DART_ANALYZER_HOME%"
) else (
for /f %%i in ('echo %DART_ANALYZER_HOME%') do set DART_SDK_HOME=%%~dpi\dart-sdk
if exist "!DART_SDK_HOME!" (
set DART_SDK=--dart-sdk !DART_SDK_HOME!
) else (
for /f %%j in ('call echo !DART_SDK_HOME!') do set DART_SDK_HOME=%%~dpj\dart-sdk
if exist "!DART_SDK_HOME!" (
set DART_SDK=--dart-sdk !DART_SDK_HOME!
) else (
echo Couldn't find Dart SDK. Specify with --dart-sdk cmdline argument
)
)
)
)
endlocal & set DART_SDK=%DART_SDK% & set DART_SDK_HOME=%DART_SDK_HOME%
if exist "%DART_SDK_HOME%\util\dartanalyzer\dartanalyzer.jar" (
set DART_ANALYZER_LIBS=%DART_SDK_HOME%\util\dartanalyzer
) else if exist "%DART_ANALYZER_HOME%\util\dartanalyzer\dartanalyzer.jar" (
set DART_ANALYZER_LIBS=%DART_ANALYZER_HOME%\util\dartanalyzer
) else (
echo Configuration problem. Couldn't find dartanalyzer.jar.
exit /b 1
)
setlocal EnableDelayedExpansion
set EXTRA_JVMARGS=-Xss2M
if [%FOUND_BATCH%] == [1] (
set EXTRA_JVMARGS=!EXTRA_JVMARGS! -client
)
endlocal & set "EXTRA_JVMARGS=%EXTRA_JVMARGS%"
java %EXTRA_JVMARGS% %DART_JVMARGS% -ea -jar "%DART_ANALYZER_LIBS%\dartanalyzer.jar" %DART_SDK% %*

View file

@ -21,6 +21,7 @@
# ......pub
# ......snapshots/
# ........dart2js.dart.snapshot
# ........dartanalyzer.dart.snapshot
# ........dartfmt.dart.snapshot
# ........pub.dart.snapshot
# ........utils_wrapper.dart.snapshot
@ -44,9 +45,6 @@
# ......mirrors/
# ......typed_data/
# ....util/
# ......dartanalyzer/
# ........dartanalyzer.jar
# ........(third-party libraries for dart_analyzer)
# ......(more will come here)
@ -114,7 +112,8 @@ def CopyDartScripts(home, sdk_root):
def CopySnapshots(snapshots, sdk_root):
for snapshot in ['dart2js', 'dartfmt', 'utils_wrapper', 'pub']:
for snapshot in ['dart2js', 'dartanalyzer', 'dartfmt', 'utils_wrapper',
'pub']:
snapshot += '.dart.snapshot'
copyfile(join(snapshots, snapshot),
join(sdk_root, 'bin', 'snapshots', snapshot))
@ -221,16 +220,6 @@ def Main(argv):
UTIL = join(SDK_tmp, 'util')
os.makedirs(UTIL)
# Create and copy dartanalyzer into 'util'
DARTANALYZER_SRC = join(HOME, build_dir, 'dartanalyzer')
DARTANALYZER_DEST = join(UTIL, 'dartanalyzer')
os.makedirs(DARTANALYZER_DEST)
jarFiles = glob.glob(join(DARTANALYZER_SRC, '*.jar'))
for jarFile in jarFiles:
copyfile(jarFile, join(DARTANALYZER_DEST, os.path.basename(jarFile)))
RESOURCE = join(SDK_tmp, 'lib', '_internal', 'pub', 'asset')
os.makedirs(os.path.dirname(RESOURCE))
copytree(join(HOME, 'sdk', 'lib', '_internal', 'pub', 'asset'),

2
utils/dartanalyzer/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/dartanalyzer.Makefile
/dartanalyzer.target.mk

View file

@ -0,0 +1,36 @@
# Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
{
'targets': [
{
'target_name': 'dartanalyzer',
'type': 'none',
'dependencies': [
'../../runtime/dart-runtime.gyp:dart',
'../../pkg/pkg.gyp:pkg_packages',
],
'actions': [
{
'action_name': 'generate_dartanalyzer_snapshot',
'inputs': [
'<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)dart<(EXECUTABLE_SUFFIX)',
'../../sdk/lib/_internal/libraries.dart',
'<(SHARED_INTERMEDIATE_DIR)/packages.stamp',
'<!@(["python", "../../tools/list_files.py", "\\.dart$", "../../pkg/analyzer"])',
],
'outputs': [
'<(SHARED_INTERMEDIATE_DIR)/dartanalyzer.dart.snapshot',
],
'action': [
'<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)dart<(EXECUTABLE_SUFFIX)',
'--snapshot=<(SHARED_INTERMEDIATE_DIR)/dartanalyzer.dart.snapshot',
'--package-root=<(PRODUCT_DIR)/packages/',
'../../pkg/analyzer/bin/analyzer.dart',
],
},
],
},
],
}