mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-118970 (preparation, cleanup, minor optimization)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -13,11 +13,10 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.intellij.lang.java;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.codeInsight.documentation.DocumentationManager;
|
||||
import com.intellij.codeInsight.documentation.DocumentationManagerProtocol;
|
||||
import com.intellij.codeInsight.documentation.PlatformDocumentationUtil;
|
||||
import com.intellij.codeInsight.editorActions.CodeDocumentationUtil;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocExternalFilter;
|
||||
@@ -31,10 +30,11 @@ import com.intellij.lang.documentation.CompositeDocumentationProvider;
|
||||
import com.intellij.lang.documentation.ExternalDocumentationProvider;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.project.IndexNotReadyException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -49,12 +49,12 @@ import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.javadoc.PsiDocTag;
|
||||
import com.intellij.psi.util.PsiFormatUtil;
|
||||
import com.intellij.psi.util.PsiFormatUtilBase;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -157,7 +157,7 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
}
|
||||
}
|
||||
else {
|
||||
final Module module = ModuleUtil.findModuleForPsiElement(file);
|
||||
final Module module = ModuleUtilCore.findModuleForPsiElement(file);
|
||||
if (module != null) {
|
||||
buffer.append('[').append(module.getName()).append("] ");
|
||||
}
|
||||
@@ -533,7 +533,7 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getMethodCandidateInfo(PsiMethodCallExpression expr) {
|
||||
private static String getMethodCandidateInfo(PsiMethodCallExpression expr) {
|
||||
final PsiResolveHelper rh = JavaPsiFacade.getInstance(expr.getProject()).getResolveHelper();
|
||||
final CandidateInfo[] candidates = rh.getReferencedMethodCandidates(expr, true);
|
||||
final String text = expr.getText();
|
||||
@@ -562,7 +562,7 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
}
|
||||
|
||||
private static void createElementLink(@NonNls final StringBuilder sb, final PsiElement element, final String str) {
|
||||
sb.append(" <a href=\"" + DocumentationManager.PSI_ELEMENT_PROTOCOL);
|
||||
sb.append(" <a href=\"" + DocumentationManagerProtocol.PSI_ELEMENT_PROTOCOL);
|
||||
sb.append(JavaDocUtil.getReferenceText(element.getProject(), element));
|
||||
sb.append("\">");
|
||||
sb.append(str);
|
||||
@@ -593,19 +593,20 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
PsiMethod method = (PsiMethod)element;
|
||||
PsiClass aClass = method.getContainingClass();
|
||||
if (aClass != null) {
|
||||
final List<String> classUrls = findUrlForClass(aClass);
|
||||
|
||||
List<String> classUrls = findUrlForClass(aClass);
|
||||
if (classUrls != null) {
|
||||
urls = new ArrayList<String>();
|
||||
String signature = formatMethodSignature(method);
|
||||
urls = ContainerUtil.newSmartList();
|
||||
|
||||
String rawSignature = formatMethodSignature(method, true);
|
||||
for (String classUrl : classUrls) {
|
||||
urls.add(classUrl + "#" + signature);
|
||||
urls.add(classUrl + "#" + rawSignature);
|
||||
}
|
||||
signature = PsiFormatUtil.formatMethod(method, PsiSubstitutor.EMPTY,
|
||||
PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_PARAMETERS,
|
||||
PsiFormatUtilBase.SHOW_TYPE | PsiFormatUtilBase.SHOW_FQ_CLASS_NAMES, 999);
|
||||
for (String classUrl : classUrls) {
|
||||
urls.add(classUrl + "#" + signature);
|
||||
|
||||
String signature = formatMethodSignature(method, false);
|
||||
if (Comparing.compare(rawSignature, signature) != 0) {
|
||||
for (String classUrl : classUrls) {
|
||||
urls.add(classUrl + "#" + signature);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -631,25 +632,28 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
}
|
||||
}
|
||||
|
||||
public static String formatMethodSignature(PsiMethod method) {
|
||||
return PsiFormatUtil.formatMethod(method, PsiSubstitutor.EMPTY,
|
||||
PsiFormatUtilBase.SHOW_NAME |
|
||||
PsiFormatUtilBase.SHOW_PARAMETERS |
|
||||
PsiFormatUtilBase.SHOW_RAW_NON_TOP_TYPE,
|
||||
PsiFormatUtilBase.SHOW_TYPE |
|
||||
PsiFormatUtilBase.SHOW_FQ_CLASS_NAMES |
|
||||
PsiFormatUtilBase.SHOW_RAW_NON_TOP_TYPE,
|
||||
999);
|
||||
private static String formatMethodSignature(PsiMethod method, boolean raw) {
|
||||
int options = PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_PARAMETERS;
|
||||
int parameterOptions = PsiFormatUtilBase.SHOW_TYPE | PsiFormatUtilBase.SHOW_FQ_CLASS_NAMES;
|
||||
if (raw) {
|
||||
options |= PsiFormatUtilBase.SHOW_RAW_NON_TOP_TYPE;
|
||||
parameterOptions |= PsiFormatUtilBase.SHOW_RAW_NON_TOP_TYPE;
|
||||
}
|
||||
return PsiFormatUtil.formatMethod(method, PsiSubstitutor.EMPTY, options, parameterOptions, 999);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static List<String> findUrlForClass(PsiClass aClass) {
|
||||
String qName = aClass.getQualifiedName();
|
||||
if (qName == null) return null;
|
||||
|
||||
PsiFile file = aClass.getContainingFile();
|
||||
if (!(file instanceof PsiJavaFile)) return null;
|
||||
String packageName = ((PsiJavaFile)file).getPackageName();
|
||||
|
||||
VirtualFile virtualFile = file.getVirtualFile();
|
||||
if (virtualFile == null) return null;
|
||||
|
||||
String packageName = ((PsiJavaFile)file).getPackageName();
|
||||
String relPath;
|
||||
if (packageName.length() > 0) {
|
||||
relPath = packageName.replace('.', '/') + '/' + qName.substring(packageName.length() + 1) + HTML_EXTENSION;
|
||||
@@ -658,12 +662,7 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
relPath = qName + HTML_EXTENSION;
|
||||
}
|
||||
|
||||
final PsiFile containingFile = aClass.getContainingFile();
|
||||
if (containingFile == null) return null;
|
||||
final VirtualFile virtualFile = containingFile.getVirtualFile();
|
||||
if (virtualFile == null) return null;
|
||||
|
||||
return findUrlForVirtualFile(containingFile.getProject(), virtualFile, relPath);
|
||||
return findUrlForVirtualFile(file.getProject(), virtualFile, relPath);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2011 JetBrains s.r.o.
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -23,18 +23,31 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class PsiFormatUtil extends PsiFormatUtilBase {
|
||||
@MagicConstant(flags = {SHOW_MODIFIERS, SHOW_TYPE, TYPE_AFTER, SHOW_CONTAINING_CLASS, SHOW_FQ_NAME, SHOW_NAME, SHOW_MODIFIERS, SHOW_INITIALIZER, SHOW_RAW_TYPE, SHOW_RAW_NON_TOP_TYPE, SHOW_FQ_CLASS_NAMES})
|
||||
public @interface FormatVariableOptions {}
|
||||
@MagicConstant(flags = {
|
||||
SHOW_MODIFIERS, SHOW_TYPE, TYPE_AFTER, SHOW_CONTAINING_CLASS, SHOW_FQ_NAME, SHOW_NAME, SHOW_MODIFIERS,
|
||||
SHOW_INITIALIZER, SHOW_RAW_TYPE, SHOW_RAW_NON_TOP_TYPE, SHOW_FQ_CLASS_NAMES})
|
||||
public @interface FormatVariableOptions { }
|
||||
|
||||
public static String formatVariable(PsiVariable variable, @FormatVariableOptions int options, PsiSubstitutor substitutor){
|
||||
@MagicConstant(flags = {
|
||||
SHOW_MODIFIERS, MODIFIERS_AFTER, SHOW_TYPE, TYPE_AFTER, SHOW_CONTAINING_CLASS, SHOW_FQ_NAME, SHOW_NAME,
|
||||
SHOW_PARAMETERS, SHOW_THROWS, SHOW_RAW_TYPE, SHOW_RAW_NON_TOP_TYPE, SHOW_FQ_CLASS_NAMES})
|
||||
public @interface FormatMethodOptions { }
|
||||
|
||||
@MagicConstant(flags = {
|
||||
SHOW_MODIFIERS, SHOW_NAME, SHOW_ANONYMOUS_CLASS_VERBOSE, SHOW_FQ_NAME, MODIFIERS_AFTER,
|
||||
SHOW_EXTENDS_IMPLEMENTS, SHOW_REDUNDANT_MODIFIERS, JAVADOC_MODIFIERS_ONLY})
|
||||
public @interface FormatClassOptions { }
|
||||
|
||||
public static String formatVariable(PsiVariable variable, @FormatVariableOptions int options, PsiSubstitutor substitutor) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
formatVariable(variable, options, substitutor,buffer);
|
||||
formatVariable(variable, options, substitutor, buffer);
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
private static void formatVariable(PsiVariable variable,
|
||||
@FormatVariableOptions int options,
|
||||
PsiSubstitutor substitutor,
|
||||
@NotNull StringBuilder buffer){
|
||||
@NotNull StringBuilder buffer) {
|
||||
if ((options & SHOW_MODIFIERS) != 0 && (options & MODIFIERS_AFTER) == 0){
|
||||
formatModifiers(variable, options,buffer);
|
||||
}
|
||||
@@ -103,20 +116,29 @@ public class PsiFormatUtil extends PsiFormatUtilBase {
|
||||
}
|
||||
}
|
||||
|
||||
public static String formatMethod(PsiMethod method, PsiSubstitutor substitutor, @FormatMethodOptions int options, @FormatVariableOptions int parameterOptions){
|
||||
public static String formatMethod(PsiMethod method,
|
||||
PsiSubstitutor substitutor,
|
||||
@FormatMethodOptions int options,
|
||||
@FormatVariableOptions int parameterOptions) {
|
||||
return formatMethod(method, substitutor, options, parameterOptions, MAX_PARAMS_TO_SHOW);
|
||||
}
|
||||
|
||||
public static String formatMethod(PsiMethod method, PsiSubstitutor substitutor, @FormatMethodOptions int options, @FormatVariableOptions int parameterOptions, int maxParametersToShow){
|
||||
public static String formatMethod(PsiMethod method,
|
||||
PsiSubstitutor substitutor,
|
||||
@FormatMethodOptions int options,
|
||||
@FormatVariableOptions int parameterOptions,
|
||||
int maxParametersToShow) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
formatMethod(method, substitutor, options, parameterOptions, maxParametersToShow,buffer);
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
@MagicConstant(flags = {SHOW_MODIFIERS, MODIFIERS_AFTER, SHOW_TYPE, TYPE_AFTER, SHOW_CONTAINING_CLASS, SHOW_FQ_NAME, SHOW_NAME, SHOW_PARAMETERS, SHOW_THROWS, SHOW_RAW_TYPE, SHOW_RAW_NON_TOP_TYPE, SHOW_FQ_CLASS_NAMES})
|
||||
public @interface FormatMethodOptions {}
|
||||
|
||||
private static void formatMethod(PsiMethod method, PsiSubstitutor substitutor, @FormatMethodOptions int options, @FormatVariableOptions int parameterOptions, int maxParametersToShow, StringBuilder buffer){
|
||||
private static void formatMethod(PsiMethod method,
|
||||
PsiSubstitutor substitutor,
|
||||
@FormatMethodOptions int options,
|
||||
@FormatVariableOptions int parameterOptions,
|
||||
int maxParametersToShow,
|
||||
StringBuilder buffer) {
|
||||
if ((options & SHOW_MODIFIERS) != 0 && (options & MODIFIERS_AFTER) == 0){
|
||||
formatModifiers(method, options,buffer);
|
||||
}
|
||||
@@ -160,15 +182,15 @@ public class PsiFormatUtil extends PsiFormatUtilBase {
|
||||
}
|
||||
if ((options & SHOW_PARAMETERS) != 0){
|
||||
buffer.append('(');
|
||||
PsiParameter[] parms = method.getParameterList().getParameters();
|
||||
for(int i = 0; i < Math.min(parms.length, maxParametersToShow); i++) {
|
||||
PsiParameter parm = parms[i];
|
||||
PsiParameter[] params = method.getParameterList().getParameters();
|
||||
for(int i = 0; i < Math.min(params.length, maxParametersToShow); i++) {
|
||||
PsiParameter parm = params[i];
|
||||
if (i > 0){
|
||||
buffer.append(", ");
|
||||
}
|
||||
buffer.append(formatVariable(parm, parameterOptions, substitutor));
|
||||
}
|
||||
if(parms.length > maxParametersToShow) {
|
||||
if(params.length > maxParametersToShow) {
|
||||
buffer.append (", ...");
|
||||
}
|
||||
buffer.append(')');
|
||||
@@ -196,12 +218,8 @@ public class PsiFormatUtil extends PsiFormatUtilBase {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@MagicConstant(flags = {SHOW_MODIFIERS, SHOW_NAME, SHOW_ANONYMOUS_CLASS_VERBOSE, SHOW_FQ_NAME, MODIFIERS_AFTER, SHOW_EXTENDS_IMPLEMENTS, SHOW_REDUNDANT_MODIFIERS, JAVADOC_MODIFIERS_ONLY})
|
||||
public @interface FormatClassOptions {}
|
||||
|
||||
@NotNull
|
||||
public static String formatClass(@NotNull PsiClass aClass, @FormatClassOptions int options){
|
||||
public static String formatClass(@NotNull PsiClass aClass, @FormatClassOptions int options) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
if ((options & SHOW_MODIFIERS) != 0 && (options & MODIFIERS_AFTER) == 0){
|
||||
formatModifiers(aClass, options,buffer);
|
||||
@@ -254,12 +272,13 @@ public class PsiFormatUtil extends PsiFormatUtilBase {
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public static String formatModifiers(PsiElement element, int options) throws IllegalArgumentException{
|
||||
public static String formatModifiers(PsiElement element, int options) throws IllegalArgumentException {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
formatModifiers(element, options,buffer);
|
||||
formatModifiers(element, options, buffer);
|
||||
return buffer.toString();
|
||||
}
|
||||
private static void formatModifiers(PsiElement element, int options, StringBuilder buffer) throws IllegalArgumentException{
|
||||
|
||||
private static void formatModifiers(PsiElement element, int options, StringBuilder buffer) throws IllegalArgumentException {
|
||||
PsiModifierList list;
|
||||
boolean isInterface = false;
|
||||
if (element instanceof PsiVariable){
|
||||
@@ -342,7 +361,7 @@ public class PsiFormatUtil extends PsiFormatUtilBase {
|
||||
buffer.append(modifier);
|
||||
}
|
||||
|
||||
public static String formatReferenceList(PsiReferenceList list, int options){
|
||||
public static String formatReferenceList(PsiReferenceList list, int options) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
PsiJavaCodeReferenceElement[] refs = list.getReferenceElements();
|
||||
for(int i = 0; i < refs.length; i++) {
|
||||
@@ -355,7 +374,7 @@ public class PsiFormatUtil extends PsiFormatUtilBase {
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public static String formatType(@Nullable PsiType type, int options, @NotNull PsiSubstitutor substitutor){
|
||||
public static String formatType(@Nullable PsiType type, int options, @NotNull PsiSubstitutor substitutor) {
|
||||
type = substitutor.substitute(type);
|
||||
if ((options & SHOW_RAW_TYPE) != 0) {
|
||||
type = TypeConversionUtil.erasure(type);
|
||||
@@ -372,7 +391,7 @@ public class PsiFormatUtil extends PsiFormatUtilBase {
|
||||
return (options & SHOW_FQ_CLASS_NAMES) == 0 ? type.getPresentableText() : type.getInternalCanonicalText();
|
||||
}
|
||||
|
||||
public static String formatReference(PsiJavaCodeReferenceElement ref, int options){
|
||||
public static String formatReference(PsiJavaCodeReferenceElement ref, int options) {
|
||||
return (options & SHOW_FQ_CLASS_NAMES) == 0 ? ref.getText() : ref.getCanonicalText();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2011 JetBrains s.r.o.
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,34 +19,55 @@ import com.intellij.lang.java.JavaDocumentationProvider;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.testFramework.PsiTestUtil;
|
||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* User: anna
|
||||
* Date: 11/27/11
|
||||
* @author anna
|
||||
* @since 11/27/11
|
||||
*/
|
||||
public class ExternalJavadocUrlsTest extends LightCodeInsightFixtureTestCase {
|
||||
private void doTest(String text, String... expectedSignature) {
|
||||
myFixture.configureByText("Test.java", text);
|
||||
final PsiElement elementAtCaret = myFixture.getElementAtCaret();
|
||||
final PsiMethod member = PsiTreeUtil.getParentOfType(elementAtCaret, PsiMethod.class, false);
|
||||
assertNotNull(member);
|
||||
final String signature = JavaDocumentationProvider.formatMethodSignature(member);
|
||||
assertNotNull(signature);
|
||||
assertEquals("found:" + signature, expectedSignature[0], signature);
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
PsiTestUtil.setJavadocUrls(myModule, "http://doc");
|
||||
}
|
||||
|
||||
public void testVarargs() {
|
||||
doTest("class Test {\n" +
|
||||
" void fo<caret>o(Class<?>... cl){}\n" +
|
||||
"}", "foo(java.lang.Class...)");
|
||||
" void <caret>foo(Class<?>... cl) { }\n" +
|
||||
"}",
|
||||
|
||||
"foo(java.lang.Class...)", "foo(java.lang.Class<?>...)");
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void testTypeParams() {
|
||||
doTest("class Test {\n" +
|
||||
" <T> void so<caret>rt(T[] a, Comparator<? super T> c) {}\n" +
|
||||
" <T> void <caret>sort(T[] a, Comparator<? super T> c) { }\n" +
|
||||
"}\n" +
|
||||
" class Comparator<X>{}", "sort(T[], Comparator)");
|
||||
"class Comparator<X>{}",
|
||||
|
||||
"sort(T[], Comparator)", "sort(T[], Comparator<? super T>)");
|
||||
}
|
||||
|
||||
private void doTest(String text, String... expected) {
|
||||
myFixture.configureByText("Test.java", text);
|
||||
PsiElement elementAtCaret = myFixture.getElementAtCaret();
|
||||
PsiMethod member = PsiTreeUtil.getParentOfType(elementAtCaret, PsiMethod.class, false);
|
||||
assertNotNull(member);
|
||||
List<String> urls = JavaDocumentationProvider.getExternalJavaDocUrl(member);
|
||||
assertNotNull(urls);
|
||||
List<String> actual = ContainerUtil.map(urls, new Function<String, String>() {
|
||||
@Override
|
||||
public String fun(String url) {
|
||||
return url.substring(url.indexOf('#') + 1);
|
||||
}
|
||||
});
|
||||
assertOrderedEquals(actual, expected);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2013 JetBrains s.r.o.
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -404,4 +404,13 @@ public class PsiTestUtil {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void setJavadocUrls(Module module, final String... urls) {
|
||||
updateModel(module, new Consumer<ModifiableRootModel>() {
|
||||
@Override
|
||||
public void consume(ModifiableRootModel model) {
|
||||
model.getModuleExtension(JavaModuleExternalPaths.class).setJavadocUrls(urls);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user