JLS 14.21, недостижимые операторы - это раздел, в котором рассматриваются следующие вопросы:
Оператор if, независимо от того, имеет ли он другую часть, обрабатывается необычным образом. , По этой причине это обсуждается отдельно в конце этого раздела.
В конечном итоге это связано с тем, как обрабатывается условная компиляция. Рассмотрим этот метод:
public int foo() {
if (DEBUG) {
return 5;
}
}
Если DEBUG
равен static final boolean true;
, вы можете подумать, что компилятор должен быть достаточно умен, чтобы понять, что метод всегда будет возвращать 5
. Но если его изменить на false
, код больше не действителен.
Метод должен быть действительным для всех путей через метод без изменения исходного кода , что позволяет оптимизирующим компиляторам пропускать байт-код без модификаций исходного кода независимо от значения флага.
Сам конец связанной секции JLS подробно описан в деталях.
В пункте меню сценария XCode «Редактировать пользовательские сценарии» введите следующий сценарий:
#!/bin/bash
result=$( osascript << END
tell application "Xcode"
tell active project document
set projectPath to path as string
end tell
end tell
return projectPath
END
)
cd "$result"
/Developer/clangchecker/scan-build -k -V xcodebuild -configuration Debug -sdk iphonesimulator3.0
Очевидно, вам нужно будет изменить путь к вашей установке Clang и отрегулировать его версию. используемого SDK.
Не забудьте выполнить «Очистить все» непосредственно перед использованием сборки сканирования, иначе результаты могут быть неполными.
Я считаю, что переменная среды $ {PROJECT_DIR} - это то, что вам нужно для каталога проекта, в котором выполняется сценарий этапа сборки.
FYI, Xcode 3.2 (я полагаю, только Snow Leopard) включает в себя Clang Static Analyzer в пункте меню «Build and Analyze».
http://iosdevelopertips.com/xcode/static-code-analysis-clang-and-xcode-3-2.html
Одним из недостатков Xcode 3.2 (помимо того, что он работает только на Snow Leopard) является то, что Симуляторы v2.x, похоже, не работают - на самом деле, я видел сообщения, указывающие, что сборки v2.x вообще не поддерживаются.